def save_ground_control_points( self, points: List[pymap.GroundControlPoint], ) -> None: with self.io_handler.open_wt( self._ground_control_points_file()) as fout: io.write_ground_control_points(points, fout)
def test_read_write_ground_control_points() -> None: text = """ { "points": [ { "id": "1", "observations": [ { "shot_id": "01.jpg", "projection": [0.7153, 0.5787] }, { "shot_id": "02.jpg", "projection": [0.8085, 0.3831] } ] }, { "id": "2", "position": { "latitude": 52.519251158, "longitude": 13.400502446, "altitude": 16.7021233002 }, "observations": [ { "shot_id": "01.jpg", "projection": [0.2346, 0.4628] } ] } ] } """ def check_points(points): assert len(points) == 2 p1, p2 = points if p1.id != "1": p1, p2 = p2, p1 assert len(p1.observations) == 2 assert np.allclose(p2.lla["latitude"], 52.519251158) assert np.allclose(p2.lla["longitude"], 13.400502446) assert np.allclose(p2.lla["altitude"], 16.7021233002) assert len(p2.observations) == 1 # Read json fp = StringIO(text) points = io.read_ground_control_points(fp) check_points(points) # Write json and re-read fwrite = StringIO() io.write_ground_control_points(points, fwrite) freread = StringIO(fwrite.getvalue()) points_reread = io.read_ground_control_points(freread) check_points(points_reread)
def test_read_write_ground_control_points(): text = """ { "points": [ { "id": "1", "observations": [ { "shot_id": "01.jpg", "projection": [0.7153, 0.5787] }, { "shot_id": "02.jpg", "projection": [0.8085, 0.3831] } ] }, { "id": "2", "position": { "latitude": 52.519251158, "longitude": 13.400502446, "altitude": 16.7021233002 }, "observations": [ { "shot_id": "01.jpg", "projection": [0.2346, 0.4628] } ] } ] } """ def check_points(points): assert len(points) == 2 p1, p2 = points if p1.id != "1": p1, p2 = p2, p1 assert p1.coordinates.has_value is False assert len(p1.observations) == 2 assert np.allclose(p2.lla["latitude"], 52.519251158) assert np.allclose(p2.lla["longitude"], 13.400502446) assert np.allclose(p2.coordinates.value[2], 16.7021233002) assert len(p2.observations) == 1 reference = geo.TopocentricConverter(52.51913, 13.4007, 0) # Read json fp = StringIO(text) points = io.read_ground_control_points(fp, reference) check_points(points) # Write json and re-read fwrite = StringIO() io.write_ground_control_points(points, fwrite, reference) freread = StringIO(fwrite.getvalue()) points_reread = io.read_ground_control_points(freread, reference) check_points(points_reread)