Search in sources :

Example 46 with Snap

use of com.graphhopper.storage.index.Snap in project graphhopper by graphhopper.

the class HeadingResolverTest method createSnap.

private Snap createSnap(EdgeIteratorState closestEdge, double lat, double lon, int wayIndex) {
    Snap snap = new Snap(lat, lon);
    snap.setClosestEdge(closestEdge);
    snap.setSnappedPosition(Snap.Position.EDGE);
    snap.setWayIndex(wayIndex);
    snap.calcSnappedPoint(new DistanceCalcEuclidean());
    return snap;
}
Also used : DistanceCalcEuclidean(com.graphhopper.util.DistanceCalcEuclidean) Snap(com.graphhopper.storage.index.Snap)

Example 47 with Snap

use of com.graphhopper.storage.index.Snap in project graphhopper by graphhopper.

the class QueryRoutingCHGraphTest method getEdgeIteratorState.

@Test
public void getEdgeIteratorState() {
    // /---\
    // 0-x-1-2
    // 3
    na.setNode(0, 50.00, 10.00);
    na.setNode(1, 50.00, 10.10);
    na.setNode(2, 50.00, 10.20);
    EdgeIteratorState edge = addEdge(graph, 0, 1);
    addEdge(graph, 1, 2);
    graph.freeze();
    CHConfig chConfig = CHConfig.edgeBased("x", weighting);
    CHStorage chStore = graph.createCHStorage(chConfig);
    RoutingCHGraph routingCHGraph = graph.createCHGraph(chStore, chConfig);
    CHStorageBuilder chBuilder = new CHStorageBuilder(chStore);
    chBuilder.setIdentityLevels();
    chBuilder.addShortcutEdgeBased(0, 2, PrepareEncoder.getScFwdDir(), 20, 0, 1, 0, 1);
    Snap snap = new Snap(50.00, 10.05);
    snap.setClosestEdge(edge);
    snap.setWayIndex(0);
    snap.setSnappedPosition(Snap.Position.EDGE);
    snap.calcSnappedPoint(DistancePlaneProjection.DIST_PLANE);
    QueryGraph queryGraph = QueryGraph.create(graph, Collections.singletonList(snap));
    QueryRoutingCHGraph queryCHGraph = new QueryRoutingCHGraph(routingCHGraph, queryGraph);
    assertGetEdgeIteratorState(queryCHGraph, 1, 2, 1);
    assertGetEdgeIteratorShortcut(queryCHGraph, 0, 2, 0, 1);
    // the orig edge corresponds to the edge id of the edge in the (base) query graph
    assertGetEdgeIteratorState(queryCHGraph, 0, 3, 2);
    assertGetEdgeIteratorState(queryCHGraph, 3, 0, 2);
    assertGetEdgeIteratorState(queryCHGraph, 1, 3, 3);
    assertGetEdgeIteratorState(queryCHGraph, 3, 1, 3);
}
Also used : EdgeIteratorState(com.graphhopper.util.EdgeIteratorState) QueryRoutingCHGraph(com.graphhopper.routing.querygraph.QueryRoutingCHGraph) QueryRoutingCHGraph(com.graphhopper.routing.querygraph.QueryRoutingCHGraph) Snap(com.graphhopper.storage.index.Snap) QueryGraph(com.graphhopper.routing.querygraph.QueryGraph) Test(org.junit.jupiter.api.Test)

Example 48 with Snap

use of com.graphhopper.storage.index.Snap in project graphhopper by graphhopper.

the class QueryRoutingCHGraphTest method withVirtualEdgesAndShortcuts.

@Test
public void withVirtualEdgesAndShortcuts() {
    // /---\
    // 0-x-1-2
    // 3
    na.setNode(0, 50.00, 10.00);
    na.setNode(1, 50.00, 10.10);
    na.setNode(2, 50.00, 10.20);
    EdgeIteratorState edge = addEdge(graph, 0, 1);
    addEdge(graph, 1, 2);
    graph.freeze();
    assertEquals(2, graph.getEdges());
    CHConfig chConfig = CHConfig.edgeBased("x", weighting);
    CHStorage chStore = graph.createCHStorage(chConfig);
    RoutingCHGraph routingCHGraph = graph.createCHGraph(chStore, chConfig);
    CHStorageBuilder chBuilder = new CHStorageBuilder(chStore);
    chBuilder.setIdentityLevels();
    chBuilder.addShortcutEdgeBased(0, 2, PrepareEncoder.getScFwdDir(), 20, 0, 1, 0, 1);
    Snap snap = new Snap(50.00, 10.05);
    snap.setClosestEdge(edge);
    snap.setWayIndex(0);
    snap.setSnappedPosition(Snap.Position.EDGE);
    snap.calcSnappedPoint(DistancePlaneProjection.DIST_PLANE);
    QueryGraph queryGraph = QueryGraph.create(graph, Collections.singletonList(snap));
    QueryRoutingCHGraph queryCHGraph = new QueryRoutingCHGraph(routingCHGraph, queryGraph);
    assertEquals(4, queryCHGraph.getNodes());
    assertEquals(3 + 4, queryCHGraph.getEdges());
    assertNodesConnected(queryCHGraph, 0, 3, true);
    assertNodesConnected(queryCHGraph, 3, 1, true);
    assertNodesConnected(queryCHGraph, 1, 2, true);
    // node 0 is not visible from node 0 via shortcut 0-2
    // assertNodesConnected(queryCHGraph, 0, 2, false);
    // at real nodes
    RoutingCHEdgeIterator outIter = queryCHGraph.createOutEdgeExplorer().setBaseNode(0);
    // note that orig edge of virtual edges corresponds to the id of the virtual edge on the base graph
    assertNextEdge(outIter, 0, 3, 2);
    assertNextShortcut(outIter, 0, 2, 0, 1);
    assertEnd(outIter);
    RoutingCHEdgeIterator inIter = queryCHGraph.createInEdgeExplorer().setBaseNode(2);
    assertNextEdge(inIter, 2, 1, 1);
    assertEnd(inIter);
    // at virtual nodes
    outIter = queryCHGraph.createOutEdgeExplorer().setBaseNode(3);
    assertNextEdge(outIter, 3, 0, 2);
    assertNextEdge(outIter, 3, 1, 3);
    assertEnd(outIter);
    inIter = queryCHGraph.createInEdgeExplorer().setBaseNode(3);
    assertNextEdge(inIter, 3, 0, 2);
    assertNextEdge(inIter, 3, 1, 3);
    assertEnd(inIter);
}
Also used : EdgeIteratorState(com.graphhopper.util.EdgeIteratorState) QueryRoutingCHGraph(com.graphhopper.routing.querygraph.QueryRoutingCHGraph) QueryRoutingCHGraph(com.graphhopper.routing.querygraph.QueryRoutingCHGraph) Snap(com.graphhopper.storage.index.Snap) QueryGraph(com.graphhopper.routing.querygraph.QueryGraph) Test(org.junit.jupiter.api.Test)

Example 49 with Snap

use of com.graphhopper.storage.index.Snap in project graphhopper by graphhopper.

the class QueryRoutingCHGraphTest method getWeight_withAccess.

@Test
public void getWeight_withAccess() {
    na.setNode(0, 50.00, 10.00);
    na.setNode(1, 50.00, 10.10);
    double dist = DistancePlaneProjection.DIST_PLANE.calcDist(na.getLat(0), na.getLon(0), na.getLat(1), na.getLon(1));
    EdgeIteratorState edge = graph.edge(0, 1).setDistance(dist);
    // we set the access flags, but do use direction dependent speeds to make sure we are testing whether or not the
    // access flags are respected and the weight calculation does not simply rely on the speed, see this forum issue
    // https://discuss.graphhopper.com/t/speed-and-access-when-setbothdirections-true-false/5695
    edge.set(encoder.getAccessEnc(), true, false);
    edge.set(encoder.getAverageSpeedEnc(), 60, 60);
    graph.freeze();
    CHConfig chConfig = CHConfig.edgeBased("x", weighting);
    CHStorage chStore = graph.createCHStorage(chConfig);
    RoutingCHGraph routingCHGraph = graph.createCHGraph(chStore, chConfig);
    // without query graph
    // 0->1
    RoutingCHEdgeIterator iter = routingCHGraph.createOutEdgeExplorer().setBaseNode(0);
    assertNextEdge(iter, 0, 1, 0);
    assertEquals(428.8483, iter.getWeight(false), 1.e-4);
    assertEquals(Double.POSITIVE_INFINITY, iter.getWeight(true));
    assertEnd(iter);
    iter = routingCHGraph.createInEdgeExplorer().setBaseNode(1);
    assertNextEdge(iter, 1, 0, 0);
    assertEquals(Double.POSITIVE_INFINITY, iter.getWeight(false));
    assertEquals(428.8483, iter.getWeight(true), 1.e-4);
    assertEnd(iter);
    // single edges
    assertEquals(428.8483, routingCHGraph.getEdgeIteratorState(0, 1).getWeight(false), 1.e-4);
    assertEquals(Double.POSITIVE_INFINITY, routingCHGraph.getEdgeIteratorState(0, 1).getWeight(true));
    assertEquals(Double.POSITIVE_INFINITY, routingCHGraph.getEdgeIteratorState(0, 0).getWeight(false));
    assertEquals(428.8483, routingCHGraph.getEdgeIteratorState(0, 0).getWeight(true), 1.e-4);
    // with query graph
    // 0-x->1
    // 2
    Snap snap = new Snap(50.00, 10.05);
    snap.setClosestEdge(edge);
    snap.setWayIndex(0);
    snap.setSnappedPosition(Snap.Position.EDGE);
    snap.calcSnappedPoint(DistancePlaneProjection.DIST_PLANE);
    QueryGraph queryGraph = QueryGraph.create(graph, Collections.singletonList(snap));
    QueryRoutingCHGraph queryCHGraph = new QueryRoutingCHGraph(routingCHGraph, queryGraph);
    iter = queryCHGraph.createOutEdgeExplorer().setBaseNode(0);
    assertNextEdge(iter, 0, 2, 1);
    assertEquals(214.4241, iter.getWeight(false), 1.e-4);
    assertEquals(Double.POSITIVE_INFINITY, iter.getWeight(true));
    assertEnd(iter);
    iter = queryCHGraph.createInEdgeExplorer().setBaseNode(1);
    assertNextEdge(iter, 1, 2, 2);
    assertEquals(Double.POSITIVE_INFINITY, iter.getWeight(false));
    assertEquals(214.4241, iter.getWeight(true), 1.e-4);
    assertEnd(iter);
    // at virtual node
    iter = queryCHGraph.createInEdgeExplorer().setBaseNode(2);
    assertNextEdge(iter, 2, 0, 1);
    assertEquals(Double.POSITIVE_INFINITY, iter.getWeight(false));
    assertEquals(214.4241, iter.getWeight(true), 1.e-4);
    assertNextEdge(iter, 2, 1, 2);
    assertEquals(214.4241, iter.getWeight(false), 1.e-4);
    assertEquals(Double.POSITIVE_INFINITY, iter.getWeight(true));
    assertEnd(iter);
    // single edges
    assertEquals(214.4241, queryCHGraph.getEdgeIteratorState(1, 2).getWeight(false), 1.e-4);
    assertEquals(Double.POSITIVE_INFINITY, queryCHGraph.getEdgeIteratorState(1, 2).getWeight(true));
    assertEquals(Double.POSITIVE_INFINITY, queryCHGraph.getEdgeIteratorState(1, 0).getWeight(false));
    assertEquals(214.4241, queryCHGraph.getEdgeIteratorState(1, 0).getWeight(true), 1.e-4);
}
Also used : EdgeIteratorState(com.graphhopper.util.EdgeIteratorState) QueryRoutingCHGraph(com.graphhopper.routing.querygraph.QueryRoutingCHGraph) QueryRoutingCHGraph(com.graphhopper.routing.querygraph.QueryRoutingCHGraph) Snap(com.graphhopper.storage.index.Snap) QueryGraph(com.graphhopper.routing.querygraph.QueryGraph) Test(org.junit.jupiter.api.Test)

Example 50 with Snap

use of com.graphhopper.storage.index.Snap in project graphhopper by graphhopper.

the class QueryRoutingCHGraphTest method getTurnCost.

@Test
public void getTurnCost() {
    // /-----\
    // 0-x-1-x-2
    // 3   4
    na.setNode(0, 50.00, 10.00);
    na.setNode(1, 50.00, 10.10);
    na.setNode(2, 50.00, 10.20);
    EdgeIteratorState edge1 = addEdge(graph, 0, 1);
    EdgeIteratorState edge2 = addEdge(graph, 1, 2);
    DecimalEncodedValue turnCostEnc = encodingManager.getDecimalEncodedValue(TurnCost.key(encoder.toString()));
    graph.getTurnCostStorage().set(turnCostEnc, 0, 1, 1, 5);
    graph.freeze();
    CHConfig chConfig = CHConfig.edgeBased("x", weighting);
    CHStorage chStore = graph.createCHStorage(chConfig);
    RoutingCHGraph routingCHGraph = graph.createCHGraph(chStore, chConfig);
    CHStorageBuilder chBuilder = new CHStorageBuilder(chStore);
    chBuilder.setIdentityLevels();
    chBuilder.addShortcutEdgeBased(0, 2, PrepareEncoder.getScFwdDir(), 20, 0, 1, 0, 1);
    // without virtual nodes
    assertEquals(5, routingCHGraph.getTurnWeight(0, 1, 1));
    // with virtual nodes
    Snap snap1 = new Snap(50.00, 10.05);
    snap1.setClosestEdge(edge1);
    snap1.setWayIndex(0);
    snap1.setSnappedPosition(Snap.Position.EDGE);
    snap1.calcSnappedPoint(DistancePlaneProjection.DIST_PLANE);
    Snap snap2 = new Snap(50.00, 10.15);
    snap2.setClosestEdge(edge2);
    snap2.setWayIndex(0);
    snap2.setSnappedPosition(Snap.Position.EDGE);
    snap2.calcSnappedPoint(DistancePlaneProjection.DIST_PLANE);
    QueryGraph queryGraph = QueryGraph.create(graph, Arrays.asList(snap1, snap2));
    QueryRoutingCHGraph queryCHGraph = new QueryRoutingCHGraph(routingCHGraph, queryGraph);
    assertEquals(5, queryCHGraph.getTurnWeight(0, 1, 1));
    // take a look at edges 3->1 and 1->4, their original edge ids are 3 and 4 (not 4 and 5)
    assertNodesConnected(queryCHGraph, 3, 1, true);
    assertNodesConnected(queryCHGraph, 1, 4, true);
    int expectedEdge31 = 3;
    int expectedEdge14 = 4;
    RoutingCHEdgeIterator iter = queryCHGraph.createOutEdgeExplorer().setBaseNode(3);
    assertNextEdge(iter, 3, 0, 2);
    assertNextEdge(iter, 3, 1, expectedEdge31);
    assertEnd(iter);
    iter = queryCHGraph.createOutEdgeExplorer().setBaseNode(1);
    assertNextEdge(iter, 1, 3, 3);
    assertNextEdge(iter, 1, 4, expectedEdge14);
    assertEnd(iter);
    // check the turn weight between these edges
    assertEquals(5, queryCHGraph.getTurnWeight(expectedEdge31, 1, expectedEdge14));
}
Also used : EdgeIteratorState(com.graphhopper.util.EdgeIteratorState) DecimalEncodedValue(com.graphhopper.routing.ev.DecimalEncodedValue) QueryRoutingCHGraph(com.graphhopper.routing.querygraph.QueryRoutingCHGraph) QueryRoutingCHGraph(com.graphhopper.routing.querygraph.QueryRoutingCHGraph) Snap(com.graphhopper.storage.index.Snap) QueryGraph(com.graphhopper.routing.querygraph.QueryGraph) Test(org.junit.jupiter.api.Test)

Aggregations

Snap (com.graphhopper.storage.index.Snap)77 Test (org.junit.jupiter.api.Test)39 QueryGraph (com.graphhopper.routing.querygraph.QueryGraph)31 GHPoint (com.graphhopper.util.shapes.GHPoint)22 LocationIndexTree (com.graphhopper.storage.index.LocationIndexTree)20 EdgeIteratorState (com.graphhopper.util.EdgeIteratorState)13 QueryRoutingCHGraph (com.graphhopper.routing.querygraph.QueryRoutingCHGraph)12 Weighting (com.graphhopper.routing.weighting.Weighting)11 ArrayList (java.util.ArrayList)11 Path (com.graphhopper.routing.Path)9 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)9 FastestWeighting (com.graphhopper.routing.weighting.FastestWeighting)8 RoutingAlgorithm (com.graphhopper.routing.RoutingAlgorithm)6 DecimalEncodedValue (com.graphhopper.routing.ev.DecimalEncodedValue)6 LocationIndex (com.graphhopper.storage.index.LocationIndex)6 IntArrayList (com.carrotsearch.hppc.IntArrayList)5 GraphHopper (com.graphhopper.GraphHopper)5 Profile (com.graphhopper.config.Profile)5 ValueSource (org.junit.jupiter.params.provider.ValueSource)5 DefaultSnapFilter (com.graphhopper.routing.util.DefaultSnapFilter)4