protected void updateEntry(SPTEntry entry, EdgeIteratorState edge, double weight, SPTEntry parent, boolean reverse) { entry.edge = edge.getEdge(); entry.weight = weight; entry.parent = parent; }
public double getSpeed(EdgeIteratorState edgeState) { int highwayKey = getHighway(edgeState); // ensure before (in createResult) that all highways that were specified in the request are known double speed = speedArray[highwayKey]; if (speed < 0) throw new IllegalStateException("speed was negative? " + edgeState.getEdge() + ", highway:" + highwayKey); return speed; }
/** * This method adds the specified path to this weighting which should be penalized in the * calcWeight method. */ public void addEdges(Collection<EdgeIteratorState> edges) { for (EdgeIteratorState edge : edges) { visitedEdges.add(edge.getEdge()); } }
@Override public int doCalc(boolean warmup, int run) { while (true) { int edgeId = rand.nextInt(maxEdgesId); if (allowedEdges.contains(edgeId)) return graph.getEdgeIteratorState(edgeId, Integer.MIN_VALUE).getEdge(); } } }.setIterations(count).start();
@Override protected SPTEntry createEntry(EdgeIteratorState edge, double weight, SPTEntry parent, boolean reverse) { SPTEntry entry = new SPTEntry(edge.getEdge(), edge.getAdjNode(), weight); entry.parent = parent; return entry; }
public long getDelayForBoardEdge(EdgeIteratorState edge, Instant now) { if (isThisRealtimeUpdateAboutThisLineRun(edge, now)) { return delaysForBoardEdges.getOrDefault(edge.getEdge(), 0); } else { return 0; } }
@Override protected void updateEntry(SPTEntry entry, EdgeIteratorState edge, double weight, SPTEntry parent, boolean reverse) { entry.edge = edge.getEdge(); entry.weight = weight + weightApprox.approximate(edge.getAdjNode(), reverse); ((AStarEntry) entry).weightOfVisitedPath = weight; entry.parent = parent; }
@Override public double calcWeight(EdgeIteratorState edgeState, boolean reverse, int prevOrNextEdgeId) { double weight = superWeighting.calcWeight(edgeState, reverse, prevOrNextEdgeId); if (visitedEdges.contains(edgeState.getEdge())) return weight * edgePenaltyFactor; return weight; }
protected boolean accept(EdgeIteratorState iter, int prevOrNextEdgeId) { if (!traversalMode.hasUTurnSupport() && iter.getEdge() == prevOrNextEdgeId) return false; return additionalEdgeFilter == null || additionalEdgeFilter.accept(iter); }
public long getDelayForAlightEdge(EdgeIteratorState edge, Instant now) { if (isThisRealtimeUpdateAboutThisLineRun(edge, now)) { return delaysForAlightEdges.getOrDefault(edge.getEdge(), 0); } else { return 0; } }
private int edgeId(EdgeIteratorState edge) { if (edge instanceof VirtualEdgeIteratorState) { return GHUtility.getEdgeFromEdgeKey(((VirtualEdgeIteratorState) edge).getOriginalTraversalKey()); } else { return edge.getEdge(); } }
@Override protected SPTEntry createEntry(EdgeIteratorState edge, double weight, SPTEntry parent, boolean reverse) { int neighborNode = edge.getAdjNode(); double heapWeight = weight + weightApprox.approximate(neighborNode, reverse); AStarEntry entry = new AStarEntry(edge.getEdge(), neighborNode, heapWeight, weight); entry.parent = parent; return entry; }
@Override public final boolean accept(EdgeIteratorState iter) { boolean blocked = blockedEdges.contains(iter.getEdge()); return fwd && iter.isForward(encoder) && !blocked || bwd && iter.isBackward(encoder) && !blocked; }
/** * This method fills the edgeIds hash with edgeIds found close (exact match) to the specified lat,lon */ public void findClosestEdge(GHIntHashSet edgeIds, double lat, double lon, EdgeFilter filter) { QueryResult qr = locationIndex.findClosest(lat, lon, filter); if (qr.isValid()) edgeIds.add(qr.getClosestEdge().getEdge()); }
private Shortcut expectedShortcut(int baseNode, int adjNode, EdgeIteratorState edge1, EdgeIteratorState edge2, boolean fwd, boolean bwd) { //todo: weight calculation might have to be adjusted for different encoders/weightings/reverse speed double weight = weighting.calcWeight(edge1, false, EdgeIterator.NO_EDGE) + weighting.calcWeight(edge2, false, EdgeIterator.NO_EDGE); double distance = edge1.getDistance() + edge2.getDistance(); return new Shortcut(baseNode, adjNode, weight, distance, fwd, bwd, edge1.getEdge(), edge2.getEdge()); }
@Override protected boolean checkAdjacent(EdgeIteratorState edge) { int adjNodeId = edge.getAdjNode(); if (localShape.contains(na.getLatitude(adjNodeId), na.getLongitude(adjNodeId))) { edgeIds.add(edge.getEdge()); return true; } return isPolygon && isInsideBBox(adjNodeId); }
@Test public void testGetEdgeProps() { initGraph(g); EdgeIteratorState e1 = GHUtility.getEdge(g, 0, 2); QueryGraph queryGraph = new QueryGraph(g); QueryResult res1 = createLocationResult(0.5, 0, e1, 0, EDGE); queryGraph.lookup(Arrays.asList(res1)); // get virtual edge e1 = GHUtility.getEdge(queryGraph, res1.getClosestNode(), 0); EdgeIteratorState e2 = queryGraph.getEdgeIteratorState(e1.getEdge(), Integer.MIN_VALUE); assertEquals(e1.getEdge(), e2.getEdge()); }
private String getCoords(EdgeIteratorState edge, Graph graph) { NodeAccess na = graph.getNodeAccess(); int base = edge.getBaseNode(); int adj = edge.getAdjNode(); return base + "->" + adj + " (" + edge.getEdge() + "); " + na.getLat(base) + "," + na.getLon(base) + " -> " + na.getLat(adj) + "," + na.getLon(adj); }