Loading autocnet/spatial/isis.py +11 −7 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ from numbers import Number import numpy as np import tempfile def point_info(cube_path, x, y, point_type): def point_info(cube_path, x, y, point_type, allow_outside=False): """ Use Isis's campt to get image/ground point info from an image Loading Loading @@ -56,17 +56,21 @@ def point_info(cube_path, x, y, point_type): f.write("\n".join(["{}, {}".format(xval,yval) for xval,yval in zip(x, y)])) f.flush() try: pvlres = isis.campt(from_=cube_path, coordlist=f.name ,usecoordlist=True, coordtype=point_type) for r in pvlres: # convert all pixels to PLIO pixels from ISIS r[1]["Sample"] -= .5 r[1]["Line"] -= .5 pvlres = isis.campt(from_=cube_path, coordlist=f.name, allowoutside=allow_outside, usecoordlist=True, coordtype=point_type) except ProcessError as e: warn(f"CAMPT call failed, image: {cube_path}\n{e.stderr}") return pvlres = pvl.loads(pvlres) if len(x) > 1 and len(y) > 1: for r in pvlres: # convert all pixels to PLIO pixels from ISIS r[1]["Sample"] -= .5 r[1]["Line"] -= .5 else: pvlres["GroundPoint"]["Sample"] -= .5 pvlres["GroundPoint"]["Line"] -= .5 return pvlres Loading autocnet/spatial/overlap.py +2 −2 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ def place_points_in_overlaps(nodes, size_threshold=0.0007, overlaps = o.intersections if overlaps == None: continue overlapnodes = [nodes[id] for id in overlaps] overlapnodes = [nodes[id]["data"] for id in overlaps] points.extend(place_points_in_overlap(overlapnodes, o.geom, dem=dem, iterative_phase_kwargs=iterative_phase_kwargs, distribute_points_kwargs=distribute_points_kwargs)) Loading Loading @@ -212,7 +212,7 @@ def place_points_in_overlap(nodes, geom, dem=dem, cam_type="csm", dic = dest.camera.groundToImage(gnd) dline, dsample = dic.line, dic.samp if cam_type == "isis": dline, dsample = isis.groud_to_image(dest["image_path"], lat, lon) dline, dsample = isis.ground_to_image(dest["image_path"], lat, lon) dx, dy, _ = iterative_phase(ssample, sline, dsample, dline, source.geodata, dest.geodata, Loading autocnet/spatial/tests/test_overlap_points.py +4 −2 Original line number Diff line number Diff line Loading @@ -2,8 +2,10 @@ import pytest from unittest.mock import MagicMock, patch from shapely.geometry import Polygon from autocnet.spatial.overlap import place_points_in_overlap, place_points_in_overlaps from autocnet.graph.node import Node import csmapi @patch('autocnet.spatial.overlap.iterative_phase', return_value=(0, 1, 2)) @patch('autocnet.cg.cg.distribute_points_in_geom', return_value=[(0, 0), (5, 5), (10, 10)]) def test_place_points_in_overlap(point_distributer, phase_matcher): Loading Loading @@ -73,10 +75,10 @@ class MockOverlap(): {'distribute_points_kwargs':{'ewpts_func':lambda:True}}) ]) def test_place_points_in_overlaps(overlapper, dem, adder,iterativekwargs, distributekwargs): nodes = [{'id':0}, {'id':1}] nodes = [{"id": 0, "data": Node()}, {"id": 1, "data": Node()}] with patch('autocnet.spatial.overlap.place_points_in_overlap', return_value=[1,2,3]) as ppio: place_points_in_overlaps(nodes, iterative_phase_kwargs=iterativekwargs,distribute_points_kwargs=distributekwargs) ppio.assert_called_with(nodes, ppio.assert_called_with([Node(), Node()], Polygon([(0,0),(0,5),(5,5),(5,0),(0,0)]), dem=None, iterative_phase_kwargs=iterativekwargs, Loading Loading
autocnet/spatial/isis.py +11 −7 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ from numbers import Number import numpy as np import tempfile def point_info(cube_path, x, y, point_type): def point_info(cube_path, x, y, point_type, allow_outside=False): """ Use Isis's campt to get image/ground point info from an image Loading Loading @@ -56,17 +56,21 @@ def point_info(cube_path, x, y, point_type): f.write("\n".join(["{}, {}".format(xval,yval) for xval,yval in zip(x, y)])) f.flush() try: pvlres = isis.campt(from_=cube_path, coordlist=f.name ,usecoordlist=True, coordtype=point_type) for r in pvlres: # convert all pixels to PLIO pixels from ISIS r[1]["Sample"] -= .5 r[1]["Line"] -= .5 pvlres = isis.campt(from_=cube_path, coordlist=f.name, allowoutside=allow_outside, usecoordlist=True, coordtype=point_type) except ProcessError as e: warn(f"CAMPT call failed, image: {cube_path}\n{e.stderr}") return pvlres = pvl.loads(pvlres) if len(x) > 1 and len(y) > 1: for r in pvlres: # convert all pixels to PLIO pixels from ISIS r[1]["Sample"] -= .5 r[1]["Line"] -= .5 else: pvlres["GroundPoint"]["Sample"] -= .5 pvlres["GroundPoint"]["Line"] -= .5 return pvlres Loading
autocnet/spatial/overlap.py +2 −2 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ def place_points_in_overlaps(nodes, size_threshold=0.0007, overlaps = o.intersections if overlaps == None: continue overlapnodes = [nodes[id] for id in overlaps] overlapnodes = [nodes[id]["data"] for id in overlaps] points.extend(place_points_in_overlap(overlapnodes, o.geom, dem=dem, iterative_phase_kwargs=iterative_phase_kwargs, distribute_points_kwargs=distribute_points_kwargs)) Loading Loading @@ -212,7 +212,7 @@ def place_points_in_overlap(nodes, geom, dem=dem, cam_type="csm", dic = dest.camera.groundToImage(gnd) dline, dsample = dic.line, dic.samp if cam_type == "isis": dline, dsample = isis.groud_to_image(dest["image_path"], lat, lon) dline, dsample = isis.ground_to_image(dest["image_path"], lat, lon) dx, dy, _ = iterative_phase(ssample, sline, dsample, dline, source.geodata, dest.geodata, Loading
autocnet/spatial/tests/test_overlap_points.py +4 −2 Original line number Diff line number Diff line Loading @@ -2,8 +2,10 @@ import pytest from unittest.mock import MagicMock, patch from shapely.geometry import Polygon from autocnet.spatial.overlap import place_points_in_overlap, place_points_in_overlaps from autocnet.graph.node import Node import csmapi @patch('autocnet.spatial.overlap.iterative_phase', return_value=(0, 1, 2)) @patch('autocnet.cg.cg.distribute_points_in_geom', return_value=[(0, 0), (5, 5), (10, 10)]) def test_place_points_in_overlap(point_distributer, phase_matcher): Loading Loading @@ -73,10 +75,10 @@ class MockOverlap(): {'distribute_points_kwargs':{'ewpts_func':lambda:True}}) ]) def test_place_points_in_overlaps(overlapper, dem, adder,iterativekwargs, distributekwargs): nodes = [{'id':0}, {'id':1}] nodes = [{"id": 0, "data": Node()}, {"id": 1, "data": Node()}] with patch('autocnet.spatial.overlap.place_points_in_overlap', return_value=[1,2,3]) as ppio: place_points_in_overlaps(nodes, iterative_phase_kwargs=iterativekwargs,distribute_points_kwargs=distributekwargs) ppio.assert_called_with(nodes, ppio.assert_called_with([Node(), Node()], Polygon([(0,0),(0,5),(5,5),(5,0),(0,0)]), dem=None, iterative_phase_kwargs=iterativekwargs, Loading