diff --git a/docs/BuildConfiguration.md b/docs/BuildConfiguration.md index 05da4cf4d0a..b2ab185ef97 100644 --- a/docs/BuildConfiguration.md +++ b/docs/BuildConfiguration.md @@ -945,7 +945,7 @@ the local filesystem. **Since version:** `2.2` ∙ **Type:** `enum` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"default"` **Path:** /osm/[0] -**Enum values:** `default` | `norway` | `uk` | `finland` | `germany` | `atlanta` | `houston` | `portland` | `constant-speed-finland` +**Enum values:** `default` | `norway` | `uk` | `finland` | `germany` | `hamburg` | `atlanta` | `houston` | `portland` | `constant-speed-finland` The named set of mapping rules applied when parsing OSM tags. Overrides the value specified in `osmDefaults`. @@ -953,7 +953,7 @@ The named set of mapping rules applied when parsing OSM tags. Overrides the valu **Since version:** `2.2` ∙ **Type:** `enum` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"default"` **Path:** /osmDefaults -**Enum values:** `default` | `norway` | `uk` | `finland` | `germany` | `atlanta` | `houston` | `portland` | `constant-speed-finland` +**Enum values:** `default` | `norway` | `uk` | `finland` | `germany` | `hamburg` | `atlanta` | `houston` | `portland` | `constant-speed-finland` The named set of mapping rules applied when parsing OSM tags. diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/HamburgMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/HamburgMapper.java new file mode 100644 index 00000000000..f893fbb5519 --- /dev/null +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/HamburgMapper.java @@ -0,0 +1,23 @@ +package org.opentripplanner.openstreetmap.tagmapping; + +import org.opentripplanner.openstreetmap.model.OSMWithTags; + +/** + * Modified mapper to allow through traffic for combination access=customers and customers=HVV. + * + * @see GermanyMapper + * @see OsmTagMapper + * @see DefaultMapper + * + * @author Maintained by HBT (geofox-team@hbt.de) + */ +public class HamburgMapper extends GermanyMapper { + + @Override + public boolean isGeneralNoThroughTraffic(OSMWithTags way) { + String access = way.getTag("access"); + boolean isNoThroughTraffic = doesTagValueDisallowThroughTraffic(access); + + return isNoThroughTraffic && !way.isTag("customers", "HVV"); + } +} diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java index 6ed4a701c30..d430ad05f7d 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java @@ -10,6 +10,7 @@ public enum OsmTagMapperSource { UK, FINLAND, GERMANY, + HAMBURG, ATLANTA, HOUSTON, PORTLAND, @@ -22,6 +23,7 @@ public OsmTagMapper getInstance() { case UK -> new UKMapper(); case FINLAND -> new FinlandMapper(); case GERMANY -> new GermanyMapper(); + case HAMBURG -> new HamburgMapper(); case ATLANTA -> new AtlantaMapper(); case HOUSTON -> new HoustonMapper(); case PORTLAND -> new PortlandMapper(); diff --git a/src/test/java/org/opentripplanner/openstreetmap/tagmapping/HamburgMapperTest.java b/src/test/java/org/opentripplanner/openstreetmap/tagmapping/HamburgMapperTest.java new file mode 100644 index 00000000000..1af3eefee18 --- /dev/null +++ b/src/test/java/org/opentripplanner/openstreetmap/tagmapping/HamburgMapperTest.java @@ -0,0 +1,51 @@ +package org.opentripplanner.openstreetmap.tagmapping; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.opentripplanner.openstreetmap.model.OSMWithTags; + +/** + * @author Maintained by HBT (geofox-team@hbt.de) + */ +public class HamburgMapperTest { + + private HamburgMapper mapper; + + @BeforeEach + void createMapper() { + mapper = new HamburgMapper(); + } + + @Test + public void shouldAllowThroughTraffic_WhenAccessCustomers_AndCustomersHVV() { + OSMWithTags way = new OSMWithTags(); + way.addTag("access", "customers"); + way.addTag("customers", "HVV"); + + boolean generalNoThroughTraffic = mapper.isGeneralNoThroughTraffic(way); + + assertFalse( + generalNoThroughTraffic, + "access=customers and customers=hvv should allow through-traffic" + ); + } + + @ParameterizedTest + @ValueSource(strings = { "no", "destination", "private", "customers", "delivery" }) + public void shouldDisallowThroughTraffic_WhenNoCustomersHVV(String access) { + OSMWithTags way = new OSMWithTags(); + way.addTag("access", access); + + boolean generalNoThroughTraffic = mapper.isGeneralNoThroughTraffic(way); + + assertTrue( + generalNoThroughTraffic, + "access={no, destination, private, customers, delivery} should be blocked in general" + ); + } +}