@Override public PointList fetchWayGeometry(int mode) { return edges.get(current).fetchWayGeometry(mode); }
private Geometry lineStringFromEdges(List<Label.Transition> transitions) { List<Coordinate> coordinates = new ArrayList<>(); final Iterator<Label.Transition> iterator = transitions.iterator(); iterator.next(); coordinates.addAll(toCoordinateArray(iterator.next().edge.edgeIteratorState.fetchWayGeometry(3))); iterator.forEachRemaining(transition -> coordinates.addAll(toCoordinateArray(transition.edge.edgeIteratorState.fetchWayGeometry(2)))); return geometryFactory.createLineString(coordinates.toArray(new Coordinate[coordinates.size()])); }
@Override public void next(EdgeIteratorState eb, int index, int prevEdgeId) { PointList pl = eb.fetchWayGeometry(2); for (int j = 0; j < pl.getSize(); j++) { points.add(pl, j); } }
PointList getPoints(Graph g, int base, int adj) { EdgeIteratorState edge = GHUtility.getEdge(g, base, adj); if (edge == null) throw new IllegalStateException("edge " + base + "-" + adj + " not found"); return edge.fetchWayGeometry(3); }
@Override public void next(EdgeIteratorState edge, int index, int prevEdgeId) { for (PathDetailsBuilder calc : calculators) { if (calc.isEdgeDifferentToLastEdge(edge)) { calc.endInterval(lastIndex); calc.startInterval(lastIndex); } } lastIndex += edge.fetchWayGeometry(2).size(); }
static GHPoint getPointForOrientationCalculation(EdgeIteratorState edgeIteratorState, NodeAccess nodeAccess) { double tmpLat; double tmpLon; PointList tmpWayGeo = edgeIteratorState.fetchWayGeometry(3); if (tmpWayGeo.getSize() <= 2) { tmpLat = nodeAccess.getLatitude(edgeIteratorState.getAdjNode()); tmpLon = nodeAccess.getLongitude(edgeIteratorState.getAdjNode()); } else { tmpLat = tmpWayGeo.getLatitude(1); tmpLon = tmpWayGeo.getLongitude(1); } return new GHPoint(tmpLat, tmpLon); } }
final PointList fullPL = closestEdge.fetchWayGeometry(3); int baseNode = closestEdge.getBaseNode();
if (base == closestEdge.getAdjNode()) { PointList pl = closestEdge.fetchWayGeometry(0); if (pl.size() > 1) doReverse = pl.getLatitude(0) > pl.getLatitude(pl.size() - 1); PointList fullPL = closestEdge.fetchWayGeometry(3); res.setClosestEdge(closestEdge); if (res.getSnappedPosition() == QueryResult.Position.PILLAR)
/** * Calculates the closet point on the edge from the query point. */ public void calcSnappedPoint(DistanceCalc distCalc) { if (closestEdge == null) throw new IllegalStateException("No closest edge?"); if (snappedPoint != null) throw new IllegalStateException("Calculate snapped point only once"); PointList fullPL = getClosestEdge().fetchWayGeometry(3); double tmpLat = fullPL.getLatitude(wayIndex); double tmpLon = fullPL.getLongitude(wayIndex); double tmpEle = fullPL.getElevation(wayIndex); if (snappedPosition != Position.EDGE) { snappedPoint = new GHPoint3D(tmpLat, tmpLon, tmpEle); return; } double queryLat = getQueryPoint().lat, queryLon = getQueryPoint().lon; double adjLat = fullPL.getLatitude(wayIndex + 1), adjLon = fullPL.getLongitude(wayIndex + 1); if (distCalc.validEdgeDistance(queryLat, queryLon, tmpLat, tmpLon, adjLat, adjLon)) { GHPoint tmpPoint = distCalc.calcCrossingPointToEdge(queryLat, queryLon, tmpLat, tmpLon, adjLat, adjLon); double adjEle = fullPL.getElevation(wayIndex + 1); snappedPoint = new GHPoint3D(tmpPoint.lat, tmpPoint.lon, (tmpEle + adjEle) / 2); } else // outside of edge boundaries snappedPoint = new GHPoint3D(tmpLat, tmpLon, tmpEle); }
@Test public void testEnabledElevation() { graph = createGHStorage(defaultGraphLoc, true); NodeAccess na = graph.getNodeAccess(); assertTrue(na.is3D()); na.setNode(0, 10, 20, -10); na.setNode(1, 11, 2, 100); assertEquals(-10, na.getEle(0), 1e-1); assertEquals(100, na.getEle(1), 1e-1); graph.edge(0, 1).setWayGeometry(Helper.createPointList3D(10, 27, 72, 11, 20, 1)); assertEquals(Helper.createPointList3D(10, 27, 72, 11, 20, 1), GHUtility.getEdge(graph, 0, 1).fetchWayGeometry(0)); assertEquals(Helper.createPointList3D(10, 20, -10, 10, 27, 72, 11, 20, 1, 11, 2, 100), GHUtility.getEdge(graph, 0, 1).fetchWayGeometry(3)); assertEquals(Helper.createPointList3D(11, 2, 100, 11, 20, 1, 10, 27, 72, 10, 20, -10), GHUtility.getEdge(graph, 1, 0).fetchWayGeometry(3)); }
@Test public void testCopyProperties() { graph = createGHStorage(); EdgeIteratorState edge = graph.edge(1, 3, 10, false).setName("testing").setWayGeometry(Helper.createPointList(1, 2)); EdgeIteratorState newEdge = graph.edge(1, 3, 10, false); edge.copyPropertiesTo(newEdge); assertEquals(edge.getName(), newEdge.getName()); assertEquals(edge.getDistance(), newEdge.getDistance(), 1e-7); assertEquals(edge.getFlags(), newEdge.getFlags()); assertEquals(edge.fetchWayGeometry(0), newEdge.fetchWayGeometry(0)); }
@Override public void applyWayTags(ReaderWay way, EdgeIteratorState edge) { PointList pl = edge.fetchWayGeometry(3); if (!pl.is3D()) throw new IllegalStateException("To support speed calculation based on elevation data it is necessary to enable import of it.");
@Test public void testFillVirtualEdges() { initGraph(g); g.getNodeAccess().setNode(3, 0, 1); g.edge(1, 3); final int baseNode = 1; EdgeIterator iter = g.createEdgeExplorer().setBaseNode(baseNode); iter.next(); QueryResult res1 = createLocationResult(2, 1.7, iter, 1, PILLAR); QueryGraph queryGraph = new QueryGraph(g) { @Override void fillVirtualEdges(IntObjectMap<VirtualEdgeIterator> node2Edge, int towerNode, EdgeExplorer mainExpl) { super.fillVirtualEdges(node2Edge, towerNode, mainExpl); // ignore nodes should include baseNode == 1 if (towerNode == 3) assertEquals("[3->4]", node2Edge.get(towerNode).toString()); else if (towerNode == 1) assertEquals("[1->4, 1 1-0]", node2Edge.get(towerNode).toString()); else throw new IllegalStateException("not allowed " + towerNode); } }; queryGraph.lookup(Arrays.asList(res1)); EdgeIteratorState state = GHUtility.getEdge(queryGraph, 0, 1); assertEquals(4, state.fetchWayGeometry(3).size()); // fetch virtual edge and check way geometry state = GHUtility.getEdge(queryGraph, 4, 3); assertEquals(2, state.fetchWayGeometry(3).size()); }
double tmpLon = currLon; double tmpNormedDist; PointList pointList = currEdge.fetchWayGeometry(2); int len = pointList.getSize(); for (int pointIndex = 0; pointIndex < len; pointIndex++) {
double latitude, longitude; PointList wayGeo = edge.fetchWayGeometry(3); boolean isRoundabout = encoder.isBool(flags, FlagEncoder.K_ROUNDABOUT);
EdgeIteratorState edgeState02 = iter.detach(false); assertEquals(2, iter.getAdjNode()); assertEquals(1, edgeState02.fetchWayGeometry(0).getLatitude(0), 1e-1); assertEquals(2, edgeState02.getAdjNode()); assertTrue(carEncoder.isForward(edgeState02.getFlags())); assertEquals(0, edgeState20.getAdjNode()); assertEquals(2, edgeState20.getBaseNode()); assertEquals(3, edgeState20.fetchWayGeometry(0).getLatitude(0), 1e-1); assertFalse(carEncoder.isForward(edgeState20.getFlags())); assertEquals(GHUtility.getEdge(graph, 0, 2).getFlags(), edgeState02.getFlags()); assertEquals(1, edgeState02.fetchWayGeometry(0).getLatitude(0), 1e-1); assertEquals(3, edgeState20.fetchWayGeometry(0).getLatitude(0), 1e-1);
assertEquals(Helper.createPointList3D(), eib.fetchWayGeometry(0)); assertEquals(Helper.createPointList3D(11, 20, 1), eib.fetchWayGeometry(1)); assertEquals(Helper.createPointList3D(12, 12, 0.4), eib.fetchWayGeometry(2)); assertEquals(GHUtility.asSet(0), GHUtility.getNeighbors(explorer.setBaseNode(2)));
assertEquals(Helper.createPointList(-1, 3, 12, 10), edgeState.fetchWayGeometry(0));
assertEquals(0, na.getElevation(9), PRECISION); final PointList edge17PointList = edge17.fetchWayGeometry(3); assertEquals(6, edge17PointList.size()); assertEquals(10, edge17PointList.getEle(0), PRECISION);
@Override public void next(EdgeIteratorState eb, int index, int prevEdgeId) { PointList pl = eb.fetchWayGeometry(2); for (int j = 0; j < pl.getSize(); j++) { points.add(pl, j); } }