Skip to content

Commit 2a7e5fb

Browse files
authored
improve Measurement for block_area to fix graphhopper#1961 (graphhopper#1963)
1 parent 499e963 commit 2a7e5fb

File tree

3 files changed

+43
-27
lines changed

3 files changed

+43
-27
lines changed

.travis.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@ before_install:
3030
- 'wget https://raw.githubusercontent.com/sormuras/bach/master/install-jdk.sh'
3131
- nvm install $NODE_VERSION
3232

33-
# avoid increase of memory via travis https://github.com/travis-ci/travis-ci/issues/8408
34-
before_script:
35-
- _JAVA_OPTIONS=
36-
3733
# Undo `_JAVA_OPTIONS` environment variable; see https://github.com/travis-ci/travis-ci/issues/8408
3834
before_script:
3935
- _JAVA_OPTIONS=

benchmark/benchmark.sh

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ prepare.min_oneway_network_size=10000 \
5757
spatial_rules.borders_directory=${BORDERS_DIRECTORY} \
5858
measurement.json=true \
5959
measurement.count=5000 \
60-
measurement.use_measurement_time_as_ref_time=${USE_MEASUREMENT_TIME_AS_REF_TIME}
60+
measurement.use_measurement_time_as_ref_time=${USE_MEASUREMENT_TIME_AS_REF_TIME} \
61+
"measurement.block_area=49.394664,11.144428,49.348388,11.144943,49.355768,11.227169,49.411643,11.227512"
6162

6263
# 2 - big map: node-based CH + landmarks (edge- & node-based for LM)
6364
java -cp tools/target/graphhopper-tools-*-jar-with-dependencies.jar com.graphhopper.tools.Measurement \
@@ -79,4 +80,5 @@ prepare.min_oneway_network_size=10000 \
7980
spatial_rules.borders_directory=${BORDERS_DIRECTORY} \
8081
measurement.json=true \
8182
measurement.count=5000 \
82-
measurement.use_measurement_time_as_ref_time=${USE_MEASUREMENT_TIME_AS_REF_TIME}
83+
measurement.use_measurement_time_as_ref_time=${USE_MEASUREMENT_TIME_AS_REF_TIME} \
84+
"measurement.block_area=49.394664,11.144428,49.348388,11.144943,49.355768,11.227169,49.411643,11.227512"

tools/src/main/java/com/graphhopper/tools/Measurement.java

Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ void start(PMap args) throws IOException {
113113
put("measurement.gitinfo", args.getString("measurement.gitinfo", ""));
114114
int count = args.getInt("measurement.count", 5000);
115115
put("measurement.map", args.getString("datareader.file", "unknown"));
116-
116+
String blockAreaStr = args.getString("measurement.block_area", "");
117117
final boolean useMeasurementTimeAsRefTime = args.getBool("measurement.use_measurement_time_as_ref_time", false);
118118
if (useMeasurementTimeAsRefTime && !useJson) {
119119
throw new IllegalArgumentException("Using measurement time as reference time only works with json files");
@@ -185,16 +185,16 @@ protected DataReader importData() throws IOException {
185185
GHBitSet allowedEdges = printGraphDetails(g, vehicleStr);
186186
printMiscUnitPerfTests(g, isCH, encoder, count * 100, allowedEdges);
187187
printLocationIndexQuery(g, hopper.getLocationIndex(), count);
188-
String blockAreaStr = "49.394664,11.144428,49.348388,11.144943,49.355768,11.227169,49.411643,11.227512";
188+
189189
if (runSlow) {
190190
printTimeOfRouteQuery(hopper, new QuerySettings("routing", vehicleStr, count / 20, isCH, isLM).
191191
withInstructions());
192-
if (encoder.supportsTurnCosts()) {
192+
if (encoder.supportsTurnCosts())
193193
printTimeOfRouteQuery(hopper, new QuerySettings("routing_edge", vehicleStr, count / 20, isCH, isLM).
194194
withInstructions().edgeBased());
195-
}
196-
printTimeOfRouteQuery(hopper, new QuerySettings("routing_block_area", vehicleStr, count / 20, isCH, isLM).
197-
withInstructions().blockArea(blockAreaStr));
195+
if (!blockAreaStr.isEmpty())
196+
printTimeOfRouteQuery(hopper, new QuerySettings("routing_block_area", vehicleStr, count / 20, isCH, isLM).
197+
withInstructions().blockArea(blockAreaStr));
198198
}
199199

200200
if (hopper.getLMPreparationHandler().isEnabled()) {
@@ -210,8 +210,9 @@ protected DataReader importData() throws IOException {
210210
}
211211

212212
final int blockAreaActiveLMCount = 8;
213-
printTimeOfRouteQuery(hopper, new QuerySettings("routingLM" + blockAreaActiveLMCount + "_block_area", vehicleStr, count / 4, isCH, isLM).
214-
withInstructions().activeLandmarks(blockAreaActiveLMCount).blockArea(blockAreaStr));
213+
if (!blockAreaStr.isEmpty())
214+
printTimeOfRouteQuery(hopper, new QuerySettings("routingLM" + blockAreaActiveLMCount + "_block_area", vehicleStr, count / 4, isCH, isLM).
215+
withInstructions().activeLandmarks(blockAreaActiveLMCount).blockArea(blockAreaStr));
215216
// compareRouting(hopper, vehicleStr, count / 5);
216217
}
217218

@@ -628,7 +629,8 @@ private void printTimeOfRouteQuery(final GraphHopper hopper, final QuerySettings
628629
final AtomicInteger failedCount = new AtomicInteger(0);
629630
final DistanceCalc distCalc = new DistanceCalcEarth();
630631

631-
final EdgeExplorer edgeExplorer = g.createEdgeExplorer(DefaultEdgeFilter.allEdges(hopper.getEncodingManager().getEncoder(querySettings.vehicle)));
632+
final EdgeFilter edgeFilter = DefaultEdgeFilter.allEdges(hopper.getEncodingManager().getEncoder(querySettings.vehicle));
633+
final EdgeExplorer edgeExplorer = g.createEdgeExplorer(edgeFilter);
632634
final AtomicLong visitedNodesSum = new AtomicLong(0);
633635
final AtomicLong maxVisitedNodes = new AtomicLong(0);
634636
// final AtomicLong extractTimeSum = new AtomicLong(0);
@@ -641,15 +643,34 @@ private void printTimeOfRouteQuery(final GraphHopper hopper, final QuerySettings
641643
MiniPerfTest miniPerf = new MiniPerfTest() {
642644
@Override
643645
public int doCalc(boolean warmup, int run) {
644-
int from = rand.nextInt(maxNode);
645-
int to = rand.nextInt(maxNode);
646-
double fromLat = na.getLatitude(from);
647-
double fromLon = na.getLongitude(from);
648-
double toLat = na.getLatitude(to);
649-
double toLon = na.getLongitude(to);
650-
GHRequest req = new GHRequest(fromLat, fromLon, toLat, toLon).
651-
setWeighting(weighting).
652-
setVehicle(querySettings.vehicle);
646+
int from = -1, to = -1;
647+
Double fromLat = null, fromLon = null, toLat = null, toLon = null;
648+
GHRequest req = null;
649+
650+
for (int i = 0; i < 5; i++) {
651+
from = rand.nextInt(maxNode);
652+
to = rand.nextInt(maxNode);
653+
fromLat = na.getLatitude(from);
654+
fromLon = na.getLongitude(from);
655+
toLat = na.getLatitude(to);
656+
toLon = na.getLongitude(to);
657+
req = new GHRequest(fromLat, fromLon, toLat, toLon).
658+
setWeighting(weighting).
659+
setVehicle(querySettings.vehicle);
660+
661+
if (querySettings.blockArea == null)
662+
break;
663+
664+
try {
665+
req.getHints().putObject(BLOCK_AREA, querySettings.blockArea);
666+
GraphEdgeIdFinder.createBlockArea(hopper.getGraphHopperStorage(), hopper.getLocationIndex(), req.getPoints(), req.getHints(), edgeFilter);
667+
break;
668+
} catch (IllegalArgumentException ex) {
669+
if (i >= 4)
670+
throw new RuntimeException("Give up after 5 trials. Cannot find points outside of the block_area "
671+
+ querySettings.blockArea + " - too big block_area or map too small? Request:" + req);
672+
}
673+
}
653674

654675
req.getHints().putObject(CH.DISABLE, !querySettings.ch).
655676
putObject("stall_on_demand", querySettings.sod).
@@ -671,9 +692,6 @@ public int doCalc(boolean warmup, int run) {
671692
req.getHints().putObject(Parameters.Routing.WAY_POINT_MAX_DISTANCE, 0);
672693
}
673694

674-
if (querySettings.blockArea != null)
675-
req.getHints().putObject(BLOCK_AREA, querySettings.blockArea);
676-
677695
if (querySettings.withPointHints) {
678696
EdgeIterator iter = edgeExplorer.setBaseNode(from);
679697
if (!iter.next())

0 commit comments

Comments
 (0)