use of com.graphhopper.routing.util.parsers.OSMRoadEnvironmentParser in project graphhopper by graphhopper.
the class GraphHopperTest method testSRTMWithTunnelInterpolation.
@ParameterizedTest
@ValueSource(booleans = { true, false })
public void testSRTMWithTunnelInterpolation(boolean withTunnelInterpolation) {
final String profile = "profile";
final String vehicle = "foot";
final String weighting = "shortest";
GraphHopper hopper = new GraphHopper().setGraphHopperLocation(GH_LOCATION).setOSMFile(MONACO).setProfiles(new Profile(profile).setVehicle(vehicle).setWeighting(weighting)).setStoreOnFlush(true);
if (!withTunnelInterpolation) {
hopper.setTagParserFactory(new DefaultTagParserFactory() {
@Override
public TagParser create(EncodedValueLookup lookup, String name) {
TagParser parser = super.create(lookup, name);
if (name.equals("road_environment"))
parser = new OSMRoadEnvironmentParser(lookup.getEnumEncodedValue(RoadEnvironment.KEY, RoadEnvironment.class)) {
@Override
public IntsRef handleWayTags(IntsRef edgeFlags, ReaderWay readerWay, IntsRef relationFlags) {
// do not change RoadEnvironment to avoid triggering tunnel interpolation
return edgeFlags;
}
};
return parser;
}
});
hopper.setEncodedValuesString("road_environment");
}
hopper.setElevationProvider(new SRTMProvider(DIR));
hopper.importOrLoad();
GHPoint from = new GHPoint(43.7405647, 7.4299266);
GHPoint to = new GHPoint(43.7378990, 7.4279780);
// make sure we hit tower nodes, because all we really want is test the elevation interpolation
assertEquals(Snap.Position.TOWER, hopper.getLocationIndex().findClosest(from.lat, from.lon, EdgeFilter.ALL_EDGES).getSnappedPosition());
assertEquals(Snap.Position.TOWER, hopper.getLocationIndex().findClosest(to.lat, to.lon, EdgeFilter.ALL_EDGES).getSnappedPosition());
GHResponse rsp = hopper.route(new GHRequest(from, to).setProfile(profile));
ResponsePath res = rsp.getBest();
PointList pointList = res.getPoints();
assertEquals(6, pointList.size());
assertTrue(pointList.is3D());
if (withTunnelInterpolation) {
assertEquals(351.8, res.getDistance(), .1);
assertEquals(17, pointList.getEle(0), .1);
assertEquals(19.04, pointList.getEle(1), .1);
assertEquals(21.67, pointList.getEle(2), .1);
assertEquals(25.03, pointList.getEle(3), .1);
assertEquals(28.65, pointList.getEle(4), .1);
assertEquals(34.00, pointList.getEle(5), .1);
} else {
assertEquals(358.3, res.getDistance(), .1);
assertEquals(17.0, pointList.getEle(0), .1);
assertEquals(23.0, pointList.getEle(1), .1);
assertEquals(23.0, pointList.getEle(2), .1);
assertEquals(41.0, pointList.getEle(3), .1);
assertEquals(19.0, pointList.getEle(4), .1);
assertEquals(34.0, pointList.getEle(5), .1);
}
}
Aggregations