Skip to content

Commit 54a3031

Browse files
Finish Generic Bike without profiles.
1 parent 9311dd8 commit 54a3031

File tree

3 files changed

+30
-36
lines changed

3 files changed

+30
-36
lines changed

core/src/main/java/com/graphhopper/routing/Path.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -419,19 +419,21 @@ private double adjustSpeed(double speed, EdgeIteratorState edgeState, boolean re
419419
if (!reverse)
420420
{
421421
// use weighted mean so that longer incline infuences speed more than shorter
422-
double fwdFaster = 1 + 2 * keepIn(decElevation, 0, 0.2);
423-
fwdFaster = fwdFaster * fwdFaster;
422+
double fwdFaster = 1 + 30 * keepIn(decElevation, 0, 0.1);
423+
fwdFaster = Math.sqrt(fwdFaster);
424424
double fwdSlower = 1 - 5 * keepIn(incElevation, 0, 0.2);
425425
fwdSlower = fwdSlower * fwdSlower;
426426
adjustedSpeed = keepIn(speed * (fwdSlower * incDist2DSum + fwdFaster * decDist2DSum) / edgeState.getDistance(), BikeGenericFlagEncoder.PUSHING_SECTION_SPEED / 2, 50);
427427
} else {
428-
double fwdFaster = 1 + 2 * keepIn(incElevation, 0, 0.2);
429-
fwdFaster = fwdFaster * fwdFaster;
428+
double fwdFaster = 1 + 30 * keepIn(incElevation, 0, 0.1);
429+
fwdFaster = Math.sqrt(fwdFaster);
430430
double fwdSlower = 1 - 5 * keepIn(decElevation, 0, 0.2);
431431
fwdSlower = fwdSlower * fwdSlower;
432432
adjustedSpeed = keepIn(speed * (fwdSlower * decDist2DSum + fwdFaster * incDist2DSum) / edgeState.getDistance(), BikeGenericFlagEncoder.PUSHING_SECTION_SPEED / 2, 50);
433433
}
434-
System.out.println("NEW SPEED: " + Helper.round2(adjustedSpeed) + ", SPEED: " + speed + ", INC ELE: " + incElevation + ", DEC ELE: " + decElevation + ", PERCENTAGE: " + incDistPercentage);
434+
System.out.println("NEW SPEED: " + Helper.round2(adjustedSpeed) + ", SPEED: " + speed + ", INC ELE: " + incElevation +
435+
", DEC ELE: " + decElevation + ", PERCENTAGE: " + incDistPercentage +
436+
", INC DIST: " + incDist2DSum + ", DEC DIST: " + decDist2DSum);
435437

436438
return adjustedSpeed;
437439
}

core/src/main/java/com/graphhopper/routing/util/BikeGenericFlagEncoder.java

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -694,29 +694,9 @@ public void applyWayTags(OSMWay way, EdgeIteratorState edge) {
694694
double decEleSum = 0, decDist2DSum = 0;
695695
double prevLat = pl.getLatitude(0), prevLon = pl.getLongitude(0);
696696
double prevEle = pl.getElevation(0);
697-
double fullDist2D = edge.getDistance();
697+
double fullDist2D = 0;
698698

699-
if (Double.isInfinite(fullDist2D))
700-
{
701-
System.err.println("infinity distance? for way:" + way.getId());
702-
return;
703-
}
704-
// for short edges an incline makes no sense and for 0 distances could lead to NaN values for speed, see #432
705-
if (fullDist2D < 1)
706-
return;
707-
708-
/*double eleDelta = pl.getElevation(pl.size() - 1) - prevEle;
709-
if (eleDelta >= 0)
710-
{
711-
incEleSum = eleDelta;
712-
incDist2DSum = fullDist2D;
713-
} else if (eleDelta < 0)
714-
{
715-
decEleSum = -eleDelta;
716-
decDist2DSum = fullDist2D;
717-
}*/
718-
719-
// // get a more detailed elevation information, but due to bad SRTM data this does not make sense now.
699+
// get a more detailed elevation information, but due to bad SRTM data this does not make sense now.
720700
for (int i = 1; i < pl.size(); i++)
721701
{
722702
double lat = pl.getLatitude(i);
@@ -742,6 +722,16 @@ public void applyWayTags(OSMWay way, EdgeIteratorState edge) {
742722
// Then calculate a factor which decreases or increases the speed.
743723
// Do this via a simple quadratic equation where y(0)=1 and y(0.3)=1/4 for incline and y(0.3)=2 for decline
744724

725+
if (Double.isInfinite(fullDist2D))
726+
{
727+
System.err.println("infinity distance? for way:" + way.getId());
728+
return;
729+
}
730+
731+
// for short edges an incline makes no sense and for 0 distances could lead to NaN values for speed, see #432
732+
if (fullDist2D < 1)
733+
return;
734+
745735
fwdIncline = incDist2DSum > 1 ? (incEleSum / incDist2DSum) * 100 : 0;
746736
fwdDecline = decDist2DSum > 1 ? (decEleSum / decDist2DSum) * 100 : 0;
747737
inclineDistancePercentage = keepIn(incDist2DSum / fullDist2D * 100, 0, 100);

core/src/main/java/com/graphhopper/routing/util/DynamicWeighting.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public double calcWeight( EdgeIteratorState edgeState, boolean reverse, int prev
8080
if (penalizeEdge)
8181
time += heading_penalty;
8282

83-
return time / (0.5 + getUserPreference(edgeState));
83+
return time / (Math.pow(0.5 + getUserPreference(edgeState), 2));
8484
}
8585

8686
private double getUserPreference(EdgeIteratorState edgeState) {
@@ -98,16 +98,18 @@ else if(wayType >= 10 && wayType <= 12) {
9898

9999
priority = PriorityCode.AVOID_IF_POSSIBLE.getValue();
100100

101-
if(incDist2DSum > 50 && incElevation > 0.02) {
101+
if(incDist2DSum > 10 && incElevation > 0.02) {
102102
priority = PriorityCode.AVOID_AT_ALL_COSTS.getValue();
103103
//System.out.println(wayType + ": elevation: " + incElevation + ": " + incDist2DSum);
104104

105105
if(incElevation > 0.1){
106106
priority = PriorityCode.WORST.getValue();
107107
}
108108
}
109-
} else if (wayType >= 1 && wayType <= 6){
109+
} else if (wayType >= 2 && wayType <= 6){
110110
priority = PriorityCode.PREFER.getValue();
111+
} else if (wayType == 15){
112+
priority = PriorityCode.WORST.getValue();
111113
}
112114

113115
return priority / PriorityCode.BEST.getValue();
@@ -128,15 +130,15 @@ private double adjustSpeed(double speed, EdgeIteratorState edgeState, boolean re
128130
if (!reverse)
129131
{
130132
// use weighted mean so that longer incline infuences speed more than shorter
131-
double fwdFaster = 1 + 2 * keepIn(decElevation, 0, 0.2);
132-
fwdFaster = fwdFaster * fwdFaster;
133-
double fwdSlower = 1 - 3 * keepIn(incElevation, 0, 0.33);
133+
double fwdFaster = 1 + 30 * keepIn(decElevation, 0, 0.1);
134+
fwdFaster = Math.sqrt(fwdFaster);
135+
double fwdSlower = 1 - 5 * keepIn(incElevation, 0, 0.2);
134136
fwdSlower = fwdSlower * fwdSlower;
135137
adjustedSpeed = keepIn(speed * (fwdSlower * incDist2DSum + fwdFaster * decDist2DSum) / edgeState.getDistance(), BikeGenericFlagEncoder.PUSHING_SECTION_SPEED / 2, 50);
136138
} else {
137-
double fwdFaster = 1 + 2 * keepIn(incElevation, 0, 0.2);
138-
fwdFaster = fwdFaster * fwdFaster;
139-
double fwdSlower = 1 - 3 * keepIn(decElevation, 0, 0.33);
139+
double fwdFaster = 1 + 30 * keepIn(incElevation, 0, 0.1);
140+
fwdFaster = Math.sqrt(fwdFaster);
141+
double fwdSlower = 1 - 5 * keepIn(decElevation, 0, 0.2);
140142
fwdSlower = fwdSlower * fwdSlower;
141143
adjustedSpeed = keepIn(speed * (fwdSlower * decDist2DSum + fwdFaster * incDist2DSum) / edgeState.getDistance(), BikeGenericFlagEncoder.PUSHING_SECTION_SPEED / 2, 50);
142144
}

0 commit comments

Comments
 (0)