Skip to content

Commit b1e40eb

Browse files
committed
Consider directional "maxspeed:hgv" OSM tags
1 parent d138d7f commit b1e40eb

File tree

2 files changed

+63
-19
lines changed

2 files changed

+63
-19
lines changed

openrouteservice-api-tests/src/test/java/org/heigit/ors/v2/services/routing/ResultTest.java

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3390,7 +3390,7 @@ public void expectZoneMaxpeed() {
33903390
body.put("coordinates", coordinates);
33913391
body.put("preference", getParameter("preference"));
33923392

3393-
// Test that "zone:maxspeed=DE:urban" overrides default "highway=residential" speed for both car and hgv
3393+
// Test that "zone:maxspeed = DE:urban" overrides default "highway = residential" speed for both car and hgv
33943394
given()
33953395
.header("Accept", "application/json")
33963396
.header("Content-Type", "application/json")
@@ -3420,6 +3420,52 @@ public void expectZoneMaxpeed() {
34203420
.statusCode(200);
34213421
}
34223422

3423+
@Test
3424+
public void expectMaxpeedHgvForward() {
3425+
JSONArray coordinates = new JSONArray();
3426+
JSONArray coord1 = new JSONArray();
3427+
coord1.put(8.696237);
3428+
coord1.put(49.37186);
3429+
coordinates.put(coord1);
3430+
JSONArray coord2 = new JSONArray();
3431+
coord2.put(8.693427);
3432+
coord2.put(49.367914);
3433+
coordinates.put(coord2);
3434+
3435+
JSONObject body = new JSONObject();
3436+
body.put("coordinates", coordinates);
3437+
body.put("preference", getParameter("preference"));
3438+
3439+
// Test that "maxspeed:hgv:forward = 30" when going downhill on Am Götzenberg is taken into account for hgv profile
3440+
given()
3441+
.header("Accept", "application/json")
3442+
.header("Content-Type", "application/json")
3443+
.pathParam("profile", getParameter("carProfile"))
3444+
.body(body.toString())
3445+
.when()
3446+
.post(getEndPointPath() + "/{profile}")
3447+
.then()
3448+
.assertThat()
3449+
.body("any { it.key == 'routes' }", is(true))
3450+
.body("routes[0].summary.distance", is(497.5f))
3451+
.body("routes[0].summary.duration", is(61.9f))
3452+
.statusCode(200);
3453+
3454+
given()
3455+
.header("Accept", "application/json")
3456+
.header("Content-Type", "application/json")
3457+
.pathParam("profile", "driving-hgv")
3458+
.body(body.toString())
3459+
.when()
3460+
.post(getEndPointPath() + "/{profile}")
3461+
.then()
3462+
.assertThat()
3463+
.body("any { it.key == 'routes' }", is(true))
3464+
.body("routes[0].summary.distance", is(497.5f))
3465+
.body("routes[0].summary.duration", is(81.1f))
3466+
.statusCode(200);
3467+
}
3468+
34233469
private JSONArray constructBearings(String coordString) {
34243470
JSONArray coordinates = new JSONArray();
34253471
String[] coordPairs = coordString.split("\\|");

openrouteservice/src/main/java/org/heigit/ors/routing/graphhopper/extensions/flagencoders/HeavyVehicleFlagEncoder.java

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -122,29 +122,27 @@ public void createEncodedValues(List<EncodedValue> registerNewEncodedValue, Stri
122122

123123
@Override
124124
public double getMaxSpeed( ReaderWay way ) {
125-
boolean bCheckMaxSpeed = false;
126-
String maxspeedTag = way.getTag("maxspeed:hgv");
127-
if (maxspeedTag == null) {
128-
maxspeedTag = way.getTag("maxspeed");
129-
bCheckMaxSpeed = true;
130-
}
131-
132-
double maxSpeed = parseSpeed(maxspeedTag);
125+
double maxSpeed = parseSpeed(way.getTag("maxspeed:hgv"));
133126

134-
double fwdSpeed = parseSpeed(way.getTag("maxspeed:forward"));
135-
if (fwdSpeed >= 0 && (maxSpeed < 0 || fwdSpeed < maxSpeed))
127+
double fwdSpeed = parseSpeed(way.getTag("maxspeed:hgv:forward"));
128+
if (fwdSpeed >= 0.0D && (maxSpeed < 0.0D || fwdSpeed < maxSpeed)) {
136129
maxSpeed = fwdSpeed;
130+
}
137131

138-
double backSpeed = parseSpeed(way.getTag("maxspeed:backward"));
139-
if (backSpeed >= 0 && (maxSpeed < 0 || backSpeed < maxSpeed))
132+
double backSpeed = parseSpeed(way.getTag("maxspeed:hgv:backward"));
133+
if (backSpeed >= 0.0D && (maxSpeed < 0.0D || backSpeed < maxSpeed)) {
140134
maxSpeed = backSpeed;
135+
}
141136

142-
if (bCheckMaxSpeed) {
143-
String highway = way.getTag(KEY_HIGHWAY);
144-
if (!Helper.isEmpty(highway)) {
145-
double defaultSpeed = speedLimitHandler.getSpeed(highway);
146-
if (defaultSpeed < maxSpeed)
147-
maxSpeed = defaultSpeed;
137+
if (maxSpeed < 0.0D) {
138+
maxSpeed = super.getMaxSpeed(way);
139+
if (maxSpeed >= 0.0D) {
140+
String highway = way.getTag(KEY_HIGHWAY);
141+
if (!Helper.isEmpty(highway)) {
142+
double defaultSpeed = speedLimitHandler.getSpeed(highway);
143+
if (defaultSpeed < maxSpeed)
144+
maxSpeed = defaultSpeed;
145+
}
148146
}
149147
}
150148

0 commit comments

Comments
 (0)