package cz.agents.agentpolis.darptestbed.simulator.initializator.osm; import java.util.Map; import net.sf.javaml.core.kdtree.KDTree; import com.vividsolutions.jts.geom.Coordinate; import cz.agents.agentpolis.utils.spatialrefsys.WGS84Convertor; public class NodeExtendedFunction { private final Map<Long, Coordinate> projectedNodeCoordinats; private final KDTree kdTreeForAllNodes; private WGS84Convertor wgs84Convertor; public NodeExtendedFunction(Map<Long, Coordinate> projectedNodeCoordinats, KDTree kdTreeForAllNodes, WGS84Convertor wgs84Convertor) { super(); this.projectedNodeCoordinats = projectedNodeCoordinats; this.kdTreeForAllNodes = kdTreeForAllNodes; this.wgs84Convertor = wgs84Convertor; } // TODO: this is not "ByNodeId" public Long getNearestNodeByNodeId(double longitude, double latitude) { Coordinate coordinate = wgs84Convertor.convert(longitude, latitude); return (Long) kdTreeForAllNodes.nearest(new double[] { coordinate.x, coordinate.y }); } public double computeDistanceBetweenNodes(long fromNodeId, long toNodeId) { Coordinate from = projectedNodeCoordinats.get(fromNodeId); Coordinate to = projectedNodeCoordinats.get(toNodeId); return from.distance(to); } protected Map<Long, Coordinate> getProjectedNodeCoordinats() { return projectedNodeCoordinats; } protected KDTree getKdTreeForAllNodes() { return kdTreeForAllNodes; } protected WGS84Convertor getWgs84Convertor() { return wgs84Convertor; } }