/** * calculate the distance to the nearest tile border for a given lat/lon coordinate in the * context of a spatial key tile. * <p> */ final double calculateRMin(double lat, double lon) { return calculateRMin(lat, lon, 0); }
@Override public void set(double lat, double lon) { // +.1 to move more near the center of the tile emitter.set((lat + .1) * deltaLat + offsetLat, (lon + .1) * deltaLon + offsetLon); } });
InMemConstructionIndex getPrepareInMemIndex() { InMemConstructionIndex memIndex = new InMemConstructionIndex(entries[0]); memIndex.prepare(); return memIndex; }
QueryResult createQR(double lat, double lon, int wayIndex, EdgeIteratorState edge) { QueryResult res = new QueryResult(lat, lon); res.setClosestEdge(edge); res.setWayIndex(wayIndex); res.setSnappedPosition(QueryResult.Position.EDGE); res.calcSnappedPoint(Helper.DIST_PLANE); return res; }
@Override public int doCalc(boolean warmup, int run) { double lat = rand.nextDouble() * latDelta + bbox.minLat; double lon = rand.nextDouble() * lonDelta + bbox.minLon; int val = idx.findClosest(lat, lon, EdgeFilter.ALL_EDGES).getClosestNode(); // if (!warmup && val >= 0) // list.add(val); return val; } }.setIterations(count).start();
@Test public void testEdgeFilter() { Graph graph = createTestGraph(encodingManager); LocationIndexTree index = createIndex(graph, -1); assertEquals(1, index.findClosest(-.6, -.6, EdgeFilter.ALL_EDGES).getClosestNode()); assertEquals(2, index.findClosest(-.6, -.6, new EdgeFilter() { @Override public boolean accept(EdgeIteratorState iter) { return iter.getBaseNode() == 2 || iter.getAdjNode() == 2; } }).getClosestNode()); }
public final void findNetworkEntriesSingleRegion(GHIntHashSet storedNetworkEntryIds, double queryLat, double queryLon) { long keyPart = createReverseKey(queryLat, queryLon); fillIDs(keyPart, START_POINTER, storedNetworkEntryIds, 0); }
@Override public void set(double lat, double lon) { long key = keyAlgo.encode(lat, lon); long keyPart = createReverseKey(key); // no need to feed both nodes as we search neighbors in fillIDs addNode(root, nodeA, 0, keyPart, key); } };
void fillLayer(Collection<InMemEntry> list, int selectDepth, int depth, Collection<InMemEntry> entries) { for (InMemEntry entry : entries) { if (selectDepth == depth) { list.add(entry); } else if (entry instanceof InMemTreeEntry) { fillLayer(list, selectDepth, depth + 1, ((InMemTreeEntry) entry).getSubEntriesForDebug()); } } }
@Override public QueryResult findClosest(double lat, double lon, EdgeFilter edgeFilter) { return new QueryResult(lat, lon); }
@Override public LocationIndex createIndex(Graph g, int resolution) { if (resolution < 0) resolution = 120; return new Location2IDQuadtree(g, new MMapDirectory(location + "loc2idIndex").create()). setResolution(resolution).prepareIndex(); }
@Override public LocationIndexTree createIndex(Graph g, int resolution) { if (resolution < 0) resolution = 500000; return (LocationIndexTree) createIndexNoPrepare(g, resolution).prepareIndex(); }
@Override public LocationIndexTree createIndex(Graph g, int resolution) { if (resolution < 0) resolution = 500000; return (LocationIndexTree) createIndexNoPrepare(g, resolution).prepareIndex(); }
@Override protected LocationIndex createLocationIndex(Directory dir) { return new LocationIndexTree(graph, dir); } };
@Override public LocationIndex setResolution(int resolution) { initLatLonSize(resolution); return this; }
@Override public String toString() { return "LEAF " + /*key +*/ " " + super.toString(); }
@Override public LocationIndex createIndex(Graph g, int resolution) { return new Location2IDFullIndex(g); }
@Override public LocationIndex createIndex(Graph g, int resolution) { return new Location2IDFullWithEdgesIndex(g); }
protected int findID(LocationIndex index, double lat, double lon) { return index.findClosest(lat, lon, EdgeFilter.ALL_EDGES).getClosestNode(); }
Collection<InMemEntry> getEntriesOf(int selectDepth) { List<InMemEntry> list = new ArrayList<>(); fillLayer(list, selectDepth, 0, ((InMemTreeEntry) root).getSubEntriesForDebug()); return list; }