From c3c298e06c5bd41fa0c3c26e8e5cbde581f7adee Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 7 Jun 2024 12:20:59 +0200 Subject: [PATCH 001/132] Add test for transferSlack parsing --- .../routerequest/RouteRequestConfigTest.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/test/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfigTest.java b/src/test/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfigTest.java index 923a140fa38..8d45e7d0509 100644 --- a/src/test/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfigTest.java +++ b/src/test/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfigTest.java @@ -95,4 +95,23 @@ public void testAccessEgressPenalty() { streetPreferences.accessEgress().penalty().valueOf(StreetMode.CAR).toString() ); } + + @Test + public void transferSlackAsInt() { + var slack = mapSlack("99"); + assertEquals(99, slack); + } + + private static int mapSlack(String input) { + var nodeAdapter = newNodeAdapterForTest( + """ + { + "transferSlack": %s + } + """.formatted(input) + ); + + var subject = RouteRequestConfig.mapRouteRequest(nodeAdapter); + return subject.preferences().transfer().slack(); + } } From 208a6fee90d817b4905d412e47168f46dec93873 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 7 Jun 2024 12:52:05 +0200 Subject: [PATCH 002/132] Convert tranferSlack to duration or int --- docs/RouteRequest.md | 6 +++--- docs/RouterConfiguration.md | 2 +- .../resources/RequestToPreferencesMapper.java | 3 ++- .../request/RaptorRoutingRequestTransitData.java | 2 +- .../request/preference/TransferPreferences.java | 16 +++++++++------- .../config/framework/json/ParameterBuilder.java | 13 +++++++++++++ .../config/routerequest/TransferConfig.java | 2 +- src/test/java/org/opentripplanner/GtfsTest.java | 2 +- .../preference/TransferPreferencesTest.java | 3 ++- .../routing/core/RoutingPreferencesTest.java | 3 ++- .../routerequest/RouteRequestConfigTest.java | 14 +++++++++----- .../standalone/config/router-config.json | 2 +- 12 files changed, 45 insertions(+), 23 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 0fd9ec47f89..1932f8d4232 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -38,7 +38,7 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe | [searchWindow](#rd_searchWindow) | `duration` | The duration of the search-window. | *Optional* | | 2.0 | | [streetRoutingTimeout](#rd_streetRoutingTimeout) | `duration` | The maximum time a street routing request is allowed to take before returning the results. | *Optional* | `"PT5S"` | 2.2 | | [transferPenalty](#rd_transferPenalty) | `integer` | An additional penalty added to boardings after the first. | *Optional* | `0` | 2.0 | -| [transferSlack](#rd_transferSlack) | `integer` | The extra time needed to make a safe transfer in seconds. | *Optional* | `120` | 2.0 | +| [transferSlack](#rd_transferSlack) | `duration` | The extra time needed to make a safe transfer in seconds. | *Optional* | `"PT2M"` | 2.0 | | turnReluctance | `double` | Multiplicative factor on expected turning time. | *Optional* | `1.0` | 2.0 | | [unpreferredCost](#rd_unpreferredCost) | `cost-linear-function` | A cost function used to calculate penalty for an unpreferred route. | *Optional* | `"0s + 1.00 t"` | 2.2 | | waitReluctance | `double` | How much worse is waiting for a transit vehicle than being on a transit vehicle, as a multiplier. | *Optional* | `1.0` | 2.0 | @@ -351,7 +351,7 @@ significant time or walking will still be taken.

transferSlack

-**Since version:** `2.0` ∙ **Type:** `integer` ∙ **Cardinality:** `Optional` ∙ **Default value:** `120` +**Since version:** `2.0` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT2M"` **Path:** /routingDefaults The extra time needed to make a safe transfer in seconds. @@ -1181,7 +1181,7 @@ include stairs as a last result. }, "waitReluctance" : 1.0, "otherThanPreferredRoutesPenalty" : 300, - "transferSlack" : 120, + "transferSlack" : "2m", "boardSlackForMode" : { "AIRPLANE" : "35m" }, diff --git a/docs/RouterConfiguration.md b/docs/RouterConfiguration.md index 663c9dd5c8a..8ac824824d8 100644 --- a/docs/RouterConfiguration.md +++ b/docs/RouterConfiguration.md @@ -522,7 +522,7 @@ Used to group requests when monitoring OTP. }, "waitReluctance" : 1.0, "otherThanPreferredRoutesPenalty" : 300, - "transferSlack" : 120, + "transferSlack" : "2m", "boardSlackForMode" : { "AIRPLANE" : "35m" }, diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java index 6248f71e214..0850967c3a9 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java @@ -1,6 +1,7 @@ package org.opentripplanner.ext.restapi.resources; import jakarta.validation.constraints.NotNull; +import java.time.Duration; import java.util.function.Consumer; import org.opentripplanner.ext.restapi.mapping.LegacyVehicleRoutingOptimizeType; import org.opentripplanner.framework.lang.ObjectUtils; @@ -151,7 +152,7 @@ private void mapTransfer(BoardAndAlightSlack boardAndAlightSlack) { "Invalid parameters: 'minTransferTime' must be greater than or equal to board slack plus alight slack" ); } - transfer.withSlack(req.minTransferTime - boardAndAlightSlack.value); + transfer.withSlack(Duration.ofSeconds(req.minTransferTime - boardAndAlightSlack.value)); } setIfNotNull(req.nonpreferredTransferPenalty, transfer::withNonpreferredCost); diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java index 8c310206a01..19b5ccf8502 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java @@ -109,7 +109,7 @@ public RaptorRoutingRequestTransitData( this.slackProvider = new SlackProvider( - request.preferences().transfer().slack(), + (int) request.preferences().transfer().slack().toSeconds(), request.preferences().transit().boardSlack(), request.preferences().transit().alightSlack() ); diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java index 277ca4a1bc8..74c118ad9d1 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java @@ -4,10 +4,12 @@ import static org.opentripplanner.framework.lang.DoubleUtils.doubleEquals; import java.io.Serializable; +import java.time.Duration; import java.util.Objects; import java.util.function.Consumer; import org.opentripplanner.framework.model.Cost; import org.opentripplanner.framework.model.Units; +import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.algorithm.transferoptimization.api.TransferOptimizationParameters; @@ -23,7 +25,7 @@ public final class TransferPreferences implements Serializable { private static final int MAX_NUMBER_OF_TRANSFERS = 30; private final Cost cost; - private final int slack; + private final Duration slack; private final double waitReluctance; private final int maxTransfers; private final int maxAdditionalTransfers; @@ -32,7 +34,7 @@ public final class TransferPreferences implements Serializable { private TransferPreferences() { this.cost = Cost.ZERO; - this.slack = 120; + this.slack = Duration.ofMinutes(2); this.waitReluctance = 1.0; this.maxTransfers = 12; this.maxAdditionalTransfers = 5; @@ -42,7 +44,7 @@ private TransferPreferences() { private TransferPreferences(Builder builder) { this.cost = builder.cost; - this.slack = Units.duration(builder.slack); + this.slack = DurationUtils.requireNonNegative(builder.slack); this.waitReluctance = Units.reluctance(builder.waitReluctance); this.maxTransfers = Units.count(builder.maxTransfers, MAX_NUMBER_OF_TRANSFERS); this.maxAdditionalTransfers = @@ -89,7 +91,7 @@ public int cost() { *

* Unit is seconds. Default value is 2 minutes. */ - public int slack() { + public Duration slack() { return slack; } @@ -183,7 +185,7 @@ public String toString() { return ToStringBuilder .of(TransferPreferences.class) .addObj("cost", cost, DEFAULT.cost) - .addNum("slack", slack, DEFAULT.slack) + .addDuration("slack", slack, DEFAULT.slack) .addNum("waitReluctance", waitReluctance, DEFAULT.waitReluctance) .addNum("maxTransfers", maxTransfers, DEFAULT.maxTransfers) .addNum("maxAdditionalTransfers", maxAdditionalTransfers, DEFAULT.maxAdditionalTransfers) @@ -196,7 +198,7 @@ public static class Builder { private final TransferPreferences original; private Cost cost; - private int slack; + private Duration slack; private Integer maxTransfers; private Integer maxAdditionalTransfers; private double waitReluctance; @@ -223,7 +225,7 @@ public Builder withCost(int cost) { return this; } - public Builder withSlack(int slack) { + public Builder withSlack(Duration slack) { this.slack = slack; return this; } diff --git a/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java b/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java index fd8bd00010d..7da2f7f0bf7 100644 --- a/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java +++ b/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java @@ -389,6 +389,19 @@ public Duration asDuration() { return ofRequired(DURATION, node -> parseDuration(node.asText())); } + public Duration asDurationOrSeconds(Duration dflt) { + // we claim that this only accepts durations but in reality it also accepts number of seconds + // we don't want to advertise this fact though + info.withType(DURATION); + setInfoOptional(dflt.toString()); + var node = build(); + if (node.isTextual()) { + return asDuration(dflt); + } else { + return Duration.ofSeconds((long) asDouble(dflt.toSeconds())); + } + } + public List asDurations(List defaultValues) { return ofArrayAsList(DURATION, defaultValues, node -> parseDuration(node.asText())); } diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java index 365c4e89145..37a10ea61d6 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java @@ -46,7 +46,7 @@ static void mapTransferPreferences(NodeAdapter c, TransferPreferences.Builder tx `alightSlack`. """ ) - .asInt(dft.slack()) + .asDurationOrSeconds(dft.slack()) ) .withWaitReluctance( c diff --git a/src/test/java/org/opentripplanner/GtfsTest.java b/src/test/java/org/opentripplanner/GtfsTest.java index 6f14a6db662..c4a6368ca45 100644 --- a/src/test/java/org/opentripplanner/GtfsTest.java +++ b/src/test/java/org/opentripplanner/GtfsTest.java @@ -128,7 +128,7 @@ public Itinerary plan( // Init preferences routingRequest.withPreferences(preferences -> { preferences.withTransfer(tx -> { - tx.withSlack(0); + tx.withSlack(Duration.ZERO); tx.withWaitReluctance(1); tx.withCost(preferLeastTransfers ? 300 : 0); }); diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/TransferPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/TransferPreferencesTest.java index a82a6624376..c17ca018bbe 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/TransferPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/TransferPreferencesTest.java @@ -4,12 +4,13 @@ import static org.junit.jupiter.api.Assertions.assertSame; import static org.opentripplanner.routing.api.request.preference.ImmutablePreferencesAsserts.assertEqualsAndHashCode; +import java.time.Duration; import org.junit.jupiter.api.Test; class TransferPreferencesTest { private static final int COST = 200; - private static final int SLACK = 150; + private static final Duration SLACK = Duration.ofSeconds(150); private static final double WAIT_RELUCTANCE = 0.95; private static final int MAX_TRANSFERS = 17; private static final int MAX_ADDITIONAL_TRANSFERS = 7; diff --git a/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java b/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java index c3cff43b1a9..da5f8a0b25c 100644 --- a/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java @@ -3,6 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertSame; +import java.time.Duration; import org.junit.jupiter.api.Test; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; @@ -71,7 +72,7 @@ public void copyOfWithWalkChanges() { @Test public void copyOfWithTransferChanges() { var pref = new RoutingPreferences(); - var copy = pref.copyOf().withTransfer(t -> t.withSlack(2)).build(); + var copy = pref.copyOf().withTransfer(t -> t.withSlack(Duration.ofSeconds(2))).build(); assertNotSame(pref, copy); assertNotSame(pref.transfer(), copy.transfer()); diff --git a/src/test/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfigTest.java b/src/test/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfigTest.java index 8d45e7d0509..fca70eaa388 100644 --- a/src/test/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfigTest.java +++ b/src/test/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfigTest.java @@ -5,7 +5,10 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.opentripplanner.standalone.config.framework.json.JsonSupport.newNodeAdapterForTest; +import java.time.Duration; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.opentripplanner.routing.api.request.StreetMode; class RouteRequestConfigTest { @@ -96,13 +99,14 @@ public void testAccessEgressPenalty() { ); } - @Test - public void transferSlackAsInt() { - var slack = mapSlack("99"); - assertEquals(99, slack); + @ParameterizedTest + @ValueSource(strings = { "99", "\"99s\"", "\"1m39s\"", "\"PT1m39s\"" }) + public void transferSlackAsIntOrDuration(String input) { + var slack = mapSlack(input); + assertEquals(Duration.ofSeconds(99), slack); } - private static int mapSlack(String input) { + private static Duration mapSlack(String input) { var nodeAdapter = newNodeAdapterForTest( """ { diff --git a/src/test/resources/standalone/config/router-config.json b/src/test/resources/standalone/config/router-config.json index cee86fafa2e..a2a6401985f 100644 --- a/src/test/resources/standalone/config/router-config.json +++ b/src/test/resources/standalone/config/router-config.json @@ -79,7 +79,7 @@ }, "waitReluctance": 1.0, "otherThanPreferredRoutesPenalty": 300, - "transferSlack": 120, + "transferSlack": "2m", // Default slack for any mode is 0 (zero) "boardSlackForMode": { "AIRPLANE": "35m" From 5f46bea2c2f84faa420e6bcf7f7d57f1d2c44446 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 7 Jun 2024 13:14:41 +0200 Subject: [PATCH 003/132] Also set slack in APIs --- docs/examples/entur/router-config.json | 2 +- docs/examples/ibi/portland/router-config.json | 2 +- docs/examples/skanetrafiken/router-config.json | 2 +- .../apis/transmodel/mapping/PreferencesMapper.java | 2 +- .../preferences/TransferPreferencesMapper.java | 12 ++++++++---- .../transmodel/model/DefaultRouteRequestType.java | 2 +- .../apis/transmodel/model/plan/TripQuery.java | 2 +- .../transmodel/mapping/TripRequestMapperTest.java | 13 +++++++++++-- .../request/preference/TransferPreferencesTest.java | 2 +- .../skanetrafiken/speed-test-config.json | 2 +- 10 files changed, 27 insertions(+), 14 deletions(-) diff --git a/docs/examples/entur/router-config.json b/docs/examples/entur/router-config.json index 0cbded8bc85..57298b0f26c 100644 --- a/docs/examples/entur/router-config.json +++ b/docs/examples/entur/router-config.json @@ -52,7 +52,7 @@ }, "waitReluctance": 1.0, "otherThanPreferredRoutesPenalty": 300, - "transferSlack": 120, + "transferSlack": "2m", // Default slack for any mode is 0 (zero) "boardSlackForMode": { "AIRPLANE" : "2100s" diff --git a/docs/examples/ibi/portland/router-config.json b/docs/examples/ibi/portland/router-config.json index 445738762a1..0bf3547dbfd 100644 --- a/docs/examples/ibi/portland/router-config.json +++ b/docs/examples/ibi/portland/router-config.json @@ -3,7 +3,7 @@ "maxJourneyDuration": "6h", "boardSlack": "0s", "alightSlack": "0s", - "transferSlack": 180, + "transferSlack": "3m", "waitReluctance": 0.9, "walk": { "reluctance": 1.75, diff --git a/docs/examples/skanetrafiken/router-config.json b/docs/examples/skanetrafiken/router-config.json index 6d782879a52..a50df947fc9 100644 --- a/docs/examples/skanetrafiken/router-config.json +++ b/docs/examples/skanetrafiken/router-config.json @@ -3,7 +3,7 @@ "itineraryFilters": { "filterItinerariesWithSameFirstOrLastTrip": true }, - "transferSlack": 180, + "transferSlack": "3m", "waitReluctance": 0.175, "walk": { "reluctance": 5 diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/PreferencesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/PreferencesMapper.java index a86193553f2..0a49ca985b3 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/mapping/PreferencesMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/PreferencesMapper.java @@ -26,7 +26,7 @@ static void mapPreferences( preferences.withBike(bike -> mapBikePreferences(bike, callWith)); preferences.withCar(car -> mapCarPreferences(car, callWith)); preferences.withScooter(scooter -> mapScooterPreferences(scooter, callWith)); - preferences.withTransfer(transfer -> mapTransferPreferences(transfer, environment, callWith)); + preferences.withTransfer(transfer -> mapTransferPreferences(transfer, callWith)); preferences.withTransit(transit -> mapTransitPreferences(transit, environment, callWith)); preferences.withItineraryFilter(itineraryFilter -> mapItineraryFilterPreferences(itineraryFilter, environment, callWith) diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransferPreferencesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransferPreferencesMapper.java index 4bb8bbbcbec..577bf1e381d 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransferPreferencesMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransferPreferencesMapper.java @@ -1,6 +1,7 @@ package org.opentripplanner.apis.transmodel.mapping.preferences; -import graphql.schema.DataFetchingEnvironment; +import java.time.Duration; +import java.util.function.Consumer; import org.opentripplanner.apis.transmodel.support.DataFetcherDecorator; import org.opentripplanner.routing.api.request.preference.TransferPreferences; @@ -8,17 +9,20 @@ public class TransferPreferencesMapper { public static void mapTransferPreferences( TransferPreferences.Builder transfer, - DataFetchingEnvironment environment, DataFetcherDecorator callWith ) { callWith.argument("transferPenalty", transfer::withCost); // 'minimumTransferTime' is deprecated, that's why we are mapping 'slack' twice. - callWith.argument("minimumTransferTime", transfer::withSlack); - callWith.argument("transferSlack", transfer::withSlack); + callWith.argument("minimumTransferTime", setSlackFromSeconds(transfer)); + callWith.argument("transferSlack", setSlackFromSeconds(transfer)); callWith.argument("waitReluctance", transfer::withWaitReluctance); callWith.argument("maximumTransfers", transfer::withMaxTransfers); callWith.argument("maximumAdditionalTransfers", transfer::withMaxAdditionalTransfers); } + + private static Consumer setSlackFromSeconds(TransferPreferences.Builder transfer) { + return (Integer secs) -> transfer.withSlack(Duration.ofSeconds(secs)); + } } diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/DefaultRouteRequestType.java b/src/main/java/org/opentripplanner/apis/transmodel/model/DefaultRouteRequestType.java index ea1600864db..6a7a29d8d92 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/DefaultRouteRequestType.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/DefaultRouteRequestType.java @@ -296,7 +296,7 @@ private GraphQLObjectType createGraphQLType() { "A global minimum transfer time (in seconds) that specifies the minimum amount of time that must pass between exiting one transit vehicle and boarding another." ) .type(Scalars.GraphQLInt) - .dataFetcher(env -> preferences.transfer().slack()) + .dataFetcher(env -> preferences.transfer().slack().toSeconds()) .build() ) .field( diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java index 5ed3264a4fd..b67b26b90b6 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java @@ -440,7 +440,7 @@ Normally this is when the search is performed (now), plus a small grace period t "This time is in addition to time it might take to walk between stops." ) .type(Scalars.GraphQLInt) - .defaultValue(preferences.transfer().slack()) + .defaultValue(preferences.transfer().slack().toSeconds()) .build() ) .argument( diff --git a/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java b/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java index de6b48c5ef4..2b8d5c609b6 100644 --- a/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java @@ -15,12 +15,10 @@ import io.micrometer.core.instrument.Metrics; import java.time.Duration; import java.time.LocalDate; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.Optional; import java.util.function.Function; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; @@ -28,6 +26,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; import org.opentripplanner._support.time.ZoneIds; import org.opentripplanner.apis.transmodel.TransmodelRequestContext; import org.opentripplanner.ext.emissions.DefaultEmissionsService; @@ -403,6 +402,16 @@ public void testExplicitModes() { assertEquals(StreetMode.WALK, req.journey().transfer().mode()); } + @ParameterizedTest + @ValueSource(strings = {"transferSlack", "minimumTransferTime"}) + public void testTransferSlack(String name) { + Map arguments = Map.of( + name, 101 + ); + var req = TripRequestMapper.createRequest(executionContext(arguments)); + assertEquals(Duration.ofSeconds(101), req.preferences().transfer().slack()); + } + @Test public void testExplicitModesBikeAccess() { Map arguments = Map.of("modes", Map.of("accessMode", StreetMode.BIKE)); diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/TransferPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/TransferPreferencesTest.java index c17ca018bbe..f09ce529a60 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/TransferPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/TransferPreferencesTest.java @@ -83,7 +83,7 @@ void testToString() { assertEquals( "TransferPreferences{" + "cost: $200, " + - "slack: 150, " + + "slack: 2m30s, " + "waitReluctance: 0.95, " + "maxTransfers: 17, " + "maxAdditionalTransfers: 7, " + diff --git a/test/performance/skanetrafiken/speed-test-config.json b/test/performance/skanetrafiken/speed-test-config.json index 69a12755336..642252937e2 100644 --- a/test/performance/skanetrafiken/speed-test-config.json +++ b/test/performance/skanetrafiken/speed-test-config.json @@ -19,7 +19,7 @@ "speed": 1.38, "reluctance": 5 }, - "transferSlack": 180, + "transferSlack": "3m", "waitReluctance": 0.175, "maxDirectStreetDuration": "1h1m", "boardSlackForMode": { From e99b562ab065022912e69724c586d90d1741cad4 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 7 Jun 2024 13:29:21 +0200 Subject: [PATCH 004/132] Fix mapping in API layer --- .../resources/RequestToPreferencesMapper.java | 3 +-- .../apis/gtfs/mapping/RouteRequestMapper.java | 2 +- .../preferences/TransferPreferencesMapper.java | 10 ++-------- .../request/preference/TransferPreferences.java | 4 ++++ .../apis/gtfs/mapping/RouteRequestMapperTest.java | 14 ++++++++++++++ .../transmodel/mapping/TripRequestMapperTest.java | 6 ++---- 6 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java index 0850967c3a9..51b2fae86b5 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java @@ -1,7 +1,6 @@ package org.opentripplanner.ext.restapi.resources; import jakarta.validation.constraints.NotNull; -import java.time.Duration; import java.util.function.Consumer; import org.opentripplanner.ext.restapi.mapping.LegacyVehicleRoutingOptimizeType; import org.opentripplanner.framework.lang.ObjectUtils; @@ -152,7 +151,7 @@ private void mapTransfer(BoardAndAlightSlack boardAndAlightSlack) { "Invalid parameters: 'minTransferTime' must be greater than or equal to board slack plus alight slack" ); } - transfer.withSlack(Duration.ofSeconds(req.minTransferTime - boardAndAlightSlack.value)); + transfer.withSlackSec(req.minTransferTime - boardAndAlightSlack.value); } setIfNotNull(req.nonpreferredTransferPenalty, transfer::withNonpreferredCost); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java index 4cd6c04b044..be0d709b150 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java @@ -163,7 +163,7 @@ public static RouteRequest toRouteRequest( }); preferences.withTransfer(tx -> { callWith.argument("transferPenalty", tx::withCost); - callWith.argument("minTransferTime", tx::withSlack); + callWith.argument("minTransferTime", tx::withSlackSec); callWith.argument("waitReluctance", tx::withWaitReluctance); callWith.argument("maxTransfers", tx::withMaxTransfers); callWith.argument("nonpreferredTransferPenalty", tx::withNonpreferredCost); diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransferPreferencesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransferPreferencesMapper.java index 577bf1e381d..c4e6316119d 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransferPreferencesMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransferPreferencesMapper.java @@ -1,7 +1,5 @@ package org.opentripplanner.apis.transmodel.mapping.preferences; -import java.time.Duration; -import java.util.function.Consumer; import org.opentripplanner.apis.transmodel.support.DataFetcherDecorator; import org.opentripplanner.routing.api.request.preference.TransferPreferences; @@ -14,15 +12,11 @@ public static void mapTransferPreferences( callWith.argument("transferPenalty", transfer::withCost); // 'minimumTransferTime' is deprecated, that's why we are mapping 'slack' twice. - callWith.argument("minimumTransferTime", setSlackFromSeconds(transfer)); - callWith.argument("transferSlack", setSlackFromSeconds(transfer)); + callWith.argument("minimumTransferTime", transfer::withSlackSec); + callWith.argument("transferSlack", transfer::withSlackSec); callWith.argument("waitReluctance", transfer::withWaitReluctance); callWith.argument("maximumTransfers", transfer::withMaxTransfers); callWith.argument("maximumAdditionalTransfers", transfer::withMaxAdditionalTransfers); } - - private static Consumer setSlackFromSeconds(TransferPreferences.Builder transfer) { - return (Integer secs) -> transfer.withSlack(Duration.ofSeconds(secs)); - } } diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java index 74c118ad9d1..fb00f56e15b 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java @@ -225,6 +225,10 @@ public Builder withCost(int cost) { return this; } + public Builder withSlackSec(Number seconds) { + return withSlack(Duration.ofSeconds(seconds.longValue())); + } + public Builder withSlack(Duration slack) { this.slack = slack; return this; diff --git a/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java b/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java index 22a8583d705..f1e9d60d515 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java @@ -12,6 +12,7 @@ import graphql.execution.ExecutionId; import graphql.schema.DataFetchingEnvironment; import graphql.schema.DataFetchingEnvironmentImpl; +import java.time.Duration; import java.util.Arrays; import java.util.List; import java.util.Locale; @@ -29,6 +30,7 @@ import org.opentripplanner.model.plan.PlanTestConstants; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.preference.TimeSlopeSafetyTriangle; +import org.opentripplanner.routing.api.request.preference.TransferPreferences; import org.opentripplanner.routing.api.request.preference.VehicleParkingPreferences; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.graphfinder.GraphFinder; @@ -217,6 +219,18 @@ void walkReluctance() { assertNotEquals(reluctance, noParamsRequest.preferences().walk().reluctance()); } + @Test + void transferSlack() { + var seconds = 119L; + Map arguments = Map.of("minTransferTime", seconds); + + var routeRequest = RouteRequestMapper.toRouteRequest(executionContext(arguments), context); + assertEquals(Duration.ofSeconds(seconds), routeRequest.preferences().transfer().slack()); + + var noParamsReq = RouteRequestMapper.toRouteRequest(executionContext(Map.of()), context); + assertEquals(TransferPreferences.DEFAULT.slack(), noParamsReq.preferences().transfer().slack()); + } + private DataFetchingEnvironment executionContext(Map arguments) { ExecutionInput executionInput = ExecutionInput .newExecutionInput() diff --git a/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java b/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java index 2b8d5c609b6..b204c8a419e 100644 --- a/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java @@ -403,11 +403,9 @@ public void testExplicitModes() { } @ParameterizedTest - @ValueSource(strings = {"transferSlack", "minimumTransferTime"}) + @ValueSource(strings = { "transferSlack", "minimumTransferTime" }) public void testTransferSlack(String name) { - Map arguments = Map.of( - name, 101 - ); + Map arguments = Map.of(name, 101); var req = TripRequestMapper.createRequest(executionContext(arguments)); assertEquals(Duration.ofSeconds(101), req.preferences().transfer().slack()); } From 5874b945d86cce0368e35486141cfb732852c471 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 7 Jun 2024 13:35:38 +0200 Subject: [PATCH 005/132] Add minTransferTime to integration test --- .../org/opentripplanner/apis/gtfs/queries/plan-extended.graphql | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-extended.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-extended.graphql index bcd96892e84..aef115eebe8 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-extended.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-extended.graphql @@ -4,6 +4,7 @@ to: { lat: 52.5147, lon: 13.3927 } date: "2023-02-15", time: "11:37", + minTransferTime: 120 parking: { unpreferredCost: 555, preferred: [{ not: [{tags: ["a", "b", "c"]}] }], From 60f407e1ebdc7ed9f11401219650f189d4b8d064 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 7 Jun 2024 13:41:40 +0200 Subject: [PATCH 006/132] Add Javadoc --- .../standalone/config/framework/json/ParameterBuilder.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java b/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java index 7da2f7f0bf7..acfc6f31e6c 100644 --- a/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java +++ b/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java @@ -389,9 +389,12 @@ public Duration asDuration() { return ofRequired(DURATION, node -> parseDuration(node.asText())); } + /** + * Accepts both a string-formatted duration or a number of seconds as a number. + * In the documentation it will claim that it only accepts durations as the number is only for + * backwards compatibility. + */ public Duration asDurationOrSeconds(Duration dflt) { - // we claim that this only accepts durations but in reality it also accepts number of seconds - // we don't want to advertise this fact though info.withType(DURATION); setInfoOptional(dflt.toString()); var node = build(); From e5ea70dcd59a6cfc7b17ba27510d6d2389003ebe Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 7 Jun 2024 14:09:25 +0200 Subject: [PATCH 007/132] Update and clarify documentation on board, alight and transfer slack --- docs/RouteRequest.md | 37 +++++++++++++------ .../preference/TransferPreferences.java | 10 ++--- .../routerequest/RouteRequestConfig.java | 26 ++++++++----- .../config/routerequest/TransferConfig.java | 10 ++++- .../opentripplanner/apis/gtfs/schema.graphqls | 2 +- 5 files changed, 57 insertions(+), 28 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 1932f8d4232..601cc2c793e 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -15,9 +15,9 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe | Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | |--------------------------------------------------------------------------------------------------------------|:----------------------:|------------------------------------------------------------------------------------------------------------------------------------------------|:----------:|------------------|:-----:| -| [alightSlack](#rd_alightSlack) | `duration` | The minimum extra time after exiting a public transport vehicle. | *Optional* | `"PT0S"` | 2.0 | +| [alightSlack](#rd_alightSlack) | `duration` | The extra time after exiting a public transport vehicle. | *Optional* | `"PT0S"` | 2.0 | | arriveBy | `boolean` | Whether the trip should depart or arrive at the specified date and time. | *Optional* | `false` | 2.0 | -| [boardSlack](#rd_boardSlack) | `duration` | The boardSlack is the minimum extra time to board a public transport vehicle. | *Optional* | `"PT0S"` | 2.0 | +| [boardSlack](#rd_boardSlack) | `duration` | The extra time before boarding a public transport vehicle. | *Optional* | `"PT0S"` | 2.0 | | [drivingDirection](#rd_drivingDirection) | `enum` | The driving direction to use in the intersection traversal calculation | *Optional* | `"right"` | 2.2 | | elevatorBoardCost | `integer` | What is the cost of boarding a elevator? | *Optional* | `90` | 2.0 | | elevatorBoardTime | `integer` | How long does it take to get on an elevator, on average. | *Optional* | `90` | 2.0 | @@ -38,7 +38,7 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe | [searchWindow](#rd_searchWindow) | `duration` | The duration of the search-window. | *Optional* | | 2.0 | | [streetRoutingTimeout](#rd_streetRoutingTimeout) | `duration` | The maximum time a street routing request is allowed to take before returning the results. | *Optional* | `"PT5S"` | 2.2 | | [transferPenalty](#rd_transferPenalty) | `integer` | An additional penalty added to boardings after the first. | *Optional* | `0` | 2.0 | -| [transferSlack](#rd_transferSlack) | `duration` | The extra time needed to make a safe transfer in seconds. | *Optional* | `"PT2M"` | 2.0 | +| [transferSlack](#rd_transferSlack) | `duration` | The extra time needed to make a safe transfer. | *Optional* | `"PT2M"` | 2.0 | | turnReluctance | `double` | Multiplicative factor on expected turning time. | *Optional* | `1.0` | 2.0 | | [unpreferredCost](#rd_unpreferredCost) | `cost-linear-function` | A cost function used to calculate penalty for an unpreferred route. | *Optional* | `"0s + 1.00 t"` | 2.2 | | waitReluctance | `double` | How much worse is waiting for a transit vehicle than being on a transit vehicle, as a multiplier. | *Optional* | `1.0` | 2.0 | @@ -192,22 +192,31 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe **Since version:** `2.0` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT0S"` **Path:** /routingDefaults -The minimum extra time after exiting a public transport vehicle. +The extra time after exiting a public transport vehicle. The slack is added to the time when going from the transit vehicle to the stop. +This also influences the total time it takes to transfer. See `transferSlack` for more details about +how the total transfer time is calculated. +

boardSlack

**Since version:** `2.0` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT0S"` **Path:** /routingDefaults -The boardSlack is the minimum extra time to board a public transport vehicle. +The extra time before boarding a public transport vehicle. + +The slack is added to the time when going from the stop (offboard) to onboard a transit +vehicle. It is useful for suggesting passengers arrive at the stop a little earlier than they strictly +need to to allow for unexpected circumstances. -The board time is added to the time when going from the stop (offboard) to onboard a transit -vehicle. +This is similar to `transferSlack`, except that this also applies to the first +transit leg in the trip. -This is the same as the `transferSlack`, except that this also applies to to the first -transit leg in the trip. This is the default value used, if not overridden by the `boardSlackList`. +This also influences the total time it takes to transfer. See `transferSlack` for more details about +how the total transfer time is calculated. + +This is the default value used, if not overridden by the `boardSlackList`.

drivingDirection

@@ -354,13 +363,19 @@ significant time or walking will still be taken. **Since version:** `2.0` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT2M"` **Path:** /routingDefaults -The extra time needed to make a safe transfer in seconds. +The extra time needed to make a safe transfer. -An expected transfer time in seconds that specifies the amount of time that must pass +An expected transfer time that specifies the amount of time that must pass between exiting one public transport vehicle and boarding another. This time is in addition to time it might take to walk between stops plus `boardSlack` and `alightSlack`. +The total transfer time from one vehicle to another is thus calculated as follows: + +``` +totalTransferDuration = alightSlack + walkDuration + transferSlack + boardSlack +``` +

unpreferredCost

diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java index fb00f56e15b..85d1d502aac 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java @@ -80,16 +80,16 @@ public int cost() { } /** - * A global minimum transfer time (in seconds) that specifies the minimum amount of time that must + * A global minimum transfer time that specifies the minimum amount of time that must * pass between exiting one transit vehicle and boarding another. This time is in addition to time * it might take to walk between transit stops, the {@link TransitPreferences#alightSlack()}, and the {@link - * TransitPreferences#boardSlack()}. This time should also be overridden by specific transfer timing information in - * transfers.txt + * TransitPreferences#boardSlack()}. + * This time can also be overridden by specific transfer timing information in transfers.txt *

- * This only apply to transfer between two trips, it does not apply when boarding the first + * This only applies to transfer between two trips, it does not apply when boarding the first * transit. *

- * Unit is seconds. Default value is 2 minutes. + * Default value is 2 minutes. */ public Duration slack() { return slack; diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index f9ea136fbe2..fb43db833e4 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -202,9 +202,13 @@ private static void mapTransitPreferences(NodeAdapter c, TransitPreferences.Buil c .of("alightSlack") .since(V2_0) - .summary("The minimum extra time after exiting a public transport vehicle.") + .summary("The extra time after exiting a public transport vehicle.") .description( - "The slack is added to the time when going from the transit vehicle to the stop." + """ +The slack is added to the time when going from the transit vehicle to the stop. +This also influences the total time it takes to transfer. See `transferSlack` for more details about +how the total transfer time is calculated. +""" ) .asDuration(dft.alightSlack().defaultValue()) ) @@ -228,16 +232,20 @@ private static void mapTransitPreferences(NodeAdapter c, TransitPreferences.Buil c .of("boardSlack") .since(V2_0) - .summary( - "The boardSlack is the minimum extra time to board a public transport vehicle." - ) + .summary("The extra time before boarding a public transport vehicle.") .description( """ -The board time is added to the time when going from the stop (offboard) to onboard a transit -vehicle. +The slack is added to the time when going from the stop (offboard) to onboard a transit +vehicle. It is useful for suggesting passengers arrive at the stop a little earlier than they strictly +need to to allow for unexpected circumstances. + +This is similar to `transferSlack`, except that this also applies to the first +transit leg in the trip. + +This also influences the total time it takes to transfer. See `transferSlack` for more details about +how the total transfer time is calculated. -This is the same as the `transferSlack`, except that this also applies to to the first -transit leg in the trip. This is the default value used, if not overridden by the `boardSlackList`. +This is the default value used, if not overridden by the `boardSlackList`. """ ) .asDuration(dft.boardSlack().defaultValue()) diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java index 37a10ea61d6..aa68a367f72 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java @@ -37,13 +37,19 @@ static void mapTransferPreferences(NodeAdapter c, TransferPreferences.Builder tx c .of("transferSlack") .since(V2_0) - .summary("The extra time needed to make a safe transfer in seconds.") + .summary("The extra time needed to make a safe transfer.") .description( """ - An expected transfer time in seconds that specifies the amount of time that must pass + An expected transfer time that specifies the amount of time that must pass between exiting one public transport vehicle and boarding another. This time is in addition to time it might take to walk between stops plus `boardSlack` and `alightSlack`. + + The total transfer time from one vehicle to another is thus calculated as follows: + + ``` + totalTransferDuration = alightSlack + walkDuration + transferSlack + boardSlack + ``` """ ) .asDurationOrSeconds(dft.slack()) diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 393d5f014db..6828ad958fd 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -3169,7 +3169,7 @@ type QueryType { A global minimum transfer time (in seconds) that specifies the minimum amount of time that must pass between exiting one transit vehicle and boarding another. This time is in addition to time it might take to walk - between transit stops. Default value: 0 + between transit stops. Default value: 120 """ minTransferTime: Int From 535546ff26ef4ccb275273d60b9f302397df9729 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 12 Jun 2024 12:07:25 +0200 Subject: [PATCH 008/132] Update documentation --- docs/RouteRequest.md | 38 +++++++++---------- .../routerequest/RouteRequestConfig.java | 26 +++++++------ .../config/routerequest/TransferConfig.java | 12 ++---- 3 files changed, 36 insertions(+), 40 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 601cc2c793e..1ae13a97bb4 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -194,9 +194,12 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe The extra time after exiting a public transport vehicle. -The slack is added to the time when going from the transit vehicle to the stop. -This also influences the total time it takes to transfer. See `transferSlack` for more details about -how the total transfer time is calculated. +The slack is added to the time after leaving the transit vehicle. + +This also influences the time it takes to transfer. + +Since some modes, like airplanes and subways, need more time than others, this is also configurable +per mode with `boardSlackForMode`.

boardSlack

@@ -206,17 +209,16 @@ how the total transfer time is calculated. The extra time before boarding a public transport vehicle. -The slack is added to the time when going from the stop (offboard) to onboard a transit -vehicle. It is useful for suggesting passengers arrive at the stop a little earlier than they strictly -need to to allow for unexpected circumstances. - -This is similar to `transferSlack`, except that this also applies to the first -transit leg in the trip. +The extra time is added to the time when entering a public transport vehicle. This is a useful +tool for agencies wanting to add a general buffer time so that passengers are instructed to be +a earlier at their stop than is strictly necessary. This is also added when transferring from one +vehicle to another. -This also influences the total time it takes to transfer. See `transferSlack` for more details about -how the total transfer time is calculated. +It is similar to `transferSlack`, except that this also applies to the first transit leg in the +trip and `transferSlack` does not. -This is the default value used, if not overridden by the `boardSlackList`. +Some modes like, airplanes or subway, might need more of a slack than others, so this is also +configurable per mode with `boardSlackForMode`.

drivingDirection

@@ -365,16 +367,12 @@ significant time or walking will still be taken. The extra time needed to make a safe transfer. -An expected transfer time that specifies the amount of time that must pass -between exiting one public transport vehicle and boarding another. This time is in -addition to time it might take to walk between stops plus `boardSlack` and +An extra buffer time that's applied when exiting one public transport vehicle and boarding another. +This time is in addition to time it might take to walk between stops plus `boardSlack` and `alightSlack`. -The total transfer time from one vehicle to another is thus calculated as follows: - -``` -totalTransferDuration = alightSlack + walkDuration + transferSlack + boardSlack -``` +It is useful to add extra time for passengers with mobility issues, who need extra time +when moving between vehicles.

unpreferredCost

diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index fb43db833e4..117c9af60b0 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -205,9 +205,12 @@ private static void mapTransitPreferences(NodeAdapter c, TransitPreferences.Buil .summary("The extra time after exiting a public transport vehicle.") .description( """ -The slack is added to the time when going from the transit vehicle to the stop. -This also influences the total time it takes to transfer. See `transferSlack` for more details about -how the total transfer time is calculated. +The slack is added to the time after leaving the transit vehicle. + +This also influences the time it takes to transfer. + +Since some modes, like airplanes and subways, need more time than others, this is also configurable +per mode with `boardSlackForMode`. """ ) .asDuration(dft.alightSlack().defaultValue()) @@ -235,17 +238,16 @@ private static void mapTransitPreferences(NodeAdapter c, TransitPreferences.Buil .summary("The extra time before boarding a public transport vehicle.") .description( """ -The slack is added to the time when going from the stop (offboard) to onboard a transit -vehicle. It is useful for suggesting passengers arrive at the stop a little earlier than they strictly -need to to allow for unexpected circumstances. - -This is similar to `transferSlack`, except that this also applies to the first -transit leg in the trip. +The extra time is added to the time when entering a public transport vehicle. This is a useful +tool for agencies wanting to add a general buffer time so that passengers are instructed to be +a earlier at their stop than is strictly necessary. This is also added when transferring from one +vehicle to another. -This also influences the total time it takes to transfer. See `transferSlack` for more details about -how the total transfer time is calculated. +It is similar to `transferSlack`, except that this also applies to the first transit leg in the +trip and `transferSlack` does not. -This is the default value used, if not overridden by the `boardSlackList`. +Some modes like, airplanes or subway, might need more of a slack than others, so this is also +configurable per mode with `boardSlackForMode`. """ ) .asDuration(dft.boardSlack().defaultValue()) diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java index aa68a367f72..a9de698f60c 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java @@ -40,16 +40,12 @@ static void mapTransferPreferences(NodeAdapter c, TransferPreferences.Builder tx .summary("The extra time needed to make a safe transfer.") .description( """ - An expected transfer time that specifies the amount of time that must pass - between exiting one public transport vehicle and boarding another. This time is in - addition to time it might take to walk between stops plus `boardSlack` and + An extra buffer time that's applied when exiting one public transport vehicle and boarding another. + This time is in addition to time it might take to walk between stops plus `boardSlack` and `alightSlack`. - The total transfer time from one vehicle to another is thus calculated as follows: - - ``` - totalTransferDuration = alightSlack + walkDuration + transferSlack + boardSlack - ``` + It is useful to add extra time for passengers with mobility issues, who need extra time + when moving between vehicles. """ ) .asDurationOrSeconds(dft.slack()) From 0784c7ad7a87b22514416d73bc621f9e910e7f9b Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 12 Jun 2024 12:18:04 +0200 Subject: [PATCH 009/132] Fix code after rebase --- .../mapping/routerequest/TransitPreferencesMapper.java | 2 +- .../api/request/preference/TransferPreferences.java | 2 +- .../mapping/routerequest/LegacyRouteRequestMapperTest.java | 7 +++++-- .../routerequest/RouteRequestMapperTransitTest.java | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/TransitPreferencesMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/TransitPreferencesMapper.java index f542639ae36..d119c9bb8af 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/TransitPreferencesMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/routerequest/TransitPreferencesMapper.java @@ -73,7 +73,7 @@ static void setTransitPreferences( var slack = transfer.getGraphQLSlack(); if (slack != null) { transferPreferences.withSlack( - (int) DurationUtils.requireNonNegativeMedium(slack, "transfer slack").toSeconds() + DurationUtils.requireNonNegativeMedium(slack, "transfer slack") ); } var maxTransfers = transfer.getGraphQLMaximumTransfers(); diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java index 85d1d502aac..464b9872bdd 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/TransferPreferences.java @@ -158,7 +158,7 @@ public boolean equals(Object o) { TransferPreferences that = (TransferPreferences) o; return ( cost.equals(that.cost) && - slack == that.slack && + slack.equals(that.slack) && doubleEquals(that.waitReluctance, waitReluctance) && maxTransfers == that.maxTransfers && maxAdditionalTransfers == that.maxAdditionalTransfers && diff --git a/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/LegacyRouteRequestMapperTest.java b/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/LegacyRouteRequestMapperTest.java index f8d60214abe..f2992a30d92 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/LegacyRouteRequestMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/LegacyRouteRequestMapperTest.java @@ -245,10 +245,13 @@ void transferSlack() { var seconds = 119L; Map arguments = Map.of("minTransferTime", seconds); - var routeRequest = RouteRequestMapper.toRouteRequest(executionContext(arguments), context); + var routeRequest = LegacyRouteRequestMapper.toRouteRequest( + executionContext(arguments), + context + ); assertEquals(Duration.ofSeconds(seconds), routeRequest.preferences().transfer().slack()); - var noParamsReq = RouteRequestMapper.toRouteRequest(executionContext(Map.of()), context); + var noParamsReq = LegacyRouteRequestMapper.toRouteRequest(executionContext(Map.of()), context); assertEquals(TransferPreferences.DEFAULT.slack(), noParamsReq.preferences().transfer().slack()); } diff --git a/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/RouteRequestMapperTransitTest.java b/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/RouteRequestMapperTransitTest.java index 5b2149afe32..bdb2aea81c3 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/RouteRequestMapperTransitTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/mapping/routerequest/RouteRequestMapperTransitTest.java @@ -87,7 +87,7 @@ void testTransferPreferences() { var routeRequest = RouteRequestMapper.toRouteRequest(env, RouteRequestMapperTest.CONTEXT); var transferPreferences = routeRequest.preferences().transfer(); assertEquals(cost.toSeconds(), transferPreferences.cost()); - assertEquals(slack.toSeconds(), transferPreferences.slack()); + assertEquals(slack, transferPreferences.slack()); assertEquals(maximumAdditionalTransfers, transferPreferences.maxAdditionalTransfers()); assertEquals(maximumTransfers + 1, transferPreferences.maxTransfers()); } From 409041e6e0c1abe863f2dd7e7d6b348a635a003b Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 12 Jun 2024 13:27:43 +0200 Subject: [PATCH 010/132] Fix typo --- docs/RouteRequest.md | 2 +- .../standalone/config/routerequest/RouteRequestConfig.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 1ae13a97bb4..1d518fb1dcc 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -199,7 +199,7 @@ The slack is added to the time after leaving the transit vehicle. This also influences the time it takes to transfer. Since some modes, like airplanes and subways, need more time than others, this is also configurable -per mode with `boardSlackForMode`. +per mode with `alightSlackForMode`.

boardSlack

diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index 117c9af60b0..5f761d10f17 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -210,7 +210,7 @@ private static void mapTransitPreferences(NodeAdapter c, TransitPreferences.Buil This also influences the time it takes to transfer. Since some modes, like airplanes and subways, need more time than others, this is also configurable -per mode with `boardSlackForMode`. +per mode with `alightSlackForMode`. """ ) .asDuration(dft.alightSlack().defaultValue()) From 12c51f44f204db31d34a1eeb0d59204226e0fa5d Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 13 Jun 2024 17:01:57 +0300 Subject: [PATCH 011/132] Format test/documentation graphql files with prettier --- docs/apis/GraphQL-Tutorial.md | 122 ++++--- pom.xml | 1 + .../apis/gtfs/queries/alerts.graphql | 32 +- .../apis/gtfs/queries/feedinfo.graphql | 20 +- .../apis/gtfs/queries/nearest.graphql | 12 +- .../apis/gtfs/queries/patterns.graphql | 78 ++--- .../apis/gtfs/queries/plan-extended.graphql | 306 +++++++++--------- .../apis/gtfs/queries/plan-fares.graphql | 130 ++++---- .../gtfs/queries/plan-stop-positions.graphql | 83 +++-- .../apis/gtfs/queries/plan-tutorial.graphql | 104 +++--- .../apis/gtfs/queries/planConnection.graphql | 92 +----- .../apis/gtfs/queries/routes-extended.graphql | 24 +- .../apis/gtfs/queries/routes-tutorial.graphql | 20 +- .../apis/gtfs/queries/stops.graphql | 16 +- .../apis/gtfs/queries/vehicle-parking.graphql | 10 +- .../apis/gtfs/queries/walk-steps.graphql | 37 +-- 16 files changed, 503 insertions(+), 584 deletions(-) diff --git a/docs/apis/GraphQL-Tutorial.md b/docs/apis/GraphQL-Tutorial.md index e8bf41032b9..bfc87813f1d 100644 --- a/docs/apis/GraphQL-Tutorial.md +++ b/docs/apis/GraphQL-Tutorial.md @@ -32,17 +32,18 @@ GraphQL query in the left hand panel of the page: ```graphql { - routes { - longName - shortName - gtfsId - agency { - gtfsId - name - } - mode + routes { + longName + shortName + gtfsId + agency { + gtfsId + name } + mode + } } + ``` @@ -69,64 +70,59 @@ Most people want to get routing results out of OTP, so lets see the query for th ```graphql { - plan( - # these coordinates are in Portland, change this to YOUR origin - from: { lat: 45.5552, lon: -122.6534 } - # these coordinates are in Portland, change this to YOUR destination - to: { lat: 45.4908, lon: -122.5519 } - # use the correct date and time of your request - date: "2023-02-15", - time: "11:37", - # choose the transport modes you need - transportModes: [ - { - mode: WALK - }, - { - mode: TRANSIT - }, - ]) { - itineraries { - start - end - legs { - mode - from { - name - lat - lon - departure { - scheduledTime - estimated { - time - delay - } - } - } - to { - name - lat - lon - arrival { - scheduledTime - estimated { - time - delay - } - } - } - route { - gtfsId - longName - shortName - } - legGeometry { - points - } + plan( + # these coordinates are in Portland, change this to YOUR origin + from: { lat: 45.5552, lon: -122.6534 } + # these coordinates are in Portland, change this to YOUR destination + to: { lat: 45.4908, lon: -122.5519 } + # use the correct date and time of your request + date: "2023-02-15" + time: "11:37" + # choose the transport modes you need + transportModes: [{ mode: WALK }, { mode: TRANSIT }] + ) { + itineraries { + start + end + legs { + mode + from { + name + lat + lon + departure { + scheduledTime + estimated { + time + delay } + } } + to { + name + lat + lon + arrival { + scheduledTime + estimated { + time + delay + } + } + } + route { + gtfsId + longName + shortName + } + legGeometry { + points + } + } } + } } + ``` diff --git a/pom.xml b/pom.xml index 6f202b592f8..f055c2abd0e 100644 --- a/pom.xml +++ b/pom.xml @@ -429,6 +429,7 @@ src/test/java/**/*.java src/ext/java/**/*.java src/ext-test/java/**/*.java + src/test/resources/org/opentripplanner/apis/**/*.graphql diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/alerts.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/alerts.graphql index 923d9f027cb..33ff47dd33b 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/alerts.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/alerts.graphql @@ -1,18 +1,18 @@ { - alerts { - id - alertHeaderText - alertDescriptionText - alertUrl - # these translations are a bit questionable, the above fields are already translated into the - # language selected in the request - alertDescriptionTextTranslations { - language - text - } - alertHeaderTextTranslations { - text - language - } + alerts { + id + alertHeaderText + alertDescriptionText + alertUrl + # these translations are a bit questionable, the above fields are already translated into the + # language selected in the request + alertDescriptionTextTranslations { + language + text } -} \ No newline at end of file + alertHeaderTextTranslations { + text + language + } + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/feedinfo.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/feedinfo.graphql index 68516d26237..b9f47c3c68a 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/feedinfo.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/feedinfo.graphql @@ -1,12 +1,12 @@ { - feeds { - agencies { - name - url - } - publisher { - name - url - } + feeds { + agencies { + name + url } -} \ No newline at end of file + publisher { + name + url + } + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/nearest.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/nearest.graphql index 3616ec03ff8..c7f8eed4213 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/nearest.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/nearest.graphql @@ -3,15 +3,15 @@ edges { node { place { - ...on Stop { + ... on Stop { + id + gtfsId + parentStation { id - gtfsId - parentStation { - id - } } } } } } - } \ No newline at end of file + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/patterns.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/patterns.graphql index 32be856274e..090473cfc7a 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/patterns.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/patterns.graphql @@ -1,43 +1,43 @@ { - patterns { - code - headsign - trips { - gtfsId - stoptimes { - stop { - gtfsId - name - } - headsign - scheduledArrival - scheduledDeparture - stopPosition - realtimeState - pickupType - dropoffType - } - occupancy { - occupancyStatus - } + patterns { + code + headsign + trips { + gtfsId + stoptimes { + stop { + gtfsId + name } - vehiclePositions { - vehicleId - label - lat - lon - stopRelationship { - status - stop { - gtfsId - } - } - speed - heading - lastUpdated - trip { - gtfsId - } + headsign + scheduledArrival + scheduledDeparture + stopPosition + realtimeState + pickupType + dropoffType + } + occupancy { + occupancyStatus + } + } + vehiclePositions { + vehicleId + label + lat + lon + stopRelationship { + status + stop { + gtfsId } + } + speed + heading + lastUpdated + trip { + gtfsId + } } -} \ No newline at end of file + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-extended.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-extended.graphql index bcd96892e84..76bf8aa84e0 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-extended.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-extended.graphql @@ -1,161 +1,157 @@ { - plan( - from: { lat: 52.3092, lon: 13.0291 } - to: { lat: 52.5147, lon: 13.3927 } - date: "2023-02-15", - time: "11:37", - parking: { - unpreferredCost: 555, - preferred: [{ not: [{tags: ["a", "b", "c"]}] }], - filters: [{ select: [{tags:["e"]}] }] - }, - transportModes: [ - { - mode: CAR, - qualifier: HAIL + plan( + from: { lat: 52.3092, lon: 13.0291 } + to: { lat: 52.5147, lon: 13.3927 } + date: "2023-02-15" + time: "11:37" + parking: { + unpreferredCost: 555 + preferred: [{ not: [{ tags: ["a", "b", "c"] }] }] + filters: [{ select: [{ tags: ["e"] }] }] + } + transportModes: [{ mode: CAR, qualifier: HAIL }] + ) { + itineraries { + start + end + # next two are deprecated + startTime + endTime + generalizedCost + accessibilityScore + emissionsPerPerson { + co2 + } + numberOfTransfers + walkDistance + walkTime + legs { + mode + start { + scheduledTime + estimated { + time + delay + } + } + end { + scheduledTime + estimated { + time + delay + } + } + from { + name + lat + lon + arrival { + scheduledTime + estimated { + delay + time + } + } + departure { + scheduledTime + estimated { + delay + time + } + } + departureTime + arrivalTime + } + to { + name + lat + lon + arrival { + scheduledTime + estimated { + delay + time + } + } + departure { + scheduledTime + estimated { + delay + time } - ]) { - itineraries { - start - end - # next two are deprecated - startTime - endTime - generalizedCost - accessibilityScore - emissionsPerPerson { - co2 + } + departureTime + arrivalTime + } + startTime + endTime + mode + generalizedCost + headsign + trip { + tripHeadsign + } + intermediatePlaces { + arrival { + scheduledTime + estimated { + time + delay + } + } + departure { + scheduledTime + estimated { + time + delay + } + } + stop { + name + } + } + alerts { + id + alertHeaderText + alertDescriptionText + alertEffect + alertCause + alertSeverityLevel + alertUrl + effectiveStartDate + effectiveEndDate + entities { + ... on Stop { + name + gtfsId + lat + lon + } + } + } + rideHailingEstimate { + provider { + id + } + productName + minPrice { + currency { + code + digits } - numberOfTransfers - walkDistance - walkTime - legs { - mode - start { - scheduledTime - estimated { - time - delay - } - } - end { - scheduledTime - estimated { - time - delay - } - } - from { - name - lat - lon - arrival { - scheduledTime - estimated { - delay - time - } - } - departure { - scheduledTime - estimated { - delay - time - } - } - departureTime - arrivalTime - } - to { - name - lat - lon - arrival { - scheduledTime - estimated { - delay - time - } - } - departure { - scheduledTime - estimated { - delay - time - } - } - departureTime - arrivalTime - } - startTime - endTime - mode - generalizedCost - headsign - trip { - tripHeadsign - } - intermediatePlaces { - arrival { - scheduledTime - estimated { - time - delay - } - } - departure { - scheduledTime - estimated { - time - delay - } - } - stop { - name - } - } - alerts { - id - alertHeaderText - alertDescriptionText - alertEffect - alertCause - alertSeverityLevel - alertUrl - effectiveStartDate - effectiveEndDate - entities { - ... on Stop { - name - gtfsId - lat - lon - } - } - } - rideHailingEstimate { - provider { - id - } - productName - minPrice { - currency { - code - digits - } - amount - } - maxPrice { - currency { - code - digits - } - amount - } - arrival - } - accessibilityScore + amount + } + maxPrice { + currency { + code + digits } + amount + } + arrival } + accessibilityScore + } } -} \ No newline at end of file + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-fares.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-fares.graphql index 0c2ba29dce5..c5081b1c8ed 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-fares.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-fares.graphql @@ -1,71 +1,71 @@ { - plan( - from: { lat: 52.3092, lon: 13.0291 } - to: { lat: 52.5147, lon: 13.3927 } - date: "2023-02-15", - time: "11:37", - transportModes: [{ mode: TRANSIT }] - ) { - itineraries { - legs { - mode - from { - name - lat - lon - departureTime - arrivalTime - } - to { - name - lat - lon - departureTime - arrivalTime - } - startTime - endTime - mode - generalizedCost - fareProducts { - id - product { - id - name - __typename - ... on DefaultFareProduct { - price { - currency { - digits - code - } - amount - } - } - riderCategory { - id - name - } - medium { - id - name - } - } + plan( + from: { lat: 52.3092, lon: 13.0291 } + to: { lat: 52.5147, lon: 13.3927 } + date: "2023-02-15" + time: "11:37" + transportModes: [{ mode: TRANSIT }] + ) { + itineraries { + legs { + mode + from { + name + lat + lon + departureTime + arrivalTime + } + to { + name + lat + lon + departureTime + arrivalTime + } + startTime + endTime + mode + generalizedCost + fareProducts { + id + product { + id + name + __typename + ... on DefaultFareProduct { + price { + currency { + digits + code } + amount + } } - fares { - type - cents - currency - components { - currency - cents - fareId - routes { - gtfsId - } - } + riderCategory { + id + name + } + medium { + id + name } + } + } + } + fares { + type + cents + currency + components { + currency + cents + fareId + routes { + gtfsId + } } + } } -} \ No newline at end of file + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-stop-positions.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-stop-positions.graphql index 4e0e42e4b57..dd2217e4288 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-stop-positions.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-stop-positions.graphql @@ -1,48 +1,43 @@ { - plan( - fromPlace: "from", - toPlace: "to", - date: "2023-02-15", - time: "11:37" - ){ - itineraries { - startTime - endTime - generalizedCost - accessibilityScore - legs { - mode - from { - name - lat - lon - departureTime - arrivalTime - stopPosition { - __typename - ... on PositionAtStop { - position - } - } - } - to { - name - lat - lon - departureTime - arrivalTime - stopPosition { - __typename - ... on PositionAtStop { - position - } - } - } - startTime - endTime - mode - generalizedCost + plan(fromPlace: "from", toPlace: "to", date: "2023-02-15", time: "11:37") { + itineraries { + startTime + endTime + generalizedCost + accessibilityScore + legs { + mode + from { + name + lat + lon + departureTime + arrivalTime + stopPosition { + __typename + ... on PositionAtStop { + position } + } } + to { + name + lat + lon + departureTime + arrivalTime + stopPosition { + __typename + ... on PositionAtStop { + position + } + } + } + startTime + endTime + mode + generalizedCost + } } -} \ No newline at end of file + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-tutorial.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-tutorial.graphql index 39877eef0b7..dd461060029 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-tutorial.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/plan-tutorial.graphql @@ -1,59 +1,53 @@ { - plan( - # these coordinates are in Portland, change this to YOUR origin - from: { lat: 45.5552, lon: -122.6534 } - # these coordinates are in Portland, change this to YOUR destination - to: { lat: 45.4908, lon: -122.5519 } - # use the correct date and time of your request - date: "2023-02-15", - time: "11:37", - # choose the transport modes you need - transportModes: [ - { - mode: WALK - }, - { - mode: TRANSIT - }, - ]) { - itineraries { - start - end - legs { - mode - from { - name - lat - lon - departure { - scheduledTime - estimated { - time - delay - } - } - } - to { - name - lat - lon - arrival { - scheduledTime - estimated { - time - delay - } - } - } - route { - gtfsId - longName - shortName - } - legGeometry { - points - } + plan( + # these coordinates are in Portland, change this to YOUR origin + from: { lat: 45.5552, lon: -122.6534 } + # these coordinates are in Portland, change this to YOUR destination + to: { lat: 45.4908, lon: -122.5519 } + # use the correct date and time of your request + date: "2023-02-15" + time: "11:37" + # choose the transport modes you need + transportModes: [{ mode: WALK }, { mode: TRANSIT }] + ) { + itineraries { + start + end + legs { + mode + from { + name + lat + lon + departure { + scheduledTime + estimated { + time + delay } + } } + to { + name + lat + lon + arrival { + scheduledTime + estimated { + time + delay + } + } + } + route { + gtfsId + longName + shortName + } + legGeometry { + points + } + } } -} \ No newline at end of file + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/planConnection.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/planConnection.graphql index 4013479ded0..5691f130119 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/planConnection.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/planConnection.graphql @@ -1,26 +1,14 @@ { planConnection( - dateTime: { - earliestDeparture: "2023-06-13T14:30+03:00" - } + dateTime: { earliestDeparture: "2023-06-13T14:30+03:00" } searchWindow: "PT2H30M" first: 5 origin: { - location: { - coordinate: { - latitude: 45.5552 - longitude: -122.6534 - } - } + location: { coordinate: { latitude: 45.5552, longitude: -122.6534 } } label: "Home" } destination: { - location: { - coordinate: { - latitude: 45.4908 - longitude: -122.5519 - } - } + location: { coordinate: { latitude: 45.4908, longitude: -122.5519 } } label: "Work" } modes: { @@ -31,25 +19,11 @@ access: [BICYCLE_RENTAL, WALK] transfer: [WALK] egress: [BICYCLE_RENTAL, WALK] - transit: [ - { - mode: TRAM - cost: { - reluctance: 1.3 - } - }, - { - mode: BUS - } - ] + transit: [{ mode: TRAM, cost: { reluctance: 1.3 } }, { mode: BUS }] } } preferences: { - accessibility: { - wheelchair: { - enabled: true - } - } + accessibility: { wheelchair: { enabled: true } } street: { car: { reluctance: 6.5 @@ -59,70 +33,36 @@ } parking: { unpreferredCost: 200 - preferred: [{ - select: [{ - tags: ["best-park"] - }] - }] - filters: [{ - not: [{ - tags: ["worst-park"] - }] - }] + preferred: [{ select: [{ tags: ["best-park"] }] }] + filters: [{ not: [{ tags: ["worst-park"] }] }] } } bicycle: { reluctance: 3.0 speed: 7.4 - optimization: { - type: SAFEST_STREETS - } + optimization: { type: SAFEST_STREETS } boardCost: 200 walk: { speed: 1.3 - cost: { - mountDismountCost: 100 - reluctance: 3.5 - } + cost: { mountDismountCost: 100, reluctance: 3.5 } mountDismountTime: "PT5S" } rental: { - destinationBicyclePolicy: { - allowKeeping: true - keepingCost: 300 - } + destinationBicyclePolicy: { allowKeeping: true, keepingCost: 300 } allowedNetworks: ["foo", "bar"] bannedNetworks: ["foobar"] } parking: { unpreferredCost: 200 - preferred: [{ - select: [{ - tags: ["best-park"] - }] - }] - filters: [{ - not: [{ - tags: ["worst-park"] - }] - }] + preferred: [{ select: [{ tags: ["best-park"] }] }] + filters: [{ not: [{ tags: ["worst-park"] }] }] } } - walk: { - speed: 2.4 - reluctance: 1.5 - safetyFactor: 0.5 - boardCost: 200 - } + walk: { speed: 2.4, reluctance: 1.5, safetyFactor: 0.5, boardCost: 200 } } transit: { - board: { - waitReluctance: 3.2 - slack: "PT1M30S" - } - alight: { - slack: "PT0S" - } + board: { waitReluctance: 3.2, slack: "PT1M30S" } + alight: { slack: "PT0S" } transfer: { cost: 200 slack: "PT2M" @@ -160,4 +100,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/routes-extended.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/routes-extended.graphql index 50d89980442..90972cfa8cd 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/routes-extended.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/routes-extended.graphql @@ -1,14 +1,14 @@ { - routes { - longName - shortName - gtfsId - agency { - gtfsId - name - } - mode - sortOrder - bikesAllowed + routes { + longName + shortName + gtfsId + agency { + gtfsId + name } -} \ No newline at end of file + mode + sortOrder + bikesAllowed + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/routes-tutorial.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/routes-tutorial.graphql index 66d7f370c3f..6e948d2d5f8 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/routes-tutorial.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/routes-tutorial.graphql @@ -1,12 +1,12 @@ { - routes { - longName - shortName - gtfsId - agency { - gtfsId - name - } - mode + routes { + longName + shortName + gtfsId + agency { + gtfsId + name } -} \ No newline at end of file + mode + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/stops.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/stops.graphql index f5de224ebfd..5f3df71f8e7 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/stops.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/stops.graphql @@ -1,9 +1,9 @@ { - stops { - gtfsId - lat - lon - name - vehicleMode - } -} \ No newline at end of file + stops { + gtfsId + lat + lon + name + vehicleMode + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-parking.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-parking.graphql index 4eda1fae456..324d7aff5d6 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-parking.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-parking.graphql @@ -1,6 +1,6 @@ { - vehicleParkings { - name - vehicleParkingId - } -} \ No newline at end of file + vehicleParkings { + name + vehicleParkingId + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/walk-steps.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/walk-steps.graphql index d7d8f116745..c88958840d4 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/walk-steps.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/walk-steps.graphql @@ -1,23 +1,20 @@ { - plan( - fromPlace: "from", - toPlace: "to", - date: "2023-02-15", - time: "11:37", - transportModes: [ - { - mode: WALK - } - ]) { - itineraries { - legs { - steps { - streetName - area - relativeDirection - absoluteDirection - } - } + plan( + fromPlace: "from" + toPlace: "to" + date: "2023-02-15" + time: "11:37" + transportModes: [{ mode: WALK }] + ) { + itineraries { + legs { + steps { + streetName + area + relativeDirection + absoluteDirection } + } } -} \ No newline at end of file + } +} From 9004bad9a94fb119e3039b19c009f60c39353553 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 13 Jun 2024 16:13:37 +0200 Subject: [PATCH 012/132] Fix small grammaer and punctuation errors --- docs/RouteRequest.md | 4 ++-- .../standalone/config/routerequest/RouteRequestConfig.java | 2 +- .../standalone/config/routerequest/TransferConfig.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 1d518fb1dcc..76ec510a5c7 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -217,7 +217,7 @@ vehicle to another. It is similar to `transferSlack`, except that this also applies to the first transit leg in the trip and `transferSlack` does not. -Some modes like, airplanes or subway, might need more of a slack than others, so this is also +Some modes, like airplanes or subway, might need more of a slack than others, so this is also configurable per mode with `boardSlackForMode`. @@ -368,7 +368,7 @@ significant time or walking will still be taken. The extra time needed to make a safe transfer. An extra buffer time that's applied when exiting one public transport vehicle and boarding another. -This time is in addition to time it might take to walk between stops plus `boardSlack` and +This time is in addition to how long it might take to walk between stops plus `boardSlack` and `alightSlack`. It is useful to add extra time for passengers with mobility issues, who need extra time diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index 5f761d10f17..4c6913908f6 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -246,7 +246,7 @@ private static void mapTransitPreferences(NodeAdapter c, TransitPreferences.Buil It is similar to `transferSlack`, except that this also applies to the first transit leg in the trip and `transferSlack` does not. -Some modes like, airplanes or subway, might need more of a slack than others, so this is also +Some modes, like airplanes or subway, might need more of a slack than others, so this is also configurable per mode with `boardSlackForMode`. """ ) diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java index a9de698f60c..bbf2087c59e 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java @@ -40,8 +40,8 @@ static void mapTransferPreferences(NodeAdapter c, TransferPreferences.Builder tx .summary("The extra time needed to make a safe transfer.") .description( """ - An extra buffer time that's applied when exiting one public transport vehicle and boarding another. - This time is in addition to time it might take to walk between stops plus `boardSlack` and + An extra buffer time that's applied when exiting one public transport vehicle and boarding another. + This time is in addition to how long it might take to walk between stops plus `boardSlack` and `alightSlack`. It is useful to add extra time for passengers with mobility issues, who need extra time From 1eb31bd666d019ebef0350a75db211647b484a6e Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 13 Jun 2024 17:15:50 +0300 Subject: [PATCH 013/132] Update .git-blame-ignore-revs --- .git-blame-ignore-revs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index acc28473a8c..86a1a8e7653 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -4,3 +4,6 @@ # project-wide reformatting with prettier 9c9dd613489a348d2381acdcbeab8f86589154d7 +# graphql test and documentation reformatting with prettier +12c51f44f204db31d34a1eeb0d59204226e0fa5d + From 29a57d851dd8a3c7a3f7ddb94f0e98be02a388ce Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 13 Jun 2024 17:35:38 +0300 Subject: [PATCH 014/132] Remove extra quote --- .../resources/org/opentripplanner/apis/gtfs/schema.graphqls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 79a794b3607..b63465704a7 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -5508,7 +5508,7 @@ input BicycleWalkPreferencesInput { """ cost: BicycleWalkPreferencesCostInput - """" + """ How long it takes to hop on or off a bicycle when switching to walking the bicycle or when getting on the bicycle again. However, this is not applied when getting on a rented bicycle for the first time or off the bicycle when returning the bicycle. From 782ae9760ba0a87c84d36326c49cd7f12654505b Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 13 Jun 2024 18:02:34 +0300 Subject: [PATCH 015/132] Add native graphql schema directives to the schema file This is in preparation for reformatting the schema file as the graphql library adds these --- .../opentripplanner/apis/gtfs/schema.graphqls | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index b63465704a7..d799853893e 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -8,11 +8,35 @@ This is only worth it when the execution is long running, i.e. more than ~50 mil """ directive @async on FIELD_DEFINITION +"Marks the field, argument, input field or enum value as deprecated" +directive @deprecated( + "The reason for the deprecation" + reason: String = "No longer supported" + ) on FIELD_DEFINITION | ARGUMENT_DEFINITION | ENUM_VALUE | INPUT_FIELD_DEFINITION + +"Directs the executor to include this field or fragment only when the `if` argument is true" +directive @include( + "Included when true." + if: Boolean! + ) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT + """ Exactly one of the fields on an input object must be set and non-null while all others are omitted. """ directive @oneOf on INPUT_OBJECT +"Directs the executor to skip this field or fragment when the `if` argument is true." +directive @skip( + "Skipped when true." + if: Boolean! + ) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT + +"Exposes a URL that specifies the behaviour of this scalar." +directive @specifiedBy( + "The URL that specifies the behaviour of this scalar." + url: String! + ) on SCALAR + schema { query: QueryType } From 5436566f9859bc49a54be04c5c91628c745adb2f Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 13 Jun 2024 18:15:31 +0300 Subject: [PATCH 016/132] Add test for formatting GTFS GraphQL schema --- .../apis/gtfs/GraphQLFormattingTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/test/java/org/opentripplanner/apis/gtfs/GraphQLFormattingTest.java diff --git a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLFormattingTest.java b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLFormattingTest.java new file mode 100644 index 00000000000..7c05fc8e361 --- /dev/null +++ b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLFormattingTest.java @@ -0,0 +1,24 @@ +package org.opentripplanner.apis.gtfs; + +import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; +import static org.opentripplanner.framework.io.FileUtils.readFile; +import static org.opentripplanner.framework.io.FileUtils.writeFile; + +import graphql.schema.idl.SchemaPrinter; +import java.io.File; +import org.junit.jupiter.api.Test; + +public class GraphQLFormattingTest { + + public static final File SCHEMA_FILE = new File( + "src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls" + ); + + @Test + public void format() { + String original = readFile(SCHEMA_FILE); + var schema = GtfsGraphQLIndex.buildSchema(); + writeFile(SCHEMA_FILE, new SchemaPrinter().print(schema)); + assertFileEquals(original, SCHEMA_FILE); + } +} From 14051fab312a67cae9a460aaf0bbc77223bec624 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 13 Jun 2024 18:26:32 +0300 Subject: [PATCH 017/132] Reformat GTFS GraphQL schema file with graphql-java --- .../opentripplanner/apis/gtfs/schema.graphqls | 9069 +++++++---------- 1 file changed, 3865 insertions(+), 5204 deletions(-) diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index d799853893e..eb3c631ec3c 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -1,3 +1,7 @@ +schema { + query: QueryType +} + """ Use an asynchronous data fetcher on a separate thread for this field. @@ -20,9 +24,7 @@ directive @include( if: Boolean! ) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT -""" -Exactly one of the fields on an input object must be set and non-null while all others are omitted. -""" +"Exactly one of the fields on an input object must be set and non-null while all others are omitted." directive @oneOf on INPUT_OBJECT "Directs the executor to skip this field or fragment when the `if` argument is true." @@ -37,4606 +39,2880 @@ directive @specifiedBy( url: String! ) on SCALAR -schema { - query: QueryType +"A fare product (a ticket) to be bought by a passenger" +interface FareProduct { + "Identifier for the fare product." + id: String! + """ + The 'medium' that this product applies to, for example "Oyster Card" or "Berlin Ticket App". + + This communicates to riders that a specific way of buying or keeping this product is required. + """ + medium: FareMedium + "Human readable name of the product, for example example \"Day pass\" or \"Single ticket\"." + name: String! + "The category of riders this product applies to, for example students or pensioners." + riderCategory: RiderCategory } -""" -Plan accessibilty preferences. This can be expanded to contain preferences for various accessibility use cases -in the future. Currently only generic wheelchair preferences are available. -""" -input AccessibilityPreferencesInput { - """ - Wheelchair related preferences. Note, currently this is the only accessibility mode that is available. - """ - wheelchair: WheelchairPreferencesInput +"An object with an ID" +interface Node { + "The ID of an object" + id: ID! } -"""A public transport agency""" -type Agency implements Node { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! - - """Agency feed and id""" - gtfsId: String! - - """Name of the agency""" - name: String! - - """URL to the home page of the agency""" - url: String! - - """ID of the time zone which this agency operates on""" - timezone: String! - - lang: String - - """Phone number which customers can use to contact this agency""" - phone: String +"Interface for places, e.g. stops, stations, parking areas.." +interface PlaceInterface { + id: ID! + "Latitude of the place (WGS 84)" + lat: Float + "Longitude of the place (WGS 84)" + lon: Float +} - """URL to a web page which has information of fares used by this agency""" - fareUrl: String +"Entity related to an alert" +union AlertEntity = Agency | Pattern | Route | RouteType | Stop | StopOnRoute | StopOnTrip | Trip | Unknown - """List of routes operated by this agency""" - routes: [Route] +union StopPosition = PositionAtStop | PositionBetweenStops - """ - By default, list of alerts which have an effect on all operations of the agency (e.g. a strike). - It's also possible to return other relevant alerts through defining types. - """ - alerts( - """ - Returns alerts for these types that are relevant for the agency. - By default only returns alerts that have an effect on all operations of the agency (e.g. a strike). - """ - types: [AgencyAlertType] - ): [Alert] +"A public transport agency" +type Agency implements Node { + """ + By default, list of alerts which have an effect on all operations of the agency (e.g. a strike). + It's also possible to return other relevant alerts through defining types. + """ + alerts( + """ + Returns alerts for these types that are relevant for the agency. + By default only returns alerts that have an effect on all operations of the agency (e.g. a strike). + """ + types: [AgencyAlertType] + ): [Alert] + "URL to a web page which has information of fares used by this agency" + fareUrl: String + "Agency feed and id" + gtfsId: String! + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + lang: String + "Name of the agency" + name: String! + "Phone number which customers can use to contact this agency" + phone: String + "List of routes operated by this agency" + routes: [Route] + "ID of the time zone which this agency operates on" + timezone: String! + "URL to the home page of the agency" + url: String! +} + +"Alert of a current or upcoming disruption in public transportation" +type Alert implements Node { + """ + Agency affected by the disruption. Note that this value is present only if the + disruption has an effect on all operations of the agency (e.g. in case of a strike). + """ + agency: Agency @deprecated(reason : "Alert can have multiple affected entities now instead of there being duplicate alerts\nfor different entities. This will return only one of the affected agencies.\nUse entities instead.") + "Alert cause" + alertCause: AlertCauseType + "Long description of the alert" + alertDescriptionText: String! + "Long descriptions of the alert in all different available languages" + alertDescriptionTextTranslations: [TranslatedString!]! + "Alert effect" + alertEffect: AlertEffectType + "hashcode from the original GTFS-RT alert" + alertHash: Int + "Header of the alert, if available" + alertHeaderText: String + "Header of the alert in all different available languages" + alertHeaderTextTranslations: [TranslatedString!]! + "Alert severity level" + alertSeverityLevel: AlertSeverityLevelType + "Url with more information" + alertUrl: String + "Url with more information in all different available languages" + alertUrlTranslations: [TranslatedString!]! + "Time when this alert is not in effect anymore. Format: Unix timestamp in seconds" + effectiveEndDate: Long + "Time when this alert comes into effect. Format: Unix timestamp in seconds" + effectiveStartDate: Long + "Entities affected by the disruption." + entities: [AlertEntity] + "The feed in which this alert was published" + feed: String + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + "Patterns affected by the disruption" + patterns: [Pattern] @deprecated(reason : "This will always return an empty list. Use entities instead.") + "Route affected by the disruption" + route: Route @deprecated(reason : "Alert can have multiple affected entities now instead of there being duplicate alerts\nfor different entities. This will return only one of the affected routes.\nUse entities instead.") + "Stop affected by the disruption" + stop: Stop @deprecated(reason : "Alert can have multiple affected entities now instead of there being duplicate alerts\nfor different entities. This will return only one of the affected stops.\nUse entities instead.") + "Trip affected by the disruption" + trip: Trip @deprecated(reason : "Alert can have multiple affected entities now instead of there being duplicate alerts\nfor different entities. This will return only one of the affected trips.\nUse entities instead.") +} + +"Bike park represents a location where bicycles can be parked." +type BikePark implements Node & PlaceInterface { + "ID of the bike park" + bikeParkId: String + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + "Latitude of the bike park (WGS 84)" + lat: Float + "Longitude of the bike park (WGS 84)" + lon: Float + "Name of the bike park" + name( + "Returns name with the specified language, if found, otherwise returns with some default language." + language: String + ): String! + "Opening hours of the parking facility" + openingHours: OpeningHours + "If true, value of `spacesAvailable` is updated from a real-time source." + realtime: Boolean + "Number of spaces available for bikes" + spacesAvailable: Int + "Source specific tags of the bike park, which describe the available features." + tags: [String] +} + +"Bike rental station represents a location where users can rent bicycles for a fee." +type BikeRentalStation implements Node & PlaceInterface { + """ + If true, bikes can be returned to this station if the station has spaces available + or allows overloading. + """ + allowDropoff: Boolean + "If true, bikes can be currently returned to this station." + allowDropoffNow: Boolean + "If true, bikes can be returned even if spacesAvailable is zero or bikes > capacity." + allowOverloading: Boolean + "If true, bikes can be picked up from this station if the station has bikes available." + allowPickup: Boolean + "If true, bikes can be currently picked up from this station." + allowPickupNow: Boolean + """ + Number of bikes currently available on the rental station. + See field `allowPickupNow` to know if is currently possible to pick up a bike. + """ + bikesAvailable: Int + "Nominal capacity (number of racks) of the rental station." + capacity: Int + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + "Latitude of the bike rental station (WGS 84)" + lat: Float + "Longitude of the bike rental station (WGS 84)" + lon: Float + "Name of the bike rental station" + name: String! + networks: [String] + "If true, station is on and in service." + operative: Boolean + """ + If true, values of `bikesAvailable` and `spacesAvailable` are updated from a + real-time source. If false, values of `bikesAvailable` and `spacesAvailable` + are always the total capacity divided by two. + """ + realtime: Boolean + "Platform-specific URLs to begin renting a bike from this station." + rentalUris: BikeRentalStationUris + """ + Number of free spaces currently available on the rental station. + Note that this value being 0 does not necessarily indicate that bikes cannot be returned + to this station, as for example it might be possible to leave the bike in the vicinity of + the rental station, even if the bike racks don't have any spaces available. + See field `allowDropoffNow` to know if is currently possible to return a bike. + """ + spacesAvailable: Int + "A description of the current state of this bike rental station, e.g. \"Station on\"" + state: String @deprecated(reason : "Use operative instead") + "ID of the bike rental station" + stationId: String } -"""Entities, which are relevant for an agency and can contain alerts""" -enum AgencyAlertType { - """Alerts affecting the agency.""" - AGENCY - - """Alerts affecting agency's routes""" - ROUTES +type BikeRentalStationUris { + """ + A URI that can be passed to an Android app with an {@code android.intent.action.VIEW} Android + intent to support Android Deep Links. + May be null if a rental URI does not exist. + """ + android: String + """ + A URI that can be used on iOS to launch the rental app for this station. + May be {@code null} if a rental URI does not exist. + """ + ios: String + """ + A URL that can be used by a web browser to show more information about renting a vehicle at + this station. + May be {@code null} if a rental URL does not exist. + """ + web: String +} - """ - Alerts affecting the different route types of the agency. - Alerts that affect route types on all agencies can be fetched through Feed. - """ - ROUTE_TYPES +""" +Booking information for a stop time which has special requirements to use, like calling ahead or +using an app. +""" +type BookingInfo { + "Contact information for reaching the service provider" + contactInfo: ContactInfo + "A message specific to the drop off" + dropOffMessage: String + "When is the earliest time the service can be booked." + earliestBookingTime: BookingTime + "When is the latest time the service can be booked" + latestBookingTime: BookingTime + "Maximum number of seconds before travel to make the request" + maximumBookingNoticeSeconds: Long + "A general message for those booking the service" + message: String + "Minimum number of seconds before travel to make the request" + minimumBookingNoticeSeconds: Long + "A message specific to the pick up" + pickupMessage: String } -"""Alert of a current or upcoming disruption in public transportation""" -type Alert implements Node { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! +"Temporal restriction for a booking" +type BookingTime { + "How many days before the booking" + daysPrior: Int + "Time of the booking" + time: String +} - """hashcode from the original GTFS-RT alert""" - alertHash: Int +"Car park represents a location where cars can be parked." +type CarPark implements Node & PlaceInterface { + "ID of the car park" + carParkId: String + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + "Latitude of the car park (WGS 84)" + lat: Float + "Longitude of the car park (WGS 84)" + lon: Float + "Number of parking spaces at the car park" + maxCapacity: Int + "Name of the car park" + name( + "Returns name with the specified language, if found, otherwise returns with some default language." + language: String + ): String! + """ + Opening hours for the selected dates using the local time of the park. + Each date can have multiple time spans. + """ + openingHours: OpeningHours + "If true, value of `spacesAvailable` is updated from a real-time source." + realtime: Boolean + "Number of currently available parking spaces at the car park" + spacesAvailable: Int + "Source specific tags of the car park, which describe the available features." + tags: [String] +} - """The feed in which this alert was published""" - feed: String +"Cluster is a list of stops grouped by name and proximity" +type Cluster implements Node { + "ID of the cluster" + gtfsId: String! + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + "Latitude of the center of this cluster (i.e. average latitude of stops in this cluster)" + lat: Float! + "Longitude of the center of this cluster (i.e. average longitude of stops in this cluster)" + lon: Float! + "Name of the cluster" + name: String! + "List of stops in the cluster" + stops: [Stop!] +} - """ - Agency affected by the disruption. Note that this value is present only if the - disruption has an effect on all operations of the agency (e.g. in case of a strike). - """ - agency: Agency @deprecated(reason: - """ - Alert can have multiple affected entities now instead of there being duplicate alerts - for different entities. This will return only one of the affected agencies. - Use entities instead. - """ - ) +"Contact information for booking an on-demand or flexible service." +type ContactInfo { + "Additional notes about the contacting the service provider" + additionalDetails: String + "URL to the booking systems of the service" + bookingUrl: String + "Name of the person to contact" + contactPerson: String + "Email to contact" + eMail: String + "Fax number to contact" + faxNumber: String + "URL containing general information about the service" + infoUrl: String + "Phone number to contact" + phoneNumber: String +} - """Route affected by the disruption""" - route: Route @deprecated(reason: - """ - Alert can have multiple affected entities now instead of there being duplicate alerts - for different entities. This will return only one of the affected routes. - Use entities instead. - """ - ) +""" +Coordinate (often referred as coordinates), which is used to specify a location using in the +WGS84 coordinate system. +""" +type Coordinate { + "Latitude as a WGS84 format number." + latitude: CoordinateValue! + "Longitude as a WGS84 format number." + longitude: CoordinateValue! +} - """Trip affected by the disruption""" - trip: Trip @deprecated(reason: - """ - Alert can have multiple affected entities now instead of there being duplicate alerts - for different entities. This will return only one of the affected trips. - Use entities instead. - """ - ) +type Coordinates { + "Latitude (WGS 84)" + lat: Float + "Longitude (WGS 84)" + lon: Float +} - """Stop affected by the disruption""" - stop: Stop @deprecated(reason: - """ - Alert can have multiple affected entities now instead of there being duplicate alerts - for different entities. This will return only one of the affected stops. - Use entities instead. - """ - ) +"A currency" +type Currency { + "ISO-4217 currency code, for example `USD` or `EUR`." + code: String! + """ + Fractional digits of this currency. A value of 2 would express that in this currency + 100 minor units make up one major unit. + + Expressed more concretely: 100 Euro-cents make up one Euro. + + Note: Some currencies don't even have any fractional digits, for example the Japanese Yen. + + See also https://en.wikipedia.org/wiki/ISO_4217#Minor_unit_fractions + """ + digits: Int! +} - """Patterns affected by the disruption""" - patterns: [Pattern] @deprecated(reason: "This will always return an empty list. Use entities instead.") +""" +The standard case of a fare product: it only has a single price to be paid by the passenger +and no discounts are applied. +""" +type DefaultFareProduct implements FareProduct { + "Identifier for the fare product." + id: String! + """ + The 'medium' that this product applies to, for example "Oyster Card" or "Berlin Ticket App". + + This communicates to riders that a specific way of buying or keeping this product is required. + """ + medium: FareMedium + "Human readable name of the product, for example example \"Day pass\" or \"Single ticket\"." + name: String! + "The price of the product" + price: Money! + "The category of riders this product applies to, for example students or pensioners." + riderCategory: RiderCategory +} - """Header of the alert, if available""" - alertHeaderText: String +""" +Departure row is a combination of a pattern and a stop of that pattern. - """Header of the alert in all different available languages""" - alertHeaderTextTranslations: [TranslatedString!]! +They are de-duplicated so for each pattern there will only be a single departure row. - """Long description of the alert""" - alertDescriptionText: String! +This is useful if you want to show a list of stop/pattern combinations but want each pattern to be +listed only once. +""" +type DepartureRow implements Node & PlaceInterface { + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + "Latitude of the stop (WGS 84)" + lat: Float + "Longitude of the stop (WGS 84)" + lon: Float + "Pattern of the departure row" + pattern: Pattern + "Stop from which the departures leave" + stop: Stop + "Departures of the pattern from the stop" + stoptimes( + "Maximum number of departures to return." + numberOfDepartures: Int = 1, + "If false, returns also canceled trips" + omitCanceled: Boolean = true, + "If true, only those departures which allow boarding are returned" + omitNonPickups: Boolean = false, + "Return rows departing after this time. Time format: Unix timestamp in seconds. Default: current time." + startTime: Long = 0, + "How many seconds ahead to search for departures. Default is one day." + timeRange: Int = 86400 + ): [Stoptime] +} - """Long descriptions of the alert in all different available languages""" - alertDescriptionTextTranslations: [TranslatedString!]! +type Emissions { + "CO₂ emissions in grams." + co2: Grams +} - """Url with more information""" - alertUrl: String +"A 'medium' that a fare product applies to, for example cash, 'Oyster Card' or 'DB Navigator App'." +type FareMedium { + "ID of the medium" + id: String! + "Human readable name of the medium." + name: String +} - """Url with more information in all different available languages""" - alertUrlTranslations: [TranslatedString!]! +"A container for both a fare product (a ticket) and its relationship to the itinerary." +type FareProductUse { + """ + Represents the use of a single instance of a fare product throughout the itinerary. It can + be used to cross-reference and de-duplicate fare products that are applicable for more than one + leg. + + If you want to uniquely identify the fare product itself (not its use) use the product's `id`. + + ### Example: Day pass + + The day pass is valid for both legs in the itinerary. It is listed as the applicable `product` for each leg, + and the same FareProductUse id is shown, indicating that only one pass was used/bought. + + **Illustration** + ```yaml + itinerary: + leg1: + fareProducts: + id: "AAA" // id of a FareProductUse instance + product: + id: "day-pass" // product id + name: "Day Pass" + leg2: + fareProducts: + id: "AAA" // identical to leg1. the passenger needs to buy ONE pass, not two. + product: + id: "day-pass" // product id + name: "Day Pass" + ``` + + **It is the responsibility of the API consumers to display the day pass as a product for the + entire itinerary rather than two day passes!** + + ### Example: Several single tickets + + If you have two legs and need to buy two single tickets they will appear in each leg with the + same `FareProduct.id` but different `FareProductUse.id`. + + **Illustration** + ```yaml + itinerary: + leg1: + fareProducts: + id: "AAA" // id of a FareProductUse instance, not product id + product: + id: "single-ticket" // product id + name: "Single Ticket" + leg2: + fareProducts: + id: "BBB" // different to leg1. the passenger needs to buy two single tickets. + product: + id: "single-ticket" // product id + name: "Single Ticket" + ``` + """ + id: String! + "The purchasable fare product" + product: FareProduct +} - """Alert effect""" - alertEffect: AlertEffectType +"A feed provides routing data (stops, routes, timetables, etc.) from one or more public transport agencies." +type Feed { + "List of agencies which provide data to this feed" + agencies: [Agency] + "Alerts relevant for the feed." + alerts( + "Returns alerts for these types that are relevant for the feed." + types: [FeedAlertType!] + ): [Alert] + "ID of the feed" + feedId: String! + "The publisher of the input transit data." + publisher: FeedPublisher +} + +"Feed publisher information" +type FeedPublisher { + "Name of feed publisher" + name: String! + "Web address of feed publisher" + url: String! +} - """Alert cause""" - alertCause: AlertCauseType +type Geometry { + "The number of points in the string" + length: Int + """ + List of coordinates of in a Google encoded polyline format (see + https://developers.google.com/maps/documentation/utilities/polylinealgorithm) + """ + points: Polyline +} - """Alert severity level""" - alertSeverityLevel: AlertSeverityLevelType +type Itinerary { + """ + Computes a numeric accessibility score between 0 and 1. + + The closer the value is to 1 the better the wheelchair-accessibility of this itinerary is. + A value of `null` means that no score has been computed, not that the leg is inaccessible. + + More information is available in the [feature documentation](https://docs.opentripplanner.org/en/dev-2.x/sandbox/IBIAccessibilityScore/). + """ + accessibilityScore: Float + "Does the itinerary end without dropping off the rented bicycle:" + arrivedAtDestinationWithRentedBicycle: Boolean + "Duration of the trip on this itinerary, in seconds." + duration: Long + "How much elevation is gained, in total, over the course of the itinerary, in meters." + elevationGained: Float + "How much elevation is lost, in total, over the course of the itinerary, in meters." + elevationLost: Float + "Emissions of this itinerary per traveler." + emissionsPerPerson: Emissions + "Time when the user leaves arrives at the destination." + end: OffsetDateTime + "Time when the user arrives to the destination. Format: Unix timestamp in milliseconds." + endTime: Long @deprecated(reason : "Use `end` instead which includes timezone information.") + """ + Information about the fares for this itinerary. This is primarily a GTFS Fares V1 interface + and always returns an empty list. Use the leg's `fareProducts` instead. + """ + fares: [fare] @deprecated(reason : "Use the leg's `fareProducts`.") + "Generalized cost of the itinerary. Used for debugging search results." + generalizedCost: Int + """ + A list of Legs. Each Leg is either a walking (cycling, car) portion of the + itinerary, or a transit leg on a particular vehicle. So a itinerary where the + user walks to the Q train, transfers to the 6, then walks to their + destination, has four legs. + """ + legs: [Leg]! + """ + How many transfers are part of this itinerary. + + Notes: + - Interlined/stay-seated transfers do not increase this count. + - Transferring from a flex to a fixed schedule trip and vice versa increases this count. + """ + numberOfTransfers: Int! + "Time when the user leaves from the origin." + start: OffsetDateTime + "Time when the user leaves from the origin. Format: Unix timestamp in milliseconds." + startTime: Long @deprecated(reason : "Use `start` instead which includes timezone information.") + """ + A list of system notices. Contains debug information for itineraries. + One use-case is to run a routing search with 'debugItineraryFilter: true'. + This will then tag itineraries instead of removing them from the result. + This make it possible to inspect the itinerary-filter-chain. + """ + systemNotices: [SystemNotice]! + "How much time is spent waiting for transit to arrive, in seconds." + waitingTime: Long + "How far the user has to walk, in meters." + walkDistance: Float + "How much time is spent walking, in seconds." + walkTime: Long +} +type Leg { + """ + Computes a numeric accessibility score between 0 and 1. + + The closer the value is to 1 the better the wheelchair-accessibility of this leg is. + A value of `null` means that no score has been computed, not that the itinerary is inaccessible. + + More information is available in the [feature documentation](https://docs.opentripplanner.org/en/dev-2.x/sandbox/IBIAccessibilityScore/). + """ + accessibilityScore: Float + "For transit legs, the transit agency that operates the service used for this leg. For non-transit legs, `null`." + agency: Agency + "Applicable alerts for this leg." + alerts: [Alert] + """ + For transit leg, the offset from the scheduled arrival time of the alighting + stop in this leg, i.e. scheduled time of arrival at alighting stop = `endTime + - arrivalDelay` + """ + arrivalDelay: Int @deprecated(reason : "Use `start.estimated.delay` instead.") + """ + For transit leg, the offset from the scheduled departure time of the boarding + stop in this leg, i.e. scheduled time of departure at boarding stop = + `startTime - departureDelay` + """ + departureDelay: Int @deprecated(reason : "Use `end.estimated.delay` instead.") + "The distance traveled while traversing the leg in meters." + distance: Float + """ + Special booking information for the drop off stop of this leg if, for example, it needs + to be booked in advance. This could be due to a flexible or on-demand service. + """ + dropOffBookingInfo: BookingInfo + "This is used to indicate if alighting from this leg is possible only with special arrangements." + dropoffType: PickupDropoffType + "The leg's duration in seconds" + duration: Float + "The time when the leg ends including real-time information, if available." + end: LegTime! + "The date and time when this leg ends. Format: Unix timestamp in milliseconds." + endTime: Long @deprecated(reason : "Use `end.estimated.time` instead which contains timezone information.") + """ + Fare products are purchasable tickets which may have an optional fare container or rider + category that limits who can buy them or how. + + Please read the documentation of `id` very carefully to learn how a single fare product + that applies to multiple legs can appear several times. + """ + fareProducts: [FareProductUse] + "The Place where the leg originates." + from: Place! + "Generalized cost of the leg. Used for debugging search results." + generalizedCost: Int + """ + For transit legs, the headsign that the vehicle shows at the stop where the passenger boards. + For non-transit legs, null. + """ + headsign: String + """ + Interlines with previous leg. + This is true when the same vehicle is used for the previous leg as for this leg + and passenger can stay inside the vehicle. + """ + interlineWithPreviousLeg: Boolean + "Whether the destination of this leg (field `to`) is one of the intermediate places specified in the query." + intermediatePlace: Boolean + """ + For transit legs, intermediate stops between the Place where the leg + originates and the Place where the leg ends. For non-transit legs, null. + Returns Place type, which has fields for e.g. departure and arrival times + """ + intermediatePlaces: [Place] + """ + For transit legs, intermediate stops between the Place where the leg + originates and the Place where the leg ends. For non-transit legs, null. + """ + intermediateStops: [Stop] + "The leg's geometry." + legGeometry: Geometry + "The mode (e.g. `WALK`) used when traversing this leg." + mode: Mode + "Future legs with same origin and destination stops or stations" + nextLegs( """ - Time when this alert comes into effect. Format: Unix timestamp in seconds + Transportation modes for which all stops in the parent station are used as possible destination stops + for the next legs. For modes not listed, only the exact destination stop of the leg is considered. """ - effectiveStartDate: Long - + destinationModesWithParentStation: [TransitMode!], """ - Time when this alert is not in effect anymore. Format: Unix timestamp in seconds + The number of alternative legs searched. If fewer than the requested number are found, + then only the found legs are returned. """ - effectiveEndDate: Long - + numberOfLegs: Int!, """ - Entities affected by the disruption. + Transportation modes for which all stops in the parent station are used as possible origin stops + for the next legs. For modes not listed, only the exact origin stop of the leg is considered. """ - entities: [AlertEntity] + originModesWithParentStation: [TransitMode!] + ): [Leg!] + """ + Special booking information for the pick up stop of this leg if, for example, it needs + to be booked in advance. This could be due to a flexible or on-demand service. + """ + pickupBookingInfo: BookingInfo + "This is used to indicate if boarding this leg is possible only with special arrangements." + pickupType: PickupDropoffType + "Whether there is real-time data about this Leg" + realTime: Boolean + "State of real-time data" + realtimeState: RealtimeState + "Whether this leg is traversed with a rented bike." + rentedBike: Boolean + "Estimate of a hailed ride like Uber." + rideHailingEstimate: RideHailingEstimate + "For transit legs, the route that is used for traversing the leg. For non-transit legs, `null`." + route: Route + "For transit legs, the service date of the trip. Format: YYYYMMDD. For non-transit legs, null." + serviceDate: String + "The time when the leg starts including real-time information, if available." + start: LegTime! + "The date and time when this leg begins. Format: Unix timestamp in milliseconds." + startTime: Long @deprecated(reason : "Use `start.estimated.time` instead which contains timezone information.") + "The turn-by-turn navigation instructions." + steps: [step] + "The Place where the leg ends." + to: Place! + "Whether this leg is a transit leg or not." + transitLeg: Boolean + "For transit legs, the trip that is used for traversing the leg. For non-transit legs, `null`." + trip: Trip + "Whether this leg is walking with a bike." + walkingBike: Boolean } -"""Cause of a alert""" -enum AlertCauseType { - """UNKNOWN_CAUSE""" - UNKNOWN_CAUSE - - """OTHER_CAUSE""" - OTHER_CAUSE - - """TECHNICAL_PROBLEM""" - TECHNICAL_PROBLEM - - """STRIKE""" - STRIKE - - """DEMONSTRATION""" - DEMONSTRATION - - """ACCIDENT""" - ACCIDENT - - """HOLIDAY""" - HOLIDAY - - """WEATHER""" - WEATHER - - """MAINTENANCE""" - MAINTENANCE - - """CONSTRUCTION""" - CONSTRUCTION - - """POLICE_ACTIVITY""" - POLICE_ACTIVITY - - """MEDICAL_EMERGENCY""" - MEDICAL_EMERGENCY +""" +Time information about a passenger at a certain place. May contain real-time information if +available. +""" +type LegTime { + "The estimated time of the event. If no real-time information is available, this is null." + estimated: RealTimeEstimate + "The scheduled time of the event." + scheduledTime: OffsetDateTime! } -"""Effect of a alert""" -enum AlertEffectType { - """NO_SERVICE""" - NO_SERVICE - - """REDUCED_SERVICE""" - REDUCED_SERVICE - - """SIGNIFICANT_DELAYS""" - SIGNIFICANT_DELAYS - - """DETOUR""" - DETOUR - - """ADDITIONAL_SERVICE""" - ADDITIONAL_SERVICE - - """MODIFIED_SERVICE""" - MODIFIED_SERVICE - - """OTHER_EFFECT""" - OTHER_EFFECT - - """UNKNOWN_EFFECT""" - UNKNOWN_EFFECT - - """STOP_MOVED""" - STOP_MOVED - - """NO_EFFECT""" - NO_EFFECT - - """ACCESSIBILITY_ISSUE""" - ACCESSIBILITY_ISSUE +"A span of time." +type LocalTimeSpan { + "The start of the time timespan as seconds from midnight." + from: Int! + "The end of the timespan as seconds from midnight." + to: Int! } +"A date using the local timezone of the object that can contain timespans." +type LocalTimeSpanDate { + "The date of this time span. Format: YYYYMMDD." + date: String! + "The time spans for this date." + timeSpans: [LocalTimeSpan] +} -"""Entity related to an alert""" -union AlertEntity = Agency | Route | Pattern | Stop | Trip | StopOnRoute | StopOnTrip | RouteType | Unknown - -"""Severity level of a alert""" -enum AlertSeverityLevelType { - """Severity of alert is unknown""" - UNKNOWN_SEVERITY - - """ - Info alerts are used for informational messages that should not have a - significant effect on user's journey, for example: A single entrance to a - metro station is temporarily closed. - """ - INFO +"An amount of money." +type Money { + """ + Money in the major currency unit, so 3.10 USD is represented as `3.1`. + + If you want to get the minor currency unit (310 cents), multiply with + (10 to the power of `currency.digits`). + """ + amount: Float! + "The currency of this money amount." + currency: Currency! +} - """ - Warning alerts are used when a single stop or route has a disruption that can - affect user's journey, for example: All trams on a specific route are running - with irregular schedules. - """ - WARNING +type OpeningHours { + """ + Opening hours for the selected dates using the local time of the parking lot. + Each date can have multiple time spans. + + Note: This is not implemented yet and always returns null. + """ + dates( + "Opening hours will be returned for these dates. Dates should use YYYYMMDD format." + dates: [String!]! + ): [LocalTimeSpanDate] + """ + OSM-formatted string of the opening hours. + + The spec is available at: https://wiki.openstreetmap.org/wiki/Key:opening_hours + """ + osm: String +} - """ - Severe alerts are used when a significant part of public transport services is - affected, for example: All train services are cancelled due to technical problems. - """ - SEVERE +"Information about pagination in a connection." +type PageInfo { + "When paginating forwards, the cursor to continue." + endCursor: String + "When paginating forwards, are there more items?" + hasNextPage: Boolean! + "When paginating backwards, are there more items?" + hasPreviousPage: Boolean! + "When paginating backwards, the cursor to continue." + startCursor: String } """ -Preferences related to alighting from a transit vehicle. +Pattern is sequence of stops used by trips on a specific direction and variant +of a route. Most routes have only two patterns: one for outbound trips and one +for inbound trips """ -input AlightPreferencesInput { +type Pattern implements Node { + """ + By default, list of alerts which have directly an effect on just the pattern. + It's also possible to return other relevant alerts through defining types. + """ + alerts( """ - What is the required minimum time alighting from a vehicle. + Returns alerts for these types that are relevant for the pattern. + By default, list of alerts which have directly an effect on just the pattern. """ - slack: Duration + types: [PatternAlertType] + ): [Alert] + "ID of the pattern" + code: String! + """ + Direction of the pattern. Possible values: 0, 1 or -1. + -1 indicates that the direction is irrelevant, i.e. the route has patterns only in one direction. + """ + directionId: Int + geometry: [Coordinates] + "Vehicle headsign used by trips of this pattern" + headsign: String + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + """ + Name of the pattern. Pattern name can be just the name of the route or it can + include details of destination and origin stops. + """ + name: String + "Original Trip pattern for changed patterns" + originalTripPattern: Pattern + "Coordinates of the route of this pattern in Google polyline encoded format" + patternGeometry: Geometry + "The route this pattern runs on" + route: Route! + """ + Hash code of the pattern. This value is stable and not dependent on the + pattern id, i.e. this value can be used to check whether two patterns are the + same, even if their ids have changed. + """ + semanticHash: String + "List of stops served by this pattern" + stops: [Stop!] + "Trips which run on this pattern" + trips: [Trip!] + "Trips which run on this pattern on the specified date" + tripsForDate( + "Return trips of the pattern active on this date. Format: YYYYMMDD" + serviceDate: String + ): [Trip!] + "Real-time updated position of vehicles that are serving this pattern." + vehiclePositions: [VehiclePosition!] } -type OpeningHours { - """ - OSM-formatted string of the opening hours. - - The spec is available at: https://wiki.openstreetmap.org/wiki/Key:opening_hours - """ - osm: String - - """ - Opening hours for the selected dates using the local time of the parking lot. - Each date can have multiple time spans. - - Note: This is not implemented yet and always returns null. - """ - dates( - """ - Opening hours will be returned for these dates. Dates should use YYYYMMDD format. - """ - dates: [String!]! - ): [LocalTimeSpanDate] +type Place { + """ + The time the rider will arrive at the place. This also includes real-time information + if available. + """ + arrival: LegTime + "The time the rider will arrive at the place. Format: Unix timestamp in milliseconds." + arrivalTime: Long! @deprecated(reason : "Use `arrival` which includes timezone information.") + "The bike parking related to the place" + bikePark: BikePark @deprecated(reason : "bikePark is deprecated. Use vehicleParking instead.") + "The bike rental station related to the place" + bikeRentalStation: BikeRentalStation @deprecated(reason : "Use vehicleRentalStation and rentalVehicle instead") + "The car parking related to the place" + carPark: CarPark @deprecated(reason : "carPark is deprecated. Use vehicleParking instead.") + """ + The time the rider will depart the place. This also includes real-time information + if available. + """ + departure: LegTime + "The time the rider will depart the place. Format: Unix timestamp in milliseconds." + departureTime: Long! @deprecated(reason : "Use `departure` which includes timezone information.") + "Latitude of the place (WGS 84)" + lat: Float! + "Longitude of the place (WGS 84)" + lon: Float! + "For transit stops, the name of the stop. For points of interest, the name of the POI." + name: String + "The rental vehicle related to the place" + rentalVehicle: RentalVehicle + "The stop related to the place." + stop: Stop + """ + The position of the stop in the pattern. This is not required to start from 0 or be consecutive - any + increasing integer sequence along the stops is valid. + + The purpose of this field is to identify the stop within the pattern so it can be cross-referenced + between it and the itinerary. It is safe to cross-reference when done quickly, i.e. within seconds. + However, it should be noted that real-time updates can change the values, so don't store it for + longer amounts of time. + + Depending on the source data, this might not be the GTFS `stop_sequence` but another value, perhaps + even generated. + + The position can be either at a certain stop or in between two for trips where this is possible. + """ + stopPosition: StopPosition + "The vehicle parking related to the place" + vehicleParking: VehicleParking + "The vehicle rental station related to the place" + vehicleRentalStation: VehicleRentalStation + """ + Type of vertex. (Normal, Bike sharing station, Bike P+R, Transit stop) Mostly + used for better localization of bike sharing and P+R station names + """ + vertexType: VertexType } -"""Bike park represents a location where bicycles can be parked.""" -type BikePark implements Node & PlaceInterface { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! - - """ID of the bike park""" - bikeParkId: String - - """Name of the bike park""" - name( - """Returns name with the specified language, if found, otherwise returns with some default language.""" - language: String): String! - - """Number of spaces available for bikes""" - spacesAvailable: Int - - """ - If true, value of `spacesAvailable` is updated from a real-time source. - """ - realtime: Boolean - - """Longitude of the bike park (WGS 84)""" - lon: Float - - """Latitude of the bike park (WGS 84)""" - lat: Float - - """ - Source specific tags of the bike park, which describe the available features. - """ - tags: [String] - - """Opening hours of the parking facility""" - openingHours: OpeningHours +type Plan { + "The time and date of travel. Format: Unix timestamp in milliseconds." + date: Long + "Information about the timings for the plan generation" + debugOutput: debugOutput! + "The origin" + from: Place! + "A list of possible itineraries" + itineraries: [Itinerary]! + "A list of possible error messages as enum" + messageEnums: [String]! + "A list of possible error messages in cleartext" + messageStrings: [String]! + """ + This is the suggested search time for the "next page" or time window. Insert it together + with the searchWindowUsed in the request to get a new set of trips following in the + search-window AFTER the current search. No duplicate trips should be returned, unless a trip + is delayed and new real-time data is available. + """ + nextDateTime: Long @deprecated(reason : "Use nextPageCursor instead") + """ + Use the cursor to go to the next "page" of itineraries. Copy the cursor from the last response + to the pageCursor query parameter and keep the original request as is. This will enable you to + search for itineraries in the next search-window. + The cursor based paging only support stepping to the next page, as it does not support jumping. + This is only usable when public transportation mode(s) are included in the query. + """ + nextPageCursor: String + """ + This is the suggested search time for the "previous page" or time window. Insert it together + with the searchWindowUsed in the request to get a new set of trips preceding in the + search-window BEFORE the current search. No duplicate trips should be returned, unless a trip + is delayed and new real-time data is available. + """ + prevDateTime: Long @deprecated(reason : "Use previousPageCursor instead") + """ + Use the cursor to go to the previous "page" of itineraries. Copy the cursor from the last + response to the pageCursor query parameter and keep the original request otherwise as is. + This will enable you to search for itineraries in the previous search-window. + The cursor based paging only support stepping to the previous page, as it does not support + jumping. + This is only usable when public transportation mode(s) are included in the query. + """ + previousPageCursor: String + "A list of routing errors, and fields which caused them" + routingErrors: [RoutingError!]! + """ + This is the `searchWindow` used by the raptor search. It is provided here for debugging + purpousess. + + The unit is seconds. + """ + searchWindowUsed: Long + "The destination" + to: Place! } """ -Is it possible to arrive to the destination with a rented bicycle and does it -come with an extra cost. +Plan (result of an itinerary search) that follows +[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). """ -input DestinationBicyclePolicyInput { - """ - For networks that require station drop-off, should the routing engine offer results that go directly to the destination without dropping off the rental bicycle first. - """ - allowKeeping: Boolean - - """ - Cost associated with arriving to the destination with a rented bicycle. - No cost is applied if arriving to the destination after dropping off the rented - bicycle. - """ - keepingCost: Cost +type PlanConnection { + """ + Edges which contain the itineraries. Part of the + [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). + """ + edges: [PlanEdge] + """ + Contains cursors to continue the search and the information if there are more itineraries available. + Part of the [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). + """ + pageInfo: PlanPageInfo! + "Errors faced during the routing search." + routingErrors: [RoutingError!]! + "What was the starting point for the itinerary search." + searchDateTime: OffsetDateTime } """ -Is it possible to arrive to the destination with a rented scooter and does it -come with an extra cost. +Edge outputted by a plan search. Part of the +[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). """ -input DestinationScooterPolicyInput { - """ - For networks that require station drop-off, should the routing engine offer results that go directly to the destination without dropping off the rental scooter first. - """ - allowKeeping: Boolean - - """ - Cost associated with arriving to the destination with a rented scooter. - No cost is applied if arriving to the destination after dropping off the rented - scooter. - """ - keepingCost: Cost +type PlanEdge { + """ + The cursor of the edge. Part of the + [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). + """ + cursor: String! + """ + An itinerary suggestion. Part of the + [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). + """ + node: Itinerary! } -"""Vehicle parking represents a location where bicycles or cars can be parked.""" -type VehicleParking implements Node & PlaceInterface { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! - - """ID of the park""" - vehicleParkingId: String - - """Name of the park""" - name( - """Returns name with the specified language, if found, otherwise returns with some default language.""" - language: String): String! - - """ - If true, value of `spacesAvailable` is updated from a real-time source. - """ - realtime: Boolean - - """Longitude of the bike park (WGS 84)""" - lon: Float - - """Latitude of the bike park (WGS 84)""" - lat: Float +""" +Information about pagination in a connection. Part of the +[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). +""" +type PlanPageInfo { + "When paginating forwards, the cursor to continue." + endCursor: String + "When paginating forwards, are there more items?" + hasNextPage: Boolean! + "When paginating backwards, are there more items?" + hasPreviousPage: Boolean! + "The search window that was used for the search in the current page." + searchWindowUsed: Duration + "When paginating backwards, the cursor to continue." + startCursor: String +} - """ - URL which contains details of this vehicle parking. - """ - detailsUrl: String +"Stop position at a specific stop." +type PositionAtStop { + "Position of the stop in the pattern. Positions are not required to start from 0 or be consecutive." + position: Int +} - """ - URL of an image which may be displayed to the user showing the vehicle parking. - """ - imageUrl: String +"The board/alight position in between two stops of the pattern of a trip with continuous pickup/drop off." +type PositionBetweenStops { + "Position of the next stop in the pattern. Positions are not required to start from 0 or be consecutive." + nextPosition: Int + "Position of the previous stop in the pattern. Positions are not required to start from 0 or be consecutive." + previousPosition: Int +} +type QueryType { + "Get all agencies" + agencies: [Agency] + "Get a single agency based on agency ID, i.e. value of field `gtfsId` (ID format is `FeedId:StopId`)" + agency(id: String!): Agency + "Get all active alerts" + alerts( + "Only return alerts with these causes" + cause: [AlertCauseType!], + "Only return alerts with these effects" + effect: [AlertEffectType!], + "Only return alerts in these feeds" + feeds: [String!], + "Only return alerts affecting these routes" + route: [String!], + "Only return alerts with these severity levels" + severityLevel: [AlertSeverityLevelType!], + "Only return alerts affecting these stops" + stop: [String!] + ): [Alert] + "Get a single bike park based on its ID, i.e. value of field `bikeParkId`" + bikePark(id: String!): BikePark @deprecated(reason : "bikePark is deprecated. Use vehicleParking instead.") + "Get all bike parks" + bikeParks: [BikePark] @deprecated(reason : "bikeParks is deprecated. Use vehicleParkings instead.") + "Get a single bike rental station based on its ID, i.e. value of field `stationId`" + bikeRentalStation(id: String!): BikeRentalStation @deprecated(reason : "Use rentalVehicle or vehicleRentalStation instead") + "Get all bike rental stations" + bikeRentalStations( + """ + Return bike rental stations with these ids. + **Note:** if an id is invalid (or the bike rental station service is unavailable) + the returned list will contain `null` values. + """ + ids: [String] + ): [BikeRentalStation] @deprecated(reason : "Use rentalVehicles or vehicleRentalStations instead") + "Get cancelled TripTimes." + cancelledTripTimes( + "Feed feedIds (e.g. [\"HSL\"])." + feeds: [String], + """ + Only cancelled trip times that have last stop arrival time at maxArrivalTime + or before are returned. Format: seconds since midnight of maxDate. + """ + maxArrivalTime: Int, + "Only cancelled trip times scheduled to run on maxDate or before are returned. Format: \"2019-12-23\" or \"20191223\"." + maxDate: String, + """ + Only cancelled trip times that have first stop departure time at + maxDepartureTime or before are returned. Format: seconds since midnight of maxDate. + """ + maxDepartureTime: Int, + """ + Only cancelled trip times that have last stop arrival time at minArrivalTime + or after are returned. Format: seconds since midnight of minDate. + """ + minArrivalTime: Int, + "Only cancelled trip times scheduled to run on minDate or after are returned. Format: \"2019-12-23\" or \"20191223\"." + minDate: String, + """ + Only cancelled trip times that have first stop departure time at + minDepartureTime or after are returned. Format: seconds since midnight of minDate. + """ + minDepartureTime: Int, + "TripPattern codes (e.g. [\"HSL:1098:1:01\"])." + patterns: [String], + "Route gtfsIds (e.g. [\"HSL:1098\"])." + routes: [String], + "Trip gtfsIds (e.g. [\"HSL:1098_20190405_Ma_2_1455\"])." + trips: [String] + ): [Stoptime] + "Get a single car park based on its ID, i.e. value of field `carParkId`" + carPark(id: String!): CarPark @deprecated(reason : "carPark is deprecated. Use vehicleParking instead.") + "Get all car parks" + carParks( + """ + Return car parks with these ids. + **Note:** if an id is invalid (or the car park service is unavailable) the returned list will contain `null` values. + """ + ids: [String] + ): [CarPark] @deprecated(reason : "carParks is deprecated. Use vehicleParkings instead.") + "Get a single cluster based on its ID, i.e. value of field `gtfsId`" + cluster(id: String!): Cluster + "Get all clusters" + clusters: [Cluster] + "Get a single departure row based on its ID (ID format is `FeedId:StopId:PatternId`)" + departureRow(id: String!): DepartureRow + "Get all available feeds" + feeds: [Feed] + """ + Finds a trip matching the given parameters. This query type is useful if the + id of a trip is not known, but other details uniquely identifying the trip are + available from some source (e.g. MQTT vehicle positions). + """ + fuzzyTrip( + "Departure date of the trip, format: YYYY-MM-DD" + date: String!, + """ + Direction of the trip, possible values: 0, 1 or -1. + -1 indicates that the direction is irrelevant, i.e. in case the route has + trips only in one direction. See field `directionId` of Pattern. + """ + direction: Int = -1, + "id of the route" + route: String!, + "Departure time of the trip, format: seconds since midnight of the departure date" + time: Int! + ): Trip + """ + Get all places (stops, stations, etc. with coordinates) within the specified + radius from a location. The returned type is a Relay connection (see + https://facebook.github.io/relay/graphql/connections.htm). The placeAtDistance + type has two fields: place and distance. The search is done by walking so the + distance is according to the network of walkable streets and paths. + """ + nearest( + after: String, + before: String, + "Only include places that match one of the given GTFS ids." + filterByIds: InputFilters @deprecated(reason : "Not actively maintained"), + """ + Only return places that are related to one of these transport modes. This + argument can be used to return e.g. only nearest railway stations or only + nearest places related to bicycling. + """ + filterByModes: [Mode], + "Only return places that are one of these types, e.g. `STOP` or `VEHICLE_RENT`" + filterByPlaceTypes: [FilterPlaceType], + first: Int, + last: Int, + "Latitude of the location (WGS 84)" + lat: Float!, + "Longitude of the location (WGS 84)" + lon: Float!, + """ + Maximum distance (in meters) to search for from the specified location. Note + that this is walking distance along streets and paths rather than a + geographic distance. Default is 2000m + """ + maxDistance: Int = 2000, + "Maximum number of results. Search is stopped when this limit is reached. Default is 20." + maxResults: Int = 20 + ): placeAtDistanceConnection @async + "Fetches an object given its ID" + node( + "The ID of an object" + id: ID! + ): Node + """ + Get a single pattern based on its ID, i.e. value of field `code` (format is + `FeedId:RouteId:DirectionId:PatternVariantNumber`) + """ + pattern(id: String!): Pattern + "Get all patterns" + patterns: [Pattern] + "Plans an itinerary from point A to point B based on the given arguments" + plan( + "Invariant: `boardSlack + alightSlack <= transferSlack`. Default value: 0" + alightSlack: Int, + "Is bike rental allowed? Default value: false" + allowBikeRental: Boolean @deprecated(reason : "Rental is specified by modes"), """ - Source specific tags of the vehicle parking, which describe the available features. For example - park_and_ride, bike_lockers, or static_osm_data. - """ - tags: [String] - + Whether arriving at the destination with a rented (station) bicycle is allowed without + dropping it off. Default: false. """ - A short translatable note containing details of this vehicle parking. + allowKeepingRentedBicycleAtDestination: Boolean, + "Which vehicle rental networks can be used. By default, all networks are allowed." + allowedBikeRentalNetworks: [String] @deprecated(reason : "Use allowedVehicleRentalNetworks instead"), """ - note( - """Returns note with the specified language, if found, otherwise returns with some default language.""" - language: String): String - + List of ticket types that are allowed to be used in itineraries. + See `ticketTypes` query for list of possible ticket types. """ - The state of this vehicle parking. - Only ones in an OPERATIONAL state may be used for Park and Ride. + allowedTicketTypes: [String], + "Which vehicle rental networks can be used. By default, all networks are allowed." + allowedVehicleRentalNetworks: [String], """ - state: VehicleParkingState - + Whether the itinerary should depart at the specified time (false), or arrive + to the destination at the specified time (true). Default value: false. """ - Does this vehicle parking have spaces (capacity) for bicycles. + arriveBy: Boolean, + "List of routes, trips, agencies and stops which are not used in the itinerary" + banned: InputBanned, + "Which vehicle rental networks cannot be used. By default, all networks are allowed." + bannedVehicleRentalNetworks: [String], """ - bicyclePlaces: Boolean - + This argument has no use for itinerary planning and will be removed later. + When true, do not use goal direction or stop at the target, build a full SPT. Default value: false. """ - Does this vehicle parking have spaces (capacity) for either wheelchair accessible (disabled) - or normal cars. + batch: Boolean @deprecated(reason : "Removed in OTP 2"), """ - anyCarPlaces: Boolean - + Separate cost for boarding a vehicle with a bicycle, which is more difficult + than on foot. Unit: seconds. Default value: 600 """ - Does this vehicle parking have spaces (capacity) for cars excluding wheelchair accessible spaces. - Use anyCarPlaces to check if any type of car may use this vehicle parking. + bikeBoardCost: Int, """ - carPlaces: Boolean - + A multiplier for how bad biking is, compared to being in transit for equal + lengths of time. Default value: 2.0 """ - Does this vehicle parking have wheelchair accessible (disabled) car spaces (capacity). + bikeReluctance: Float, + "Max bike speed along streets, in meters per second. Default value: 5.0" + bikeSpeed: Float, + "Cost of getting on and off your own bike. Unit: seconds. Default value: 0" + bikeSwitchCost: Int, + "Time to get on and off your own bike, in seconds. Default value: 0" + bikeSwitchTime: Int, """ - wheelchairAccessibleCarPlaces: Boolean - + A multiplier for how bad walking with a bike is, compared to being in transit for equal + lengths of time. Default value: 5.0 + """ + bikeWalkingReluctance: Float, + "Invariant: `boardSlack + alightSlack <= transferSlack`. Default value: 0" + boardSlack: Int, + """ + How expensive it is to drive a car when car&parking, increase this value to + make car driving legs shorter. Default value: 1. + """ + carParkCarLegWeight: Float @deprecated(reason : "Use `carReluctance` instead."), + """ + A multiplier for how bad driving is, compared to being in transit for equal + lengths of time. Default value: 3.0 + """ + carReluctance: Float, + """ + No effect on itinerary planning, adjust argument `time` instead to get later departures. + ~~The maximum wait time in seconds the user is willing to delay trip start. Only effective in Analyst.~~ + """ + claimInitialWait: Long @deprecated(reason : "Removed in OTP 2"), + "Whether legs should be compacted by performing a reversed search." + compactLegsByReversedSearch: Boolean @deprecated(reason : "Removed in OTP 2"), + "Date of departure or arrival in format YYYY-MM-DD. Default value: current date" + date: String, + "Debug the itinerary-filter-chain. The filters will mark itineraries as deleted, but does NOT delete them when this is enabled." + debugItineraryFilter: Boolean, + """ + If true, the remaining weight heuristic is disabled. Currently only + implemented for the long distance path service. + """ + disableRemainingWeightHeuristic: Boolean @deprecated(reason : "Removed in OTP 2.2"), + """ + The geographical location where the itinerary begins. + Use either this argument or `fromPlace`, but not both. + """ + from: InputCoordinates, + """ + The place where the itinerary begins in format `name::place`, where `place` + is either a lat,lng pair (e.g. `Pasila::60.199041,24.932928`) or a stop id + (e.g. `Pasila::HSL:1000202`). + Use either this argument or `from`, but not both. + """ + fromPlace: String, + "Tuning parameter for the search algorithm, mainly useful for testing." + heuristicStepsPerMainStep: Int @deprecated(reason : "Removed. Doesn't do anything."), + "When true, real-time updates are ignored during this search. Default value: false" + ignoreRealtimeUpdates: Boolean, + "An ordered list of intermediate locations to be visited." + intermediatePlaces: [InputCoordinates] @deprecated(reason : "Not implemented in OTP2."), + """ + How easily bad itineraries are filtered from results. Value 0 (default) + disables filtering. Itineraries are filtered if they are worse than another + one in some respect (e.g. more walking) by more than the percentage of + filtering level, which is calculated by dividing 100% by the value of this + argument (e.g. `itineraryFiltering = 0.5` → 200% worse itineraries are filtered). """ - The capacity (maximum available spaces) of this vehicle parking. + itineraryFiltering: Float @deprecated(reason : "Removed. Doesn't do anything."), """ - capacity: VehicleParkingSpaces - + The cost of arriving at the destination with the rented vehicle, to discourage doing so. + Default value: 0. """ - The currently available spaces at this vehicle parking. + keepingRentedBicycleAtDestinationCost: Int, """ - availability: VehicleParkingSpaces - - """Opening hours of the parking facility""" - openingHours: OpeningHours -} - -""" -The state of the vehicle parking. TEMPORARILY_CLOSED and CLOSED are distinct states so that they -may be represented differently to the user. -""" -enum VehicleParkingState { - """May be used for park and ride.""" - OPERATIONAL - """Can't be used for park and ride.""" - TEMPORARILY_CLOSED - """Can't be used for park and ride.""" - CLOSED -} - -""" -The number of spaces by type. null if unknown. -""" -type VehicleParkingSpaces { + Two-letter language code (ISO 639-1) used for returned text. + **Note:** only part of the data has translations available and names of + stops and POIs are returned in their default language. Due to missing + translations, it is sometimes possible that returned text uses a mixture of two languages. """ - The number of bicycle spaces. + locale: String, + """ + The maximum time (in seconds) of pre-transit travel when using + drive-to-transit (park and ride or kiss and ride). Default value: 1800. + """ + maxPreTransitTime: Int @deprecated(reason : "Use walkReluctance or future reluctance parameters for other modes"), + "Maximum number of transfers. Default value: 2" + maxTransfers: Int, """ - bicycleSpaces: Int - + The maximum distance (in meters) the user is willing to walk per walking + section. If the only transport mode allowed is `WALK`, then the value of + this argument is ignored. + Default: 2000m + Maximum value: 15000m + **Note:** If this argument has a relatively small value and only some + transport modes are allowed (e.g. `WALK` and `RAIL`), it is possible to get + an itinerary which has (useless) back and forth public transport legs to + avoid walking too long distances. + """ + maxWalkDistance: Float @deprecated(reason : "Does nothing. Use walkReluctance instead."), + """ + A global minimum transfer time (in seconds) that specifies the minimum + amount of time that must pass between exiting one transit vehicle and + boarding another. This time is in addition to time it might take to walk + between transit stops. Default value: 0 + """ + minTransferTime: Int, + "The weight multipliers for transit modes. WALK, BICYCLE, CAR, TRANSIT and LEG_SWITCH are not included." + modeWeight: InputModeWeight, + "Penalty (in seconds) for using a non-preferred transfer. Default value: 180" + nonpreferredTransferPenalty: Int, + "The maximum number of itineraries to return. Default value: 3." + numItineraries: Int = 3, + "When false, return itineraries using canceled trips. Default value: true." + omitCanceled: Boolean = true, + "Optimization type for bicycling legs, e.g. prefer flat terrain. Default value: `QUICK`" + optimize: OptimizeType, + """ + Use the cursor to get the next or previous page of results. + The next page is a set of itineraries departing after the last itinerary in this result and + the previous page is a set of itineraries departing before the first itinerary. + This is only usable when public transportation mode(s) are included in the query. """ - The number of car spaces. + pageCursor: String, + "Preferences for vehicle parking" + parking: VehicleParkingInput, + "List of routes and agencies which are given higher preference when planning the itinerary" + preferred: InputPreferred, + """ + **Consider this argument experimental** – setting this argument to true + causes timeouts and unoptimal routes in many cases. + When true, reverse optimize (find alternative transportation mode, which + still arrives to the destination in time) this search on the fly after + processing each transit leg, rather than reverse-optimizing the entire path + when it's done. Default value: false. + """ + reverseOptimizeOnTheFly: Boolean @deprecated(reason : "Removed in OTP 2"), + """ + The length of the search-window in seconds. This parameter is optional. + + The search-window is defined as the duration between the earliest-departure-time(EDT) and + the latest-departure-time(LDT). OTP will search for all itineraries in this departure + window. If `arriveBy=true` the `dateTime` parameter is the latest-arrival-time, so OTP + will dynamically calculate the EDT. Using a short search-window is faster than using a + longer one, but the search duration is not linear. Using a \"too\" short search-window will + waste resources server side, while using a search-window that is too long will be slow. + + OTP will dynamically calculate a reasonable value for the search-window, if not provided. + The calculation comes with a significant overhead (10-20% extra). Whether you should use the + dynamic calculated value or pass in a value depends on your use-case. For a travel planner + in a small geographical area, with a dense network of public transportation, a fixed value + between 40 minutes and 2 hours makes sense. To find the appropriate search-window, adjust + it so that the number of itineraries on average is around the wanted `numItineraries`. Make + sure you set the `numItineraries` to a high number while testing. For a country wide area + like Norway, using the dynamic search-window is the best. + + When paginating, the search-window is calculated using the `numItineraries` in the original + search together with statistics from the search for the last page. This behaviour is + configured server side, and can not be overridden from the client. + + The search-window used is returned to the response metadata as `searchWindowUsed` for + debugging purposes. + """ + searchWindow: Long, + """ + This argument has currently no effect on which itineraries are returned. Use + argument `fromPlace` to start the itinerary from a specific stop. + ~~A transit stop that this trip must start from~~ + """ + startTransitStopId: String, + """ + ID of the trip on which the itinerary starts. This argument can be used to + plan itineraries when the user is already onboard a vehicle. When using this + argument, arguments `time` and `from` should be set based on a vehicle + position message received from the vehicle running the specified trip. + **Note:** this argument only takes into account the route and estimated + travel time of the trip (and therefore arguments `time` and `from` must be + used correctly to get meaningful itineraries). + """ + startTransitTripId: String @deprecated(reason : "Not implemented in OTP2"), + "Time of departure or arrival in format hh:mm:ss. Default value: current time" + time: String, + """ + The geographical location where the itinerary ends. + Use either this argument or `toPlace`, but not both. + """ + to: InputCoordinates, + """ + The place where the itinerary ends in format `name::place`, where `place` is + either a lat,lng pair (e.g. `Pasila::60.199041,24.932928`) or a stop id + (e.g. `Pasila::HSL:1000202`). + Use either this argument or `to`, but not both. + """ + toPlace: String, + """ + An extra penalty added on transfers (i.e. all boardings except the first + one). Not to be confused with bikeBoardCost and walkBoardCost, which are the + cost of boarding a vehicle with and without a bicycle. The boardCosts are + used to model the 'usual' perceived cost of using a transit vehicle, and the + transferPenalty is used when a user requests even less transfers. In the + latter case, we don't actually optimize for fewest transfers, as this can + lead to absurd results. Consider a trip in New York from Grand Army Plaza + (the one in Brooklyn) to Kalustyan's at noon. The true lowest transfers + route is to wait until midnight, when the 4 train runs local the whole way. + The actual fastest route is the 2/3 to the 4/5 at Nevins to the 6 at Union + Square, which takes half an hour. Even someone optimizing for fewest + transfers doesn't want to wait until midnight. Maybe they would be willing + to walk to 7th Ave and take the Q to Union Square, then transfer to the 6. + If this takes less than optimize_transfer_penalty seconds, then that's what + we'll return. Default value: 0. + """ + transferPenalty: Int, + "List of transportation modes that the user is willing to use. Default: `[\"WALK\",\"TRANSIT\"]`" + transportModes: [TransportMode], + "Triangle optimization parameters for bicycling legs. Only effective when `optimize` is set to **TRIANGLE**." + triangle: InputTriangle, + "List of routes and agencies which are given lower preference when planning the itinerary" + unpreferred: InputUnpreferred, + """ + How much less bad is waiting at the beginning of the trip (replaces + `waitReluctance` on the first boarding). Default value: 0.4 + """ + waitAtBeginningFactor: Float @deprecated(reason : "Removed in OTP 2, the timetable-view replaces this functionality."), + """ + How much worse is waiting for a transit vehicle than being on a transit + vehicle, as a multiplier. The default value treats wait and on-vehicle time + as the same. It may be tempting to set this higher than walkReluctance (as + studies often find this kind of preferences among riders) but the planner + will take this literally and walk down a transit line to avoid waiting at a + stop. This used to be set less than 1 (0.95) which would make waiting + offboard preferable to waiting onboard in an interlined trip. That is also + undesirable. If we only tried the shortest possible transfer at each stop to + neighboring stop patterns, this problem could disappear. Default value: 1.0. + """ + waitReluctance: Float, + "This prevents unnecessary transfers by adding a cost for boarding a vehicle. Unit: seconds. Default value: 600" + walkBoardCost: Int, + "How much more reluctant is the user to walk on streets with car traffic allowed. Default value: 1.0" + walkOnStreetReluctance: Float @deprecated(reason : "Use `walkSafetyFactor` instead"), + """ + A multiplier for how bad walking is, compared to being in transit for equal + lengths of time. Empirically, values between 2 and 4 seem to correspond + well to the concept of not wanting to walk too much without asking for + totally ridiculous itineraries, but this observation should in no way be + taken as scientific or definitive. Your mileage may vary. See + https://github.com/opentripplanner/OpenTripPlanner/issues/4090 for impact on + performance with high values. Default value: 2.0 + """ + walkReluctance: Float, """ - carSpaces: Int - + Factor for how much the walk safety is considered in routing. Value should be between 0 and 1. + If the value is set to be 0, safety is ignored. Default is 1.0. + """ + walkSafetyFactor: Float, + "Max walk speed along streets, in meters per second. Default value: 1.33" + walkSpeed: Float, + "Whether the itinerary must be wheelchair accessible. Default value: false" + wheelchair: Boolean + ): Plan @async + """ + Plan (itinerary) search that follows + [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). + """ + planConnection( """ - The number of wheelchair accessible (disabled) car spaces. + Takes in cursor from a previous search. Used for forward pagination. If earliest departure time + is used in the original query, the new search then returns itineraries that depart after + the start time of the last itinerary that was returned, or at the same time if there are multiple + itinerary options that can depart at that moment in time. + If latest arrival time is defined, the new search returns itineraries that arrive before the end + time of the last itinerary that was returned in the previous search, or at the same time if there + are multiple itinerary options that can arrive at that moment in time. This parameter is part of + the [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm) and + should be used together with the `first` parameter. """ - wheelchairAccessibleCarSpaces: Int -} - -""" -Bike rental station represents a location where users can rent bicycles for a fee. -""" -type BikeRentalStation implements Node & PlaceInterface { + after: String, """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. + Takes in cursor from a previous search. Used for backwards pagination. If earliest departure time + is used in the original query, the new search then returns itineraries that depart before that time. + If latest arrival time is defined, the new search returns itineraries that arrive after that time. + This parameter is part of the [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm) + and should be used together with the `last` parameter. """ - id: ID! - - """ID of the bike rental station""" - stationId: String - - """Name of the bike rental station""" - name: String! - + before: String, """ - Number of bikes currently available on the rental station. - See field `allowPickupNow` to know if is currently possible to pick up a bike. + Datetime of the search. It's possible to either define the earliest departure time + or the latest arrival time. By default, earliest departure time is set as now. """ - bikesAvailable: Int - + dateTime: PlanDateTimeInput, + "The destination where the search ends. Usually coordinates but can also be a stop location." + destination: PlanLabeledLocationInput!, """ - Number of free spaces currently available on the rental station. - Note that this value being 0 does not necessarily indicate that bikes cannot be returned - to this station, as for example it might be possible to leave the bike in the vicinity of - the rental station, even if the bike racks don't have any spaces available. - See field `allowDropoffNow` to know if is currently possible to return a bike. + How many new itineraries should at maximum be returned in either the first search or with + forward pagination. This parameter is part of the + [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm) + and should be used together with the `after` parameter (although `after` shouldn't be defined + in the first search). """ - spacesAvailable: Int - + first: Int, """ - A description of the current state of this bike rental station, e.g. "Station on" + Settings that control the behavior of itinerary filtering. These are advanced settings and + should not be set by a user through user preferences. """ - state: String @deprecated(reason: "Use operative instead") - + itineraryFilter: PlanItineraryFilterInput, """ - If true, values of `bikesAvailable` and `spacesAvailable` are updated from a - real-time source. If false, values of `bikesAvailable` and `spacesAvailable` - are always the total capacity divided by two. + How many new itineraries should at maximum be returned in backwards pagination. It's recommended to + use the same value as was used for the `first` parameter in the original search for optimal + performance. This parameter is part of the + [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm) + and should be used together with the `before` parameter. """ - realtime: Boolean - + last: Int, """ - If true, bikes can be returned to this station if the station has spaces available - or allows overloading. + Locale used for translations. Note, there might not necessarily be translations available. + It's possible and recommended to use the ´accept-language´ header instead of this parameter. """ - allowDropoff: Boolean - + locale: Locale, """ - If true, bikes can be picked up from this station if the station has bikes available. + Street and transit modes used during the search. This also includes options to only return + an itinerary that contains no transit legs or force transit to be used in all itineraries. + By default, all transit modes are usable and `WALK` is used for direct street suggestions, + access, egress and transfers. """ - allowPickup: Boolean - - """If true, bikes can be currently returned to this station.""" - allowDropoffNow: Boolean + modes: PlanModesInput, + "The origin where the search starts. Usually coordinates but can also be a stop location." + origin: PlanLabeledLocationInput!, + "Preferences that affect what itineraries are returned. Preferences are split into categories." + preferences: PlanPreferencesInput, + """ + Duration of the search window. This either starts at the defined earliest departure + time or ends at the latest arrival time. If this is not provided, a reasonable + search window is automatically generated. When searching for earlier or later itineraries + with paging, this search window is no longer used and the new window will be based + on how many suggestions were returned in the previous search. The new search window can be + shorter or longer than the original search window. Note, itineraries are returned faster + with a smaller search window and search window limitation is done mainly for performance reasons. + + Setting this parameter makes especially sense if the transportation network is as sparse or dense + in the whole itinerary search area. Otherwise, letting the system decide what is the search window + is in combination of using paging can lead to better performance and to getting a more consistent + number of itineraries in each search. + """ + searchWindow: Duration + ): PlanConnection @async @deprecated(reason : "Experimental and can include breaking changes, use plan instead") + "Get a single rental vehicle based on its ID, i.e. value of field `vehicleId`" + rentalVehicle(id: String!): RentalVehicle + "Get all rental vehicles" + rentalVehicles( + "Return only rental vehicles that have this form factor." + formFactors: [FormFactor], + """ + Return rental vehicles with these ids, i.e. value of field `vehicleId`. + **Note:** if an id is invalid (or the rental service is unavailable) + the returned list will contain `null` values. + + If this is provided all other filters are ignored. + """ + ids: [String] + ): [RentalVehicle] + "Get a single route based on its ID, i.e. value of field `gtfsId` (format is `FeedId:RouteId`)" + route(id: String!): Route + "Get all routes" + routes( + "Only return routes with these feedIds" + feeds: [String], + "Only return routes with these ids" + ids: [String], + "Query routes by this name" + name: String, + "Only include routes, which use one of these modes" + transportModes: [Mode] + ): [Route] + "Get the time range for which the API has data available" + serviceTimeRange: serviceTimeRange + "Get a single station based on its ID, i.e. value of field `gtfsId` (format is `FeedId:StopId`)" + station(id: String!): Stop + "Get all stations" + stations( + "Only return stations that match one of the ids in this list" + ids: [String], + "Query stations by name" + name: String + ): [Stop] + "Get a single stop based on its ID, i.e. value of field `gtfsId` (ID format is `FeedId:StopId`)" + stop(id: String!): Stop + "Get all stops" + stops( + "Return stops with these ids" + ids: [String], + "Query stops by this name" + name: String + ): [Stop] + "Get all stops within the specified bounding box" + stopsByBbox( + "List of feed ids from which stops are returned" + feeds: [String!], + "Northern bound of the bounding box" + maxLat: Float!, + "Eastern bound of the bounding box" + maxLon: Float!, + "Southern bound of the bounding box" + minLat: Float!, + "Western bound of the bounding box" + minLon: Float! + ): [Stop] + """ + Get all stops within the specified radius from a location. The returned type + is a Relay connection (see + https://facebook.github.io/relay/graphql/connections.htm). The stopAtDistance + type has two values: stop and distance. + """ + stopsByRadius( + after: String, + before: String, + "List of feed ids from which stops are returned" + feeds: [String!], + first: Int, + last: Int, + "Latitude of the location (WGS 84)" + lat: Float!, + "Longitude of the location (WGS 84)" + lon: Float!, + """ + Radius (in meters) to search for from the specified location. Note that this + is walking distance along streets and paths rather than a geographic distance. + """ + radius: Int! + ): stopAtDistanceConnection + "Return list of available ticket types" + ticketTypes: [TicketType] + "Get a single trip based on its ID, i.e. value of field `gtfsId` (format is `FeedId:TripId`)" + trip(id: String!): Trip + "Get all trips" + trips( + "Only return trips with these feedIds" + feeds: [String] + ): [Trip] + "Get a single vehicle parking based on its ID" + vehicleParking(id: String!): VehicleParking + "Get all vehicle parkings" + vehicleParkings( + """ + Return vehicle parkings with these ids. + **Note:** if an id is invalid (or the vehicle parking service is unavailable) + the returned list will contain `null` values. + """ + ids: [String] + ): [VehicleParking] + "Get a single vehicle rental station based on its ID, i.e. value of field `stationId`" + vehicleRentalStation(id: String!): VehicleRentalStation + "Get all vehicle rental stations" + vehicleRentalStations( + """ + Return vehicle rental stations with these ids, i.e. value of field `stationId`. + **Note:** if an id is invalid (or the rental service is unavailable) + the returned list will contain `null` values. + """ + ids: [String] + ): [VehicleRentalStation] + "Needed until https://github.com/facebook/relay/issues/112 is resolved" + viewer: QueryType +} - """If true, bikes can be currently picked up from this station.""" - allowPickupNow: Boolean +"Real-time estimates for a vehicle at a certain place." +type RealTimeEstimate { + """ + The delay or "earliness" of the vehicle at a certain place. + + If the vehicle is early then this is a negative duration. + """ + delay: Duration! + time: OffsetDateTime! +} - networks: [String] +"Rental vehicle represents a vehicle that belongs to a rental network." +type RentalVehicle implements Node & PlaceInterface { + "If true, vehicle is currently available for renting." + allowPickupNow: Boolean + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + "Latitude of the vehicle (WGS 84)" + lat: Float + "Longitude of the vehicle (WGS 84)" + lon: Float + "Name of the vehicle" + name: String! + "ID of the rental network." + network: String + "If true, vehicle is not disabled." + operative: Boolean + "Platform-specific URLs to begin the vehicle." + rentalUris: VehicleRentalUris + "ID of the vehicle in the format of network:id" + vehicleId: String + "The type of the rental vehicle (scooter, bicycle, car...)" + vehicleType: RentalVehicleType +} - """Longitude of the bike rental station (WGS 84)""" - lon: Float +type RentalVehicleEntityCounts { + "The number of entities by type" + byType: [RentalVehicleTypeCount!]! + "The total number of entities (e.g. vehicles, spaces)." + total: Int! +} - """Latitude of the bike rental station (WGS 84)""" - lat: Float +type RentalVehicleType { + "The vehicle's general form factor" + formFactor: FormFactor + "The primary propulsion type of the vehicle" + propulsionType: PropulsionType +} - """Nominal capacity (number of racks) of the rental station.""" - capacity: Int +type RentalVehicleTypeCount { + "The number of vehicles of this type" + count: Int! + "The type of the rental vehicle (scooter, bicycle, car...)" + vehicleType: RentalVehicleType! +} - """If true, bikes can be returned even if spacesAvailable is zero or bikes > capacity.""" - allowOverloading: Boolean +"An estimate for a ride on a hailed vehicle, like an Uber car." +type RideHailingEstimate { + "The estimated time it takes for the vehicle to arrive." + arrival: Duration! + "The upper bound of the price estimate of this ride." + maxPrice: Money! + "The lower bound of the price estimate of this ride." + minPrice: Money! + "The name of the ride, ie. UberX" + productName: String + "The provider of the ride hailing service." + provider: RideHailingProvider! +} - """Platform-specific URLs to begin renting a bike from this station.""" - rentalUris: BikeRentalStationUris +type RideHailingProvider { + "The ID of the ride hailing provider." + id: String! +} - """ - If true, station is on and in service. - """ - operative: Boolean +"Category of riders a fare product applies to, for example students or pensioners." +type RiderCategory { + "ID of the category" + id: String! + "Human readable name of the category." + name: String } """ -Vehicle rental station represents a location where users can rent bicycles etc. for a fee. +Route represents a public transportation service, usually from point A to point +B and *back*, shown to customers under a single name, e.g. bus 550. Routes +contain patterns (see field `patterns`), which describe different variants of +the route, e.g. outbound pattern from point A to point B and inbound pattern +from point B to point A. """ -type VehicleRentalStation implements Node & PlaceInterface { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! - - """ID of the vehicle in the format of network:id""" - stationId: String - - """Name of the vehicle rental station""" - name: String! - - """ - Number of vehicles currently available on the rental station. - See field `allowPickupNow` to know if is currently possible to pick up a vehicle. +type Route implements Node { + "Agency operating the route" + agency: Agency + """ + List of alerts which have an effect on the route directly or indirectly. + By default only alerts directly affecting this route are returned. It's also possible + to return other relevant alerts through defining types. + """ + alerts( """ - vehiclesAvailable: Int @deprecated(reason: "Use `availableVehicles` instead, which also contains vehicle types") - + Returns alerts for these types that are relevant for the route. + By default only returns alerts that directly affect this route. """ - Number of free spaces currently available on the rental station. - Note that this value being 0 does not necessarily indicate that vehicles cannot be returned - to this station, as for example it might be possible to leave the vehicle in the vicinity of - the rental station, even if the vehicle racks don't have any spaces available. - See field `allowDropoffNow` to know if is currently possible to return a vehicle. + types: [RouteAlertType] + ): [Alert] + bikesAllowed: BikesAllowed + """ + The color (in hexadecimal format) the agency operating this route would prefer + to use on UI elements (e.g. polylines on a map) related to this route. This + value is not available for most routes. + """ + color: String + desc: String + "ID of the route in format `FeedId:RouteId`" + gtfsId: String! + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + "Long name of the route, e.g. Helsinki-Leppävaara" + longName( + """ + If translated longName is found from gtfs translation.txt and wanted language is not same as + feed's language then returns wanted translation. Otherwise uses name from routes.txt. """ - spacesAvailable: Int @deprecated(reason: "Use `availableSpaces` instead, which also contains the space vehicle types") + language: String + ): String + "Transport mode of this route, e.g. `BUS`" + mode: TransitMode + "List of patterns which operate on this route" + patterns: [Pattern] + "Short name of the route, usually a line number, e.g. 550" + shortName: String + """ + Orders the routes in a way which is useful for presentation to passengers. + Routes with smaller values should be displayed first. + + The value can be any non-negative integer. A null value means that no information was supplied. + + This value is passed through from the source data without modification. If multiple feeds + define sort orders for their routes, they may not be comparable to each other as no agreed scale + exists. + + Two routes may also have the same sort order and clients must decide based on other criteria + what the actual order is. + """ + sortOrder: Int + "List of stops on this route" + stops: [Stop] + """ + The color (in hexadecimal format) the agency operating this route would prefer + to use when displaying text related to this route. This value is not available + for most routes. + """ + textColor: String + "List of trips which operate on this route" + trips: [Trip] + """ + The raw GTFS route type as a integer. For the list of possible values, see: + https://developers.google.com/transit/gtfs/reference/#routestxt and + https://developers.google.com/transit/gtfs/reference/extended-route-types + """ + type: Int + url: String +} - """ - Number of vehicles currently available on the rental station, grouped by vehicle type. - """ - availableVehicles: RentalVehicleEntityCounts +""" +Route type entity which covers all agencies if agency is null, +otherwise only relevant for one agency. +""" +type RouteType { + "A public transport agency" + agency: Agency + """ + GTFS Route type. + For the list of possible values, see: + https://developers.google.com/transit/gtfs/reference/#routestxt and + https://developers.google.com/transit/gtfs/reference/extended-route-types + """ + routeType: Int! + """ + The routes which have the defined routeType and belong to the agency, if defined. + Otherwise all routes of the feed that have the defined routeType. + """ + routes: [Route] +} - """ - Number of free spaces currently available on the rental station, grouped by vehicle type. - """ - availableSpaces: RentalVehicleEntityCounts +"Description of the reason, why the planner did not return any results" +type RoutingError { + "An enum describing the reason" + code: RoutingErrorCode! + "A textual description of why the search failed. The clients are expected to have their own translations based on the code, for user visible error messages." + description: String! + "An enum describing the field which should be changed, in order for the search to succeed" + inputField: InputField +} +""" +Stop can represent either a single public transport stop, where passengers can +board and/or disembark vehicles, or a station, which contains multiple stops. +See field `locationType`. +""" +type Stop implements Node & PlaceInterface { + """ + By default, list of alerts which have directly an effect on just the stop. + It's also possible to return other relevant alerts through defining types. + """ + alerts( """ - If true, values of `vehiclesAvailable` and `spacesAvailable` are updated from a - real-time source. If false, values of `vehiclesAvailable` and `spacesAvailable` - are always the total capacity divided by two. + Returns alerts for these types that are relevant for the stop. + By default, list of alerts which have directly an effect on just the stop. """ - realtime: Boolean - + types: [StopAlertType] + ): [Alert] + "The cluster which this stop is part of" + cluster: Cluster + "Stop code which is visible at the stop" + code: String + "Description of the stop, usually a street name" + desc( """ - If true, vehicles can be returned to this station if the station has spaces available - or allows overloading. + If translated description is found from gtfs translation.txt and wanted language is not same as + feed's language then returns wanted translation. Otherwise uses descriptions from stops.txt. """ - allowDropoff: Boolean - + language: String + ): String + direction: String + """ + Representations of this stop's geometry. This is mainly interesting for flex stops which can be + a polygon or a group of stops either consisting of either points or polygons. + + Regular fixed-schedule stops return a single point. + + Stations (parent stations with child stops) contain a geometry collection with a point for the + central coordinate plus a convex hull polygon (https://en.wikipedia.org/wiki/Convex_hull) of all + coordinates of the child stops. + + If there are only two child stops then the convex hull is a straight line between the them. If + there is a single child stop then it's a single point. + """ + geometries: StopGeometries + "ÌD of the stop in format `FeedId:StopId`" + gtfsId: String! + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + "Latitude of the stop (WGS 84)" + lat: Float + "Identifies whether this stop represents a stop or station." + locationType: LocationType + "Longitude of the stop (WGS 84)" + lon: Float + "Name of the stop, e.g. Pasilan asema" + name( + """ + If translated name is found from gtfs translation.txt and wanted language is not same as + feed's language then returns wanted translation. Otherwise uses name from stops.txt. + E.g. Swedish name for Pasilan asema is Böle station. """ - If true, vehicles can be picked up from this station if the station has vehicles available. + language: String + ): String! + "The station which this stop is part of (or null if this stop is not part of a station)" + parentStation: Stop + "Patterns which pass through this stop" + patterns: [Pattern] + "Identifier of the platform, usually a number. This value is only present for stops that are part of a station" + platformCode: String + "Routes which pass through this stop" + routes: [Route!] + "Returns timetable of the specified pattern at this stop" + stopTimesForPattern( + "Id of the pattern" + id: String!, + numberOfDepartures: Int = 2, + "If false, returns also canceled trips" + omitCanceled: Boolean = true, + "If true, only those departures which allow boarding are returned" + omitNonPickups: Boolean = false, + "Return departures after this time. Format: Unix timestamp in seconds. Default value: current time" + startTime: Long = 0, + "Return stoptimes within this time range, starting from `startTime`. Unit: Seconds" + timeRange: Int = 86400 + ): [Stoptime] + "Returns all stops that are children of this station (Only applicable for stations)" + stops: [Stop] + "Returns list of stoptimes (arrivals and departures) at this stop, grouped by patterns" + stoptimesForPatterns( + numberOfDepartures: Int = 5, + "If false, returns also canceled trips" + omitCanceled: Boolean = true, + "If true, only those departures which allow boarding are returned" + omitNonPickups: Boolean = false, + "Return departures after this time. Format: Unix timestamp in seconds. Default value: current time" + startTime: Long = 0, + "Return stoptimes within this time range, starting from `startTime`. Unit: Seconds" + timeRange: Int = 86400 + ): [StoptimesInPattern] + "Returns list of stoptimes for the specified date" + stoptimesForServiceDate( + "Date in format YYYYMMDD" + date: String, + "If false, returns also canceled trips" + omitCanceled: Boolean = false, + "If true, only those departures which allow boarding are returned" + omitNonPickups: Boolean = false + ): [StoptimesInPattern] + "Returns list of stoptimes (arrivals and departures) at this stop" + stoptimesWithoutPatterns( + numberOfDepartures: Int = 5, + "If false, returns also canceled trips" + omitCanceled: Boolean = true, + "If true, only those departures which allow boarding are returned" + omitNonPickups: Boolean = false, + "Return departures after this time. Format: Unix timestamp in seconds. Default value: current time" + startTime: Long = 0, + "Return stoptimes within this time range, starting from `startTime`. Unit: Seconds" + timeRange: Int = 86400 + ): [Stoptime] + timezone: String + "List of nearby stops which can be used for transfers" + transfers( + """ + Maximum distance to the transfer stop. Defaults to unlimited. + **Note:** only stops that are linked as a transfer stops to this stop are + returned, i.e. this does not do a query to search for *all* stops within + radius of `maxDistance`. + """ + maxDistance: Int + ): [stopAtDistance] + url( + """ + If translated url is found from gtfs translation.txt and wanted language is not same as + feed's language then returns wanted translation. Otherwise uses url from stops.txt. """ - allowPickup: Boolean - - """If true, vehicles can be currently returned to this station.""" - allowDropoffNow: Boolean + language: String + ): String + """ + Transport mode (e.g. `BUS`) used by routes which pass through this stop or + `null` if mode cannot be determined, e.g. in case no routes pass through the stop. + Note that also other types of vehicles may use the stop, e.g. tram replacement + buses might use stops which have `TRAM` as their mode. + """ + vehicleMode: Mode + """ + The raw GTFS route type used by routes which pass through this stop. For the + list of possible values, see: + https://developers.google.com/transit/gtfs/reference/#routestxt and + https://developers.google.com/transit/gtfs/reference/extended-route-types + """ + vehicleType: Int + "Whether wheelchair boarding is possible for at least some of vehicles on this stop" + wheelchairBoarding: WheelchairBoarding + "ID of the zone where this stop is located" + zoneId: String +} - """If true, vehicles can be currently picked up from this station.""" - allowPickupNow: Boolean - - """ID of the rental network.""" - network: String - - """Longitude of the vehicle rental station (WGS 84)""" - lon: Float - - """Latitude of the vehicle rental station (WGS 84)""" - lat: Float +type StopGeometries { + "Representation of the stop geometries as GeoJSON (https://geojson.org/)" + geoJson: GeoJson + """ + Representation of a stop as a series of polylines. + + Polygons of flex stops are represented as linear rings (lines where the first and last point are the same). + + Proper stops are represented as single point "lines". + """ + googleEncoded: [Geometry] +} - """Nominal capacity (number of racks) of the rental station.""" - capacity: Int +"Stop that should (but not guaranteed) to exist on a route." +type StopOnRoute { + "Route which contains the stop." + route: Route! + "Stop at the route. It's also possible that the stop is no longer on the route." + stop: Stop! +} - """If true, vehicles can be returned even if spacesAvailable is zero or vehicles > capacity.""" - allowOverloading: Boolean +"Stop that should (but not guaranteed) to exist on a trip." +type StopOnTrip { + "Stop at the trip. It's also possible that the stop is no longer on the trip." + stop: Stop! + "Trip which contains the stop." + trip: Trip! +} - """Platform-specific URLs to begin renting a vehicle from this station.""" - rentalUris: VehicleRentalUris +"Upcoming or current stop and how close the vehicle is to it." +type StopRelationship { + "How close the vehicle is to `stop`" + status: VehicleStopStatus! + stop: Stop! +} +"Stoptime represents the time when a specific trip arrives to or departs from a specific stop." +type Stoptime { + """ + The offset from the scheduled arrival time in seconds. Negative values + indicate that the trip is running ahead of schedule. + """ + arrivalDelay: Int + """ + The offset from the scheduled departure time in seconds. Negative values + indicate that the trip is running ahead of schedule + """ + departureDelay: Int + """ + Whether the vehicle can be disembarked at this stop. This field can also be + used to indicate if disembarkation is possible only with special arrangements. + """ + dropoffType: PickupDropoffType + """ + Vehicle headsign of the trip on this stop. Trip headsigns can change during + the trip (e.g. on routes which run on loops), so this value should be used + instead of `tripHeadsign` to display the headsign relevant to the user. + """ + headsign( """ - If true, station is on and in service. + If translated headsign is found from gtfs translation.txt and wanted language is not same as + feed's language then returns wanted translation. Otherwise uses name from trip_headsign.txt. """ - operative: Boolean -} - -type RentalVehicleEntityCounts { - """The total number of entities (e.g. vehicles, spaces).""" - total: Int! - - """The number of entities by type""" - byType: [RentalVehicleTypeCount!]! + language: String + ): String + """ + Whether the vehicle can be boarded at this stop. This field can also be used + to indicate if boarding is possible only with special arrangements. + """ + pickupType: PickupDropoffType + "true, if this stoptime has real-time data available" + realtime: Boolean + "Real-time prediction of arrival time. Format: seconds since midnight of the departure date" + realtimeArrival: Int + "Real-time prediction of departure time. Format: seconds since midnight of the departure date" + realtimeDeparture: Int + "State of real-time data" + realtimeState: RealtimeState + "Scheduled arrival time. Format: seconds since midnight of the departure date" + scheduledArrival: Int + "Scheduled departure time. Format: seconds since midnight of the departure date" + scheduledDeparture: Int + "Departure date of the trip. Format: Unix timestamp (local time) in seconds." + serviceDay: Long + "The stop where this arrival/departure happens" + stop: Stop + """ + The sequence of the stop in the pattern. This is not required to start from 0 or be consecutive - any + increasing integer sequence along the stops is valid. + + The purpose of this field is to identify the stop within the pattern so it can be cross-referenced + between it and the itinerary. It is safe to cross-reference when done quickly, i.e. within seconds. + However, it should be noted that real-time updates can change the values, so don't store it for + longer amounts of time. + + Depending on the source data, this might not be the GTFS `stop_sequence` but another value, perhaps + even generated. + """ + stopPosition: Int + "true, if this stop is used as a time equalization stop. false otherwise." + timepoint: Boolean + "Trip which this stoptime is for" + trip: Trip } -type RentalVehicleTypeCount { - """The type of the rental vehicle (scooter, bicycle, car...)""" - vehicleType: RentalVehicleType! - - """The number of vehicles of this type""" - count: Int! +"Stoptimes grouped by pattern" +type StoptimesInPattern { + pattern: Pattern + stoptimes: [Stoptime] } """ -Rental vehicle represents a vehicle that belongs to a rental network. +A system notice is used to tag elements with system information for debugging +or other system related purpose. One use-case is to run a routing search with +'debugItineraryFilter: true'. This will then tag itineraries instead of removing +them from the result. This make it possible to inspect the itinerary-filter-chain. +A SystemNotice only has english text, +because the primary user are technical staff, like testers and developers. """ -type RentalVehicle implements Node & PlaceInterface { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! - - """ID of the vehicle in the format of network:id""" - vehicleId: String - - """Name of the vehicle""" - name: String! - - """If true, vehicle is currently available for renting.""" - allowPickupNow: Boolean - - """ID of the rental network.""" - network: String - - """Longitude of the vehicle (WGS 84)""" - lon: Float - - """Latitude of the vehicle (WGS 84)""" - lat: Float - - """Platform-specific URLs to begin the vehicle.""" - rentalUris: VehicleRentalUris - - """ - If true, vehicle is not disabled. - """ - operative: Boolean +type SystemNotice { + "Notice's tag" + tag: String + "Notice's description" + text: String +} - """The type of the rental vehicle (scooter, bicycle, car...)""" - vehicleType: RentalVehicleType +"Describes ticket type" +type TicketType implements Node { + "ISO 4217 currency code" + currency: String + """ + Ticket type ID in format `FeedId:TicketTypeId`. Ticket type IDs are usually + combination of ticket zones where the ticket is valid. + """ + fareId: String! + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + "Price of the ticket in currency that is specified in `currency` field" + price: Float + """ + List of zones where this ticket is valid. + Corresponds to field `zoneId` in **Stop** type. + """ + zones: [String!] } -type BikeRentalStationUris { - """ - A URI that can be passed to an Android app with an {@code android.intent.action.VIEW} Android - intent to support Android Deep Links. - May be null if a rental URI does not exist. - """ - android: String +"Text with language" +type TranslatedString { + "Two-letter language code (ISO 639-1)" + language: String + text: String +} +"Trip is a specific occurance of a pattern, usually identified by route, direction on the route and exact departure time." +type Trip implements Node { + "List of dates when this trip is in service. Format: YYYYMMDD" + activeDates: [String] + """ + By default, list of alerts which have directly an effect on just the trip. + It's also possible to return other relevant alerts through defining types. + """ + alerts( """ - A URI that can be used on iOS to launch the rental app for this station. - May be {@code null} if a rental URI does not exist. + Returns alerts for these types that are relevant for the trip. + By default, list of alerts which have directly an effect on just the trip. """ - ios: String - + types: [TripAlertType] + ): [Alert] + "Arrival time to the final stop" + arrivalStoptime( """ - A URL that can be used by a web browser to show more information about renting a vehicle at - this station. - May be {@code null} if a rental URL does not exist. + Date for which the arrival time is returned. Format: YYYYMMDD. If this + argument is not used, field `serviceDay` in the stoptime will have a value of 0. """ - web: String -} - -type VehicleRentalUris { + serviceDate: String + ): Stoptime + "Whether bikes are allowed on board the vehicle running this trip" + bikesAllowed: BikesAllowed + blockId: String + "Departure time from the first stop" + departureStoptime( """ - A URI that can be passed to an Android app with an {@code android.intent.action.VIEW} Android - intent to support Android Deep Links. - May be null if a rental URI does not exist. + Date for which the departure time is returned. Format: YYYYMMDD. If this + argument is not used, field `serviceDay` in the stoptime will have a value of 0. """ - android: String - + serviceDate: String + ): Stoptime + """ + Direction code of the trip, i.e. is this the outbound or inbound trip of a + pattern. Possible values: 0, 1 or `null` if the direction is irrelevant, i.e. + the pattern has trips only in one direction. + """ + directionId: String + "List of coordinates of this trip's route" + geometry: [[Float]] + "ID of the trip in format `FeedId:TripId`" + gtfsId: String! + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + """ + The latest real-time occupancy information for the latest occurance of this + trip. + """ + occupancy: TripOccupancy + "The pattern the trip is running on" + pattern: Pattern + "The route the trip is running on" + route: Route! + "Short name of the route this trip is running. See field `shortName` of Route." + routeShortName: String + "Hash code of the trip. This value is stable and not dependent on the trip id." + semanticHash: String! + serviceId: String + shapeId: String + "List of stops this trip passes through" + stops: [Stop!]! + "List of times when this trip arrives to or departs from a stop" + stoptimes: [Stoptime] + stoptimesForDate( + "Date for which stoptimes are returned. Format: YYYYMMDD" + serviceDate: String + ): [Stoptime] + "Coordinates of the route of this trip in Google polyline encoded format" + tripGeometry: Geometry + "Headsign of the vehicle when running on this trip" + tripHeadsign( """ - A URI that can be used on iOS to launch the rental app for this rental network. - May be {@code null} if a rental URI does not exist. + If a translated headsign is found from GTFS translation.txt and wanted language is not same as + feed's language then returns wanted translation. Otherwise uses name from trip_headsign.txt. """ - ios: String + language: String + ): String + tripShortName: String + "Whether the vehicle running this trip can be boarded by a wheelchair" + wheelchairAccessible: WheelchairBoarding +} - """ - A URL that can be used by a web browser to show more information about renting a vehicle. - May be {@code null} if a rental URL does not exist. - """ - web: String +""" +Occupancy of a vehicle on a trip. This should include the most recent occupancy information +available for a trip. Historic data might not be available. +""" +type TripOccupancy { + "Occupancy information mapped to a limited set of descriptive states." + occupancyStatus: OccupancyStatus } -type RentalVehicleType { - """The vehicle's general form factor""" - formFactor: FormFactor +"This is used for alert entities that we don't explicitly handle or they are missing." +type Unknown { + "Entity's description" + description: String +} - """The primary propulsion type of the vehicle""" - propulsionType: PropulsionType +"Vehicle parking represents a location where bicycles or cars can be parked." +type VehicleParking implements Node & PlaceInterface { + """ + Does this vehicle parking have spaces (capacity) for either wheelchair accessible (disabled) + or normal cars. + """ + anyCarPlaces: Boolean + "The currently available spaces at this vehicle parking." + availability: VehicleParkingSpaces + "Does this vehicle parking have spaces (capacity) for bicycles." + bicyclePlaces: Boolean + "The capacity (maximum available spaces) of this vehicle parking." + capacity: VehicleParkingSpaces + """ + Does this vehicle parking have spaces (capacity) for cars excluding wheelchair accessible spaces. + Use anyCarPlaces to check if any type of car may use this vehicle parking. + """ + carPlaces: Boolean + "URL which contains details of this vehicle parking." + detailsUrl: String + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + "URL of an image which may be displayed to the user showing the vehicle parking." + imageUrl: String + "Latitude of the bike park (WGS 84)" + lat: Float + "Longitude of the bike park (WGS 84)" + lon: Float + "Name of the park" + name( + "Returns name with the specified language, if found, otherwise returns with some default language." + language: String + ): String! + "A short translatable note containing details of this vehicle parking." + note( + "Returns note with the specified language, if found, otherwise returns with some default language." + language: String + ): String + "Opening hours of the parking facility" + openingHours: OpeningHours + "If true, value of `spacesAvailable` is updated from a real-time source." + realtime: Boolean + """ + The state of this vehicle parking. + Only ones in an OPERATIONAL state may be used for Park and Ride. + """ + state: VehicleParkingState + """ + Source specific tags of the vehicle parking, which describe the available features. For example + park_and_ride, bike_lockers, or static_osm_data. + """ + tags: [String] + "ID of the park" + vehicleParkingId: String + "Does this vehicle parking have wheelchair accessible (disabled) car spaces (capacity)." + wheelchairAccessibleCarPlaces: Boolean } -enum FormFactor { - """A bicycle""" - BICYCLE - """A bicycle with additional space for cargo""" - CARGO_BICYCLE - """An automobile""" - CAR - """A moped that the rider sits on. For a disambiguation see https://github.com/NABSA/gbfs/pull/370#issuecomment-982631989""" - MOPED - """A kick scooter that the rider either sits or stands on. Will be deprecated in GBFS v3.0.""" - SCOOTER - """A kick scooter that the rider stands on""" - SCOOTER_STANDING - """A kick scooter with a seat""" - SCOOTER_SEATED - """A vehicle that doesn't fit into any other category""" - OTHER +"The number of spaces by type. null if unknown." +type VehicleParkingSpaces { + "The number of bicycle spaces." + bicycleSpaces: Int + "The number of car spaces." + carSpaces: Int + "The number of wheelchair accessible (disabled) car spaces." + wheelchairAccessibleCarSpaces: Int } -enum PropulsionType { - """Pedal or foot propulsion""" - HUMAN - """Provides electric motor assist only in combination with human propulsion - no throttle mode""" - ELECTRIC_ASSIST - """Powered by battery-powered electric motor with throttle mode""" - ELECTRIC - """Powered by gasoline combustion engine""" - COMBUSTION - """Powered by diesel combustion engine""" - COMBUSTION_DIESEL - """Powered by combined combustion engine and battery-powered motor""" - HYBRID - """Powered by combined combustion engine and battery-powered motor with plug-in charging""" - PLUG_IN_HYBRID - """Powered by hydrogen fuel cell powered electric motor""" - HYDROGEN_FUEL_CELL +"Real-time vehicle position" +type VehiclePosition { + """ + Bearing, in degrees, clockwise from North, i.e., 0 is North and 90 is East. This can be the + compass bearing, or the direction towards the next stop or intermediate location. + """ + heading: Float + "Human-readable label of the vehicle, eg. a publicly visible number or a license plate" + label: String + "When the position of the vehicle was recorded in seconds since the UNIX epoch." + lastUpdated: Long + "Latitude of the vehicle" + lat: Float + "Longitude of the vehicle" + lon: Float + "Speed of the vehicle in meters/second" + speed: Float + "The current stop where the vehicle will be or is currently arriving." + stopRelationship: StopRelationship + "Which trip this vehicles runs on." + trip: Trip! + "Feed-scoped ID that uniquely identifies the vehicle in the format FeedId:VehicleId" + vehicleId: String +} + +"Vehicle rental station represents a location where users can rent bicycles etc. for a fee." +type VehicleRentalStation implements Node & PlaceInterface { + """ + If true, vehicles can be returned to this station if the station has spaces available + or allows overloading. + """ + allowDropoff: Boolean + "If true, vehicles can be currently returned to this station." + allowDropoffNow: Boolean + "If true, vehicles can be returned even if spacesAvailable is zero or vehicles > capacity." + allowOverloading: Boolean + "If true, vehicles can be picked up from this station if the station has vehicles available." + allowPickup: Boolean + "If true, vehicles can be currently picked up from this station." + allowPickupNow: Boolean + "Number of free spaces currently available on the rental station, grouped by vehicle type." + availableSpaces: RentalVehicleEntityCounts + "Number of vehicles currently available on the rental station, grouped by vehicle type." + availableVehicles: RentalVehicleEntityCounts + "Nominal capacity (number of racks) of the rental station." + capacity: Int + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + "Latitude of the vehicle rental station (WGS 84)" + lat: Float + "Longitude of the vehicle rental station (WGS 84)" + lon: Float + "Name of the vehicle rental station" + name: String! + "ID of the rental network." + network: String + "If true, station is on and in service." + operative: Boolean + """ + If true, values of `vehiclesAvailable` and `spacesAvailable` are updated from a + real-time source. If false, values of `vehiclesAvailable` and `spacesAvailable` + are always the total capacity divided by two. + """ + realtime: Boolean + "Platform-specific URLs to begin renting a vehicle from this station." + rentalUris: VehicleRentalUris + """ + Number of free spaces currently available on the rental station. + Note that this value being 0 does not necessarily indicate that vehicles cannot be returned + to this station, as for example it might be possible to leave the vehicle in the vicinity of + the rental station, even if the vehicle racks don't have any spaces available. + See field `allowDropoffNow` to know if is currently possible to return a vehicle. + """ + spacesAvailable: Int @deprecated(reason : "Use `availableSpaces` instead, which also contains the space vehicle types") + "ID of the vehicle in the format of network:id" + stationId: String + """ + Number of vehicles currently available on the rental station. + See field `allowPickupNow` to know if is currently possible to pick up a vehicle. + """ + vehiclesAvailable: Int @deprecated(reason : "Use `availableVehicles` instead, which also contains vehicle types") } -enum BikesAllowed { - """There is no bike information for the trip.""" - NO_INFORMATION +type VehicleRentalUris { + """ + A URI that can be passed to an Android app with an {@code android.intent.action.VIEW} Android + intent to support Android Deep Links. + May be null if a rental URI does not exist. + """ + android: String + """ + A URI that can be used on iOS to launch the rental app for this rental network. + May be {@code null} if a rental URI does not exist. + """ + ios: String + """ + A URL that can be used by a web browser to show more information about renting a vehicle. + May be {@code null} if a rental URL does not exist. + """ + web: String +} - """ - The vehicle being used on this particular trip can accommodate at least one bicycle. - """ - ALLOWED +type debugOutput { + pathCalculationTime: Long + precalculationTime: Long + renderingTime: Long + timedOut: Boolean + totalTime: Long +} - """No bicycles are allowed on this trip.""" - NOT_ALLOWED +type elevationProfileComponent { + "The distance from the start of the step, in meters." + distance: Float + "The elevation at this distance, in meters." + elevation: Float } """ -Preferences related to travel with a bicycle. +This type is only here for backwards-compatibility and this API will never return it anymore. +Please use the leg's `fareProducts` instead. """ -input BicyclePreferencesInput { - """ - A multiplier for how bad cycling is compared to being in transit for equal lengths of time. - """ - reluctance: Reluctance - - """ - Walking preferences when walking a bicycle. - """ - walk: BicycleWalkPreferencesInput - - """ - Maximum speed on flat ground while riding a bicycle. Note, this speed is higher than - the average speed will be in itineraries as this is the maximum speed but there are - factors that slow down cycling such as crossings, intersections and elevation changes. - """ - speed: Speed - - """ - What criteria should be used when optimizing a cycling route. - """ - optimization: CyclingOptimizationInput - - """ - Cost of boarding a vehicle with a bicycle. - """ - boardCost: Cost - - """ - Bicycle rental related preferences. - """ - rental: BicycleRentalPreferencesInput - - """ - Bicycle parking related preferences. - """ - parking: BicycleParkingPreferencesInput +type fare { + """ + Fare price in cents. **Note:** this value is dependent on the currency used, + as one cent is not necessarily ¹/₁₀₀ of the basic monerary unit. + """ + cents: Int @deprecated(reason : "No longer supported") + "Components which this fare is composed of" + components: [fareComponent] @deprecated(reason : "No longer supported") + "ISO 4217 currency code" + currency: String @deprecated(reason : "No longer supported") + type: String @deprecated(reason : "No longer supported") } """ -Preferences related to boarding a transit vehicle. Note, board costs for each street mode -can be found under the street mode preferences. +This type is only here for backwards-compatibility and this API will never return it anymore. +Please use the leg's `fareProducts` instead. """ -input BoardPreferencesInput { - """ - A multiplier for how bad waiting at a stop is compared to being in transit for equal lengths of time. - """ - waitReluctance: Reluctance +type fareComponent { + """ + Fare price in cents. **Note:** this value is dependent on the currency used, + as one cent is not necessarily ¹/₁₀₀ of the basic monerary unit. + """ + cents: Int @deprecated(reason : "No longer supported") + "ISO 4217 currency code" + currency: String @deprecated(reason : "No longer supported") + "ID of the ticket type. Corresponds to `fareId` in **TicketType**." + fareId: String @deprecated(reason : "No longer supported") + "List of routes which use this fare component" + routes: [Route] @deprecated(reason : "No longer supported") +} - """ - What is the required minimum waiting time at a stop. Setting this value as `PT0S`, for example, can lead - to passenger missing a connection when the vehicle leaves ahead of time or the passenger arrives to the - stop later than expected. - """ - slack: Duration +type placeAtDistance implements Node { + "Walking distance to the place along streets and paths" + distance: Int + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + place: PlaceInterface } -"""Car park represents a location where cars can be parked.""" -type CarPark implements Node & PlaceInterface { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! +"A connection to a list of items." +type placeAtDistanceConnection { + edges: [placeAtDistanceEdge] + pageInfo: PageInfo! +} + +"An edge in a connection." +type placeAtDistanceEdge { + cursor: String! + "The item at the end of the edge" + node: placeAtDistance +} - """ID of the car park""" - carParkId: String +"Time range for which the API has data available" +type serviceTimeRange { + "Time until which the API has data available. Format: Unix timestamp in seconds" + end: Long + "Time from which the API has data available. Format: Unix timestamp in seconds" + start: Long +} - """Name of the car park""" - name( - """Returns name with the specified language, if found, otherwise returns with some default language.""" - language: String): String! +type step { + "The cardinal (compass) direction (e.g. north, northeast) taken when engaging this step." + absoluteDirection: AbsoluteDirection + "A list of alerts (e.g. construction, detours) applicable to the step." + alerts: [Alert] + """ + This step is on an open area, such as a plaza or train platform, + and thus the directions should say something like "cross". + """ + area: Boolean + """ + The name of this street was generated by the system, so we should only display it once, and + generally just display right/left directions + """ + bogusName: Boolean + "The distance in meters that this step takes." + distance: Float + "The elevation profile as a list of { distance, elevation } values." + elevationProfile: [elevationProfileComponent] + "When exiting a highway or traffic circle, the exit name/number." + exit: String + "The latitude of the start of the step." + lat: Float + "The longitude of the start of the step." + lon: Float + "The relative direction (e.g. left or right turn) to take when engaging this step." + relativeDirection: RelativeDirection + "Indicates whether or not a street changes direction at an intersection." + stayOn: Boolean + "The name of the street, road, or path taken for this step." + streetName: String + "Is this step walking with a bike?" + walkingBike: Boolean +} - """Number of parking spaces at the car park""" - maxCapacity: Int +type stopAtDistance implements Node { + "Walking distance to the stop along streets and paths" + distance: Int + "Global object ID provided by Relay. This value can be used to refetch this object using **node** query." + id: ID! + stop: Stop +} - """Number of currently available parking spaces at the car park""" - spacesAvailable: Int +"A connection to a list of items." +type stopAtDistanceConnection { + edges: [stopAtDistanceEdge] + pageInfo: PageInfo! +} - """ - If true, value of `spacesAvailable` is updated from a real-time source. - """ - realtime: Boolean +"An edge in a connection." +type stopAtDistanceEdge { + cursor: String! + "The item at the end of the edge" + node: stopAtDistance +} - """Longitude of the car park (WGS 84)""" - lon: Float +"The cardinal (compass) direction taken when engaging a walking/driving step." +enum AbsoluteDirection { + EAST + NORTH + NORTHEAST + NORTHWEST + SOUTH + SOUTHEAST + SOUTHWEST + WEST +} - """Latitude of the car park (WGS 84)""" - lat: Float +"Entities, which are relevant for an agency and can contain alerts" +enum AgencyAlertType { + "Alerts affecting the agency." + AGENCY + "Alerts affecting agency's routes" + ROUTES + """ + Alerts affecting the different route types of the agency. + Alerts that affect route types on all agencies can be fetched through Feed. + """ + ROUTE_TYPES +} - """ - Source specific tags of the car park, which describe the available features. - """ - tags: [String] +"Cause of a alert" +enum AlertCauseType { + "ACCIDENT" + ACCIDENT + "CONSTRUCTION" + CONSTRUCTION + "DEMONSTRATION" + DEMONSTRATION + "HOLIDAY" + HOLIDAY + "MAINTENANCE" + MAINTENANCE + "MEDICAL_EMERGENCY" + MEDICAL_EMERGENCY + "OTHER_CAUSE" + OTHER_CAUSE + "POLICE_ACTIVITY" + POLICE_ACTIVITY + "STRIKE" + STRIKE + "TECHNICAL_PROBLEM" + TECHNICAL_PROBLEM + "UNKNOWN_CAUSE" + UNKNOWN_CAUSE + "WEATHER" + WEATHER +} + +"Effect of a alert" +enum AlertEffectType { + "ACCESSIBILITY_ISSUE" + ACCESSIBILITY_ISSUE + "ADDITIONAL_SERVICE" + ADDITIONAL_SERVICE + "DETOUR" + DETOUR + "MODIFIED_SERVICE" + MODIFIED_SERVICE + "NO_EFFECT" + NO_EFFECT + "NO_SERVICE" + NO_SERVICE + "OTHER_EFFECT" + OTHER_EFFECT + "REDUCED_SERVICE" + REDUCED_SERVICE + "SIGNIFICANT_DELAYS" + SIGNIFICANT_DELAYS + "STOP_MOVED" + STOP_MOVED + "UNKNOWN_EFFECT" + UNKNOWN_EFFECT +} + +"Severity level of a alert" +enum AlertSeverityLevelType { + """ + Info alerts are used for informational messages that should not have a + significant effect on user's journey, for example: A single entrance to a + metro station is temporarily closed. + """ + INFO + """ + Severe alerts are used when a significant part of public transport services is + affected, for example: All train services are cancelled due to technical problems. + """ + SEVERE + "Severity of alert is unknown" + UNKNOWN_SEVERITY + """ + Warning alerts are used when a single stop or route has a disruption that can + affect user's journey, for example: All trams on a specific route are running + with irregular schedules. + """ + WARNING +} - """ - Opening hours for the selected dates using the local time of the park. - Each date can have multiple time spans. - """ - openingHours: OpeningHours +enum BikesAllowed { + "The vehicle being used on this particular trip can accommodate at least one bicycle." + ALLOWED + "No bicycles are allowed on this trip." + NOT_ALLOWED + "There is no bike information for the trip." + NO_INFORMATION } """ -Preferences related to traveling on a car (excluding car travel on transit services such as taxi). +Predefined optimization alternatives for bicycling routing. For more customization, +one can use the triangle factors. """ -input CarPreferencesInput { - """ - A multiplier for how bad travelling on car is compared to being in transit for equal lengths of time. - """ - reluctance: Reluctance - - """ - Car rental related preferences. - """ - rental: CarRentalPreferencesInput +enum CyclingOptimizationType { + "Emphasize flatness over safety or duration of the route. This option was previously called `FLAT`." + FLAT_STREETS + """ + Completely ignore the elevation differences and prefer the streets, that are evaluated + to be the safest, even more than with the `SAFE_STREETS` option. + Safety can also include other concerns such as convenience and general cyclist preferences + by taking into account road surface etc. This option was previously called `GREENWAYS`. + """ + SAFEST_STREETS + """ + Emphasize cycling safety over flatness or duration of the route. Safety can also include other + concerns such as convenience and general cyclist preferences by taking into account + road surface etc. This option was previously called `SAFE`. + """ + SAFE_STREETS + """ + Search for routes with the shortest duration while ignoring the cycling safety + of the streets (the routes should still follow local regulations). Routes can include + steep streets, if they are the fastest alternatives. This option was previously called + `QUICK`. + """ + SHORTEST_DURATION +} - """ - Car parking related preferences. - """ - parking: CarParkingPreferencesInput -} - -"""Cluster is a list of stops grouped by name and proximity""" -type Cluster implements Node { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! - - """ID of the cluster""" - gtfsId: String! - - """Name of the cluster""" - name: String! - - """ - Latitude of the center of this cluster (i.e. average latitude of stops in this cluster) - """ - lat: Float! - - """ - Longitude of the center of this cluster (i.e. average longitude of stops in this cluster) - """ - lon: Float! - - """List of stops in the cluster""" - stops: [Stop!] -} - -""" -A static cost that is applied to a certain event or entity. Cost is a positive integer, -for example `450`. One cost unit should roughly match a one second travel on transit. -""" -scalar Cost - -""" -Coordinate (often referred as coordinates), which is used to specify a location using in the -WGS84 coordinate system. -""" -type Coordinate { - """ - Latitude as a WGS84 format number. - """ - latitude: CoordinateValue! - - """ - Longitude as a WGS84 format number. - """ - longitude: CoordinateValue! -} - -""" -Either a latitude or a longitude as a WGS84 format floating point number. -""" -scalar CoordinateValue @specifiedBy(url: "https://earth-info.nga.mil/?dir=wgs84&action=wgs84") - -type Coordinates { - """Latitude (WGS 84)""" - lat: Float - - """Longitude (WGS 84)""" - lon: Float -} - -""" -Plan date time options. Only one of the values should be defined. -""" -input PlanDateTimeInput @oneOf { - """ - Earliest departure date time. The returned itineraries should not - depart before this instant unless one is using paging to find earlier - itineraries. Note, it is not currently possible to define both - `earliestDeparture` and `latestArrival`. - """ - earliestDeparture: OffsetDateTime - - """ - Latest arrival time date time. The returned itineraries should not - arrive to the destination after this instant unless one is using - paging to find later itineraries. Note, it is not currently possible - to define both `earliestDeparture` and `latestArrival`. - """ - latestArrival: OffsetDateTime -} - -type debugOutput { - totalTime: Long - pathCalculationTime: Long - precalculationTime: Long - renderingTime: Long - timedOut: Boolean -} - -""" -Departure row is a combination of a pattern and a stop of that pattern. - -They are de-duplicated so for each pattern there will only be a single departure row. - -This is useful if you want to show a list of stop/pattern combinations but want each pattern to be -listed only once. -""" -type DepartureRow implements Node & PlaceInterface { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! - - """Stop from which the departures leave""" - stop: Stop - - """Latitude of the stop (WGS 84)""" - lat: Float - - """Longitude of the stop (WGS 84)""" - lon: Float - - """Pattern of the departure row""" - pattern: Pattern - - """Departures of the pattern from the stop""" - stoptimes( - """ - Return rows departing after this time. Time format: Unix timestamp in seconds. Default: current time. - """ - startTime: Long = 0 - - """How many seconds ahead to search for departures. Default is one day.""" - timeRange: Int = 86400 - - """Maximum number of departures to return.""" - numberOfDepartures: Int = 1 - - """If true, only those departures which allow boarding are returned""" - omitNonPickups: Boolean = false - - """If false, returns also canceled trips""" - omitCanceled: Boolean = true - ): [Stoptime] -} - -type elevationProfileComponent { - """The distance from the start of the step, in meters.""" - distance: Float - - """The elevation at this distance, in meters.""" - elevation: Float -} - -type Emissions { - """ - CO₂ emissions in grams. - """ - co2: Grams -} - -""" -This type is only here for backwards-compatibility and this API will never return it anymore. -Please use the leg's `fareProducts` instead. -""" -type fare { - type: String @deprecated - - """ISO 4217 currency code""" - currency: String @deprecated - - """ - Fare price in cents. **Note:** this value is dependent on the currency used, - as one cent is not necessarily ¹/₁₀₀ of the basic monerary unit. - """ - cents: Int @deprecated - - """Components which this fare is composed of""" - components: [fareComponent] @deprecated -} - -""" -This type is only here for backwards-compatibility and this API will never return it anymore. -Please use the leg's `fareProducts` instead. -""" -type fareComponent { - """ID of the ticket type. Corresponds to `fareId` in **TicketType**.""" - fareId: String @deprecated - - """ISO 4217 currency code""" - currency: String @deprecated - - """ - Fare price in cents. **Note:** this value is dependent on the currency used, - as one cent is not necessarily ¹/₁₀₀ of the basic monerary unit. - """ - cents: Int @deprecated - - """List of routes which use this fare component""" - routes: [Route] @deprecated -} - - -""" -Feed publisher information -""" -type FeedPublisher { - """Name of feed publisher""" - name: String! - - """Web address of feed publisher""" - url: String! -} - -""" -A feed provides routing data (stops, routes, timetables, etc.) from one or more public transport agencies. -""" -type Feed { - """ID of the feed""" - feedId: String! - - """List of agencies which provide data to this feed""" - agencies: [Agency] - - "The publisher of the input transit data." - publisher: FeedPublisher - - """ - Alerts relevant for the feed. - """ - alerts( - """ - Returns alerts for these types that are relevant for the feed. - """ - types: [FeedAlertType!] - ): [Alert] -} - -"""Entities, which are relevant for a feed and can contain alerts""" -enum FeedAlertType { - """Alerts affecting the feed's agencies""" - AGENCIES - - """ - Alerts affecting the route types across the feed. - There might be alerts that only affect route types within an agency of the feed, - and those can be fetched through the Agency. - """ - ROUTE_TYPES +"Entities, which are relevant for a feed and can contain alerts" +enum FeedAlertType { + "Alerts affecting the feed's agencies" + AGENCIES + """ + Alerts affecting the route types across the feed. + There might be alerts that only affect route types within an agency of the feed, + and those can be fetched through the Agency. + """ + ROUTE_TYPES } enum FilterPlaceType { - """ - Stops. - NOTE: if this is selected at the same time as `STATION`, stops that have a parent station will not be returned but their parent stations will be returned instead. - """ - STOP - - """Departure rows""" - DEPARTURE_ROW - - """Old value for VEHICLE_RENT""" - BICYCLE_RENT @deprecated(reason: "Use VEHICLE_RENT instead as it's clearer that it also returns rental scooters, cars...") - - """Vehicle (bicycles, scooters, cars ...) rental stations and vehicles""" - VEHICLE_RENT - - """Parking lots (not rental stations) that contain spaces for bicycles""" - BIKE_PARK - - """Parking lots that contain spaces for cars""" - CAR_PARK - - - """ - Stations. - NOTE: if this is selected at the same time as `STOP`, stops that have a parent station will not be returned but their parent stations will be returned instead. - """ - STATION -} - -type Geometry { - """The number of points in the string""" - length: Int - - """ - List of coordinates of in a Google encoded polyline format (see - https://developers.google.com/maps/documentation/utilities/polylinealgorithm) - """ - points: Polyline -} - -scalar GeoJson @specifiedBy(url: "https://www.rfcreader.com/#rfc7946") - -scalar Grams - -type StopGeometries { - """Representation of the stop geometries as GeoJSON (https://geojson.org/)""" - geoJson: GeoJson, - - """ - Representation of a stop as a series of polylines. - - Polygons of flex stops are represented as linear rings (lines where the first and last point are the same). - - Proper stops are represented as single point "lines". - """ - googleEncoded: [Geometry] -} - -""" -A coordinate used for a location in a plan query. -""" -input PlanCoordinateInput { - """ - Latitude as a WGS84 format number. - """ - latitude: CoordinateValue! - """ - Longitude as a WGS84 format number. - """ - longitude: CoordinateValue! -} - -input InputBanned { - """A comma-separated list of banned route ids""" - routes: String - - """A comma-separated list of banned agency ids""" - agencies: String - - """A comma-separated list of banned trip ids""" - trips: String - - """ - A comma-separated list of banned stop ids. Note that these stops are only - banned for boarding and disembarking vehicles — it is possible to get an - itinerary where a vehicle stops at one of these stops - """ - stops: String @deprecated(reason: "Not implemented in OTP2.") - - """ - A comma-separated list of banned stop ids. Only itineraries where these stops - are not travelled through are returned, e.g. if a bus route stops at one of - these stops, that route will not be used in the itinerary, even if the stop is - not used for boarding or disembarking the vehicle. - """ - stopsHard: String @deprecated(reason: "Not implemented in OTP2.") -} - -input InputCoordinates { - """Latitude of the place (WGS 84)""" - lat: Float! - - """Longitude of the place (WGS 84)""" - lon: Float! - - """ - The name of the place. If specified, the place name in results uses this value instead of `"Origin"` or `"Destination"` - """ - address: String - - """ - The amount of time, in seconds, to spend at this location before venturing forth. - """ - locationSlack: Int -} - -input InputFilters { - """Stops to include by GTFS id.""" - stops: [String] - - """Stations to include by GTFS id.""" - stations: [String] - - """Routes to include by GTFS id.""" - routes: [String] - - """Bike rentals to include by id (without network identifier).""" - bikeRentalStations: [String] - - """Bike parks to include by id.""" - bikeParks: [String] - - """Car parks to include by id.""" - carParks: [String] -} - -input InputModeWeight { - """ - The weight of TRAM traverse mode. Values over 1 add cost to tram travel and values under 1 decrease cost - """ - TRAM: Float - - """ - The weight of SUBWAY traverse mode. Values over 1 add cost to subway travel and values under 1 decrease cost - """ - SUBWAY: Float - - """ - The weight of RAIL traverse mode. Values over 1 add cost to rail travel and values under 1 decrease cost - """ - RAIL: Float - - """ - The weight of BUS traverse mode. Values over 1 add cost to bus travel and values under 1 decrease cost - """ - BUS: Float - - """ - The weight of FERRY traverse mode. Values over 1 add cost to ferry travel and values under 1 decrease cost - """ - FERRY: Float - - """ - The weight of CABLE_CAR traverse mode. Values over 1 add cost to cable car travel and values under 1 decrease cost - """ - CABLE_CAR: Float - - """ - The weight of GONDOLA traverse mode. Values over 1 add cost to gondola travel and values under 1 decrease cost - """ - GONDOLA: Float - - """ - The weight of FUNICULAR traverse mode. Values over 1 add cost to funicular travel and values under 1 decrease cost - """ - FUNICULAR: Float - - """ - The weight of AIRPLANE traverse mode. Values over 1 add cost to airplane travel and values under 1 decrease cost - """ - AIRPLANE: Float + "Old value for VEHICLE_RENT" + BICYCLE_RENT @deprecated(reason : "Use VEHICLE_RENT instead as it's clearer that it also returns rental scooters, cars...") + "Parking lots (not rental stations) that contain spaces for bicycles" + BIKE_PARK + "Parking lots that contain spaces for cars" + CAR_PARK + "Departure rows" + DEPARTURE_ROW + """ + Stations. + NOTE: if this is selected at the same time as `STOP`, stops that have a parent station will not be returned but their parent stations will be returned instead. + """ + STATION + """ + Stops. + NOTE: if this is selected at the same time as `STATION`, stops that have a parent station will not be returned but their parent stations will be returned instead. + """ + STOP + "Vehicle (bicycles, scooters, cars ...) rental stations and vehicles" + VEHICLE_RENT } -input InputPreferred { - """A comma-separated list of ids of the routes preferred by the user.""" - routes: String - - """A comma-separated list of ids of the agencies preferred by the user.""" - agencies: String - - """ - Penalty added for using every route that is not preferred if user set any - route as preferred. We return number of seconds that we are willing to wait - for preferred route. - """ - otherThanPreferredRoutesPenalty: Int +enum FormFactor { + "A bicycle" + BICYCLE + "An automobile" + CAR + "A bicycle with additional space for cargo" + CARGO_BICYCLE + "A moped that the rider sits on. For a disambiguation see https://github.com/NABSA/gbfs/pull/370#issuecomment-982631989" + MOPED + "A vehicle that doesn't fit into any other category" + OTHER + "A kick scooter that the rider either sits or stands on. Will be deprecated in GBFS v3.0." + SCOOTER + "A kick scooter with a seat" + SCOOTER_SEATED + "A kick scooter that the rider stands on" + SCOOTER_STANDING } -""" -Locale in the format defined in [RFC5646](https://datatracker.ietf.org/doc/html/rfc5646). For example, `en` or `en-US`. -""" -scalar Locale @specifiedBy(url: "https://www.rfcreader.com/#rfc5646") - -""" -Preferences for car parking facilities used during the routing. -""" -input CarParkingPreferencesInput { - """ - Selection filters to include or exclude parking facilities. - An empty list will include all facilities in the routing search. - """ - filters: [ParkingFilter!] - - """ - If `preferred` is non-empty, using a parking facility that doesn't contain - at least one of the preferred conditions, will receive this extra cost and therefore avoided if - preferred options are available. - """ - unpreferredCost: Cost - - """ - If non-empty every parking facility that doesn't match this set of conditions will - receive an extra cost (defined by `unpreferredCost`) and therefore avoided. - """ - preferred: [ParkingFilter!] +enum InputField { + DATE_TIME + FROM + TO } """ -Preferences for bicycle parking facilities used during the routing. -""" -input BicycleParkingPreferencesInput { - """ - Selection filters to include or exclude parking facilities. - An empty list will include all facilities in the routing search. - """ - filters: [ParkingFilter!] - - """ - If `preferred` is non-empty, using a parking facility that doesn't contain - at least one of the preferred conditions, will receive this extra cost and therefore avoided if - preferred options are available. - """ - unpreferredCost: Cost - - """ - If non-empty every parking facility that doesn't match this set of conditions will - receive an extra cost (defined by `unpreferredCost`) and therefore avoided. - """ - preferred: [ParkingFilter!] -} - -""" -Preferences for parking facilities used during the routing. -""" -input VehicleParkingInput { - """ - Selection filters to include or exclude parking facilities. - An empty list will include all facilities in the routing search. - """ - filters: [ParkingFilter] - - """ - If `preferred` is non-empty, using a parking facility that doesn't contain - at least one of the preferred conditions, will receive this extra cost and therefore avoided if - preferred options are available. - """ - unpreferredCost: Int - - """ - If non-empty every parking facility that doesn't match this set of conditions will - receive an extra cost (defined by `unpreferredCost`) and therefore avoided. - """ - preferred: [ParkingFilter] -} - -input ParkingFilterOperation { - """Filter parking facilities based on their tag""" - tags: [String] -} - -""" -The filter definition to include or exclude parking facilities used during routing. - -Logically, the filter algorithm work as follows: - -- The starting point is the set of all facilities, lets call it `A`. -- Then all `select` filters are applied to `A`, potentially reducing the number of facilities used. - Let's call the result of this `B`. - An empty `select` will lead to `A` being equal to `B`. -- Lastly, the `not` filters are applied to `B`, reducing the set further. - Lets call this final set `C`. - An empty `not` will lead to `B` being equal to `C`. -- The remaining parking facilities in `C` are used for routing. -""" -input ParkingFilter { - """ - Exclude parking facilities based on their properties. - - If empty nothing is excluded from the initial set of facilities but may be filtered down - further by the `select` filter. - """ - not: [ParkingFilterOperation!] - """ - Include parking facilities based on their properties. - - If empty everything is included from the initial set of facilities but may be filtered down - further by the `not` filter. - """ - select: [ParkingFilterOperation!] -} - -""" -Settings that control the behavior of itinerary filtering. **These are advanced settings and -should not be set by a user through user preferences.** -""" -input PlanItineraryFilterInput { - """ - Itinerary filter debug profile used to control the behaviour of itinerary filters. - """ - itineraryFilterDebugProfile: ItineraryFilterDebugProfile = OFF - - """ - Pick one itinerary from each group after putting itineraries that are `85%` similar together, - if the given value is `0.85`, for example. Itineraries are grouped together based on relative - the distance of transit travel that is identical between the itineraries (access, egress and - transfers are ignored). The value must be at least `0.5`. - """ - groupSimilarityKeepOne: Ratio = 0.85 - - """ - Pick three itineraries from each group after putting itineraries that are `68%` similar together, - if the given value is `0.68`, for example. Itineraries are grouped together based on relative - the distance of transit travel that is identical between the itineraries (access, egress and - transfers are ignored). The value must be at least `0.5`. - """ - groupSimilarityKeepThree: Ratio = 0.68 - - """ - Of the itineraries grouped to maximum of three itineraries, how much worse can the non-grouped - legs be compared to the lowest cost. `2.0` means that they can be double the cost, and any - itineraries having a higher cost will be filtered away. Use a value lower than `1.0` to turn the - grouping off. - """ - groupedOtherThanSameLegsMaxCostMultiplier: Float = 2.0 -} - -""" -Plan location settings. Location must be set. Label is optional -and used for naming the location. -""" -input PlanLabeledLocationInput { - """ - A location that has to be used in an itinerary. - """ - location: PlanLocationInput! - - """ - A label that can be attached to the location. This label is then returned with the location - in the itineraries. - """ - label: String -} - -""" -Plan location. Either a coordinate or a stop location should be defined. -""" -input PlanLocationInput @oneOf { - """ - Coordinate of the location. Note, either a coordinate or a stop location should be defined. - """ - coordinate: PlanCoordinateInput - - """ - Stop, station, a group of stop places or multimodal stop place that should be used as - a location for the search. The trip doesn't have to use the given stop location for a - transit connection as it's possible to start walking to another stop from the given - location. If a station or a group of stop places is provided, a stop that makes the most - sense for the journey is picked as the location within the station or group of stop places. - """ - stopLocation: PlanStopLocationInput -} - -""" -Wrapper type for different types of preferences related to plan query. -""" -input PlanPreferencesInput { - """ - Street routing preferences used for ingress, egress and transfers. These do not directly affect - the transit legs but can change how preferable walking or cycling, for example, is compared to - transit. - """ - street: PlanStreetPreferencesInput - - """ - Transit routing preferences used for transit legs. - """ - transit: TransitPreferencesInput - - """ - Accessibility preferences that affect both the street and transit routing. - """ - accessibility: AccessibilityPreferencesInput -} - -""" -Stop, station, a group of stop places or multimodal stop place that should be used as -a location for the search. The trip doesn't have to use the given stop location for a -transit connection as it's possible to start walking to another stop from the given -location. If a station or a group of stop places is provided, a stop that makes the most -sense for the journey is picked as the location within the station or group of stop places. -""" -input PlanStopLocationInput { - """ - ID of the stop, station, a group of stop places or multimodal stop place. Format - should be `FeedId:StopLocationId`. - """ - stopLocationId: String! -} - -""" -Mode selections for the plan search. -""" -input PlanModesInput { - """ - Should only the direct search without any transit be done. - """ - directOnly: Boolean = false - - """ - Should only the transit search be done and never suggest itineraries that don't - contain any transit legs. - """ - transitOnly: Boolean = false - - """ - Street mode that is used when searching for itineraries that don't use any transit. - If more than one mode is selected, at least one of them must be used but not necessarily all. - There are modes that automatically also use walking such as the rental modes. To force rental - to be used, this should only include the rental mode and not `WALK` in addition. - The default access mode is `WALK`. - """ - direct: [PlanDirectMode!] - - """ - Modes for different phases of an itinerary when transit is included. Also - includes street mode selections related to connecting to the transit network - and transfers. By default, all transit modes are usable and `WALK` is used for - access, egress and transfers. - """ - transit: PlanTransitModesInput -} - -""" -Modes for different phases of an itinerary when transit is included. Also includes street -mode selections related to connecting to the transit network and transfers. -""" -input PlanTransitModesInput { - """ - Street mode that is used when searching for access to the transit network from origin. - If more than one mode is selected, at least one of them must be used but not necessarily all. - There are modes that automatically also use walking such as the rental modes. To force rental - to be used, this should only include the rental mode and not `WALK` in addition. - The default access mode is `WALK`. - """ - access: [PlanAccessMode!] - - """ - Street mode that is used when searching for egress to destination from the transit network. - If more than one mode is selected, at least one of them must be used but not necessarily all. - There are modes that automatically also use walking such as the rental modes. To force rental - to be used, this should only include the rental mode and not `WALK` in addition. - The default access mode is `WALK`. - """ - egress: [PlanEgressMode!] - - """ - Street mode that is used when searching for transfers. Selection of only one allowed for now. - The default transfer mode is `WALK`. - """ - transfer: [PlanTransferMode!] - - """ - Transit modes and reluctances associated with them. Each defined mode can be used in - an itinerary but doesn't have to be. If direct search is not disabled, there can be an - itinerary without any transit legs. By default, all transit modes are usable. - """ - transit: [PlanTransitModePreferenceInput!] -} - -""" -Street routing preferences used for ingress, egress and transfers. These do not directly affect -the transit legs but can change how preferable walking or cycling, for example, is compared to -transit. -""" -input PlanStreetPreferencesInput { - """ - Cycling related preferences. - """ - bicycle: BicyclePreferencesInput - - """ - Scooter (kick or electrical) related preferences. - """ - scooter: ScooterPreferencesInput - - """ - Car related preferences. These are not used for car travel as part of transit, such as - taxi travel. - """ - car: CarPreferencesInput - - """ - Walk related preferences. These are not used when walking a bicycle or a scooter as they - have their own preferences. - """ - walk: WalkPreferencesInput -} - -""" -Relative importances of optimization factors. Only effective for bicycling legs. -Invariant: `timeFactor + slopeFactor + safetyFactor == 1` -""" -input InputTriangle { - """Relative importance of safety""" - safetyFactor: Float - - """Relative importance of flat terrain""" - slopeFactor: Float - - """Relative importance of duration""" - timeFactor: Float -} - -""" -Relative importance of optimization factors. Only effective for bicycling legs. -Invariant: `safety + flatness + time == 1` -""" -input TriangleCyclingFactorsInput { - """ - Relative importance of cycling safety, but this factor can also include other - concerns such as convenience and general cyclist preferences by taking into account - road surface etc. - """ - safety: Ratio! - - """Relative importance of flat terrain""" - flatness: Ratio! - - """Relative importance of duration""" - time: Ratio! -} - -""" -Relative importance of optimization factors. Only effective for scooter legs. -Invariant: `safety + flatness + time == 1` -""" -input TriangleScooterFactorsInput { - """ - Relative importance of scooter safety, but this factor can also include other - concerns such as convenience and general scooter preferences by taking into account - road surface etc. - """ - safety: Ratio! - - """Relative importance of flat terrain""" - flatness: Ratio! - - """Relative importance of duration""" - time: Ratio! -} - -input InputUnpreferred { - """A comma-separated list of ids of the routes unpreferred by the user.""" - routes: String - - """A comma-separated list of ids of the agencies unpreferred by the user.""" - agencies: String - - """ - An cost function used to calculate penalty for an unpreferred route/agency. Function should return - number of seconds that we are willing to wait for unpreferred route/agency. - String must be of the format: - `A + B x`, where A is fixed penalty and B is a multiplier of transit leg travel time x. - For example: `600 + 2.0 x` - """ - unpreferredCost: String - - """ - Penalty added for using route that is unpreferred, i.e. number of seconds that we are willing to - wait for route that is unpreferred. - - Deprecated: Use `unpreferredCost` instead. - """ - useUnpreferredRoutesPenalty: Int @deprecated(reason: "Use unpreferredCost instead") -} - -enum RoutingErrorCode { - """ - No transit connection was found between the origin and destination within the operating day or - the next day, not even sub-optimal ones. - """ - NO_TRANSIT_CONNECTION - - """ - A transit connection was found, but it was outside the search window. See the metadata for a token - for retrieving the result outside the search window. - """ - NO_TRANSIT_CONNECTION_IN_SEARCH_WINDOW - - """ - The date specified is outside the range of data currently loaded into the system as it is too - far into the future or the past. - - The specific date range of the system is configurable by an administrator and also depends on - the input data provided. - """ - OUTSIDE_SERVICE_PERIOD - - """ - The coordinates are outside the geographic bounds of the transit and street data currently loaded - into the system and therefore cannot return any results. - """ - OUTSIDE_BOUNDS - - """ - The specified location is not close to any streets or transit stops currently loaded into the - system, even though it is generally within its bounds. - - This can happen when there is only transit but no street data coverage at the location in - question. - """ - LOCATION_NOT_FOUND - - """ - No stops are reachable from the start or end locations specified. - - You can try searching using a different access or egress mode, for example cycling instead of walking, - increase the walking/cycling/driving speed or have an administrator change the system's configuration - so that stops further away are considered. - """ - NO_STOPS_IN_RANGE - - """ - Transit connections were requested and found but because it is easier to just walk all the way - to the destination they were removed. - - If you want to still show the transit results, you need to make walking less desirable by - increasing the walk reluctance. - """ - WALKING_BETTER_THAN_TRANSIT -} - -enum InputField { - DATE_TIME - FROM - TO -} - -"""Description of the reason, why the planner did not return any results""" -type RoutingError { - """An enum describing the reason""" - code: RoutingErrorCode! - - """An enum describing the field which should be changed, in order for the search to succeed""" - inputField: InputField - - """A textual description of why the search failed. The clients are expected to have their own translations based on the code, for user visible error messages.""" - description: String! -} - -"Category of riders a fare product applies to, for example students or pensioners." -type RiderCategory { - "ID of the category" - id: String! - "Human readable name of the category." - name: String -} - -""" -A 'medium' that a fare product applies to, for example cash, 'Oyster Card' or 'DB Navigator App'. -""" -type FareMedium { - "ID of the medium" - id: String! - "Human readable name of the medium." - name: String -} - -"A container for both a fare product (a ticket) and its relationship to the itinerary." -type FareProductUse { - """ - Represents the use of a single instance of a fare product throughout the itinerary. It can - be used to cross-reference and de-duplicate fare products that are applicable for more than one - leg. - - If you want to uniquely identify the fare product itself (not its use) use the product's `id`. - - ### Example: Day pass - - The day pass is valid for both legs in the itinerary. It is listed as the applicable `product` for each leg, - and the same FareProductUse id is shown, indicating that only one pass was used/bought. - - **Illustration** - ```yaml - itinerary: - leg1: - fareProducts: - id: "AAA" // id of a FareProductUse instance - product: - id: "day-pass" // product id - name: "Day Pass" - leg2: - fareProducts: - id: "AAA" // identical to leg1. the passenger needs to buy ONE pass, not two. - product: - id: "day-pass" // product id - name: "Day Pass" - ``` - - **It is the responsibility of the API consumers to display the day pass as a product for the - entire itinerary rather than two day passes!** - - ### Example: Several single tickets - - If you have two legs and need to buy two single tickets they will appear in each leg with the - same `FareProduct.id` but different `FareProductUse.id`. - - **Illustration** - ```yaml - itinerary: - leg1: - fareProducts: - id: "AAA" // id of a FareProductUse instance, not product id - product: - id: "single-ticket" // product id - name: "Single Ticket" - leg2: - fareProducts: - id: "BBB" // different to leg1. the passenger needs to buy two single tickets. - product: - id: "single-ticket" // product id - name: "Single Ticket" - ``` - - """ - id: String! - - "The purchasable fare product" - product: FareProduct -} - -"A fare product (a ticket) to be bought by a passenger" -interface FareProduct { - "Identifier for the fare product." - id: String! - - """ - Human readable name of the product, for example example "Day pass" or "Single ticket". - """ - name: String! - - "The category of riders this product applies to, for example students or pensioners." - riderCategory: RiderCategory - - """ - The 'medium' that this product applies to, for example "Oyster Card" or "Berlin Ticket App". - - This communicates to riders that a specific way of buying or keeping this product is required. - """ - medium: FareMedium -} - -""" -The standard case of a fare product: it only has a single price to be paid by the passenger -and no discounts are applied. -""" -type DefaultFareProduct implements FareProduct { - "Identifier for the fare product." - id: String! - - """ - Human readable name of the product, for example example "Day pass" or "Single ticket". - """ - name: String! - - "The price of the product" - price: Money! - - "The category of riders this product applies to, for example students or pensioners." - riderCategory: RiderCategory - - """ - The 'medium' that this product applies to, for example "Oyster Card" or "Berlin Ticket App". - - This communicates to riders that a specific way of buying or keeping this product is required. - """ - medium: FareMedium -} - -type Itinerary { - "Time when the user leaves from the origin." - start: OffsetDateTime - - "Time when the user leaves arrives at the destination." - end: OffsetDateTime - - """Duration of the trip on this itinerary, in seconds.""" - duration: Long - - """Generalized cost of the itinerary. Used for debugging search results.""" - generalizedCost: Int - - """How much time is spent waiting for transit to arrive, in seconds.""" - waitingTime: Long - - """How much time is spent walking, in seconds.""" - walkTime: Long - - """How far the user has to walk, in meters.""" - walkDistance: Float - - """Emissions of this itinerary per traveler.""" - emissionsPerPerson: Emissions - - """ - A list of Legs. Each Leg is either a walking (cycling, car) portion of the - itinerary, or a transit leg on a particular vehicle. So a itinerary where the - user walks to the Q train, transfers to the 6, then walks to their - destination, has four legs. - """ - legs: [Leg]! - - """ - How much elevation is gained, in total, over the course of the itinerary, in meters. - """ - elevationGained: Float - - """ - How much elevation is lost, in total, over the course of the itinerary, in meters. - """ - elevationLost: Float - - """ - Does the itinerary end without dropping off the rented bicycle: - """ - arrivedAtDestinationWithRentedBicycle: Boolean - - """ - A list of system notices. Contains debug information for itineraries. - One use-case is to run a routing search with 'debugItineraryFilter: true'. - This will then tag itineraries instead of removing them from the result. - This make it possible to inspect the itinerary-filter-chain. - """ - systemNotices: [SystemNotice]! - - """ - Computes a numeric accessibility score between 0 and 1. - - The closer the value is to 1 the better the wheelchair-accessibility of this itinerary is. - A value of `null` means that no score has been computed, not that the leg is inaccessible. - - More information is available in the [feature documentation](https://docs.opentripplanner.org/en/dev-2.x/sandbox/IBIAccessibilityScore/). - """ - accessibilityScore: Float - - """ - How many transfers are part of this itinerary. - - Notes: - - Interlined/stay-seated transfers do not increase this count. - - Transferring from a flex to a fixed schedule trip and vice versa increases this count. - """ - numberOfTransfers: Int! - - # - # deprecated fields - # - - """ - Information about the fares for this itinerary. This is primarily a GTFS Fares V1 interface - and always returns an empty list. Use the leg's `fareProducts` instead. - """ - fares: [fare] @deprecated(reason: "Use the leg's `fareProducts`.") - - """ - Time when the user leaves from the origin. Format: Unix timestamp in milliseconds. - """ - startTime: Long @deprecated(reason: "Use `start` instead which includes timezone information.") - - """ - Time when the user arrives to the destination. Format: Unix timestamp in milliseconds. - """ - endTime: Long @deprecated(reason: "Use `end` instead which includes timezone information.") -} - -"A currency" -type Currency { - "ISO-4217 currency code, for example `USD` or `EUR`." - code: String! - """ - Fractional digits of this currency. A value of 2 would express that in this currency - 100 minor units make up one major unit. - - Expressed more concretely: 100 Euro-cents make up one Euro. - - Note: Some currencies don't even have any fractional digits, for example the Japanese Yen. - - See also https://en.wikipedia.org/wiki/ISO_4217#Minor_unit_fractions - """ - digits: Int! -} - -"An amount of money." -type Money { - "The currency of this money amount." - currency: Currency! - """ - Money in the major currency unit, so 3.10 USD is represented as `3.1`. - - If you want to get the minor currency unit (310 cents), multiply with - (10 to the power of `currency.digits`). - """ - amount: Float! -} - -""" -An ISO-8601-formatted duration, i.e. `PT2H30M` for 2 hours and 30 minutes. - -Negative durations are formatted like `-PT10M`. -""" -scalar Duration @specifiedBy(url:"https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/time/Duration.html#parse(java.lang.CharSequence)") - -type RideHailingProvider { - "The ID of the ride hailing provider." - id: String! -} - -"An estimate for a ride on a hailed vehicle, like an Uber car." -type RideHailingEstimate { - "The provider of the ride hailing service." - provider: RideHailingProvider! - "The lower bound of the price estimate of this ride." - minPrice: Money! - "The upper bound of the price estimate of this ride." - maxPrice: Money! - "The estimated time it takes for the vehicle to arrive." - arrival: Duration! - "The name of the ride, ie. UberX" - productName: String -} - -""" -An ISO-8601-formatted datetime with offset, i.e. `2023-06-13T14:30+03:00` for 2:30pm on June 13th 2023 at Helsinki's offset from UTC at that time. - -ISO-8601 allows many different formats but OTP will only return the profile specified in RFC3339. -""" -scalar OffsetDateTime @specifiedBy(url: "https://www.rfcreader.com/#rfc3339") - -"Real-time estimates for a vehicle at a certain place." -type RealTimeEstimate { - time: OffsetDateTime! - """ - The delay or "earliness" of the vehicle at a certain place. - - If the vehicle is early then this is a negative duration. - """ - delay: Duration! -} - -""" -Time information about a passenger at a certain place. May contain real-time information if -available. -""" -type LegTime { - "The scheduled time of the event." - scheduledTime: OffsetDateTime! - "The estimated time of the event. If no real-time information is available, this is null." - estimated: RealTimeEstimate -} - -type Leg { - - """ - The time when the leg starts including real-time information, if available. - """ - start: LegTime! - - """ - The time when the leg ends including real-time information, if available. - """ - end: LegTime! - - """The mode (e.g. `WALK`) used when traversing this leg.""" - mode: Mode - - """The leg's duration in seconds""" - duration: Float - - """Generalized cost of the leg. Used for debugging search results.""" - generalizedCost: Int - - """The leg's geometry.""" - legGeometry: Geometry - - """ - For transit legs, the transit agency that operates the service used for this leg. For non-transit legs, `null`. - """ - agency: Agency - - """Whether there is real-time data about this Leg""" - realTime: Boolean - - """State of real-time data""" - realtimeState: RealtimeState - - """The distance traveled while traversing the leg in meters.""" - distance: Float - - """Whether this leg is a transit leg or not.""" - transitLeg: Boolean - - "Whether this leg is walking with a bike." - walkingBike: Boolean - - """Whether this leg is traversed with a rented bike.""" - rentedBike: Boolean - - """The Place where the leg originates.""" - from: Place! - - """The Place where the leg ends.""" - to: Place! - - """ - For transit legs, the route that is used for traversing the leg. For non-transit legs, `null`. - """ - route: Route - - """ - For transit legs, the trip that is used for traversing the leg. For non-transit legs, `null`. - """ - trip: Trip - - """ - For transit legs, the service date of the trip. Format: YYYYMMDD. For non-transit legs, null. - """ - serviceDate: String - - """ - For transit legs, intermediate stops between the Place where the leg - originates and the Place where the leg ends. For non-transit legs, null. - """ - intermediateStops: [Stop] - - """ - For transit legs, intermediate stops between the Place where the leg - originates and the Place where the leg ends. For non-transit legs, null. - Returns Place type, which has fields for e.g. departure and arrival times - """ - intermediatePlaces: [Place] - - """ - Whether the destination of this leg (field `to`) is one of the intermediate places specified in the query. - """ - intermediatePlace: Boolean - - "The turn-by-turn navigation instructions." - steps: [step] - - """ - For transit legs, the headsign that the vehicle shows at the stop where the passenger boards. - For non-transit legs, null. - """ - headsign: String - - """ - This is used to indicate if boarding this leg is possible only with special arrangements. - """ - pickupType: PickupDropoffType - - """ - This is used to indicate if alighting from this leg is possible only with special arrangements. - """ - dropoffType: PickupDropoffType - - """ - Interlines with previous leg. - This is true when the same vehicle is used for the previous leg as for this leg - and passenger can stay inside the vehicle. - """ - interlineWithPreviousLeg: Boolean - - """ - Special booking information for the drop off stop of this leg if, for example, it needs - to be booked in advance. This could be due to a flexible or on-demand service. - """ - dropOffBookingInfo: BookingInfo - - """ - Special booking information for the pick up stop of this leg if, for example, it needs - to be booked in advance. This could be due to a flexible or on-demand service. - """ - pickupBookingInfo: BookingInfo - - """Applicable alerts for this leg.""" - alerts: [Alert] - - """ - Future legs with same origin and destination stops or stations - """ - nextLegs( - """ - The number of alternative legs searched. If fewer than the requested number are found, - then only the found legs are returned. - """ - numberOfLegs: Int! - - """ - Transportation modes for which all stops in the parent station are used as possible origin stops - for the next legs. For modes not listed, only the exact origin stop of the leg is considered. - """ - originModesWithParentStation: [TransitMode!] - - """ - Transportation modes for which all stops in the parent station are used as possible destination stops - for the next legs. For modes not listed, only the exact destination stop of the leg is considered. - """ - destinationModesWithParentStation: [TransitMode!] - - ): [Leg!] - - "Estimate of a hailed ride like Uber." - rideHailingEstimate: RideHailingEstimate - - """ - Computes a numeric accessibility score between 0 and 1. - - The closer the value is to 1 the better the wheelchair-accessibility of this leg is. - A value of `null` means that no score has been computed, not that the itinerary is inaccessible. - - More information is available in the [feature documentation](https://docs.opentripplanner.org/en/dev-2.x/sandbox/IBIAccessibilityScore/). - """ - accessibilityScore: Float - - """ - Fare products are purchasable tickets which may have an optional fare container or rider - category that limits who can buy them or how. - - Please read the documentation of `id` very carefully to learn how a single fare product - that applies to multiple legs can appear several times. - """ - fareProducts: [FareProductUse] - - """ - The date and time when this leg begins. Format: Unix timestamp in milliseconds. - """ - startTime: Long @deprecated(reason: "Use `start.estimated.time` instead which contains timezone information.") - - """ - The date and time when this leg ends. Format: Unix timestamp in milliseconds. - """ - endTime: Long @deprecated(reason: "Use `end.estimated.time` instead which contains timezone information.") - - """ - For transit leg, the offset from the scheduled departure time of the boarding - stop in this leg, i.e. scheduled time of departure at boarding stop = - `startTime - departureDelay` - """ - departureDelay: Int @deprecated(reason: "Use `end.estimated.delay` instead.") - - """ - For transit leg, the offset from the scheduled arrival time of the alighting - stop in this leg, i.e. scheduled time of arrival at alighting stop = `endTime - - arrivalDelay` - """ - arrivalDelay: Int @deprecated(reason: "Use `start.estimated.delay` instead.") - -} - -"""A span of time.""" -type LocalTimeSpan { - """The start of the time timespan as seconds from midnight.""" - from: Int! - - """The end of the timespan as seconds from midnight.""" - to: Int! -} - -"""A date using the local timezone of the object that can contain timespans.""" -type LocalTimeSpanDate { - """The time spans for this date.""" - timeSpans: [LocalTimeSpan] - - """The date of this time span. Format: YYYYMMDD.""" - date: String! -} - -"""Identifies whether this stop represents a stop or station.""" -enum LocationType { - """A location where passengers board or disembark from a transit vehicle.""" - STOP - - """A physical structure or area that contains one or more stop.""" - STATION - ENTRANCE -} -"""Long type""" -scalar Long - -enum Mode { - """AIRPLANE""" - AIRPLANE - - """BICYCLE""" - BICYCLE - - """BUS""" - BUS - - """CABLE_CAR""" - CABLE_CAR - - """CAR""" - CAR - - """COACH""" - COACH - - """FERRY""" - FERRY - - """Enables flexible transit for access and egress legs""" - FLEX - - """Enables flexible transit for access and egress legs""" - FLEXIBLE @deprecated(reason: "Use FLEX instead") - - """FUNICULAR""" - FUNICULAR - - """GONDOLA""" - GONDOLA - - """Only used internally. No use for API users.""" - LEG_SWITCH @deprecated - - """RAIL""" - RAIL - - """SCOOTER""" - SCOOTER - - """SUBWAY""" - SUBWAY - - """TRAM""" - TRAM - - """Private car trips shared with others.""" - CARPOOL - - """A taxi, possibly operated by a public transport agency.""" - TAXI - - """A special transport mode, which includes all public transport.""" - TRANSIT - - """WALK""" - WALK - - "Electric buses that draw power from overhead wires using poles." - TROLLEYBUS - - "Railway in which the track consists of a single rail or a beam." - MONORAIL -} - -""" -Transit modes include modes that are used within organized transportation networks -run by public transportation authorities, taxi companies etc. -Equivalent to GTFS route_type or to NeTEx TransportMode. -""" -enum TransitMode { - AIRPLANE - - BUS - - CABLE_CAR - - COACH - - FERRY - - FUNICULAR - - GONDOLA - - """ - This includes long or short distance trains. - """ - RAIL - - """ - Subway or metro, depending on the local terminology. - """ - SUBWAY - - TRAM - - """Private car trips shared with others.""" - CARPOOL - - """A taxi, possibly operated by a public transport agency.""" - TAXI - - "Electric buses that draw power from overhead wires using poles." - TROLLEYBUS - - "Railway in which the track consists of a single rail or a beam." - MONORAIL -} - -"""An object with an ID""" -interface Node { - """The ID of an object""" - id: ID! -} - -"""Optimization type for bicycling legs""" -enum OptimizeType { - """Prefer faster routes""" - QUICK - - """ - Prefer safer routes, i.e. avoid crossing streets and use bike paths when possible - """ - SAFE - - """Prefer flat terrain""" - FLAT - - """GREENWAYS""" - GREENWAYS - - """ - **TRIANGLE** optimization type can be used to set relative preferences of optimization factors. See argument `triangle`. - """ - TRIANGLE -} - -"""Information about pagination in a connection.""" -type PageInfo { - """When paginating forwards, are there more items?""" - hasNextPage: Boolean! - - """When paginating backwards, are there more items?""" - hasPreviousPage: Boolean! - - """When paginating backwards, the cursor to continue.""" - startCursor: String - - """When paginating forwards, the cursor to continue.""" - endCursor: String -} - -""" -Information about pagination in a connection. Part of the -[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). -""" -type PlanPageInfo { - """When paginating forwards, are there more items?""" - hasNextPage: Boolean! - - """When paginating backwards, are there more items?""" - hasPreviousPage: Boolean! - - """When paginating backwards, the cursor to continue.""" - startCursor: String - - """When paginating forwards, the cursor to continue.""" - endCursor: String - - """The search window that was used for the search in the current page.""" - searchWindowUsed: Duration -} - -""" -Street modes that can be used for access to the transit network from origin. -""" -enum PlanAccessMode { - """ - Cycling to a stop and boarding a vehicle with the bicycle. - Note, this can include walking when it's needed to walk the bicycle. - Access can use cycling only if the mode used for transfers - and egress is also `BICYCLE`. - """ - BICYCLE - - """ - Bicycle rental can use either station based systems or "floating" - vehicles which are not linked to a rental station. Note, if there are no - rental options available, access will include only walking. Also, this - can include walking before picking up or after dropping off the - bicycle or when it's needed to walk the bicycle. - """ - BICYCLE_RENTAL - - """ - Starting the itinerary with a bicycle and parking the bicycle to - a parking location. Note, this can include walking after parking - the bicycle or when it's needed to walk the bicycle. - """ - BICYCLE_PARKING - - """ - Car rental can use either station based systems or "floating" - vehicles which are not linked to a rental station. Note, if there are no - rental options available, access will include only walking. Also, this - can include walking before picking up or after dropping off the - car. - """ - CAR_RENTAL - - """ - Starting the itinerary with a car and parking the car to a parking location. - Note, this can include walking after parking the car. - """ - CAR_PARKING - - """ - Getting dropped off by a car to a location that is accessible with a car. - Note, this can include walking after the drop-off. - """ - CAR_DROP_OFF - - """ - Flexible transit. This can include different forms of flexible transit that - can be defined in GTFS-Flex or in Netex. Note, this can include walking before - or after the flexible transit leg. - """ - FLEX - - """ - Scooter rental can use either station based systems or "floating" - vehicles which are not linked to a rental station. Note, if there are no - rental options available, access will include only walking. Also, this - can include walking before picking up or after dropping off the - scooter. - """ - SCOOTER_RENTAL - - """ - Walking to a stop. - """ - WALK -} - -""" -Street mode that is used when searching for itineraries that don't use any transit. -""" -enum PlanDirectMode { - """ - Cycling from the origin to the destination. Note, this can include walking - when it's needed to walk the bicycle. - """ - BICYCLE - - """ - Bicycle rental can use either station based systems or "floating" - vehicles which are not linked to a rental station. Note, if there are no - rental options available, itinerary will include only walking. - Also, it can include walking before picking up or after dropping off the - bicycle or when it's needed to walk the bicycle. - """ - BICYCLE_RENTAL - - """ - Starting the itinerary with a bicycle and parking the bicycle to - a parking location. Note, this can include walking after parking - the bicycle or when it's needed to walk the bicycle. - """ - BICYCLE_PARKING - - """ - Driving a car from the origin to the destination. - """ - CAR - - """ - Car rental can use either station based systems or "floating" - vehicles which are not linked to a rental station. Note, if there are no - rental options available, itinerary will include only walking. Also, this - can include walking before picking up or after dropping off the - car. - """ - CAR_RENTAL - - """ - Starting the itinerary with a car and parking the car to a parking location. - Note, this can include walking after parking the car. - """ - CAR_PARKING - - """ - Flexible transit. This can include different forms of flexible transit that - can be defined in GTFS-Flex or in Netex. Note, this can include walking before - or after the flexible transit leg. - """ - FLEX - - """ - Scooter rental can use either station based systems or "floating" - vehicles which are not linked to a rental station. Note, if there are no - rental options available, itinerary will include only walking. Also, this - can include walking before picking up or after dropping off the - scooter. - """ - SCOOTER_RENTAL - - """ - Walking from the origin to the destination. Note, this can include walking - when it's needed to walk the bicycle. - """ - WALK -} - -""" -Street modes that can be used for egress from the transit network to destination. -""" -enum PlanEgressMode { - """ - Cycling from a stop to the destination. Note, this can include walking when - it's needed to walk the bicycle. Egress can use cycling only if the mode used - for access and transfers is also `BICYCLE`. - """ - BICYCLE - - """ - Bicycle rental can use either station based systems or "floating" - vehicles which are not linked to a rental station. Note, if there are no - rental options available, egress will include only walking. Also, this - can include walking before picking up or after dropping off the - bicycle or when it's needed to walk the bicycle. - """ - BICYCLE_RENTAL - - """ - Car rental can use either station based systems or "floating" - vehicles which are not linked to a rental station. Note, if there are no - rental options available, egress will include only walking. Also, this - can include walking before picking up or after dropping off the - car. - """ - CAR_RENTAL - - """ - Getting picked up by a car from a location that is accessible with a car. - Note, this can include walking before the pickup. - """ - CAR_PICKUP - - """ - Flexible transit. This can include different forms of flexible transit that - can be defined in GTFS-Flex or in Netex. Note, this can include walking before - or after the flexible transit leg. - """ - FLEX - - """ - Scooter rental can use either station based systems or "floating" - vehicles which are not linked to a rental station. Note, if there are no - rental options available, egress will include only walking. Also, this - can include walking before picking up or after dropping off the - scooter. - """ - SCOOTER_RENTAL - - """ - Walking from a stop to the destination. - """ - WALK -} - -enum PlanTransferMode { - """ - Cycling between transit vehicles (typically between stops). Note, this can - include walking when it's needed to walk the bicycle. Transfers can only use - cycling if the mode used for access and egress is also `BICYCLE`. - """ - BICYCLE - - """ - Walking between transit vehicles (typically between stops). - """ - WALK -} - -"""Real-time vehicle position""" -type VehiclePosition { - """Feed-scoped ID that uniquely identifies the vehicle in the format FeedId:VehicleId""" - vehicleId: String, - """Human-readable label of the vehicle, eg. a publicly visible number or a license plate""" - label: String - """Latitude of the vehicle""" - lat: Float - """Longitude of the vehicle""" - lon: Float - """The current stop where the vehicle will be or is currently arriving.""" - stopRelationship: StopRelationship - """Speed of the vehicle in meters/second""" - speed: Float - """ - Bearing, in degrees, clockwise from North, i.e., 0 is North and 90 is East. This can be the - compass bearing, or the direction towards the next stop or intermediate location. - """ - heading: Float - """When the position of the vehicle was recorded in seconds since the UNIX epoch.""" - lastUpdated: Long - """Which trip this vehicles runs on.""" - trip: Trip! -} - -"""Upcoming or current stop and how close the vehicle is to it.""" -type StopRelationship { - """How close the vehicle is to `stop`""" - status: VehicleStopStatus! - stop: Stop! -} - -"""How close the vehicle is to the stop.""" -enum VehicleStopStatus { - """ - The vehicle is standing at the stop. - """ - STOPPED_AT, - """ - The vehicle has departed the previous stop and is in transit. - """ - IN_TRANSIT_TO, - """ - The vehicle is just about to arrive at the stop (on a stop display, the vehicle symbol typically flashes). - """ - INCOMING_AT -} - -""" -Pattern is sequence of stops used by trips on a specific direction and variant -of a route. Most routes have only two patterns: one for outbound trips and one -for inbound trips -""" -type Pattern implements Node { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! - - """The route this pattern runs on""" - route: Route! - - """ - Direction of the pattern. Possible values: 0, 1 or -1. - -1 indicates that the direction is irrelevant, i.e. the route has patterns only in one direction. - """ - directionId: Int - - """ - Name of the pattern. Pattern name can be just the name of the route or it can - include details of destination and origin stops. - """ - name: String - - """ID of the pattern""" - code: String! - - """Vehicle headsign used by trips of this pattern""" - headsign: String - - """Trips which run on this pattern""" - trips: [Trip!] - - """Trips which run on this pattern on the specified date""" - tripsForDate( - """Return trips of the pattern active on this date. Format: YYYYMMDD""" - serviceDate: String - ): [Trip!] - - """List of stops served by this pattern""" - stops: [Stop!] - geometry: [Coordinates] - - """ - Coordinates of the route of this pattern in Google polyline encoded format - """ - patternGeometry: Geometry - - """ - Hash code of the pattern. This value is stable and not dependent on the - pattern id, i.e. this value can be used to check whether two patterns are the - same, even if their ids have changed. - """ - semanticHash: String - - """ - By default, list of alerts which have directly an effect on just the pattern. - It's also possible to return other relevant alerts through defining types. - """ - alerts( - """ - Returns alerts for these types that are relevant for the pattern. - By default, list of alerts which have directly an effect on just the pattern. - """ - types: [PatternAlertType] - ): [Alert] - - """ - Real-time updated position of vehicles that are serving this pattern. - """ - vehiclePositions: [VehiclePosition!] - - """Original Trip pattern for changed patterns""" - originalTripPattern: Pattern -} - -"""Entities, which are relevant for a pattern and can contain alerts""" -enum PatternAlertType { - """Alerts affecting the pattern""" - PATTERN - - """Alerts affecting the pattern's route's agency""" - AGENCY - - """Alerts affecting the route that the pattern runs on""" - ROUTE - - """Alerts affecting the route type of the route that the pattern runs on""" - ROUTE_TYPE - - """Alerts affecting the trips which run on this pattern""" - TRIPS - - """Alerts affecting the stops which are on this pattern""" - STOPS_ON_PATTERN - - """Alerts affecting the stops of the trips which run on this pattern""" - STOPS_ON_TRIPS -} - -enum PickupDropoffType { - """Regularly scheduled pickup / drop off.""" - SCHEDULED - - """No pickup / drop off available.""" - NONE - - """Must phone agency to arrange pickup / drop off.""" - CALL_AGENCY - - """Must coordinate with driver to arrange pickup / drop off.""" - COORDINATE_WITH_DRIVER -} - -"Contact information for booking an on-demand or flexible service." -type ContactInfo { - "Name of the person to contact" - contactPerson: String - "Phone number to contact" - phoneNumber: String - "Email to contact" - eMail: String - "Fax number to contact" - faxNumber: String - "URL containing general information about the service" - infoUrl: String - "URL to the booking systems of the service" - bookingUrl: String - "Additional notes about the contacting the service provider" - additionalDetails: String -} - -"Temporal restriction for a booking" -type BookingTime { - "Time of the booking" - time: String - "How many days before the booking" - daysPrior: Int -} - -""" -Booking information for a stop time which has special requirements to use, like calling ahead or -using an app. -""" -type BookingInfo { - "Contact information for reaching the service provider" - contactInfo: ContactInfo - "When is the earliest time the service can be booked." - earliestBookingTime: BookingTime - "When is the latest time the service can be booked" - latestBookingTime: BookingTime - "Minimum number of seconds before travel to make the request" - minimumBookingNoticeSeconds: Long - "Maximum number of seconds before travel to make the request" - maximumBookingNoticeSeconds: Long - "A general message for those booking the service" - message: String - "A message specific to the pick up" - pickupMessage: String - "A message specific to the drop off" - dropOffMessage: String -} - -""" -What criteria should be used when optimizing a cycling route. -""" -input CyclingOptimizationInput @oneOf { - """ - Use one of the predefined optimization types. - """ - type: CyclingOptimizationType - - """ - Define optimization by weighing three criteria. - """ - triangle: TriangleCyclingFactorsInput -} - -""" -Predefined optimization alternatives for bicycling routing. For more customization, -one can use the triangle factors. -""" -enum CyclingOptimizationType { - """ - Search for routes with the shortest duration while ignoring the cycling safety - of the streets (the routes should still follow local regulations). Routes can include - steep streets, if they are the fastest alternatives. This option was previously called - `QUICK`. - """ - SHORTEST_DURATION - - """ - Emphasize flatness over safety or duration of the route. This option was previously called `FLAT`. - """ - FLAT_STREETS - - """ - Emphasize cycling safety over flatness or duration of the route. Safety can also include other - concerns such as convenience and general cyclist preferences by taking into account - road surface etc. This option was previously called `SAFE`. - """ - SAFE_STREETS - - """ - Completely ignore the elevation differences and prefer the streets, that are evaluated - to be the safest, even more than with the `SAFE_STREETS` option. - Safety can also include other concerns such as convenience and general cyclist preferences - by taking into account road surface etc. This option was previously called `GREENWAYS`. - """ - SAFEST_STREETS -} - -""" -What criteria should be used when optimizing a scooter route. -""" -input ScooterOptimizationInput @oneOf { - """ - Use one of the predefined optimization types. - """ - type: ScooterOptimizationType - - """ - Define optimization by weighing three criteria. - """ - triangle: TriangleScooterFactorsInput -} - -""" -Predefined optimization alternatives for scooter routing. For more customization, -one can use the triangle factors. -""" -enum ScooterOptimizationType { - """ - Search for routes with the shortest duration while ignoring the scooter safety - of the streets. The routes should still follow local regulations, but currently scooters - are only allowed on the same streets as bicycles which might not be accurate for each country - or with different types of scooters. Routes can include steep streets, if they are - the fastest alternatives. This option was previously called `QUICK`. - """ - SHORTEST_DURATION - - """ - Emphasize flatness over safety or duration of the route. This option was previously called `FLAT`. - """ - FLAT_STREETS - - """ - Emphasize scooter safety over flatness or duration of the route. Safety can also include other - concerns such as convenience and general preferences by taking into account road surface etc. - Note, currently the same criteria is used both for cycling and scooter travel to determine how - safe streets are for cycling or scooter. This option was previously called `SAFE`. - """ - SAFE_STREETS - - """ - Completely ignore the elevation differences and prefer the streets, that are evaluated - to be safest for scooters, even more than with the `SAFE_STREETS` option. - Safety can also include other concerns such as convenience and general preferences by taking - into account road surface etc. Note, currently the same criteria is used both for cycling and - scooter travel to determine how safe streets are for cycling or scooter. - This option was previously called `GREENWAYS`. - """ - SAFEST_STREETS -} - -""" -Speed in meters per seconds. Values are positive floating point numbers (for example, 2.34). -""" -scalar Speed - -"The board/alight position in between two stops of the pattern of a trip with continuous pickup/drop off." -type PositionBetweenStops { - "Position of the previous stop in the pattern. Positions are not required to start from 0 or be consecutive." - previousPosition: Int - "Position of the next stop in the pattern. Positions are not required to start from 0 or be consecutive." - nextPosition: Int -} - -"Stop position at a specific stop." -type PositionAtStop { - "Position of the stop in the pattern. Positions are not required to start from 0 or be consecutive." - position: Int -} - -union StopPosition = PositionAtStop | PositionBetweenStops - -type Place { - """ - For transit stops, the name of the stop. For points of interest, the name of the POI. - """ - name: String - - """ - Type of vertex. (Normal, Bike sharing station, Bike P+R, Transit stop) Mostly - used for better localization of bike sharing and P+R station names - """ - vertexType: VertexType - - """Latitude of the place (WGS 84)""" - lat: Float! - - """Longitude of the place (WGS 84)""" - lon: Float! - - """ - The time the rider will arrive at the place. This also includes real-time information - if available. - """ - arrival: LegTime - - """ - The time the rider will depart the place. This also includes real-time information - if available. - """ - departure: LegTime - - """The stop related to the place.""" - stop: Stop - - """ - The position of the stop in the pattern. This is not required to start from 0 or be consecutive - any - increasing integer sequence along the stops is valid. - - The purpose of this field is to identify the stop within the pattern so it can be cross-referenced - between it and the itinerary. It is safe to cross-reference when done quickly, i.e. within seconds. - However, it should be noted that real-time updates can change the values, so don't store it for - longer amounts of time. - - Depending on the source data, this might not be the GTFS `stop_sequence` but another value, perhaps - even generated. - - The position can be either at a certain stop or in between two for trips where this is possible. - """ - stopPosition: StopPosition - - """The vehicle rental station related to the place""" - vehicleRentalStation: VehicleRentalStation - - """The rental vehicle related to the place""" - rentalVehicle: RentalVehicle - - """The vehicle parking related to the place""" - vehicleParking: VehicleParking - - """The bike rental station related to the place""" - bikeRentalStation: BikeRentalStation @deprecated(reason: "Use vehicleRentalStation and rentalVehicle instead") - - """The bike parking related to the place""" - bikePark: BikePark @deprecated(reason: "bikePark is deprecated. Use vehicleParking instead.") - - """The car parking related to the place""" - carPark: CarPark @deprecated(reason: "carPark is deprecated. Use vehicleParking instead.") - - """ - The time the rider will arrive at the place. Format: Unix timestamp in milliseconds. - """ - arrivalTime: Long! @deprecated(reason: "Use `arrival` which includes timezone information.") - - """ - The time the rider will depart the place. Format: Unix timestamp in milliseconds. - """ - departureTime: Long! @deprecated(reason: "Use `departure` which includes timezone information.") -} - -type placeAtDistance implements Node { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! - place: PlaceInterface - - """Walking distance to the place along streets and paths""" - distance: Int -} - -"""A connection to a list of items.""" -type placeAtDistanceConnection { - edges: [placeAtDistanceEdge] - pageInfo: PageInfo! -} - -"""An edge in a connection.""" -type placeAtDistanceEdge { - """The item at the end of the edge""" - node: placeAtDistance - cursor: String! -} - -"""Interface for places, e.g. stops, stations, parking areas..""" -interface PlaceInterface { - id: ID! - - """Latitude of the place (WGS 84)""" - lat: Float - - """Longitude of the place (WGS 84)""" - lon: Float -} - -type Plan { - """The time and date of travel. Format: Unix timestamp in milliseconds.""" - date: Long - - """The origin""" - from: Place! - - """The destination""" - to: Place! - - """A list of possible itineraries""" - itineraries: [Itinerary]! - - """A list of possible error messages as enum""" - messageEnums: [String]! - - """A list of possible error messages in cleartext""" - messageStrings: [String]! - - """A list of routing errors, and fields which caused them""" - routingErrors: [RoutingError!]! - - """ - Use the cursor to go to the next "page" of itineraries. Copy the cursor from the last response - to the pageCursor query parameter and keep the original request as is. This will enable you to - search for itineraries in the next search-window. - The cursor based paging only support stepping to the next page, as it does not support jumping. - This is only usable when public transportation mode(s) are included in the query. - """ - nextPageCursor: String - - """ - Use the cursor to go to the previous "page" of itineraries. Copy the cursor from the last - response to the pageCursor query parameter and keep the original request otherwise as is. - This will enable you to search for itineraries in the previous search-window. - The cursor based paging only support stepping to the previous page, as it does not support - jumping. - This is only usable when public transportation mode(s) are included in the query. - """ - previousPageCursor: String - - """ - This is the suggested search time for the "previous page" or time window. Insert it together - with the searchWindowUsed in the request to get a new set of trips preceding in the - search-window BEFORE the current search. No duplicate trips should be returned, unless a trip - is delayed and new real-time data is available. - """ - prevDateTime: Long @deprecated(reason: "Use previousPageCursor instead") - - """ - This is the suggested search time for the "next page" or time window. Insert it together - with the searchWindowUsed in the request to get a new set of trips following in the - search-window AFTER the current search. No duplicate trips should be returned, unless a trip - is delayed and new real-time data is available. - """ - nextDateTime: Long @deprecated(reason: "Use nextPageCursor instead") - - """ - This is the `searchWindow` used by the raptor search. It is provided here for debugging - purpousess. - - The unit is seconds. - """ - searchWindowUsed: Long - - """Information about the timings for the plan generation""" - debugOutput: debugOutput! -} - -""" -Plan (result of an itinerary search) that follows -[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). -""" -type PlanConnection { - """ - What was the starting point for the itinerary search. - """ - searchDateTime: OffsetDateTime - - """ - Errors faced during the routing search. - """ - routingErrors: [RoutingError!]! - - """ - Edges which contain the itineraries. Part of the - [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). - """ - edges: [PlanEdge] - - """ - Contains cursors to continue the search and the information if there are more itineraries available. - Part of the [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). - """ - pageInfo: PlanPageInfo! -} - -""" -Edge outputted by a plan search. Part of the -[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). -""" -type PlanEdge { - """ - An itinerary suggestion. Part of the - [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). - """ - node: Itinerary! - - """ - The cursor of the edge. Part of the - [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). - """ - cursor: String! -} - -""" -List of coordinates in an encoded polyline format (see -https://developers.google.com/maps/documentation/utilities/polylinealgorithm). -The value appears in JSON as a string. -""" -scalar Polyline @specifiedBy(url: "https://developers.google.com/maps/documentation/utilities/polylinealgorithm") - -""" -Additional qualifier for a transport mode. -Note that qualifiers can only be used with certain transport modes. -""" -enum Qualifier { - """The vehicle used for transport can be rented""" - RENT - - """ - ~~HAVE~~ - **Currently not used** - """ - HAVE @deprecated(reason: "Currently not used") - - """ - The vehicle used must be left to a parking area before continuing the journey. - This qualifier is usable with transport modes `CAR` and `BICYCLE`. - Note that the vehicle is only parked if the journey is continued with public - transportation (e.g. if only `CAR` and `WALK` transport modes are allowed to - be used, the car will not be parked as it is used for the whole journey). - """ - PARK - - """ - ~~KEEP~~ - **Currently not used** - """ - KEEP @deprecated(reason: "Currently not used") - - """The user can be picked up by someone else riding a vehicle""" - PICKUP - - """The user can be dropped off by someone else riding a vehicle""" - DROPOFF - - """The mode is used for the access part of the search.""" - ACCESS, - - """The mode is used for the egress part of the search.""" - EGRESS, - - """The mode is used for the direct street search.""" - DIRECT, - - """Hailing a ride, for example via an app like Uber.""" - HAIL -} - -type QueryType { - """Fetches an object given its ID""" - node( - """The ID of an object""" - id: ID! - ): Node - - """Get all available feeds""" - feeds: [Feed] - - """Get all agencies""" - agencies: [Agency] - - """Return list of available ticket types""" - ticketTypes: [TicketType] - - """ - Get a single agency based on agency ID, i.e. value of field `gtfsId` (ID format is `FeedId:StopId`) - """ - agency(id: String!): Agency - - """Get all stops""" - stops( - """Return stops with these ids""" - ids: [String] - - """Query stops by this name""" - name: String - ): [Stop] - - """Get all stops within the specified bounding box""" - stopsByBbox( - """Southern bound of the bounding box""" - minLat: Float! - - """Western bound of the bounding box""" - minLon: Float! - - """Northern bound of the bounding box""" - maxLat: Float! - - """Eastern bound of the bounding box""" - maxLon: Float! - - """List of feed ids from which stops are returned""" - feeds: [String!] - ): [Stop] - - """ - Get all stops within the specified radius from a location. The returned type - is a Relay connection (see - https://facebook.github.io/relay/graphql/connections.htm). The stopAtDistance - type has two values: stop and distance. - """ - stopsByRadius( - """Latitude of the location (WGS 84)""" - lat: Float! - - """Longitude of the location (WGS 84)""" - lon: Float! - - """ - Radius (in meters) to search for from the specified location. Note that this - is walking distance along streets and paths rather than a geographic distance. - """ - radius: Int! - - """List of feed ids from which stops are returned""" - feeds: [String!] - before: String - after: String - first: Int - last: Int - ): stopAtDistanceConnection - - """ - Get all places (stops, stations, etc. with coordinates) within the specified - radius from a location. The returned type is a Relay connection (see - https://facebook.github.io/relay/graphql/connections.htm). The placeAtDistance - type has two fields: place and distance. The search is done by walking so the - distance is according to the network of walkable streets and paths. - """ - nearest( - """Latitude of the location (WGS 84)""" - lat: Float! - - """Longitude of the location (WGS 84)""" - lon: Float! - - """ - Maximum distance (in meters) to search for from the specified location. Note - that this is walking distance along streets and paths rather than a - geographic distance. Default is 2000m - """ - maxDistance: Int = 2000 - - """ - Maximum number of results. Search is stopped when this limit is reached. Default is 20. - """ - maxResults: Int = 20 - - """ - Only return places that are one of these types, e.g. `STOP` or `VEHICLE_RENT` - """ - filterByPlaceTypes: [FilterPlaceType] - - """ - Only return places that are related to one of these transport modes. This - argument can be used to return e.g. only nearest railway stations or only - nearest places related to bicycling. - """ - filterByModes: [Mode] - - """Only include places that match one of the given GTFS ids.""" - filterByIds: InputFilters @deprecated(reason: "Not actively maintained") - before: String - after: String - first: Int - last: Int - ): placeAtDistanceConnection @async - - """ - Get a single departure row based on its ID (ID format is `FeedId:StopId:PatternId`) - """ - departureRow(id: String!): DepartureRow - - """ - Get a single stop based on its ID, i.e. value of field `gtfsId` (ID format is `FeedId:StopId`) - """ - stop(id: String!): Stop - - """ - Get a single station based on its ID, i.e. value of field `gtfsId` (format is `FeedId:StopId`) - """ - station(id: String!): Stop - - """Get all stations""" - stations( - """Only return stations that match one of the ids in this list""" - ids: [String] - - """Query stations by name""" - name: String - ): [Stop] - - """Get all routes""" - routes( - """Only return routes with these ids""" - ids: [String] - - """Only return routes with these feedIds""" - feeds: [String] - - """Query routes by this name""" - name: String - - """Only include routes, which use one of these modes""" - transportModes: [Mode] - ): [Route] - - """ - Get a single route based on its ID, i.e. value of field `gtfsId` (format is `FeedId:RouteId`) - """ - route(id: String!): Route - - """Get all trips""" - trips( - """Only return trips with these feedIds""" - feeds: [String] - ): [Trip] - - """ - Get a single trip based on its ID, i.e. value of field `gtfsId` (format is `FeedId:TripId`) - """ - trip(id: String!): Trip - - """ - Finds a trip matching the given parameters. This query type is useful if the - id of a trip is not known, but other details uniquely identifying the trip are - available from some source (e.g. MQTT vehicle positions). - """ - fuzzyTrip( - """id of the route""" - route: String! - - """ - Direction of the trip, possible values: 0, 1 or -1. - -1 indicates that the direction is irrelevant, i.e. in case the route has - trips only in one direction. See field `directionId` of Pattern. - """ - direction: Int = -1 - - """Departure date of the trip, format: YYYY-MM-DD""" - date: String! - - """ - Departure time of the trip, format: seconds since midnight of the departure date - """ - time: Int! - ): Trip - - """Get cancelled TripTimes.""" - cancelledTripTimes( - """Feed feedIds (e.g. ["HSL"]).""" - feeds: [String] - - """Route gtfsIds (e.g. ["HSL:1098"]).""" - routes: [String] - - """TripPattern codes (e.g. ["HSL:1098:1:01"]).""" - patterns: [String] - - """Trip gtfsIds (e.g. ["HSL:1098_20190405_Ma_2_1455"]).""" - trips: [String] - - """ - Only cancelled trip times scheduled to run on minDate or after are returned. Format: "2019-12-23" or "20191223". - """ - minDate: String - - """ - Only cancelled trip times scheduled to run on maxDate or before are returned. Format: "2019-12-23" or "20191223". - """ - maxDate: String - - """ - Only cancelled trip times that have first stop departure time at - minDepartureTime or after are returned. Format: seconds since midnight of minDate. - """ - minDepartureTime: Int - - """ - Only cancelled trip times that have first stop departure time at - maxDepartureTime or before are returned. Format: seconds since midnight of maxDate. - """ - maxDepartureTime: Int - - """ - Only cancelled trip times that have last stop arrival time at minArrivalTime - or after are returned. Format: seconds since midnight of minDate. - """ - minArrivalTime: Int - - """ - Only cancelled trip times that have last stop arrival time at maxArrivalTime - or before are returned. Format: seconds since midnight of maxDate. - """ - maxArrivalTime: Int - ): [Stoptime] - - """Get all patterns""" - patterns: [Pattern] - - """ - Get a single pattern based on its ID, i.e. value of field `code` (format is - `FeedId:RouteId:DirectionId:PatternVariantNumber`) - """ - pattern(id: String!): Pattern - - """Get all clusters""" - clusters: [Cluster] - - """Get a single cluster based on its ID, i.e. value of field `gtfsId`""" - cluster(id: String!): Cluster - - """Get all active alerts""" - alerts( - """Only return alerts in these feeds""" - feeds: [String!] - - """Only return alerts with these severity levels""" - severityLevel: [AlertSeverityLevelType!] - - """Only return alerts with these effects""" - effect: [AlertEffectType!] - - """Only return alerts with these causes""" - cause: [AlertCauseType!] - - """Only return alerts affecting these routes""" - route: [String!] - - """Only return alerts affecting these stops""" - stop: [String!] - ): [Alert] - - """Get the time range for which the API has data available""" - serviceTimeRange: serviceTimeRange - - """Get all bike rental stations""" - bikeRentalStations( - """ - Return bike rental stations with these ids. - **Note:** if an id is invalid (or the bike rental station service is unavailable) - the returned list will contain `null` values. - """ - ids: [String] - ): [BikeRentalStation] @deprecated(reason: "Use rentalVehicles or vehicleRentalStations instead") - - """ - Get a single bike rental station based on its ID, i.e. value of field `stationId` - """ - bikeRentalStation(id: String!): BikeRentalStation @deprecated(reason: "Use rentalVehicle or vehicleRentalStation instead") - - """Get all rental vehicles""" - rentalVehicles( - """ - Return rental vehicles with these ids, i.e. value of field `vehicleId`. - **Note:** if an id is invalid (or the rental service is unavailable) - the returned list will contain `null` values. - - If this is provided all other filters are ignored. - """ - ids: [String], - - """ - Return only rental vehicles that have this form factor. - """ - formFactors: [FormFactor] - ): [RentalVehicle] - - """ - Get a single rental vehicle based on its ID, i.e. value of field `vehicleId` - """ - rentalVehicle(id: String!): RentalVehicle - - """Get all vehicle rental stations""" - vehicleRentalStations( - """ - Return vehicle rental stations with these ids, i.e. value of field `stationId`. - **Note:** if an id is invalid (or the rental service is unavailable) - the returned list will contain `null` values. - """ - ids: [String] - ): [VehicleRentalStation] - - """ - Get a single vehicle rental station based on its ID, i.e. value of field `stationId` - """ - vehicleRentalStation(id: String!): VehicleRentalStation - - ## Deprecated fields - - """Get all bike parks""" - bikeParks: [BikePark] @deprecated(reason: "bikeParks is deprecated. Use vehicleParkings instead.") - - """ - Get a single bike park based on its ID, i.e. value of field `bikeParkId` - """ - bikePark(id: String!): BikePark @deprecated(reason: "bikePark is deprecated. Use vehicleParking instead.") - - """Get all car parks""" - carParks( - """ - Return car parks with these ids. - **Note:** if an id is invalid (or the car park service is unavailable) the returned list will contain `null` values. - """ - ids: [String] - ): [CarPark] @deprecated(reason: "carParks is deprecated. Use vehicleParkings instead.") - - """Get a single car park based on its ID, i.e. value of field `carParkId`""" - carPark(id: String!): CarPark @deprecated(reason: "carPark is deprecated. Use vehicleParking instead.") - - """Get all vehicle parkings""" - vehicleParkings( - """ - Return vehicle parkings with these ids. - **Note:** if an id is invalid (or the vehicle parking service is unavailable) - the returned list will contain `null` values. - """ - ids: [String] - ): [VehicleParking] - - """ - Get a single vehicle parking based on its ID - """ - vehicleParking(id: String!): VehicleParking - - """Needed until https://github.com/facebook/relay/issues/112 is resolved""" - viewer: QueryType - - """ - Plans an itinerary from point A to point B based on the given arguments - """ - plan( - """ - Date of departure or arrival in format YYYY-MM-DD. Default value: current date - """ - date: String - - """ - Time of departure or arrival in format hh:mm:ss. Default value: current time - """ - time: String - - """ - The geographical location where the itinerary begins. - Use either this argument or `fromPlace`, but not both. - """ - from: InputCoordinates - - """ - The geographical location where the itinerary ends. - Use either this argument or `toPlace`, but not both. - """ - to: InputCoordinates - - """ - The place where the itinerary begins in format `name::place`, where `place` - is either a lat,lng pair (e.g. `Pasila::60.199041,24.932928`) or a stop id - (e.g. `Pasila::HSL:1000202`). - Use either this argument or `from`, but not both. - """ - fromPlace: String - - """ - The place where the itinerary ends in format `name::place`, where `place` is - either a lat,lng pair (e.g. `Pasila::60.199041,24.932928`) or a stop id - (e.g. `Pasila::HSL:1000202`). - Use either this argument or `to`, but not both. - """ - toPlace: String - - """ - Whether the itinerary must be wheelchair accessible. Default value: false - """ - wheelchair: Boolean - - """The maximum number of itineraries to return. Default value: 3.""" - numItineraries: Int = 3 - - """ - The length of the search-window in seconds. This parameter is optional. - - The search-window is defined as the duration between the earliest-departure-time(EDT) and - the latest-departure-time(LDT). OTP will search for all itineraries in this departure - window. If `arriveBy=true` the `dateTime` parameter is the latest-arrival-time, so OTP - will dynamically calculate the EDT. Using a short search-window is faster than using a - longer one, but the search duration is not linear. Using a \"too\" short search-window will - waste resources server side, while using a search-window that is too long will be slow. - - OTP will dynamically calculate a reasonable value for the search-window, if not provided. - The calculation comes with a significant overhead (10-20% extra). Whether you should use the - dynamic calculated value or pass in a value depends on your use-case. For a travel planner - in a small geographical area, with a dense network of public transportation, a fixed value - between 40 minutes and 2 hours makes sense. To find the appropriate search-window, adjust - it so that the number of itineraries on average is around the wanted `numItineraries`. Make - sure you set the `numItineraries` to a high number while testing. For a country wide area - like Norway, using the dynamic search-window is the best. - - When paginating, the search-window is calculated using the `numItineraries` in the original - search together with statistics from the search for the last page. This behaviour is - configured server side, and can not be overridden from the client. - - The search-window used is returned to the response metadata as `searchWindowUsed` for - debugging purposes. - """ - searchWindow: Long, - - """ - Use the cursor to get the next or previous page of results. - The next page is a set of itineraries departing after the last itinerary in this result and - the previous page is a set of itineraries departing before the first itinerary. - This is only usable when public transportation mode(s) are included in the query. - """ - pageCursor: String - - """ - A multiplier for how bad biking is, compared to being in transit for equal - lengths of time. Default value: 2.0 - """ - bikeReluctance: Float - - """ - A multiplier for how bad walking with a bike is, compared to being in transit for equal - lengths of time. Default value: 5.0 - """ - bikeWalkingReluctance: Float - - """ - A multiplier for how bad driving is, compared to being in transit for equal - lengths of time. Default value: 3.0 - """ - carReluctance: Float - - """ - A multiplier for how bad walking is, compared to being in transit for equal - lengths of time. Empirically, values between 2 and 4 seem to correspond - well to the concept of not wanting to walk too much without asking for - totally ridiculous itineraries, but this observation should in no way be - taken as scientific or definitive. Your mileage may vary. See - https://github.com/opentripplanner/OpenTripPlanner/issues/4090 for impact on - performance with high values. Default value: 2.0 - """ - walkReluctance: Float - - """ - How much worse is waiting for a transit vehicle than being on a transit - vehicle, as a multiplier. The default value treats wait and on-vehicle time - as the same. It may be tempting to set this higher than walkReluctance (as - studies often find this kind of preferences among riders) but the planner - will take this literally and walk down a transit line to avoid waiting at a - stop. This used to be set less than 1 (0.95) which would make waiting - offboard preferable to waiting onboard in an interlined trip. That is also - undesirable. If we only tried the shortest possible transfer at each stop to - neighboring stop patterns, this problem could disappear. Default value: 1.0. - """ - waitReluctance: Float - - """ - Max walk speed along streets, in meters per second. Default value: 1.33 - """ - walkSpeed: Float - - """Max bike speed along streets, in meters per second. Default value: 5.0""" - bikeSpeed: Float - - """Time to get on and off your own bike, in seconds. Default value: 0""" - bikeSwitchTime: Int - - """ - Cost of getting on and off your own bike. Unit: seconds. Default value: 0 - """ - bikeSwitchCost: Int - - """ - Optimization type for bicycling legs, e.g. prefer flat terrain. Default value: `QUICK` - """ - optimize: OptimizeType - - """ - Triangle optimization parameters for bicycling legs. Only effective when `optimize` is set to **TRIANGLE**. - """ - triangle: InputTriangle - - """ - Whether the itinerary should depart at the specified time (false), or arrive - to the destination at the specified time (true). Default value: false. - """ - arriveBy: Boolean - - """ - List of routes and agencies which are given higher preference when planning the itinerary - """ - preferred: InputPreferred - - """ - List of routes and agencies which are given lower preference when planning the itinerary - """ - unpreferred: InputUnpreferred - - """ - This prevents unnecessary transfers by adding a cost for boarding a vehicle. Unit: seconds. Default value: 600 - """ - walkBoardCost: Int - - """ - Separate cost for boarding a vehicle with a bicycle, which is more difficult - than on foot. Unit: seconds. Default value: 600 - """ - bikeBoardCost: Int - - """ - List of routes, trips, agencies and stops which are not used in the itinerary - """ - banned: InputBanned - - """ - An extra penalty added on transfers (i.e. all boardings except the first - one). Not to be confused with bikeBoardCost and walkBoardCost, which are the - cost of boarding a vehicle with and without a bicycle. The boardCosts are - used to model the 'usual' perceived cost of using a transit vehicle, and the - transferPenalty is used when a user requests even less transfers. In the - latter case, we don't actually optimize for fewest transfers, as this can - lead to absurd results. Consider a trip in New York from Grand Army Plaza - (the one in Brooklyn) to Kalustyan's at noon. The true lowest transfers - route is to wait until midnight, when the 4 train runs local the whole way. - The actual fastest route is the 2/3 to the 4/5 at Nevins to the 6 at Union - Square, which takes half an hour. Even someone optimizing for fewest - transfers doesn't want to wait until midnight. Maybe they would be willing - to walk to 7th Ave and take the Q to Union Square, then transfer to the 6. - If this takes less than optimize_transfer_penalty seconds, then that's what - we'll return. Default value: 0. - """ - transferPenalty: Int - - """ - List of transportation modes that the user is willing to use. Default: `["WALK","TRANSIT"]` - """ - transportModes: [TransportMode] - - """ - The weight multipliers for transit modes. WALK, BICYCLE, CAR, TRANSIT and LEG_SWITCH are not included. - """ - modeWeight: InputModeWeight - - """ - Debug the itinerary-filter-chain. The filters will mark itineraries as deleted, but does NOT delete them when this is enabled. - """ - debugItineraryFilter: Boolean - - """ - Whether arriving at the destination with a rented (station) bicycle is allowed without - dropping it off. Default: false. - """ - allowKeepingRentedBicycleAtDestination: Boolean - - """ - The cost of arriving at the destination with the rented vehicle, to discourage doing so. - Default value: 0. - """ - keepingRentedBicycleAtDestinationCost: Int - - """ - Invariant: `boardSlack + alightSlack <= transferSlack`. Default value: 0 - """ - boardSlack: Int - - """ - Invariant: `boardSlack + alightSlack <= transferSlack`. Default value: 0 - """ - alightSlack: Int - - """ - A global minimum transfer time (in seconds) that specifies the minimum - amount of time that must pass between exiting one transit vehicle and - boarding another. This time is in addition to time it might take to walk - between transit stops. Default value: 0 - """ - minTransferTime: Int - - """ - Penalty (in seconds) for using a non-preferred transfer. Default value: 180 - """ - nonpreferredTransferPenalty: Int - - """Maximum number of transfers. Default value: 2""" - maxTransfers: Int - - """ - This argument has currently no effect on which itineraries are returned. Use - argument `fromPlace` to start the itinerary from a specific stop. - ~~A transit stop that this trip must start from~~ - """ - startTransitStopId: String - - """ - When false, return itineraries using canceled trips. Default value: true. - """ - omitCanceled: Boolean = true - - """ - When true, real-time updates are ignored during this search. Default value: false - """ - ignoreRealtimeUpdates: Boolean - - """ - Two-letter language code (ISO 639-1) used for returned text. - **Note:** only part of the data has translations available and names of - stops and POIs are returned in their default language. Due to missing - translations, it is sometimes possible that returned text uses a mixture of two languages. - """ - locale: String - - """ - List of ticket types that are allowed to be used in itineraries. - See `ticketTypes` query for list of possible ticket types. - """ - allowedTicketTypes: [String] - - """ - Which vehicle rental networks can be used. By default, all networks are allowed. - """ - allowedVehicleRentalNetworks: [String] - - """ - Which vehicle rental networks cannot be used. By default, all networks are allowed. - """ - bannedVehicleRentalNetworks: [String] - - """ - Factor for how much the walk safety is considered in routing. Value should be between 0 and 1. - If the value is set to be 0, safety is ignored. Default is 1.0. - """ - walkSafetyFactor: Float - - "Preferences for vehicle parking" - parking: VehicleParkingInput - - ## Deprecated fields, none of these have any effect on the routing anymore - - """ - The maximum distance (in meters) the user is willing to walk per walking - section. If the only transport mode allowed is `WALK`, then the value of - this argument is ignored. - Default: 2000m - Maximum value: 15000m - **Note:** If this argument has a relatively small value and only some - transport modes are allowed (e.g. `WALK` and `RAIL`), it is possible to get - an itinerary which has (useless) back and forth public transport legs to - avoid walking too long distances. - """ - maxWalkDistance: Float @deprecated(reason: "Does nothing. Use walkReluctance instead.") - - """ - How much more reluctant is the user to walk on streets with car traffic allowed. Default value: 1.0 - """ - walkOnStreetReluctance: Float @deprecated(reason: "Use `walkSafetyFactor` instead") - - """ - How much less bad is waiting at the beginning of the trip (replaces - `waitReluctance` on the first boarding). Default value: 0.4 - """ - waitAtBeginningFactor: Float @deprecated(reason: "Removed in OTP 2, the timetable-view replaces this functionality.") - - """ - This argument has no use for itinerary planning and will be removed later. - When true, do not use goal direction or stop at the target, build a full SPT. Default value: false. - """ - batch: Boolean @deprecated(reason: "Removed in OTP 2") - - """Is bike rental allowed? Default value: false""" - allowBikeRental: Boolean @deprecated(reason: "Rental is specified by modes") - - """ - No effect on itinerary planning, adjust argument `time` instead to get later departures. - ~~The maximum wait time in seconds the user is willing to delay trip start. Only effective in Analyst.~~ - """ - claimInitialWait: Long @deprecated(reason: "Removed in OTP 2") - - """ - **Consider this argument experimental** – setting this argument to true - causes timeouts and unoptimal routes in many cases. - When true, reverse optimize (find alternative transportation mode, which - still arrives to the destination in time) this search on the fly after - processing each transit leg, rather than reverse-optimizing the entire path - when it's done. Default value: false. - """ - reverseOptimizeOnTheFly: Boolean @deprecated(reason: "Removed in OTP 2") - - """ - If true, the remaining weight heuristic is disabled. Currently only - implemented for the long distance path service. - """ - disableRemainingWeightHeuristic: Boolean @deprecated(reason: "Removed in OTP 2.2") - - """ - Whether legs should be compacted by performing a reversed search. - """ - compactLegsByReversedSearch: Boolean @deprecated(reason: "Removed in OTP 2") - - """ - Which vehicle rental networks can be used. By default, all networks are allowed. - """ - allowedBikeRentalNetworks: [String] @deprecated(reason: "Use allowedVehicleRentalNetworks instead") - - """ - The maximum time (in seconds) of pre-transit travel when using - drive-to-transit (park and ride or kiss and ride). Default value: 1800. - """ - maxPreTransitTime: Int @deprecated(reason: "Use walkReluctance or future reluctance parameters for other modes") - - """ - How expensive it is to drive a car when car&parking, increase this value to - make car driving legs shorter. Default value: 1. - """ - carParkCarLegWeight: Float @deprecated(reason: "Use `carReluctance` instead.") - - """Tuning parameter for the search algorithm, mainly useful for testing.""" - heuristicStepsPerMainStep: Int @deprecated(reason: "Removed. Doesn't do anything.") - - """ - How easily bad itineraries are filtered from results. Value 0 (default) - disables filtering. Itineraries are filtered if they are worse than another - one in some respect (e.g. more walking) by more than the percentage of - filtering level, which is calculated by dividing 100% by the value of this - argument (e.g. `itineraryFiltering = 0.5` → 200% worse itineraries are filtered). - """ - itineraryFiltering: Float @deprecated(reason: "Removed. Doesn't do anything.") - - """An ordered list of intermediate locations to be visited.""" - intermediatePlaces: [InputCoordinates] @deprecated(reason: "Not implemented in OTP2.") - - """ - ID of the trip on which the itinerary starts. This argument can be used to - plan itineraries when the user is already onboard a vehicle. When using this - argument, arguments `time` and `from` should be set based on a vehicle - position message received from the vehicle running the specified trip. - **Note:** this argument only takes into account the route and estimated - travel time of the trip (and therefore arguments `time` and `from` must be - used correctly to get meaningful itineraries). - """ - startTransitTripId: String @deprecated(reason: "Not implemented in OTP2") - ): Plan @async - - """ - Plan (itinerary) search that follows - [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm). - """ - planConnection( - """ - Datetime of the search. It's possible to either define the earliest departure time - or the latest arrival time. By default, earliest departure time is set as now. - """ - dateTime: PlanDateTimeInput - - """ - Duration of the search window. This either starts at the defined earliest departure - time or ends at the latest arrival time. If this is not provided, a reasonable - search window is automatically generated. When searching for earlier or later itineraries - with paging, this search window is no longer used and the new window will be based - on how many suggestions were returned in the previous search. The new search window can be - shorter or longer than the original search window. Note, itineraries are returned faster - with a smaller search window and search window limitation is done mainly for performance reasons. - - Setting this parameter makes especially sense if the transportation network is as sparse or dense - in the whole itinerary search area. Otherwise, letting the system decide what is the search window - is in combination of using paging can lead to better performance and to getting a more consistent - number of itineraries in each search. - """ - searchWindow: Duration - - """ - The origin where the search starts. Usually coordinates but can also be a stop location. - """ - origin: PlanLabeledLocationInput! - - """ - The destination where the search ends. Usually coordinates but can also be a stop location. - """ - destination: PlanLabeledLocationInput! - - """ - Street and transit modes used during the search. This also includes options to only return - an itinerary that contains no transit legs or force transit to be used in all itineraries. - By default, all transit modes are usable and `WALK` is used for direct street suggestions, - access, egress and transfers. - """ - modes: PlanModesInput - - """ - Preferences that affect what itineraries are returned. Preferences are split into categories. - """ - preferences: PlanPreferencesInput - - """ - Settings that control the behavior of itinerary filtering. These are advanced settings and - should not be set by a user through user preferences. - """ - itineraryFilter: PlanItineraryFilterInput - - """ - Locale used for translations. Note, there might not necessarily be translations available. - It's possible and recommended to use the ´accept-language´ header instead of this parameter. - """ - locale: Locale - - """ - Takes in cursor from a previous search. Used for forward pagination. If earliest departure time - is used in the original query, the new search then returns itineraries that depart after - the start time of the last itinerary that was returned, or at the same time if there are multiple - itinerary options that can depart at that moment in time. - If latest arrival time is defined, the new search returns itineraries that arrive before the end - time of the last itinerary that was returned in the previous search, or at the same time if there - are multiple itinerary options that can arrive at that moment in time. This parameter is part of - the [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm) and - should be used together with the `first` parameter. - """ - after: String - - """ - How many new itineraries should at maximum be returned in either the first search or with - forward pagination. This parameter is part of the - [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm) - and should be used together with the `after` parameter (although `after` shouldn't be defined - in the first search). - """ - first: Int - - """ - Takes in cursor from a previous search. Used for backwards pagination. If earliest departure time - is used in the original query, the new search then returns itineraries that depart before that time. - If latest arrival time is defined, the new search returns itineraries that arrive after that time. - This parameter is part of the [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm) - and should be used together with the `last` parameter. - """ - before: String - - """ - How many new itineraries should at maximum be returned in backwards pagination. It's recommended to - use the same value as was used for the `first` parameter in the original search for optimal - performance. This parameter is part of the - [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm) - and should be used together with the `before` parameter. - """ - last: Int - ): PlanConnection @async @deprecated(reason: "Experimental and can include breaking changes, use plan instead") -} - -enum RealtimeState { - """ - The trip information comes from the GTFS feed, i.e. no real-time update has been applied. - """ - SCHEDULED - - """ - The trip information has been updated, but the trip pattern stayed the same as the trip pattern of the scheduled trip. - """ - UPDATED - - """The trip has been canceled by a real-time update.""" - CANCELED - - """ - The trip has been added using a real-time update, i.e. the trip was not present in the GTFS feed. - """ - ADDED - - """ - The trip information has been updated and resulted in a different trip pattern - compared to the trip pattern of the scheduled trip. - """ - MODIFIED -} - -""" -A cost multiplier for how bad something is compared to being in transit for equal lengths of time. -The value should be greater than 0. 1 means neutral and values below 1 mean that something is -preferred over transit. - -""" -scalar Reluctance - -""" -Preferences related to scooter rental (station based or floating scooter rental). -""" -input ScooterRentalPreferencesInput { - """ - Is it possible to arrive to the destination with a rented scooter and does it - come with an extra cost. - """ - destinationScooterPolicy: DestinationScooterPolicyInput - - """ - Rental networks which can be potentially used as part of an itinerary. - """ - allowedNetworks: [String!] - - """ - Rental networks which cannot be used as part of an itinerary. - """ - bannedNetworks: [String!] -} - -""" -Preferences related to car rental (station based or floating car rental). -""" -input CarRentalPreferencesInput { - """ - Rental networks which can be potentially used as part of an itinerary. - """ - allowedNetworks: [String!] - - """ - Rental networks which cannot be used as part of an itinerary. - """ - bannedNetworks: [String!] -} - -""" -Preferences related to bicycle rental (station based or floating bicycle rental). -""" -input BicycleRentalPreferencesInput { - """ - Is it possible to arrive to the destination with a rented bicycle and does it - come with an extra cost. - """ - destinationBicyclePolicy: DestinationBicyclePolicyInput - - """ - Rental networks which can be potentially used as part of an itinerary. - """ - allowedNetworks: [String!] - - """ - Rental networks which cannot be used as part of an itinerary. - """ - bannedNetworks: [String!] -} - -""" -Route represents a public transportation service, usually from point A to point -B and *back*, shown to customers under a single name, e.g. bus 550. Routes -contain patterns (see field `patterns`), which describe different variants of -the route, e.g. outbound pattern from point A to point B and inbound pattern -from point B to point A. -""" -type Route implements Node { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! - - """ID of the route in format `FeedId:RouteId`""" - gtfsId: String! - - """Agency operating the route""" - agency: Agency - - """Short name of the route, usually a line number, e.g. 550""" - shortName: String - - """Long name of the route, e.g. Helsinki-Leppävaara""" - longName( - """If translated longName is found from gtfs translation.txt and wanted language is not same as - feed's language then returns wanted translation. Otherwise uses name from routes.txt. - """ - language: String): String - - """Transport mode of this route, e.g. `BUS`""" - mode: TransitMode - - """ - The raw GTFS route type as a integer. For the list of possible values, see: - https://developers.google.com/transit/gtfs/reference/#routestxt and - https://developers.google.com/transit/gtfs/reference/extended-route-types - """ - type: Int - desc: String - url: String - - """ - The color (in hexadecimal format) the agency operating this route would prefer - to use on UI elements (e.g. polylines on a map) related to this route. This - value is not available for most routes. - """ - color: String - - """ - The color (in hexadecimal format) the agency operating this route would prefer - to use when displaying text related to this route. This value is not available - for most routes. - """ - textColor: String - bikesAllowed: BikesAllowed - - """List of patterns which operate on this route""" - patterns: [Pattern] - - """List of stops on this route""" - stops: [Stop] - - """List of trips which operate on this route""" - trips: [Trip] - - """ - List of alerts which have an effect on the route directly or indirectly. - By default only alerts directly affecting this route are returned. It's also possible - to return other relevant alerts through defining types. - """ - alerts( - """ - Returns alerts for these types that are relevant for the route. - By default only returns alerts that directly affect this route. - """ - types: [RouteAlertType] - ): [Alert] - - """ - Orders the routes in a way which is useful for presentation to passengers. - Routes with smaller values should be displayed first. - - The value can be any non-negative integer. A null value means that no information was supplied. - - This value is passed through from the source data without modification. If multiple feeds - define sort orders for their routes, they may not be comparable to each other as no agreed scale - exists. - - Two routes may also have the same sort order and clients must decide based on other criteria - what the actual order is. - """ - sortOrder: Int -} - -"""Entities that are relevant for routes that can contain alerts""" -enum RouteAlertType { - """Alerts affecting the route's agency.""" - AGENCY - - """Alerts directly affecting the route.""" - ROUTE - - """Alerts affecting the route type of the route.""" - ROUTE_TYPE - - """Alerts affecting the stops that are on the route.""" - STOPS_ON_ROUTE - - """Alerts affecting the route's trips.""" - TRIPS - - """Alerts affecting the stops on some trips of the route.""" - STOPS_ON_TRIPS - - """ - Alerts affecting route's patterns. - """ - PATTERNS -} - -""" -Route type entity which covers all agencies if agency is null, -otherwise only relevant for one agency. -""" -type RouteType { - """ - GTFS Route type. - For the list of possible values, see: - https://developers.google.com/transit/gtfs/reference/#routestxt and - https://developers.google.com/transit/gtfs/reference/extended-route-types - """ - routeType: Int! - - """A public transport agency""" - agency: Agency - - """ - The routes which have the defined routeType and belong to the agency, if defined. - Otherwise all routes of the feed that have the defined routeType. - """ - routes: [Route] -} - -"""Time range for which the API has data available""" -type serviceTimeRange { - """ - Time from which the API has data available. Format: Unix timestamp in seconds - """ - start: Long - - """ - Time until which the API has data available. Format: Unix timestamp in seconds - """ - end: Long -} - -"""Actions to take relative to the current position when engaging a walking/driving step.""" -enum RelativeDirection { - DEPART - HARD_LEFT - LEFT - SLIGHTLY_LEFT - CONTINUE - SLIGHTLY_RIGHT - RIGHT - HARD_RIGHT - CIRCLE_CLOCKWISE - CIRCLE_COUNTERCLOCKWISE - ELEVATOR - UTURN_LEFT - UTURN_RIGHT - ENTER_STATION - EXIT_STATION - FOLLOW_SIGNS +Enable this to attach a system notice to itineraries instead of removing them. This is very +convenient when tuning the itinerary-filter-chain. +""" +enum ItineraryFilterDebugProfile { + """ + Only return the requested number of itineraries, counting both actual and deleted ones. + The top `numItineraries` using the request sort order is returned. This does not work + with paging, itineraries after the limit, but inside the search-window are skipped when + moving to the next page. + """ + LIMIT_TO_NUMBER_OF_ITINERARIES + """ + Return all itineraries, including deleted ones, inside the actual search-window used + (the requested search-window may differ). + """ + LIMIT_TO_SEARCH_WINDOW + "List all itineraries, including all deleted itineraries." + LIST_ALL + "By default, the debug itinerary filters is turned off." + OFF } -"""The cardinal (compass) direction taken when engaging a walking/driving step.""" -enum AbsoluteDirection { - NORTH - NORTHEAST - EAST - SOUTHEAST - SOUTH - SOUTHWEST - WEST - NORTHWEST +"Identifies whether this stop represents a stop or station." +enum LocationType { + ENTRANCE + "A physical structure or area that contains one or more stop." + STATION + "A location where passengers board or disembark from a transit vehicle." + STOP } -"""Occupancy status of a vehicle.""" +enum Mode { + "AIRPLANE" + AIRPLANE + "BICYCLE" + BICYCLE + "BUS" + BUS + "CABLE_CAR" + CABLE_CAR + "CAR" + CAR + "Private car trips shared with others." + CARPOOL + "COACH" + COACH + "FERRY" + FERRY + "Enables flexible transit for access and egress legs" + FLEX + "Enables flexible transit for access and egress legs" + FLEXIBLE @deprecated(reason : "Use FLEX instead") + "FUNICULAR" + FUNICULAR + "GONDOLA" + GONDOLA + "Only used internally. No use for API users." + LEG_SWITCH @deprecated(reason : "No longer supported") + "Railway in which the track consists of a single rail or a beam." + MONORAIL + "RAIL" + RAIL + "SCOOTER" + SCOOTER + "SUBWAY" + SUBWAY + "A taxi, possibly operated by a public transport agency." + TAXI + "TRAM" + TRAM + "A special transport mode, which includes all public transport." + TRANSIT + "Electric buses that draw power from overhead wires using poles." + TROLLEYBUS + "WALK" + WALK +} + +"Occupancy status of a vehicle." enum OccupancyStatus { - """Default. There is no occupancy-data on this departure.""" - NO_DATA_AVAILABLE - + """ + The vehicle or carriage can currently accommodate only standing passengers and has limited + space for them. There isn't a big difference between this and FULL so it's possible to handle + them as the same value, if one wants to limit the number of different values. + SIRI nordic profile: merge into `STANDING_ROOM_ONLY`. + """ + CRUSHED_STANDING_ROOM_ONLY """ The vehicle is considered empty by most measures, and has few or no passengers onboard, but is still accepting passengers. There isn't a big difference between this and MANY_SEATS_AVAILABLE @@ -4645,7 +2921,18 @@ enum OccupancyStatus { SIRI nordic profile: merge these into `MANY_SEATS_AVAILABLE`. """ EMPTY - + """ + The vehicle or carriage has a small number of seats available. The amount of free seats out of + the total seats available to be considered small enough to fall into this category is + determined at the discretion of the producer. + SIRI nordic profile: less than ~50% of seats available. + """ + FEW_SEATS_AVAILABLE + """ + The vehicle is considered full by most measures, but may still be allowing passengers to + board. + """ + FULL """ The vehicle or carriage has a large number of seats available. The amount of free seats out of the total seats available to be considered large enough to fall into this category is @@ -4655,951 +2942,1325 @@ enum OccupancyStatus { SIRI nordic profile: more than ~50% of seats available. """ MANY_SEATS_AVAILABLE - """ - The vehicle or carriage has a small number of seats available. The amount of free seats out of - the total seats available to be considered small enough to fall into this category is - determined at the discretion of the producer. - SIRI nordic profile: less than ~50% of seats available. + The vehicle or carriage is not accepting passengers. + SIRI nordic profile: if vehicle/carriage is not in use / unavailable, or passengers are only allowed + to alight due to e.g. crowding. """ - FEW_SEATS_AVAILABLE - + NOT_ACCEPTING_PASSENGERS + "Default. There is no occupancy-data on this departure." + NO_DATA_AVAILABLE """ The vehicle or carriage can currently accommodate only standing passengers. SIRI nordic profile: less than ~10% of seats available. """ STANDING_ROOM_ONLY +} +"Optimization type for bicycling legs" +enum OptimizeType { + "Prefer flat terrain" + FLAT + "GREENWAYS" + GREENWAYS + "Prefer faster routes" + QUICK + "Prefer safer routes, i.e. avoid crossing streets and use bike paths when possible" + SAFE + "**TRIANGLE** optimization type can be used to set relative preferences of optimization factors. See argument `triangle`." + TRIANGLE +} + +"Entities, which are relevant for a pattern and can contain alerts" +enum PatternAlertType { + "Alerts affecting the pattern's route's agency" + AGENCY + "Alerts affecting the pattern" + PATTERN + "Alerts affecting the route that the pattern runs on" + ROUTE + "Alerts affecting the route type of the route that the pattern runs on" + ROUTE_TYPE + "Alerts affecting the stops which are on this pattern" + STOPS_ON_PATTERN + "Alerts affecting the stops of the trips which run on this pattern" + STOPS_ON_TRIPS + "Alerts affecting the trips which run on this pattern" + TRIPS +} + +enum PickupDropoffType { + "Must phone agency to arrange pickup / drop off." + CALL_AGENCY + "Must coordinate with driver to arrange pickup / drop off." + COORDINATE_WITH_DRIVER + "No pickup / drop off available." + NONE + "Regularly scheduled pickup / drop off." + SCHEDULED +} + +"Street modes that can be used for access to the transit network from origin." +enum PlanAccessMode { """ - The vehicle or carriage can currently accommodate only standing passengers and has limited - space for them. There isn't a big difference between this and FULL so it's possible to handle - them as the same value, if one wants to limit the number of different values. - SIRI nordic profile: merge into `STANDING_ROOM_ONLY`. + Cycling to a stop and boarding a vehicle with the bicycle. + Note, this can include walking when it's needed to walk the bicycle. + Access can use cycling only if the mode used for transfers + and egress is also `BICYCLE`. """ - CRUSHED_STANDING_ROOM_ONLY - + BICYCLE """ - The vehicle is considered full by most measures, but may still be allowing passengers to - board. + Starting the itinerary with a bicycle and parking the bicycle to + a parking location. Note, this can include walking after parking + the bicycle or when it's needed to walk the bicycle. """ - FULL - + BICYCLE_PARKING """ - The vehicle or carriage is not accepting passengers. - SIRI nordic profile: if vehicle/carriage is not in use / unavailable, or passengers are only allowed - to alight due to e.g. crowding. + Bicycle rental can use either station based systems or "floating" + vehicles which are not linked to a rental station. Note, if there are no + rental options available, access will include only walking. Also, this + can include walking before picking up or after dropping off the + bicycle or when it's needed to walk the bicycle. """ - NOT_ACCEPTING_PASSENGERS + BICYCLE_RENTAL + """ + Getting dropped off by a car to a location that is accessible with a car. + Note, this can include walking after the drop-off. + """ + CAR_DROP_OFF + """ + Starting the itinerary with a car and parking the car to a parking location. + Note, this can include walking after parking the car. + """ + CAR_PARKING + """ + Car rental can use either station based systems or "floating" + vehicles which are not linked to a rental station. Note, if there are no + rental options available, access will include only walking. Also, this + can include walking before picking up or after dropping off the + car. + """ + CAR_RENTAL + """ + Flexible transit. This can include different forms of flexible transit that + can be defined in GTFS-Flex or in Netex. Note, this can include walking before + or after the flexible transit leg. + """ + FLEX + """ + Scooter rental can use either station based systems or "floating" + vehicles which are not linked to a rental station. Note, if there are no + rental options available, access will include only walking. Also, this + can include walking before picking up or after dropping off the + scooter. + """ + SCOOTER_RENTAL + "Walking to a stop." + WALK } -""" -Preferences related to travel with a scooter (kick or e-scooter). -""" -input ScooterPreferencesInput { - """ - A multiplier for how bad riding a scooter is compared to being in transit - for equal lengths of time. - """ - reluctance: Reluctance - - """ - Maximum speed on flat ground while riding a scooter. Note, this speed is higher than - the average speed will be in itineraries as this is the maximum speed but there are - factors that slow down the travel such as crossings, intersections and elevation changes. - """ - speed: Speed - - """ - What criteria should be used when optimizing a scooter route. - """ - optimization: ScooterOptimizationInput - - """ - Scooter rental related preferences. - """ - rental: ScooterRentalPreferencesInput +"Street mode that is used when searching for itineraries that don't use any transit." +enum PlanDirectMode { + """ + Cycling from the origin to the destination. Note, this can include walking + when it's needed to walk the bicycle. + """ + BICYCLE + """ + Starting the itinerary with a bicycle and parking the bicycle to + a parking location. Note, this can include walking after parking + the bicycle or when it's needed to walk the bicycle. + """ + BICYCLE_PARKING + """ + Bicycle rental can use either station based systems or "floating" + vehicles which are not linked to a rental station. Note, if there are no + rental options available, itinerary will include only walking. + Also, it can include walking before picking up or after dropping off the + bicycle or when it's needed to walk the bicycle. + """ + BICYCLE_RENTAL + "Driving a car from the origin to the destination." + CAR + """ + Starting the itinerary with a car and parking the car to a parking location. + Note, this can include walking after parking the car. + """ + CAR_PARKING + """ + Car rental can use either station based systems or "floating" + vehicles which are not linked to a rental station. Note, if there are no + rental options available, itinerary will include only walking. Also, this + can include walking before picking up or after dropping off the + car. + """ + CAR_RENTAL + """ + Flexible transit. This can include different forms of flexible transit that + can be defined in GTFS-Flex or in Netex. Note, this can include walking before + or after the flexible transit leg. + """ + FLEX + """ + Scooter rental can use either station based systems or "floating" + vehicles which are not linked to a rental station. Note, if there are no + rental options available, itinerary will include only walking. Also, this + can include walking before picking up or after dropping off the + scooter. + """ + SCOOTER_RENTAL + """ + Walking from the origin to the destination. Note, this can include walking + when it's needed to walk the bicycle. + """ + WALK } -type step { - """The distance in meters that this step takes.""" - distance: Float - - """The longitude of the start of the step.""" - lon: Float - - """The latitude of the start of the step.""" - lat: Float - - """The elevation profile as a list of { distance, elevation } values.""" - elevationProfile: [elevationProfileComponent] - - """The relative direction (e.g. left or right turn) to take when engaging this step.""" - relativeDirection: RelativeDirection - - """The cardinal (compass) direction (e.g. north, northeast) taken when engaging this step.""" - absoluteDirection: AbsoluteDirection - - """The name of the street, road, or path taken for this step.""" - streetName: String - - """When exiting a highway or traffic circle, the exit name/number.""" - exit: String - - """Indicates whether or not a street changes direction at an intersection.""" - stayOn: Boolean - - """ - This step is on an open area, such as a plaza or train platform, - and thus the directions should say something like "cross". - """ - area: Boolean - - """ - The name of this street was generated by the system, so we should only display it once, and - generally just display right/left directions - """ - bogusName: Boolean +"Street modes that can be used for egress from the transit network to destination." +enum PlanEgressMode { + """ + Cycling from a stop to the destination. Note, this can include walking when + it's needed to walk the bicycle. Egress can use cycling only if the mode used + for access and transfers is also `BICYCLE`. + """ + BICYCLE + """ + Bicycle rental can use either station based systems or "floating" + vehicles which are not linked to a rental station. Note, if there are no + rental options available, egress will include only walking. Also, this + can include walking before picking up or after dropping off the + bicycle or when it's needed to walk the bicycle. + """ + BICYCLE_RENTAL + """ + Getting picked up by a car from a location that is accessible with a car. + Note, this can include walking before the pickup. + """ + CAR_PICKUP + """ + Car rental can use either station based systems or "floating" + vehicles which are not linked to a rental station. Note, if there are no + rental options available, egress will include only walking. Also, this + can include walking before picking up or after dropping off the + car. + """ + CAR_RENTAL + """ + Flexible transit. This can include different forms of flexible transit that + can be defined in GTFS-Flex or in Netex. Note, this can include walking before + or after the flexible transit leg. + """ + FLEX + """ + Scooter rental can use either station based systems or "floating" + vehicles which are not linked to a rental station. Note, if there are no + rental options available, egress will include only walking. Also, this + can include walking before picking up or after dropping off the + scooter. + """ + SCOOTER_RENTAL + "Walking from a stop to the destination." + WALK +} - """Is this step walking with a bike?""" - walkingBike: Boolean +enum PlanTransferMode { + """ + Cycling between transit vehicles (typically between stops). Note, this can + include walking when it's needed to walk the bicycle. Transfers can only use + cycling if the mode used for access and egress is also `BICYCLE`. + """ + BICYCLE + "Walking between transit vehicles (typically between stops)." + WALK +} - """A list of alerts (e.g. construction, detours) applicable to the step.""" - alerts: [Alert] +enum PropulsionType { + "Powered by gasoline combustion engine" + COMBUSTION + "Powered by diesel combustion engine" + COMBUSTION_DIESEL + "Powered by battery-powered electric motor with throttle mode" + ELECTRIC + "Provides electric motor assist only in combination with human propulsion - no throttle mode" + ELECTRIC_ASSIST + "Pedal or foot propulsion" + HUMAN + "Powered by combined combustion engine and battery-powered motor" + HYBRID + "Powered by hydrogen fuel cell powered electric motor" + HYDROGEN_FUEL_CELL + "Powered by combined combustion engine and battery-powered motor with plug-in charging" + PLUG_IN_HYBRID } """ -Stop can represent either a single public transport stop, where passengers can -board and/or disembark vehicles, or a station, which contains multiple stops. -See field `locationType`. +Additional qualifier for a transport mode. +Note that qualifiers can only be used with certain transport modes. """ -type Stop implements Node & PlaceInterface { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! - - """Returns timetable of the specified pattern at this stop""" - stopTimesForPattern( - """Id of the pattern""" - id: String! - - """ - Return departures after this time. Format: Unix timestamp in seconds. Default value: current time - """ - startTime: Long = 0 - - """ - Return stoptimes within this time range, starting from `startTime`. Unit: Seconds - """ - timeRange: Int = 86400 - numberOfDepartures: Int = 2 - - """If true, only those departures which allow boarding are returned""" - omitNonPickups: Boolean = false - - """If false, returns also canceled trips""" - omitCanceled: Boolean = true - ): [Stoptime] - - """ÌD of the stop in format `FeedId:StopId`""" - gtfsId: String! - - """Name of the stop, e.g. Pasilan asema""" - name( - """If translated name is found from gtfs translation.txt and wanted language is not same as - feed's language then returns wanted translation. Otherwise uses name from stops.txt. - E.g. Swedish name for Pasilan asema is Böle station.""" - language: String): String! - - """Latitude of the stop (WGS 84)""" - lat: Float - - """Longitude of the stop (WGS 84)""" - lon: Float - - """ - Representations of this stop's geometry. This is mainly interesting for flex stops which can be - a polygon or a group of stops either consisting of either points or polygons. - - Regular fixed-schedule stops return a single point. - - Stations (parent stations with child stops) contain a geometry collection with a point for the - central coordinate plus a convex hull polygon (https://en.wikipedia.org/wiki/Convex_hull) of all - coordinates of the child stops. - - If there are only two child stops then the convex hull is a straight line between the them. If - there is a single child stop then it's a single point. - """ - geometries: StopGeometries - - """Stop code which is visible at the stop""" - code: String - - """Description of the stop, usually a street name""" - desc( - """If translated description is found from gtfs translation.txt and wanted language is not same as - feed's language then returns wanted translation. Otherwise uses descriptions from stops.txt. - """ - language: String): String - - """ID of the zone where this stop is located""" - zoneId: String - - url( - """If translated url is found from gtfs translation.txt and wanted language is not same as - feed's language then returns wanted translation. Otherwise uses url from stops.txt.""" - language: String): String - - """Identifies whether this stop represents a stop or station.""" - locationType: LocationType - - """ - The station which this stop is part of (or null if this stop is not part of a station) - """ - parentStation: Stop - - """ - Whether wheelchair boarding is possible for at least some of vehicles on this stop - """ - wheelchairBoarding: WheelchairBoarding - direction: String - timezone: String - - """ - The raw GTFS route type used by routes which pass through this stop. For the - list of possible values, see: - https://developers.google.com/transit/gtfs/reference/#routestxt and - https://developers.google.com/transit/gtfs/reference/extended-route-types - """ - vehicleType: Int - - """ - Transport mode (e.g. `BUS`) used by routes which pass through this stop or - `null` if mode cannot be determined, e.g. in case no routes pass through the stop. - Note that also other types of vehicles may use the stop, e.g. tram replacement - buses might use stops which have `TRAM` as their mode. - """ - vehicleMode: Mode - - """ - Identifier of the platform, usually a number. This value is only present for stops that are part of a station - """ - platformCode: String - - """The cluster which this stop is part of""" - cluster: Cluster - - """ - Returns all stops that are children of this station (Only applicable for stations) - """ - stops: [Stop] - - """Routes which pass through this stop""" - routes: [Route!] - - """Patterns which pass through this stop""" - patterns: [Pattern] - - """List of nearby stops which can be used for transfers""" - transfers( - """ - Maximum distance to the transfer stop. Defaults to unlimited. - **Note:** only stops that are linked as a transfer stops to this stop are - returned, i.e. this does not do a query to search for *all* stops within - radius of `maxDistance`. - """ - maxDistance: Int - ): [stopAtDistance] - - """Returns list of stoptimes for the specified date""" - stoptimesForServiceDate( - """Date in format YYYYMMDD""" - date: String - - """If true, only those departures which allow boarding are returned""" - omitNonPickups: Boolean = false - - """If false, returns also canceled trips""" - omitCanceled: Boolean = false - ): [StoptimesInPattern] - - """ - Returns list of stoptimes (arrivals and departures) at this stop, grouped by patterns - """ - stoptimesForPatterns( - """ - Return departures after this time. Format: Unix timestamp in seconds. Default value: current time - """ - startTime: Long = 0 - - """ - Return stoptimes within this time range, starting from `startTime`. Unit: Seconds - """ - timeRange: Int = 86400 - numberOfDepartures: Int = 5 - - """If true, only those departures which allow boarding are returned""" - omitNonPickups: Boolean = false - - """If false, returns also canceled trips""" - omitCanceled: Boolean = true - ): [StoptimesInPattern] - - """Returns list of stoptimes (arrivals and departures) at this stop""" - stoptimesWithoutPatterns( - """ - Return departures after this time. Format: Unix timestamp in seconds. Default value: current time - """ - startTime: Long = 0 - - """ - Return stoptimes within this time range, starting from `startTime`. Unit: Seconds - """ - timeRange: Int = 86400 - numberOfDepartures: Int = 5 - - """If true, only those departures which allow boarding are returned""" - omitNonPickups: Boolean = false +enum Qualifier { + "The mode is used for the access part of the search." + ACCESS + "The mode is used for the direct street search." + DIRECT + "The user can be dropped off by someone else riding a vehicle" + DROPOFF + "The mode is used for the egress part of the search." + EGRESS + "Hailing a ride, for example via an app like Uber." + HAIL + """ + ~~HAVE~~ + **Currently not used** + """ + HAVE @deprecated(reason : "Currently not used") + """ + ~~KEEP~~ + **Currently not used** + """ + KEEP @deprecated(reason : "Currently not used") + """ + The vehicle used must be left to a parking area before continuing the journey. + This qualifier is usable with transport modes `CAR` and `BICYCLE`. + Note that the vehicle is only parked if the journey is continued with public + transportation (e.g. if only `CAR` and `WALK` transport modes are allowed to + be used, the car will not be parked as it is used for the whole journey). + """ + PARK + "The user can be picked up by someone else riding a vehicle" + PICKUP + "The vehicle used for transport can be rented" + RENT +} - """If false, returns also canceled trips""" - omitCanceled: Boolean = true - ): [Stoptime] +enum RealtimeState { + "The trip has been added using a real-time update, i.e. the trip was not present in the GTFS feed." + ADDED + "The trip has been canceled by a real-time update." + CANCELED + """ + The trip information has been updated and resulted in a different trip pattern + compared to the trip pattern of the scheduled trip. + """ + MODIFIED + "The trip information comes from the GTFS feed, i.e. no real-time update has been applied." + SCHEDULED + "The trip information has been updated, but the trip pattern stayed the same as the trip pattern of the scheduled trip." + UPDATED +} - """ - By default, list of alerts which have directly an effect on just the stop. - It's also possible to return other relevant alerts through defining types. - """ - alerts( - """ - Returns alerts for these types that are relevant for the stop. - By default, list of alerts which have directly an effect on just the stop. - """ - types: [StopAlertType] - ): [Alert] +"Actions to take relative to the current position when engaging a walking/driving step." +enum RelativeDirection { + CIRCLE_CLOCKWISE + CIRCLE_COUNTERCLOCKWISE + CONTINUE + DEPART + ELEVATOR + ENTER_STATION + EXIT_STATION + FOLLOW_SIGNS + HARD_LEFT + HARD_RIGHT + LEFT + RIGHT + SLIGHTLY_LEFT + SLIGHTLY_RIGHT + UTURN_LEFT + UTURN_RIGHT } -"""Entities, which are relevant for a stop and can contain alerts""" -enum StopAlertType { - """Alerts affecting the stop""" - STOP - - """Alerts affecting the stop's patterns""" - PATTERNS - - """Alerts affecting the agencies of the routes going through the stop""" - AGENCIES_OF_ROUTES - - """Alerts affecting the routes that go through the stop""" - ROUTES - - """Alerts affecting the trips that go through this stop""" - TRIPS - - """Alerts affecting the stop on specific routes""" - STOP_ON_ROUTES - - """Alerts affecting the stop on specific trips""" - STOP_ON_TRIPS +"Entities that are relevant for routes that can contain alerts" +enum RouteAlertType { + "Alerts affecting the route's agency." + AGENCY + "Alerts affecting route's patterns." + PATTERNS + "Alerts directly affecting the route." + ROUTE + "Alerts affecting the route type of the route." + ROUTE_TYPE + "Alerts affecting the stops that are on the route." + STOPS_ON_ROUTE + "Alerts affecting the stops on some trips of the route." + STOPS_ON_TRIPS + "Alerts affecting the route's trips." + TRIPS } -type stopAtDistance implements Node { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! - stop: Stop - - """Walking distance to the stop along streets and paths""" - distance: Int +enum RoutingErrorCode { + """ + The specified location is not close to any streets or transit stops currently loaded into the + system, even though it is generally within its bounds. + + This can happen when there is only transit but no street data coverage at the location in + question. + """ + LOCATION_NOT_FOUND + """ + No stops are reachable from the start or end locations specified. + + You can try searching using a different access or egress mode, for example cycling instead of walking, + increase the walking/cycling/driving speed or have an administrator change the system's configuration + so that stops further away are considered. + """ + NO_STOPS_IN_RANGE + """ + No transit connection was found between the origin and destination within the operating day or + the next day, not even sub-optimal ones. + """ + NO_TRANSIT_CONNECTION + """ + A transit connection was found, but it was outside the search window. See the metadata for a token + for retrieving the result outside the search window. + """ + NO_TRANSIT_CONNECTION_IN_SEARCH_WINDOW + """ + The coordinates are outside the geographic bounds of the transit and street data currently loaded + into the system and therefore cannot return any results. + """ + OUTSIDE_BOUNDS + """ + The date specified is outside the range of data currently loaded into the system as it is too + far into the future or the past. + + The specific date range of the system is configurable by an administrator and also depends on + the input data provided. + """ + OUTSIDE_SERVICE_PERIOD + """ + Transit connections were requested and found but because it is easier to just walk all the way + to the destination they were removed. + + If you want to still show the transit results, you need to make walking less desirable by + increasing the walk reluctance. + """ + WALKING_BETTER_THAN_TRANSIT } -"""A connection to a list of items.""" -type stopAtDistanceConnection { - edges: [stopAtDistanceEdge] - pageInfo: PageInfo! +""" +Predefined optimization alternatives for scooter routing. For more customization, +one can use the triangle factors. +""" +enum ScooterOptimizationType { + "Emphasize flatness over safety or duration of the route. This option was previously called `FLAT`." + FLAT_STREETS + """ + Completely ignore the elevation differences and prefer the streets, that are evaluated + to be safest for scooters, even more than with the `SAFE_STREETS` option. + Safety can also include other concerns such as convenience and general preferences by taking + into account road surface etc. Note, currently the same criteria is used both for cycling and + scooter travel to determine how safe streets are for cycling or scooter. + This option was previously called `GREENWAYS`. + """ + SAFEST_STREETS + """ + Emphasize scooter safety over flatness or duration of the route. Safety can also include other + concerns such as convenience and general preferences by taking into account road surface etc. + Note, currently the same criteria is used both for cycling and scooter travel to determine how + safe streets are for cycling or scooter. This option was previously called `SAFE`. + """ + SAFE_STREETS + """ + Search for routes with the shortest duration while ignoring the scooter safety + of the streets. The routes should still follow local regulations, but currently scooters + are only allowed on the same streets as bicycles which might not be accurate for each country + or with different types of scooters. Routes can include steep streets, if they are + the fastest alternatives. This option was previously called `QUICK`. + """ + SHORTEST_DURATION } -"""An edge in a connection.""" -type stopAtDistanceEdge { - """The item at the end of the edge""" - node: stopAtDistance - cursor: String! +"Entities, which are relevant for a stop and can contain alerts" +enum StopAlertType { + "Alerts affecting the agencies of the routes going through the stop" + AGENCIES_OF_ROUTES + "Alerts affecting the stop's patterns" + PATTERNS + "Alerts affecting the routes that go through the stop" + ROUTES + "Alerts affecting the stop" + STOP + "Alerts affecting the stop on specific routes" + STOP_ON_ROUTES + "Alerts affecting the stop on specific trips" + STOP_ON_TRIPS + "Alerts affecting the trips that go through this stop" + TRIPS } """ -Stop that should (but not guaranteed) to exist on a route. +Transit modes include modes that are used within organized transportation networks +run by public transportation authorities, taxi companies etc. +Equivalent to GTFS route_type or to NeTEx TransportMode. """ -type StopOnRoute { - """ - Stop at the route. It's also possible that the stop is no longer on the route. - """ - stop: Stop! - """Route which contains the stop.""" - route: Route! +enum TransitMode { + AIRPLANE + BUS + CABLE_CAR + "Private car trips shared with others." + CARPOOL + COACH + FERRY + FUNICULAR + GONDOLA + "Railway in which the track consists of a single rail or a beam." + MONORAIL + "This includes long or short distance trains." + RAIL + "Subway or metro, depending on the local terminology." + SUBWAY + "A taxi, possibly operated by a public transport agency." + TAXI + TRAM + "Electric buses that draw power from overhead wires using poles." + TROLLEYBUS +} + +"Entities, which are relevant for a trip and can contain alerts" +enum TripAlertType { + "Alerts affecting the trip's agency" + AGENCY + "Alerts affecting the trip's pattern" + PATTERN + "Alerts affecting the trip's route" + ROUTE + "Alerts affecting the route type of the trip's route" + ROUTE_TYPE + """ + Alerts affecting the stops visited on the trip. + Some of the alerts can only affect the trip or its route on the stop. + """ + STOPS_ON_TRIP + "Alerts affecting the trip" + TRIP } """ -Stop that should (but not guaranteed) to exist on a trip. +The state of the vehicle parking. TEMPORARILY_CLOSED and CLOSED are distinct states so that they +may be represented differently to the user. """ -type StopOnTrip { - """ - Stop at the trip. It's also possible that the stop is no longer on the trip. - """ - stop: Stop! - """ - Trip which contains the stop. - """ - trip: Trip! +enum VehicleParkingState { + "Can't be used for park and ride." + CLOSED + "May be used for park and ride." + OPERATIONAL + "Can't be used for park and ride." + TEMPORARILY_CLOSED } -""" -Stoptime represents the time when a specific trip arrives to or departs from a specific stop. -""" -type Stoptime { - """The stop where this arrival/departure happens""" - stop: Stop - - """ - The sequence of the stop in the pattern. This is not required to start from 0 or be consecutive - any - increasing integer sequence along the stops is valid. +"How close the vehicle is to the stop." +enum VehicleStopStatus { + "The vehicle is just about to arrive at the stop (on a stop display, the vehicle symbol typically flashes)." + INCOMING_AT + "The vehicle has departed the previous stop and is in transit." + IN_TRANSIT_TO + "The vehicle is standing at the stop." + STOPPED_AT +} - The purpose of this field is to identify the stop within the pattern so it can be cross-referenced - between it and the itinerary. It is safe to cross-reference when done quickly, i.e. within seconds. - However, it should be noted that real-time updates can change the values, so don't store it for - longer amounts of time. +enum VertexType { + "BIKEPARK" + BIKEPARK + "BIKESHARE" + BIKESHARE + "NORMAL" + NORMAL + "PARKANDRIDE" + PARKANDRIDE + "TRANSIT" + TRANSIT +} - Depending on the source data, this might not be the GTFS `stop_sequence` but another value, perhaps - even generated. - """ - stopPosition: Int +enum WheelchairBoarding { + "Wheelchair boarding is not possible at this stop." + NOT_POSSIBLE + "There is no accessibility information for the stop." + NO_INFORMATION + "At least some vehicles at this stop can be boarded by a rider in a wheelchair." + POSSIBLE +} - """ - Scheduled arrival time. Format: seconds since midnight of the departure date - """ - scheduledArrival: Int +"Either a latitude or a longitude as a WGS84 format floating point number." +scalar CoordinateValue @specifiedBy(url : "https://earth-info.nga.mil/?dir=wgs84&action=wgs84") - """ - Real-time prediction of arrival time. Format: seconds since midnight of the departure date - """ - realtimeArrival: Int +""" +A static cost that is applied to a certain event or entity. Cost is a positive integer, +for example `450`. One cost unit should roughly match a one second travel on transit. +""" +scalar Cost - """ - The offset from the scheduled arrival time in seconds. Negative values - indicate that the trip is running ahead of schedule. - """ - arrivalDelay: Int +"Duration in a lenient ISO-8601 duration format. Example P2DT2H12M40S, 2d2h12m40s or 1h" +scalar Duration @specifiedBy(url : "https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/time/Duration.html#parse(java.lang.CharSequence)") - """ - Scheduled departure time. Format: seconds since midnight of the departure date - """ - scheduledDeparture: Int +"Geographic data structures in JSON format. See: https://geojson.org/" +scalar GeoJson @specifiedBy(url : "https://www.rfcreader.com/#rfc7946") - """ - Real-time prediction of departure time. Format: seconds since midnight of the departure date - """ - realtimeDeparture: Int +scalar Grams - """ - The offset from the scheduled departure time in seconds. Negative values - indicate that the trip is running ahead of schedule - """ - departureDelay: Int +"A IETF BCP 47 language tag" +scalar Locale @specifiedBy(url : "https://www.rfcreader.com/#rfc5646") - """ - true, if this stop is used as a time equalization stop. false otherwise. - """ - timepoint: Boolean +"A 64-bit signed integer" +scalar Long - """true, if this stoptime has real-time data available""" - realtime: Boolean +""" +An ISO-8601-formatted datetime with offset, i.e. `2023-06-13T14:30+03:00` for 2:30pm on June 13th 2023 at Helsinki's offset from UTC at that time. - """State of real-time data""" - realtimeState: RealtimeState +ISO-8601 allows many different formats but OTP will only return the profile specified in RFC3339. +""" +scalar OffsetDateTime @specifiedBy(url : "https://www.rfcreader.com/#rfc3339") - """ - Whether the vehicle can be boarded at this stop. This field can also be used - to indicate if boarding is possible only with special arrangements. - """ - pickupType: PickupDropoffType +"List of coordinates in an encoded polyline format (see https://developers.google.com/maps/documentation/utilities/polylinealgorithm). The value appears in JSON as a string." +scalar Polyline @specifiedBy(url : "https://developers.google.com/maps/documentation/utilities/polylinealgorithm") - """ - Whether the vehicle can be disembarked at this stop. This field can also be - used to indicate if disembarkation is possible only with special arrangements. - """ - dropoffType: PickupDropoffType +"A fractional multiplier between 0 and 1, for example 0.25. 0 means 0% and 1 means 100%." +scalar Ratio - """ - Departure date of the trip. Format: Unix timestamp (local time) in seconds. - """ - serviceDay: Long +""" +A cost multiplier for how bad something is compared to being in transit for equal lengths of time. +The value should be greater than 0. 1 means neutral and values below 1 mean that something is +preferred over transit. +""" +scalar Reluctance - """Trip which this stoptime is for""" - trip: Trip +"Speed in meters per seconds. Values are positive floating point numbers (for example, 2.34)." +scalar Speed - """ - Vehicle headsign of the trip on this stop. Trip headsigns can change during - the trip (e.g. on routes which run on loops), so this value should be used - instead of `tripHeadsign` to display the headsign relevant to the user. - """ - headsign( - """If translated headsign is found from gtfs translation.txt and wanted language is not same as - feed's language then returns wanted translation. Otherwise uses name from trip_headsign.txt. - """ - language: String): String +""" +Plan accessibilty preferences. This can be expanded to contain preferences for various accessibility use cases +in the future. Currently only generic wheelchair preferences are available. +""" +input AccessibilityPreferencesInput { + "Wheelchair related preferences. Note, currently this is the only accessibility mode that is available." + wheelchair: WheelchairPreferencesInput } -"""Stoptimes grouped by pattern""" -type StoptimesInPattern { - pattern: Pattern - stoptimes: [Stoptime] +"Preferences related to alighting from a transit vehicle." +input AlightPreferencesInput { + "What is the required minimum time alighting from a vehicle." + slack: Duration } -"""Describes ticket type""" -type TicketType implements Node { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! - - """ - Ticket type ID in format `FeedId:TicketTypeId`. Ticket type IDs are usually - combination of ticket zones where the ticket is valid. - """ - fareId: String! - - """Price of the ticket in currency that is specified in `currency` field""" - price: Float - - """ISO 4217 currency code""" - currency: String - - """ - List of zones where this ticket is valid. - Corresponds to field `zoneId` in **Stop** type. - """ - zones: [String!] +"Preferences for bicycle parking facilities used during the routing." +input BicycleParkingPreferencesInput { + """ + Selection filters to include or exclude parking facilities. + An empty list will include all facilities in the routing search. + """ + filters: [ParkingFilter!] + """ + If non-empty every parking facility that doesn't match this set of conditions will + receive an extra cost (defined by `unpreferredCost`) and therefore avoided. + """ + preferred: [ParkingFilter!] + """ + If `preferred` is non-empty, using a parking facility that doesn't contain + at least one of the preferred conditions, will receive this extra cost and therefore avoided if + preferred options are available. + """ + unpreferredCost: Cost } -input TimetablePreferencesInput { - """ - When false, real-time updates are considered during the routing. - In practice, when this option is set as true, some of the suggestions might not be - realistic as the transfers could be invalid due to delays, - trips can be cancelled or stops can be skipped. - """ - excludeRealTimeUpdates: Boolean - - """ - When true, departures that have been cancelled ahead of time will be - included during the routing. This means that an itinerary can include - a cancelled departure while some other alternative that contains no cancellations - could be filtered out as the alternative containing a cancellation would normally - be better. - """ - includePlannedCancellations: Boolean - - """ - When true, departures that have been cancelled through a real-time feed will be - included during the routing. This means that an itinerary can include - a cancelled departure while some other alternative that contains no cancellations - could be filtered out as the alternative containing a cancellation would normally - be better. This option can't be set to true while `includeRealTimeUpdates` is false. - """ - includeRealTimeCancellations: Boolean +"Preferences related to travel with a bicycle." +input BicyclePreferencesInput { + "Cost of boarding a vehicle with a bicycle." + boardCost: Cost + "What criteria should be used when optimizing a cycling route." + optimization: CyclingOptimizationInput + "Bicycle parking related preferences." + parking: BicycleParkingPreferencesInput + "A multiplier for how bad cycling is compared to being in transit for equal lengths of time." + reluctance: Reluctance + "Bicycle rental related preferences." + rental: BicycleRentalPreferencesInput + """ + Maximum speed on flat ground while riding a bicycle. Note, this speed is higher than + the average speed will be in itineraries as this is the maximum speed but there are + factors that slow down cycling such as crossings, intersections and elevation changes. + """ + speed: Speed + "Walking preferences when walking a bicycle." + walk: BicycleWalkPreferencesInput } -""" -Preferences related to transfers between transit vehicles (typically between stops). -""" -input TransferPreferencesInput { - """ - A static cost that is added for each transfer on top of other costs. - """ - cost: Cost - - """ - A global minimum transfer time (in seconds) that specifies the minimum amount of time - that must pass between exiting one transit vehicle and boarding another. This time is - in addition to time it might take to walk between transit stops. Setting this value - as `PT0S`, for example, can lead to passenger missing a connection when the vehicle leaves - ahead of time or the passenger arrives to the stop later than expected. - """ - slack: Duration - - """ - How many additional transfers there can be at maximum compared to the itinerary with the - least number of transfers. - """ - maximumAdditionalTransfers: Int - - """ - How many transfers there can be at maximum in an itinerary. - """ - maximumTransfers: Int +"Preferences related to bicycle rental (station based or floating bicycle rental)." +input BicycleRentalPreferencesInput { + "Rental networks which can be potentially used as part of an itinerary." + allowedNetworks: [String!] + "Rental networks which cannot be used as part of an itinerary." + bannedNetworks: [String!] + """ + Is it possible to arrive to the destination with a rented bicycle and does it + come with an extra cost. + """ + destinationBicyclePolicy: DestinationBicyclePolicyInput } -""" -Transit mode and a reluctance associated with it. -""" -input PlanTransitModePreferenceInput { - """ - Transit mode that could be (but doesn't have to be) used in an itinerary. - """ - mode: TransitMode! - - """ - Costs related to using a transit mode. - """ - cost: TransitModePreferenceCostInput +"Costs related to walking a bicycle." +input BicycleWalkPreferencesCostInput { + """ + A static cost that is added each time hopping on or off a bicycle to start or end + bicycle walking. However, this cost is not applied when getting on a rented bicycle + for the first time or when getting off the bicycle when returning the bicycle. + """ + mountDismountCost: Cost + """ + A cost multiplier of bicycle walking travel time. The multiplier is for how bad + walking the bicycle is compared to being in transit for equal lengths of time. + """ + reluctance: Reluctance } -""" -Costs related to using a transit mode. -""" -input TransitModePreferenceCostInput { - """ - A cost multiplier of transit leg travel time. - """ - reluctance: Reluctance! +"Preferences for walking a bicycle." +input BicycleWalkPreferencesInput { + "Costs related to walking a bicycle." + cost: BicycleWalkPreferencesCostInput + """ + How long it takes to hop on or off a bicycle when switching to walking the bicycle + or when getting on the bicycle again. However, this is not applied when getting + on a rented bicycle for the first time or off the bicycle when returning the bicycle. + """ + mountDismountTime: Duration + """ + Maximum walk speed on flat ground. Note, this speed is higher than the average speed + will be in itineraries as this is the maximum speed but there are + factors that slow down walking such as crossings, intersections and elevation changes. + """ + speed: Speed } """ -Transit routing preferences used for transit legs. +Preferences related to boarding a transit vehicle. Note, board costs for each street mode +can be found under the street mode preferences. """ -input TransitPreferencesInput { - """ - Preferences related to boarding a transit vehicle. Note, board costs for each street mode - can be found under the street mode preferences. - """ - board: BoardPreferencesInput - - """ - Preferences related to alighting from a transit vehicle. - """ - alight: AlightPreferencesInput - - """ - Preferences related to transfers between transit vehicles (typically between stops). - """ - transfer: TransferPreferencesInput - - """ - Preferences related to cancellations and real-time. - """ - timetable: TimetablePreferencesInput +input BoardPreferencesInput { + """ + What is the required minimum waiting time at a stop. Setting this value as `PT0S`, for example, can lead + to passenger missing a connection when the vehicle leaves ahead of time or the passenger arrives to the + stop later than expected. + """ + slack: Duration + "A multiplier for how bad waiting at a stop is compared to being in transit for equal lengths of time." + waitReluctance: Reluctance } -"""Text with language""" -type TranslatedString { - text: String +"Preferences for car parking facilities used during the routing." +input CarParkingPreferencesInput { + """ + Selection filters to include or exclude parking facilities. + An empty list will include all facilities in the routing search. + """ + filters: [ParkingFilter!] + """ + If non-empty every parking facility that doesn't match this set of conditions will + receive an extra cost (defined by `unpreferredCost`) and therefore avoided. + """ + preferred: [ParkingFilter!] + """ + If `preferred` is non-empty, using a parking facility that doesn't contain + at least one of the preferred conditions, will receive this extra cost and therefore avoided if + preferred options are available. + """ + unpreferredCost: Cost +} - """Two-letter language code (ISO 639-1)""" - language: String +"Preferences related to traveling on a car (excluding car travel on transit services such as taxi)." +input CarPreferencesInput { + "Car parking related preferences." + parking: CarParkingPreferencesInput + "A multiplier for how bad travelling on car is compared to being in transit for equal lengths of time." + reluctance: Reluctance + "Car rental related preferences." + rental: CarRentalPreferencesInput } -"""Transportation mode which can be used in the itinerary""" -input TransportMode { - mode: Mode! +"Preferences related to car rental (station based or floating car rental)." +input CarRentalPreferencesInput { + "Rental networks which can be potentially used as part of an itinerary." + allowedNetworks: [String!] + "Rental networks which cannot be used as part of an itinerary." + bannedNetworks: [String!] +} - """Optional additional qualifier for transport mode, e.g. `RENT`""" - qualifier: Qualifier +"What criteria should be used when optimizing a cycling route." +input CyclingOptimizationInput @oneOf { + "Define optimization by weighing three criteria." + triangle: TriangleCyclingFactorsInput + "Use one of the predefined optimization types." + type: CyclingOptimizationType } """ -Trip is a specific occurance of a pattern, usually identified by route, direction on the route and exact departure time. +Is it possible to arrive to the destination with a rented bicycle and does it +come with an extra cost. """ -type Trip implements Node { - """ - Global object ID provided by Relay. This value can be used to refetch this object using **node** query. - """ - id: ID! - - """ID of the trip in format `FeedId:TripId`""" - gtfsId: String! - - """The route the trip is running on""" - route: Route! - serviceId: String - - """List of dates when this trip is in service. Format: YYYYMMDD""" - activeDates: [String] - tripShortName: String - - """Headsign of the vehicle when running on this trip""" - tripHeadsign( - """If a translated headsign is found from GTFS translation.txt and wanted language is not same as - feed's language then returns wanted translation. Otherwise uses name from trip_headsign.txt. - """ - language: String): String - - """ - Short name of the route this trip is running. See field `shortName` of Route. - """ - routeShortName: String +input DestinationBicyclePolicyInput { + "For networks that require station drop-off, should the routing engine offer results that go directly to the destination without dropping off the rental bicycle first." + allowKeeping: Boolean + """ + Cost associated with arriving to the destination with a rented bicycle. + No cost is applied if arriving to the destination after dropping off the rented + bicycle. + """ + keepingCost: Cost +} - """ - Direction code of the trip, i.e. is this the outbound or inbound trip of a - pattern. Possible values: 0, 1 or `null` if the direction is irrelevant, i.e. - the pattern has trips only in one direction. - """ - directionId: String - blockId: String - shapeId: String +""" +Is it possible to arrive to the destination with a rented scooter and does it +come with an extra cost. +""" +input DestinationScooterPolicyInput { + "For networks that require station drop-off, should the routing engine offer results that go directly to the destination without dropping off the rental scooter first." + allowKeeping: Boolean + """ + Cost associated with arriving to the destination with a rented scooter. + No cost is applied if arriving to the destination after dropping off the rented + scooter. + """ + keepingCost: Cost +} - """Whether the vehicle running this trip can be boarded by a wheelchair""" - wheelchairAccessible: WheelchairBoarding +input InputBanned { + "A comma-separated list of banned agency ids" + agencies: String + "A comma-separated list of banned route ids" + routes: String + """ + A comma-separated list of banned stop ids. Note that these stops are only + banned for boarding and disembarking vehicles — it is possible to get an + itinerary where a vehicle stops at one of these stops + """ + stops: String @deprecated(reason : "Not implemented in OTP2.") + """ + A comma-separated list of banned stop ids. Only itineraries where these stops + are not travelled through are returned, e.g. if a bus route stops at one of + these stops, that route will not be used in the itinerary, even if the stop is + not used for boarding or disembarking the vehicle. + """ + stopsHard: String @deprecated(reason : "Not implemented in OTP2.") + "A comma-separated list of banned trip ids" + trips: String +} - """Whether bikes are allowed on board the vehicle running this trip""" - bikesAllowed: BikesAllowed +input InputCoordinates { + "The name of the place. If specified, the place name in results uses this value instead of `\"Origin\"` or `\"Destination\"`" + address: String + "Latitude of the place (WGS 84)" + lat: Float! + "The amount of time, in seconds, to spend at this location before venturing forth." + locationSlack: Int + "Longitude of the place (WGS 84)" + lon: Float! +} - """The pattern the trip is running on""" - pattern: Pattern +input InputFilters { + "Bike parks to include by id." + bikeParks: [String] + "Bike rentals to include by id (without network identifier)." + bikeRentalStations: [String] + "Car parks to include by id." + carParks: [String] + "Routes to include by GTFS id." + routes: [String] + "Stations to include by GTFS id." + stations: [String] + "Stops to include by GTFS id." + stops: [String] +} - """List of stops this trip passes through""" - stops: [Stop!]! +input InputModeWeight { + "The weight of AIRPLANE traverse mode. Values over 1 add cost to airplane travel and values under 1 decrease cost" + AIRPLANE: Float + "The weight of BUS traverse mode. Values over 1 add cost to bus travel and values under 1 decrease cost" + BUS: Float + "The weight of CABLE_CAR traverse mode. Values over 1 add cost to cable car travel and values under 1 decrease cost" + CABLE_CAR: Float + "The weight of FERRY traverse mode. Values over 1 add cost to ferry travel and values under 1 decrease cost" + FERRY: Float + "The weight of FUNICULAR traverse mode. Values over 1 add cost to funicular travel and values under 1 decrease cost" + FUNICULAR: Float + "The weight of GONDOLA traverse mode. Values over 1 add cost to gondola travel and values under 1 decrease cost" + GONDOLA: Float + "The weight of RAIL traverse mode. Values over 1 add cost to rail travel and values under 1 decrease cost" + RAIL: Float + "The weight of SUBWAY traverse mode. Values over 1 add cost to subway travel and values under 1 decrease cost" + SUBWAY: Float + "The weight of TRAM traverse mode. Values over 1 add cost to tram travel and values under 1 decrease cost" + TRAM: Float +} - """ - Hash code of the trip. This value is stable and not dependent on the trip id. - """ - semanticHash: String! +input InputPreferred { + "A comma-separated list of ids of the agencies preferred by the user." + agencies: String + """ + Penalty added for using every route that is not preferred if user set any + route as preferred. We return number of seconds that we are willing to wait + for preferred route. + """ + otherThanPreferredRoutesPenalty: Int + "A comma-separated list of ids of the routes preferred by the user." + routes: String +} + +""" +Relative importances of optimization factors. Only effective for bicycling legs. +Invariant: `timeFactor + slopeFactor + safetyFactor == 1` +""" +input InputTriangle { + "Relative importance of safety" + safetyFactor: Float + "Relative importance of flat terrain" + slopeFactor: Float + "Relative importance of duration" + timeFactor: Float +} - """List of times when this trip arrives to or departs from a stop""" - stoptimes: [Stoptime] +input InputUnpreferred { + "A comma-separated list of ids of the agencies unpreferred by the user." + agencies: String + "A comma-separated list of ids of the routes unpreferred by the user." + routes: String + """ + An cost function used to calculate penalty for an unpreferred route/agency. Function should return + number of seconds that we are willing to wait for unpreferred route/agency. + String must be of the format: + `A + B x`, where A is fixed penalty and B is a multiplier of transit leg travel time x. + For example: `600 + 2.0 x` + """ + unpreferredCost: String + """ + Penalty added for using route that is unpreferred, i.e. number of seconds that we are willing to + wait for route that is unpreferred. + + Deprecated: Use `unpreferredCost` instead. + """ + useUnpreferredRoutesPenalty: Int @deprecated(reason : "Use unpreferredCost instead") +} - """Departure time from the first stop""" - departureStoptime( - """ - Date for which the departure time is returned. Format: YYYYMMDD. If this - argument is not used, field `serviceDay` in the stoptime will have a value of 0. - """ - serviceDate: String - ): Stoptime +""" +The filter definition to include or exclude parking facilities used during routing. - """Arrival time to the final stop""" - arrivalStoptime( - """ - Date for which the arrival time is returned. Format: YYYYMMDD. If this - argument is not used, field `serviceDay` in the stoptime will have a value of 0. - """ - serviceDate: String - ): Stoptime - stoptimesForDate( - """Date for which stoptimes are returned. Format: YYYYMMDD""" - serviceDate: String - ): [Stoptime] +Logically, the filter algorithm work as follows: - """List of coordinates of this trip's route""" - geometry: [[Float]] +- The starting point is the set of all facilities, lets call it `A`. +- Then all `select` filters are applied to `A`, potentially reducing the number of facilities used. + Let's call the result of this `B`. + An empty `select` will lead to `A` being equal to `B`. +- Lastly, the `not` filters are applied to `B`, reducing the set further. + Lets call this final set `C`. + An empty `not` will lead to `B` being equal to `C`. +- The remaining parking facilities in `C` are used for routing. +""" +input ParkingFilter { + """ + Exclude parking facilities based on their properties. + + If empty nothing is excluded from the initial set of facilities but may be filtered down + further by the `select` filter. + """ + not: [ParkingFilterOperation!] + """ + Include parking facilities based on their properties. + + If empty everything is included from the initial set of facilities but may be filtered down + further by the `not` filter. + """ + select: [ParkingFilterOperation!] +} - """ - Coordinates of the route of this trip in Google polyline encoded format - """ - tripGeometry: Geometry +input ParkingFilterOperation { + "Filter parking facilities based on their tag" + tags: [String] +} - """ - By default, list of alerts which have directly an effect on just the trip. - It's also possible to return other relevant alerts through defining types. - """ - alerts( - """ - Returns alerts for these types that are relevant for the trip. - By default, list of alerts which have directly an effect on just the trip. - """ - types: [TripAlertType] - ): [Alert] +"A coordinate used for a location in a plan query." +input PlanCoordinateInput { + "Latitude as a WGS84 format number." + latitude: CoordinateValue! + "Longitude as a WGS84 format number." + longitude: CoordinateValue! +} - """ - The latest real-time occupancy information for the latest occurance of this - trip. - """ - occupancy: TripOccupancy +"Plan date time options. Only one of the values should be defined." +input PlanDateTimeInput @oneOf { + """ + Earliest departure date time. The returned itineraries should not + depart before this instant unless one is using paging to find earlier + itineraries. Note, it is not currently possible to define both + `earliestDeparture` and `latestArrival`. + """ + earliestDeparture: OffsetDateTime + """ + Latest arrival time date time. The returned itineraries should not + arrive to the destination after this instant unless one is using + paging to find later itineraries. Note, it is not currently possible + to define both `earliestDeparture` and `latestArrival`. + """ + latestArrival: OffsetDateTime } """ -Enable this to attach a system notice to itineraries instead of removing them. This is very -convenient when tuning the itinerary-filter-chain. +Settings that control the behavior of itinerary filtering. **These are advanced settings and +should not be set by a user through user preferences.** """ -enum ItineraryFilterDebugProfile { +input PlanItineraryFilterInput { """ - Only return the requested number of itineraries, counting both actual and deleted ones. - The top `numItineraries` using the request sort order is returned. This does not work - with paging, itineraries after the limit, but inside the search-window are skipped when - moving to the next page. + Pick one itinerary from each group after putting itineraries that are `85%` similar together, + if the given value is `0.85`, for example. Itineraries are grouped together based on relative + the distance of transit travel that is identical between the itineraries (access, egress and + transfers are ignored). The value must be at least `0.5`. """ - LIMIT_TO_NUMBER_OF_ITINERARIES - + groupSimilarityKeepOne: Ratio = 0.85 """ - Return all itineraries, including deleted ones, inside the actual search-window used - (the requested search-window may differ). + Pick three itineraries from each group after putting itineraries that are `68%` similar together, + if the given value is `0.68`, for example. Itineraries are grouped together based on relative + the distance of transit travel that is identical between the itineraries (access, egress and + transfers are ignored). The value must be at least `0.5`. """ - LIMIT_TO_SEARCH_WINDOW - - "List all itineraries, including all deleted itineraries." - LIST_ALL - - "By default, the debug itinerary filters is turned off." - OFF + groupSimilarityKeepThree: Ratio = 0.68 + """ + Of the itineraries grouped to maximum of three itineraries, how much worse can the non-grouped + legs be compared to the lowest cost. `2.0` means that they can be double the cost, and any + itineraries having a higher cost will be filtered away. Use a value lower than `1.0` to turn the + grouping off. + """ + groupedOtherThanSameLegsMaxCostMultiplier: Float = 2.0 + "Itinerary filter debug profile used to control the behaviour of itinerary filters." + itineraryFilterDebugProfile: ItineraryFilterDebugProfile = OFF } -"""Entities, which are relevant for a trip and can contain alerts""" -enum TripAlertType { - """Alerts affecting the trip""" - TRIP - - """Alerts affecting the trip's pattern""" - PATTERN - - """Alerts affecting the trip's agency""" - AGENCY +""" +Plan location settings. Location must be set. Label is optional +and used for naming the location. +""" +input PlanLabeledLocationInput { + """ + A label that can be attached to the location. This label is then returned with the location + in the itineraries. + """ + label: String + "A location that has to be used in an itinerary." + location: PlanLocationInput! +} - """Alerts affecting the trip's route""" - ROUTE +"Plan location. Either a coordinate or a stop location should be defined." +input PlanLocationInput @oneOf { + "Coordinate of the location. Note, either a coordinate or a stop location should be defined." + coordinate: PlanCoordinateInput + """ + Stop, station, a group of stop places or multimodal stop place that should be used as + a location for the search. The trip doesn't have to use the given stop location for a + transit connection as it's possible to start walking to another stop from the given + location. If a station or a group of stop places is provided, a stop that makes the most + sense for the journey is picked as the location within the station or group of stop places. + """ + stopLocation: PlanStopLocationInput +} - """Alerts affecting the route type of the trip's route""" - ROUTE_TYPE +"Mode selections for the plan search." +input PlanModesInput { + """ + Street mode that is used when searching for itineraries that don't use any transit. + If more than one mode is selected, at least one of them must be used but not necessarily all. + There are modes that automatically also use walking such as the rental modes. To force rental + to be used, this should only include the rental mode and not `WALK` in addition. + The default access mode is `WALK`. + """ + direct: [PlanDirectMode!] + "Should only the direct search without any transit be done." + directOnly: Boolean = false + """ + Modes for different phases of an itinerary when transit is included. Also + includes street mode selections related to connecting to the transit network + and transfers. By default, all transit modes are usable and `WALK` is used for + access, egress and transfers. + """ + transit: PlanTransitModesInput + """ + Should only the transit search be done and never suggest itineraries that don't + contain any transit legs. + """ + transitOnly: Boolean = false +} - """ - Alerts affecting the stops visited on the trip. - Some of the alerts can only affect the trip or its route on the stop. - """ - STOPS_ON_TRIP +"Wrapper type for different types of preferences related to plan query." +input PlanPreferencesInput { + "Accessibility preferences that affect both the street and transit routing." + accessibility: AccessibilityPreferencesInput + """ + Street routing preferences used for ingress, egress and transfers. These do not directly affect + the transit legs but can change how preferable walking or cycling, for example, is compared to + transit. + """ + street: PlanStreetPreferencesInput + "Transit routing preferences used for transit legs." + transit: TransitPreferencesInput } """ -Occupancy of a vehicle on a trip. This should include the most recent occupancy information -available for a trip. Historic data might not be available. +Stop, station, a group of stop places or multimodal stop place that should be used as +a location for the search. The trip doesn't have to use the given stop location for a +transit connection as it's possible to start walking to another stop from the given +location. If a station or a group of stop places is provided, a stop that makes the most +sense for the journey is picked as the location within the station or group of stop places. """ -type TripOccupancy { - """ - Occupancy information mapped to a limited set of descriptive states. - """ - occupancyStatus: OccupancyStatus +input PlanStopLocationInput { + """ + ID of the stop, station, a group of stop places or multimodal stop place. Format + should be `FeedId:StopLocationId`. + """ + stopLocationId: String! } """ -A system notice is used to tag elements with system information for debugging -or other system related purpose. One use-case is to run a routing search with -'debugItineraryFilter: true'. This will then tag itineraries instead of removing -them from the result. This make it possible to inspect the itinerary-filter-chain. -A SystemNotice only has english text, -because the primary user are technical staff, like testers and developers. +Street routing preferences used for ingress, egress and transfers. These do not directly affect +the transit legs but can change how preferable walking or cycling, for example, is compared to +transit. """ -type SystemNotice { - """Notice's tag""" - tag: String - """Notice's description""" - text: String +input PlanStreetPreferencesInput { + "Cycling related preferences." + bicycle: BicyclePreferencesInput + """ + Car related preferences. These are not used for car travel as part of transit, such as + taxi travel. + """ + car: CarPreferencesInput + "Scooter (kick or electrical) related preferences." + scooter: ScooterPreferencesInput + """ + Walk related preferences. These are not used when walking a bicycle or a scooter as they + have their own preferences. + """ + walk: WalkPreferencesInput +} + +"Transit mode and a reluctance associated with it." +input PlanTransitModePreferenceInput { + "Costs related to using a transit mode." + cost: TransitModePreferenceCostInput + "Transit mode that could be (but doesn't have to be) used in an itinerary." + mode: TransitMode! } """ -This is used for alert entities that we don't explicitly handle or they are missing. +Modes for different phases of an itinerary when transit is included. Also includes street +mode selections related to connecting to the transit network and transfers. """ -type Unknown { - """Entity's description""" - description: String +input PlanTransitModesInput { + """ + Street mode that is used when searching for access to the transit network from origin. + If more than one mode is selected, at least one of them must be used but not necessarily all. + There are modes that automatically also use walking such as the rental modes. To force rental + to be used, this should only include the rental mode and not `WALK` in addition. + The default access mode is `WALK`. + """ + access: [PlanAccessMode!] + """ + Street mode that is used when searching for egress to destination from the transit network. + If more than one mode is selected, at least one of them must be used but not necessarily all. + There are modes that automatically also use walking such as the rental modes. To force rental + to be used, this should only include the rental mode and not `WALK` in addition. + The default access mode is `WALK`. + """ + egress: [PlanEgressMode!] + """ + Street mode that is used when searching for transfers. Selection of only one allowed for now. + The default transfer mode is `WALK`. + """ + transfer: [PlanTransferMode!] + """ + Transit modes and reluctances associated with them. Each defined mode can be used in + an itinerary but doesn't have to be. If direct search is not disabled, there can be an + itinerary without any transit legs. By default, all transit modes are usable. + """ + transit: [PlanTransitModePreferenceInput!] } -enum VertexType { - """NORMAL""" - NORMAL +"What criteria should be used when optimizing a scooter route." +input ScooterOptimizationInput @oneOf { + "Define optimization by weighing three criteria." + triangle: TriangleScooterFactorsInput + "Use one of the predefined optimization types." + type: ScooterOptimizationType +} - """TRANSIT""" - TRANSIT +"Preferences related to travel with a scooter (kick or e-scooter)." +input ScooterPreferencesInput { + "What criteria should be used when optimizing a scooter route." + optimization: ScooterOptimizationInput + """ + A multiplier for how bad riding a scooter is compared to being in transit + for equal lengths of time. + """ + reluctance: Reluctance + "Scooter rental related preferences." + rental: ScooterRentalPreferencesInput + """ + Maximum speed on flat ground while riding a scooter. Note, this speed is higher than + the average speed will be in itineraries as this is the maximum speed but there are + factors that slow down the travel such as crossings, intersections and elevation changes. + """ + speed: Speed +} - """BIKEPARK""" - BIKEPARK +"Preferences related to scooter rental (station based or floating scooter rental)." +input ScooterRentalPreferencesInput { + "Rental networks which can be potentially used as part of an itinerary." + allowedNetworks: [String!] + "Rental networks which cannot be used as part of an itinerary." + bannedNetworks: [String!] + """ + Is it possible to arrive to the destination with a rented scooter and does it + come with an extra cost. + """ + destinationScooterPolicy: DestinationScooterPolicyInput +} - """BIKESHARE""" - BIKESHARE +input TimetablePreferencesInput { + """ + When false, real-time updates are considered during the routing. + In practice, when this option is set as true, some of the suggestions might not be + realistic as the transfers could be invalid due to delays, + trips can be cancelled or stops can be skipped. + """ + excludeRealTimeUpdates: Boolean + """ + When true, departures that have been cancelled ahead of time will be + included during the routing. This means that an itinerary can include + a cancelled departure while some other alternative that contains no cancellations + could be filtered out as the alternative containing a cancellation would normally + be better. + """ + includePlannedCancellations: Boolean + """ + When true, departures that have been cancelled through a real-time feed will be + included during the routing. This means that an itinerary can include + a cancelled departure while some other alternative that contains no cancellations + could be filtered out as the alternative containing a cancellation would normally + be better. This option can't be set to true while `includeRealTimeUpdates` is false. + """ + includeRealTimeCancellations: Boolean +} - """PARKANDRIDE""" - PARKANDRIDE +"Preferences related to transfers between transit vehicles (typically between stops)." +input TransferPreferencesInput { + "A static cost that is added for each transfer on top of other costs." + cost: Cost + """ + How many additional transfers there can be at maximum compared to the itinerary with the + least number of transfers. + """ + maximumAdditionalTransfers: Int + "How many transfers there can be at maximum in an itinerary." + maximumTransfers: Int + """ + A global minimum transfer time (in seconds) that specifies the minimum amount of time + that must pass between exiting one transit vehicle and boarding another. This time is + in addition to time it might take to walk between transit stops. Setting this value + as `PT0S`, for example, can lead to passenger missing a connection when the vehicle leaves + ahead of time or the passenger arrives to the stop later than expected. + """ + slack: Duration } -""" -Preferences for walking a bicycle. -""" -input BicycleWalkPreferencesInput { - """ - Maximum walk speed on flat ground. Note, this speed is higher than the average speed - will be in itineraries as this is the maximum speed but there are - factors that slow down walking such as crossings, intersections and elevation changes. - """ - speed: Speed +"Costs related to using a transit mode." +input TransitModePreferenceCostInput { + "A cost multiplier of transit leg travel time." + reluctance: Reluctance! +} - """ - Costs related to walking a bicycle. - """ - cost: BicycleWalkPreferencesCostInput +"Transit routing preferences used for transit legs." +input TransitPreferencesInput { + "Preferences related to alighting from a transit vehicle." + alight: AlightPreferencesInput + """ + Preferences related to boarding a transit vehicle. Note, board costs for each street mode + can be found under the street mode preferences. + """ + board: BoardPreferencesInput + "Preferences related to cancellations and real-time." + timetable: TimetablePreferencesInput + "Preferences related to transfers between transit vehicles (typically between stops)." + transfer: TransferPreferencesInput +} - """ - How long it takes to hop on or off a bicycle when switching to walking the bicycle - or when getting on the bicycle again. However, this is not applied when getting - on a rented bicycle for the first time or off the bicycle when returning the bicycle. - """ - mountDismountTime: Duration +"Transportation mode which can be used in the itinerary" +input TransportMode { + mode: Mode! + "Optional additional qualifier for transport mode, e.g. `RENT`" + qualifier: Qualifier } """ -Costs related to walking a bicycle. +Relative importance of optimization factors. Only effective for bicycling legs. +Invariant: `safety + flatness + time == 1` """ -input BicycleWalkPreferencesCostInput { - """ - A static cost that is added each time hopping on or off a bicycle to start or end - bicycle walking. However, this cost is not applied when getting on a rented bicycle - for the first time or when getting off the bicycle when returning the bicycle. - """ - mountDismountCost: Cost - - """ - A cost multiplier of bicycle walking travel time. The multiplier is for how bad - walking the bicycle is compared to being in transit for equal lengths of time. - """ - reluctance: Reluctance +input TriangleCyclingFactorsInput { + "Relative importance of flat terrain" + flatness: Ratio! + """ + Relative importance of cycling safety, but this factor can also include other + concerns such as convenience and general cyclist preferences by taking into account + road surface etc. + """ + safety: Ratio! + "Relative importance of duration" + time: Ratio! } """ -Preferences related to walking (excluding walking a bicycle or a scooter). +Relative importance of optimization factors. Only effective for scooter legs. +Invariant: `safety + flatness + time == 1` """ -input WalkPreferencesInput { - """ - Maximum walk speed on flat ground. Note, this speed is higher than the average speed - will be in itineraries as this is the maximum speed but there are - factors that slow down walking such as crossings, intersections and elevation changes. - """ - speed: Speed - - """ - A multiplier for how bad walking is compared to being in transit for equal lengths of time. - """ - reluctance: Reluctance - - """ - Factor for how much the walk safety is considered in routing. Value should be between 0 and 1. - If the value is set to be 0, safety is ignored. - """ - safetyFactor: Ratio - - """ - The cost of boarding a vehicle while walking. - """ - boardCost: Cost +input TriangleScooterFactorsInput { + "Relative importance of flat terrain" + flatness: Ratio! + """ + Relative importance of scooter safety, but this factor can also include other + concerns such as convenience and general scooter preferences by taking into account + road surface etc. + """ + safety: Ratio! + "Relative importance of duration" + time: Ratio! } -"""A fractional multiplier between 0 and 1, for example 0.25. 0 means 0% and 1 means 100%.""" -scalar Ratio - -enum WheelchairBoarding { - """There is no accessibility information for the stop.""" - NO_INFORMATION - - """ - At least some vehicles at this stop can be boarded by a rider in a wheelchair. - """ - POSSIBLE +"Preferences for parking facilities used during the routing." +input VehicleParkingInput { + """ + Selection filters to include or exclude parking facilities. + An empty list will include all facilities in the routing search. + """ + filters: [ParkingFilter] + """ + If non-empty every parking facility that doesn't match this set of conditions will + receive an extra cost (defined by `unpreferredCost`) and therefore avoided. + """ + preferred: [ParkingFilter] + """ + If `preferred` is non-empty, using a parking facility that doesn't contain + at least one of the preferred conditions, will receive this extra cost and therefore avoided if + preferred options are available. + """ + unpreferredCost: Int +} - """Wheelchair boarding is not possible at this stop.""" - NOT_POSSIBLE +"Preferences related to walking (excluding walking a bicycle or a scooter)." +input WalkPreferencesInput { + "The cost of boarding a vehicle while walking." + boardCost: Cost + "A multiplier for how bad walking is compared to being in transit for equal lengths of time." + reluctance: Reluctance + """ + Factor for how much the walk safety is considered in routing. Value should be between 0 and 1. + If the value is set to be 0, safety is ignored. + """ + safetyFactor: Ratio + """ + Maximum walk speed on flat ground. Note, this speed is higher than the average speed + will be in itineraries as this is the maximum speed but there are + factors that slow down walking such as crossings, intersections and elevation changes. + """ + speed: Speed } """ @@ -5607,9 +4268,9 @@ Wheelchair related preferences. Note, this is the only from of accessibilty avai currently and is sometimes is used for other accessibility needs as well. """ input WheelchairPreferencesInput { - """ - Is wheelchair accessibility considered in routing. Note, this does not guarantee - that the itineraries are wheelchair accessible as there can be data issues. - """ - enabled: Boolean + """ + Is wheelchair accessibility considered in routing. Note, this does not guarantee + that the itineraries are wheelchair accessible as there can be data issues. + """ + enabled: Boolean } From 6b715af4da5959e450a6e5cd07b5f7b1eed92a32 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 13 Jun 2024 18:27:46 +0300 Subject: [PATCH 018/132] Update .git-blame-ignore-revs --- .git-blame-ignore-revs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index acc28473a8c..563e178f4e7 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -4,3 +4,5 @@ # project-wide reformatting with prettier 9c9dd613489a348d2381acdcbeab8f86589154d7 +# reorder and reformat GTFS GraphQL API schema file with graphql-java +14051fab312a67cae9a460aaf0bbc77223bec624 From 01df869d893d503d24906d1a0fb23cd0646f0c8d Mon Sep 17 00:00:00 2001 From: sharhio Date: Fri, 14 Jun 2024 09:55:52 +0300 Subject: [PATCH 019/132] return systemUrl, filter neareast by network, hide unwanted networks in maplayer, handle empty name --- .../vehiclerental/VehicleRentalLayerBuilder.java | 3 +++ .../apis/gtfs/datafetchers/QueryTypeImpl.java | 2 ++ .../apis/gtfs/datafetchers/RentalVehicleImpl.java | 5 +++++ .../apis/gtfs/generated/GraphQLDataFetchers.java | 2 ++ .../apis/gtfs/generated/GraphQLTypes.java | 10 ++++++++++ .../apis/transmodel/TransmodelGraphQLSchema.java | 10 ++++++++++ .../inspector/vector/LayerParameters.java | 8 +++++++- .../routing/graphfinder/DirectGraphFinder.java | 1 + .../routing/graphfinder/GraphFinder.java | 1 + .../graphfinder/PlaceFinderTraverseVisitor.java | 6 ++++++ .../routing/graphfinder/StreetGraphFinder.java | 2 ++ .../datasources/GbfsGeofencingZoneMapper.java | 3 ++- .../org/opentripplanner/apis/gtfs/schema.graphqls | 6 ++++++ .../apis/transmodel/schema.graphql | 3 +++ .../apis/gtfs/GraphQLIntegrationTest.java | 1 + .../PlaceFinderTraverseVisitorTest.java | 6 ++++++ .../graphfinder/StreetGraphFinderTest.java | 15 +++++++++++++++ 17 files changed, 82 insertions(+), 2 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java index 0869aeb2ba8..24d922bffb3 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java @@ -18,6 +18,7 @@ abstract class VehicleRentalLayerBuilder extends LayerBuilder { private final VehicleRentalService service; + private final List hideNetworks; public VehicleRentalLayerBuilder( VehicleRentalService service, @@ -30,6 +31,7 @@ public VehicleRentalLayerBuilder( layerParameters.expansionFactor() ); this.service = service; + this.hideNetworks = layerParameters.hideNetworks(); } @Override @@ -39,6 +41,7 @@ protected List getGeometries(Envelope query) { } return getVehicleRentalPlaces(service) .stream() + .filter(rental -> !hideNetworks.contains(rental.getNetwork())) .map(rental -> { Coordinate coordinate = new Coordinate(rental.getLongitude(), rental.getLatitude()); Point point = GeometryUtils.getGeometryFactory().createPoint(coordinate); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java index eae4bc2ad33..d46fa2a8cf1 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java @@ -330,6 +330,7 @@ public DataFetcher> nearest() { List filterByPlaceTypes = args.getGraphQLFilterByPlaceTypes() != null ? args.getGraphQLFilterByPlaceTypes().stream().map(GraphQLUtils::toModel).toList() : DEFAULT_PLACE_TYPES; + List filterByNetworkNames = args.getGraphQLFilterByNetworkNames(); List places; try { @@ -347,6 +348,7 @@ public DataFetcher> nearest() { filterByStations, filterByRoutes, filterByBikeRentalStations, + filterByNetworkNames, getTransitService(environment) ) ); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java index 53c3ba1343d..84b45270a8b 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java @@ -61,6 +61,11 @@ public DataFetcher vehicleType() { return environment -> getSource(environment).vehicleType; } + @Override + public DataFetcher systemUrl() { + return environment -> getSource(environment).system.url; + } + private VehicleRentalVehicle getSource(DataFetchingEnvironment environment) { return environment.getSource(); } diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index 6c66d3992f4..7b35af403cc 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -857,6 +857,8 @@ public interface GraphQLRentalVehicle { public DataFetcher vehicleId(); public DataFetcher vehicleType(); + + DataFetcher systemUrl(); } public interface GraphQLRentalVehicleEntityCounts { diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java index 3c187ca3bbe..0608e97aa77 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java @@ -2416,6 +2416,7 @@ public static class GraphQLQueryTypeNearestArgs { private Double lon; private Integer maxDistance; private Integer maxResults; + private List filterByNetworkNames; public GraphQLQueryTypeNearestArgs(Map args) { if (args != null) { @@ -2447,6 +2448,7 @@ public GraphQLQueryTypeNearestArgs(Map args) { this.lon = (Double) args.get("lon"); this.maxDistance = (Integer) args.get("maxDistance"); this.maxResults = (Integer) args.get("maxResults"); + this.filterByNetworkNames = (List) args.get("filterByNetworkNames"); } } @@ -2537,6 +2539,14 @@ public void setGraphQLMaxDistance(Integer maxDistance) { public void setGraphQLMaxResults(Integer maxResults) { this.maxResults = maxResults; } + + public List getGraphQLFilterByNetworkNames() { + return this.filterByNetworkNames; + } + + public void setGraphQLFilterByNetworkNames(List networkNames) { + this.filterByNetworkNames = networkNames; + } } public static class GraphQLQueryTypeNodeArgs { diff --git a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java index 638d7783e9a..455c7400718 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java @@ -847,6 +847,14 @@ private GraphQLSchema create() { .type(Scalars.GraphQLInt) .build() ) + .argument( + GraphQLArgument + .newArgument() + .name("filterByNetworkNames") + .description("Only include places that match one of the given network names.") + .type(new GraphQLList(Scalars.GraphQLString)) + .build() + ) .argument( GraphQLArgument .newArgument() @@ -937,6 +945,7 @@ private GraphQLSchema create() { if (placeTypes.contains(TransmodelPlaceType.STOP_PLACE)) { maxResults *= 5; } + List filterByNetworkNames = environment.getArgument("filterByNetworkNames"); List places; places = @@ -953,6 +962,7 @@ private GraphQLSchema create() { filterByStations, filterByRoutes, filterByBikeRentalStations, + filterByNetworkNames, GqlUtil.getTransitService(environment) ); diff --git a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java index ca4a6a64c76..23d5d3c2f59 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java +++ b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java @@ -1,5 +1,7 @@ package org.opentripplanner.inspector.vector; +import java.util.ArrayList; +import java.util.List; import org.opentripplanner.apis.support.mapping.PropertyMapper; /** @@ -10,7 +12,7 @@ public interface LayerParameters> { int MAX_ZOOM = 20; int CACHE_MAX_SECONDS = -1; double EXPANSION_FACTOR = 0.25d; - + List HIDE_NETWORKS = new ArrayList<>(); /** * User-visible name of the layer */ @@ -54,4 +56,8 @@ default int cacheMaxSeconds() { default double expansionFactor() { return EXPANSION_FACTOR; } + + default List hideNetworks() { + return HIDE_NETWORKS; + } } diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java b/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java index 5ffa7cd2301..7eaf60e38f1 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java @@ -63,6 +63,7 @@ public List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, + List filterByNetworkNames, TransitService transitService ) { throw new UnsupportedOperationException("Not implemented"); diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java b/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java index 4c0b0c81144..eecc4f8015a 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java @@ -69,6 +69,7 @@ List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, + List filterByNetworkNames, TransitService transitService ); } diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java b/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java index e71504d58f3..6b06e358103 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java @@ -44,6 +44,7 @@ public class PlaceFinderTraverseVisitor implements TraverseVisitor private final boolean includeStations; private final int maxResults; private final double radiusMeters; + private final Set filterByNetworkNames; /** * @param transitService A TransitService used in finding information about the @@ -69,6 +70,7 @@ public PlaceFinderTraverseVisitor( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, + List filterByNetworkNames, int maxResults, double radiusMeters ) { @@ -82,6 +84,7 @@ public PlaceFinderTraverseVisitor( this.filterByStations = toSet(filterByStations); this.filterByRoutes = toSet(filterByRoutes); this.filterByVehicleRental = toSet(filterByBikeRentalStations); + this.filterByNetworkNames = toSet(filterByNetworkNames); includeStops = shouldInclude(filterByPlaceTypes, PlaceType.STOP); includePatternAtStops = shouldInclude(filterByPlaceTypes, PlaceType.PATTERN_AT_STOP); @@ -264,6 +267,9 @@ private void handleVehicleRental(VehicleRentalPlace station, double distance) { if (seenVehicleRentalPlaces.contains(station.getId())) { return; } + if (!filterByNetworkNames.isEmpty() && !filterByNetworkNames.contains(station.getNetwork())) { + return; + } seenVehicleRentalPlaces.add(station.getId()); placesFound.add(new PlaceAtDistance(station, distance)); } diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java b/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java index 1b2b1d8f522..48b4236cd5b 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java @@ -56,6 +56,7 @@ public List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, + List filterByNetworkNames, TransitService transitService ) { PlaceFinderTraverseVisitor visitor = new PlaceFinderTraverseVisitor( @@ -66,6 +67,7 @@ public List findClosestPlaces( filterByStations, filterByRoutes, filterByBikeRentalStations, + filterByNetworkNames, maxResults, radiusMeters ); diff --git a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java index caf5d97c0d4..78fa7533d58 100644 --- a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java +++ b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java @@ -51,7 +51,8 @@ private GeofencingZone toInternalModel(GBFSFeature f) { LOG.error("Could not convert geofencing zone", e); return null; } - var name = Objects.requireNonNullElseGet(f.getProperties().getName(), () -> fallbackId(g)); + var nameFromData = f.getProperties().getName().isEmpty() ? null : f.getProperties().getName(); + var name = Objects.requireNonNullElseGet(nameFromData, () -> fallbackId(g)); var dropOffBanned = !f.getProperties().getRules().get(0).getRideAllowed(); var passThroughBanned = !f.getProperties().getRules().get(0).getRideThroughAllowed(); return new GeofencingZone( diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 79a794b3607..f0fc391a31e 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -742,6 +742,9 @@ type RentalVehicle implements Node & PlaceInterface { """The type of the rental vehicle (scooter, bicycle, car...)""" vehicleType: RentalVehicleType + + """The rental vehicle operator's system URL.""" + systemUrl: String! } type BikeRentalStationUris { @@ -3543,6 +3546,9 @@ type QueryType { """ filterByModes: [Mode] + """Only include places that match one of the given network names.""" + filterByNetworkNames: [String] + """Only include places that match one of the given GTFS ids.""" filterByIds: InputFilters @deprecated(reason: "Not actively maintained") before: String diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index fbaa2418d7e..7b9fdb3f386 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -675,6 +675,8 @@ type QueryType { filterByInUse: Boolean = false, "Only include places that include this mode. Only checked for places with mode i.e. quays, departures." filterByModes: [TransportMode], + """Only include places that match one of the given network names.""" + filterByNetworkNames: [String], "Only include places of given types if set. Default accepts all types" filterByPlaceTypes: [FilterPlaceType] = [quay, stopPlace, bicycleRent, bikePark, carPark], "fetching only the first certain number of nodes" @@ -953,6 +955,7 @@ type RentalVehicle implements PlaceInterface { longitude: Float! network: String! vehicleType: RentalVehicleType! + systemUrl: String! } type RentalVehicleType { diff --git a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java index 614c8778c6b..cb1d919637e 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java @@ -448,6 +448,7 @@ public List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, + List filterByNetworkNames, TransitService transitService ) { return List diff --git a/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java b/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java index 1ef675c8101..0796176d9bb 100644 --- a/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java +++ b/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java @@ -96,6 +96,7 @@ void stopsOnly() { null, null, null, + null, 1, 500 ); @@ -124,6 +125,7 @@ void stationsOnly() { null, null, null, + null, 1, 500 ); @@ -152,6 +154,7 @@ void stopsAndStations() { null, null, null, + null, 1, 500 ); @@ -183,6 +186,7 @@ void stopsAndStationsWithStationFilter() { List.of(STATION1.getId()), null, null, + null, 1, 500 ); @@ -217,6 +221,7 @@ void stopsAndStationsWithStopFilter() { null, null, null, + null, 1, 500 ); @@ -250,6 +255,7 @@ void stopsAndStationsWithStopAndStationFilter() { List.of(STATION1.getId()), null, null, + null, 1, 500 ); diff --git a/src/test/java/org/opentripplanner/routing/graphfinder/StreetGraphFinderTest.java b/src/test/java/org/opentripplanner/routing/graphfinder/StreetGraphFinderTest.java index 3285e27594c..76f231577dd 100644 --- a/src/test/java/org/opentripplanner/routing/graphfinder/StreetGraphFinderTest.java +++ b/src/test/java/org/opentripplanner/routing/graphfinder/StreetGraphFinderTest.java @@ -156,6 +156,7 @@ void findClosestPlacesLimiting() { null, null, null, + null, transitService ) ); @@ -179,6 +180,7 @@ void findClosestPlacesLimiting() { null, null, null, + null, transitService ) ); @@ -196,6 +198,7 @@ void findClosestPlacesLimiting() { null, null, null, + null, transitService ) ); @@ -220,6 +223,7 @@ void findClosestPlacesWithAModeFilter() { null, null, null, + null, transitService ) ); @@ -237,6 +241,7 @@ void findClosestPlacesWithAModeFilter() { null, null, null, + null, transitService ) ); @@ -262,6 +267,7 @@ void findClosestPlacesWithAStopFilter() { null, null, null, + null, transitService ) ); @@ -279,6 +285,7 @@ void findClosestPlacesWithAStopFilter() { null, null, null, + null, transitService ) ); @@ -304,6 +311,7 @@ void findClosestPlacesWithAStopAndRouteFilter() { null, null, null, + null, transitService ) ); @@ -321,6 +329,7 @@ void findClosestPlacesWithAStopAndRouteFilter() { null, List.of(R1.getId()), null, + null, transitService ) ); @@ -347,6 +356,7 @@ void findClosestPlacesWithARouteFilter() { null, null, null, + null, transitService ) ); @@ -364,6 +374,7 @@ void findClosestPlacesWithARouteFilter() { null, List.of(R2.getId()), null, + null, transitService ) ); @@ -387,6 +398,7 @@ void findClosestPlacesWithAVehicleRentalFilter() { null, null, null, + null, transitService ) ); @@ -404,6 +416,7 @@ void findClosestPlacesWithAVehicleRentalFilter() { null, null, List.of("BR2"), + null, transitService ) ); @@ -426,6 +439,7 @@ void findClosestPlacesWithABikeParkFilter() { null, null, null, + null, transitService ) ); @@ -448,6 +462,7 @@ void findClosestPlacesWithACarParkFilter() { null, null, null, + null, transitService ) ); From d8b5fc7c526391c5c191049ad6e92f23b00614da Mon Sep 17 00:00:00 2001 From: sharhio Date: Fri, 14 Jun 2024 10:35:57 +0300 Subject: [PATCH 020/132] schema --- .../resources/org/opentripplanner/apis/gtfs/schema.graphqls | 4 +++- .../org/opentripplanner/apis/transmodel/schema.graphql | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index f0fc391a31e..a4f53553e71 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -3546,7 +3546,9 @@ type QueryType { """ filterByModes: [Mode] - """Only include places that match one of the given network names.""" + """ + Only include places that match one of the given network names. + """ filterByNetworkNames: [String] """Only include places that match one of the given GTFS ids.""" diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 7b9fdb3f386..03b97cab376 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -675,7 +675,7 @@ type QueryType { filterByInUse: Boolean = false, "Only include places that include this mode. Only checked for places with mode i.e. quays, departures." filterByModes: [TransportMode], - """Only include places that match one of the given network names.""" + "Only include places that match one of the given network names." filterByNetworkNames: [String], "Only include places of given types if set. Default accepts all types" filterByPlaceTypes: [FilterPlaceType] = [quay, stopPlace, bicycleRent, bikePark, carPark], @@ -955,7 +955,6 @@ type RentalVehicle implements PlaceInterface { longitude: Float! network: String! vehicleType: RentalVehicleType! - systemUrl: String! } type RentalVehicleType { From 7f69e900fa643fa6c4d40a4eb905d439524bfc46 Mon Sep 17 00:00:00 2001 From: sharhio Date: Fri, 14 Jun 2024 10:49:00 +0300 Subject: [PATCH 021/132] docs --- .../org/opentripplanner/inspector/vector/LayerParameters.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java index 23d5d3c2f59..0348cf0265e 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java +++ b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java @@ -57,6 +57,9 @@ default double expansionFactor() { return EXPANSION_FACTOR; } + /** + * A list of networks to hide from the results. + */ default List hideNetworks() { return HIDE_NETWORKS; } From 17c1d5b0e5523be8bbe967658ab60369bc0558da Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Fri, 14 Jun 2024 15:54:26 +0200 Subject: [PATCH 022/132] Add timePenalty to Transmodel API --- .../ext/restapi/mapping/ItineraryMapper.java | 5 +- .../transmodel/TransmodelGraphQLSchema.java | 9 ++- .../plan/TripPatternTimePenaltyType.java | 79 +++++++++++++++++++ .../model/plan/TripPatternType.java | 20 ++++- .../model/plan/TripPlanTimePenaltyDto.java | 32 ++++++++ .../apis/transmodel/schema.graphql | 38 +++++++++ .../plan/TripPlanTimePenaltyDtoTest.java | 67 ++++++++++++++++ 7 files changed, 247 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternTimePenaltyType.java create mode 100644 src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDto.java create mode 100644 src/test/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDtoTest.java diff --git a/src/ext/java/org/opentripplanner/ext/restapi/mapping/ItineraryMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/ItineraryMapper.java index d87cf33d71c..720d02fdd44 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/mapping/ItineraryMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/ItineraryMapper.java @@ -37,7 +37,10 @@ public ApiItinerary mapItinerary(Itinerary domain) { api.transitTime = domain.getTransitDuration().toSeconds(); api.waitingTime = domain.getWaitingDuration().toSeconds(); api.walkDistance = domain.getNonTransitDistanceMeters(); - api.generalizedCost = domain.getGeneralizedCost(); + // We list only the generalizedCostIncludingPenalty, this is the least confusing. We intend to + // delete this endpoint soon, so we will not make the proper change and add the + // generalizedCostIncludingPenalty to the response and update the debug client to show it. + api.generalizedCost = domain.getGeneralizedCostIncludingPenalty(); api.elevationLost = domain.getElevationLost(); api.elevationGained = domain.getElevationGained(); api.transfers = domain.getNumberOfTransfers(); diff --git a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java index 638d7783e9a..a88c36ac039 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java @@ -70,6 +70,7 @@ import org.opentripplanner.apis.transmodel.model.plan.PathGuidanceType; import org.opentripplanner.apis.transmodel.model.plan.PlanPlaceType; import org.opentripplanner.apis.transmodel.model.plan.RoutingErrorType; +import org.opentripplanner.apis.transmodel.model.plan.TripPatternTimePenaltyType; import org.opentripplanner.apis.transmodel.model.plan.TripPatternType; import org.opentripplanner.apis.transmodel.model.plan.TripQuery; import org.opentripplanner.apis.transmodel.model.plan.TripType; @@ -314,6 +315,7 @@ private GraphQLSchema create() { gqlUtil ); + GraphQLObjectType tripPatternTimePenaltyType = TripPatternTimePenaltyType.create(); GraphQLObjectType tripMetadataType = TripMetadataType.create(gqlUtil); GraphQLObjectType placeType = PlanPlaceType.create( bikeRentalStationType, @@ -339,7 +341,12 @@ private GraphQLSchema create() { elevationStepType, gqlUtil ); - GraphQLObjectType tripPatternType = TripPatternType.create(systemNoticeType, legType, gqlUtil); + GraphQLObjectType tripPatternType = TripPatternType.create( + systemNoticeType, + legType, + tripPatternTimePenaltyType, + gqlUtil + ); GraphQLObjectType routingErrorType = RoutingErrorType.create(); GraphQLOutputType tripType = TripType.create( diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternTimePenaltyType.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternTimePenaltyType.java new file mode 100644 index 00000000000..1a6e7310697 --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternTimePenaltyType.java @@ -0,0 +1,79 @@ +package org.opentripplanner.apis.transmodel.model.plan; + +import graphql.Scalars; +import graphql.schema.DataFetchingEnvironment; +import graphql.schema.GraphQLFieldDefinition; +import graphql.schema.GraphQLObjectType; +import org.opentripplanner.framework.time.DurationUtils; + +public class TripPatternTimePenaltyType { + + public static GraphQLObjectType create() { + return GraphQLObjectType + .newObject() + .name("TimePenalty") + .description( + """ + The time-penalty is applied to either the access-legs and/or egress-legs. Both access and + egress may contain more than one leg; Hence, the penalty is not a field on leg. + + Note! This is for debugging only. This type can change without notice. + """ + ) + .field( + GraphQLFieldDefinition + .newFieldDefinition() + .name("appliedTo") + .description( + """ + The time-penalty is applied to either the access-legs and/or egress-legs. Both access + and egress may contain more than one leg; Hence, the penalty is not a field on leg. The + `appliedTo` describe witch part of the itinerary that this instance applies to. + """ + ) + .type(Scalars.GraphQLString) + .dataFetcher(environment -> penalty(environment).appliesTo()) + .build() + ) + .field( + GraphQLFieldDefinition + .newFieldDefinition() + .name("timePenalty") + .description( + """ + The time-penalty added to the actual time/duration when comparing the itinerary with + other itineraries. This is used to decide witch is the best option, but is not visible + - the actual departure and arrival-times are not modified. + """ + ) + .type(Scalars.GraphQLString) + .dataFetcher(environment -> + DurationUtils.durationToStr(penalty(environment).penalty().time()) + ) + .build() + ) + .field( + GraphQLFieldDefinition + .newFieldDefinition() + .name("generalizedCostPenalty") + .description( + """ + The time-penalty does also propagate to the `generalizedCost` But, while the + arrival-/departure-times listed is not affected, the generalized-cost is. In some cases + the time-penalty-cost is excluded when comparing itineraries - that happens if one of + the itineraries is a "direct/street-only" itinerary. Time-penalty can not be set for + direct searches, so it needs to be excluded from such comparison to be fair. The unit + is transit-seconds. + """ + ) + .type(Scalars.GraphQLInt) + .dataFetcher(environment -> penalty(environment).penalty().cost().toSeconds()) + .build() + ) + .build(); + } + + static TripPlanTimePenaltyDto penalty(DataFetchingEnvironment environment) { + return environment.getSource(); + } +} diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternType.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternType.java index 2238a39c139..c903016b91b 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternType.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternType.java @@ -16,6 +16,7 @@ public class TripPatternType { public static GraphQLObjectType create( GraphQLOutputType systemNoticeType, GraphQLObjectType legType, + GraphQLObjectType timePenaltyType, GqlUtil gqlUtil ) { return GraphQLObjectType @@ -189,7 +190,7 @@ public static GraphQLObjectType create( .name("generalizedCost") .description("Generalized cost or weight of the itinerary. Used for debugging.") .type(Scalars.GraphQLInt) - .dataFetcher(env -> itinerary(env).getGeneralizedCost()) + .dataFetcher(env -> itinerary(env).getGeneralizedCostIncludingPenalty()) .build() ) .field( @@ -228,6 +229,23 @@ public static GraphQLObjectType create( .dataFetcher(env -> itinerary(env).getTransferPriorityCost()) .build() ) + .field( + GraphQLFieldDefinition + .newFieldDefinition() + .name("timePenalty") + .description( + """ + A time and cost penalty applied to access and egress to favor regular scheduled + transit over potentially faster options with FLEX, Car, bike and scooter. + + Note! This field is meant for debugging only. The field can be removed without notice + in the future. + """ + ) + .type(new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(timePenaltyType)))) + .dataFetcher(env -> TripPlanTimePenaltyDto.of(itinerary(env))) + .build() + ) .build(); } diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDto.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDto.java new file mode 100644 index 00000000000..b834b711327 --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDto.java @@ -0,0 +1,32 @@ +package org.opentripplanner.apis.transmodel.model.plan; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Stream; +import org.opentripplanner.framework.model.TimeAndCost; +import org.opentripplanner.model.plan.Itinerary; + +/** + * A simple data-transfer-object used to map from an itinerary to the API specific + * type. It is needed because we need to pass in the "appliedTo" field, which does not + * exist in the domain model. + */ +public record TripPlanTimePenaltyDto(String appliesTo, TimeAndCost penalty) { + static List of(Itinerary itinerary) { + // This check for null to be robust - in case of a mistake in the future. + // The check is redundant on purpose. + if (itinerary == null) { + return List.of(); + } + return Stream + .of(of("access", itinerary.getAccessPenalty()), of("egress", itinerary.getEgressPenalty())) + .filter(Objects::nonNull) + .toList(); + } + + static TripPlanTimePenaltyDto of(String appliedTo, TimeAndCost penalty) { + return penalty == null || penalty.isZero() + ? null + : new TripPlanTimePenaltyDto(appliedTo, penalty); + } +} diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index fbaa2418d7e..b521a5f6ff0 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -1215,6 +1215,36 @@ type TimeAndDayOffset { time: Time } +""" +The time-penalty is applied to either the access-legs and/or egress-legs. Both access and +egress may contain more than one leg; Hence, the penalty is not a field on leg. + +Note! This is for debugging only. This type can change without notice. +""" +type TimePenalty { + """ + The time-penalty is applied to either the access-legs and/or egress-legs. Both access + and egress may contain more than one leg; Hence, the penalty is not a field on leg. The + `appliedTo` describe witch part of the itinerary that this instance applies to. + """ + appliedTo: String + """ + The time-penalty does also propagate to the `generalizedCost` But, while the + arrival-/departure-times listed is not affected, the generalized-cost is. In some cases + the time-penalty-cost is excluded when comparing itineraries - that happens if one of + the itineraries is a "direct/street-only" itinerary. Time-penalty can not be set for + direct searches, so it needs to be excluded from such comparison to be fair. The unit + is transit-seconds. + """ + generalizedCostPenalty: Int + """ + The time-penalty added to the actual time/duration when comparing the itinerary with + other itineraries. This is used to decide witch is the best option, but is not visible + - the actual departure and arrival-times are not modified. + """ + timePenalty: String +} + "Scheduled passing times. These are not affected by real time updates." type TimetabledPassingTime { "Scheduled time of arrival at quay" @@ -1309,6 +1339,14 @@ type TripPattern { streetDistance: Float "Get all system notices." systemNotices: [SystemNotice!]! + """ + A time and cost penalty applied to access and egress to favor regular scheduled + transit over potentially faster options with FLEX, Car, bike and scooter. + + Note! This field is meant for debugging only. The field can be removed without notice + in the future. + """ + timePenalty: [TimePenalty!]! "A cost calculated to favor transfer with higher priority. This field is meant for debugging only." transferPriorityCost: Int "A cost calculated to distribute wait-time and avoid very short transfers. This field is meant for debugging only." diff --git a/src/test/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDtoTest.java b/src/test/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDtoTest.java new file mode 100644 index 00000000000..9ea6016324b --- /dev/null +++ b/src/test/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDtoTest.java @@ -0,0 +1,67 @@ +package org.opentripplanner.apis.transmodel.model.plan; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +import java.util.List; +import org.junit.jupiter.api.Test; +import org.opentripplanner.framework.model.Cost; +import org.opentripplanner.framework.model.TimeAndCost; +import org.opentripplanner.framework.time.DurationUtils; +import org.opentripplanner.model.plan.Itinerary; +import org.opentripplanner.model.plan.Place; +import org.opentripplanner.model.plan.TestItineraryBuilder; +import org.opentripplanner.transit.model._data.TransitModelForTest; + +class TripPlanTimePenaltyDtoTest { + + private static final TimeAndCost PENALTY = new TimeAndCost( + DurationUtils.duration("20m30s"), + Cost.costOfSeconds(21) + ); + + private final TransitModelForTest testModel = TransitModelForTest.of(); + private final Place placeA = Place.forStop(testModel.stop("A").build()); + private final Place placeB = Place.forStop(testModel.stop("B").build()); + + @Test + void testCreateFromSingeEntry() { + assertNull(TripPlanTimePenaltyDto.of("access", null)); + assertNull(TripPlanTimePenaltyDto.of("access", TimeAndCost.ZERO)); + assertEquals( + new TripPlanTimePenaltyDto("access", PENALTY), + TripPlanTimePenaltyDto.of("access", PENALTY) + ); + } + + @Test + void testCreateFromItineraryWithNoPenalty() { + var i = itinerary(); + assertEquals(List.of(), TripPlanTimePenaltyDto.of(null)); + assertEquals(List.of(), TripPlanTimePenaltyDto.of(i)); + } + + @Test + void testCreateFromItineraryWithAccess() { + var i = itinerary(); + i.setAccessPenalty(PENALTY); + assertEquals( + List.of(new TripPlanTimePenaltyDto("access", PENALTY)), + TripPlanTimePenaltyDto.of(i) + ); + } + + @Test + void testCreateFromItineraryWithEgress() { + var i = itinerary(); + i.setEgressPenalty(PENALTY); + assertEquals( + List.of(new TripPlanTimePenaltyDto("egress", PENALTY)), + TripPlanTimePenaltyDto.of(i) + ); + } + + private Itinerary itinerary() { + return TestItineraryBuilder.newItinerary(placeA).drive(100, 200, placeB).build(); + } +} From bd262752b65001f651ac504c0729b5fe6c18636c Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 13 Jun 2024 23:46:01 +0200 Subject: [PATCH 023/132] Validate polygons of AreaStop --- .../opentripplanner/transit/model/site/AreaStop.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java b/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java index 35576e0c42f..685d8c65437 100644 --- a/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java +++ b/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java @@ -6,6 +6,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.operation.valid.IsValidOp; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; @@ -52,6 +53,16 @@ public class AreaStop this.url = builder.url(); this.zoneId = builder.zoneId(); this.geometry = builder.geometry(); + if (!this.geometry.isValid()) { + var error = new IsValidOp(this.geometry).getValidationError(); + throw new IllegalArgumentException( + "Polygon geometry for AreaStop %s is invalid: %s at %s".formatted( + getId(), + error.getMessage(), + error.getCoordinate() + ) + ); + } this.centroid = Objects.requireNonNull(builder.centroid()); } From 711c59d819afdb8a741bcf7ac3ed2654d7f246d9 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 14 Jun 2024 00:18:11 +0200 Subject: [PATCH 024/132] Validate geometries of AreaStops --- ...ocationMapper.java => AreaStopMapper.java} | 39 ++++++------- .../GTFSToOtpTransitServiceMapper.java | 12 ++-- .../gtfs/mapping/LocationGroupMapper.java | 8 +-- .../gtfs/mapping/StopAreaMapper.java | 8 +-- .../gtfs/mapping/StopTimeMapper.java | 8 +-- .../transit/model/site/AreaStop.java | 5 +- .../_support/geometry/Polygons.java | 9 +++ .../gtfs/mapping/AreaStopMapperTest.java | 57 +++++++++++++++++++ .../gtfs/mapping/LocationGroupMapperTest.java | 2 +- .../gtfs/mapping/LocationMapperTest.java | 39 ------------- .../gtfs/mapping/StopAreaMapperTest.java | 2 +- .../gtfs/mapping/StopTimeMapperTest.java | 8 +-- .../gtfs/mapping/TransferMapperTest.java | 2 +- 13 files changed, 111 insertions(+), 88 deletions(-) rename src/main/java/org/opentripplanner/gtfs/mapping/{LocationMapper.java => AreaStopMapper.java} (50%) create mode 100644 src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java delete mode 100644 src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/LocationMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/AreaStopMapper.java similarity index 50% rename from src/main/java/org/opentripplanner/gtfs/mapping/LocationMapper.java rename to src/main/java/org/opentripplanner/gtfs/mapping/AreaStopMapper.java index c8942d7059a..e42d7414620 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/LocationMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/AreaStopMapper.java @@ -6,52 +6,47 @@ import java.util.HashMap; import java.util.Map; import org.locationtech.jts.geom.Geometry; +import org.onebusaway.gtfs.model.Location; import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.geometry.UnsupportedGeometryException; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.service.StopModelBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** Responsible for mapping GTFS Location into the OTP model. */ -public class LocationMapper { +public class AreaStopMapper { - private static final Logger LOG = LoggerFactory.getLogger(LocationMapper.class); - - private final Map mappedLocations = new HashMap<>(); + private final Map mappedLocations = new HashMap<>(); private final StopModelBuilder stopModelBuilder; - public LocationMapper(StopModelBuilder stopModelBuilder) { + public AreaStopMapper(StopModelBuilder stopModelBuilder) { this.stopModelBuilder = stopModelBuilder; } - Collection map(Collection allLocations) { + Collection map(Collection allLocations) { return MapUtils.mapToList(allLocations, this::map); } /** Map from GTFS to OTP model, {@code null} safe. */ - AreaStop map(org.onebusaway.gtfs.model.Location orginal) { + AreaStop map(Location orginal) { return orginal == null ? null : mappedLocations.computeIfAbsent(orginal, this::doMap); } - private AreaStop doMap(org.onebusaway.gtfs.model.Location gtfsLocation) { + private AreaStop doMap(Location gtfsLocation) { var name = NonLocalizedString.ofNullable(gtfsLocation.getName()); - Geometry geometry = null; try { - geometry = GeometryUtils.convertGeoJsonToJtsGeometry(gtfsLocation.getGeometry()); + Geometry geometry = GeometryUtils.convertGeoJsonToJtsGeometry(gtfsLocation.getGeometry()); + return stopModelBuilder + .areaStop(mapAgencyAndId(gtfsLocation.getId())) + .withName(name) + .withUrl(NonLocalizedString.ofNullable(gtfsLocation.getUrl())) + .withDescription(NonLocalizedString.ofNullable(gtfsLocation.getDescription())) + .withZoneId(gtfsLocation.getZoneId()) + .withGeometry(geometry) + .build(); } catch (UnsupportedGeometryException e) { - LOG.error("Unsupported geometry type for {}", gtfsLocation.getId()); + throw new IllegalArgumentException(e); } - - return stopModelBuilder - .areaStop(mapAgencyAndId(gtfsLocation.getId())) - .withName(name) - .withUrl(NonLocalizedString.ofNullable(gtfsLocation.getUrl())) - .withDescription(NonLocalizedString.ofNullable(gtfsLocation.getDescription())) - .withZoneId(gtfsLocation.getZoneId()) - .withGeometry(geometry) - .build(); } } diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java index 354c1f16177..88a32c0f95e 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java @@ -38,7 +38,7 @@ public class GTFSToOtpTransitServiceMapper { private final BoardingAreaMapper boardingAreaMapper; - private final LocationMapper locationMapper; + private final AreaStopMapper areaStopMapper; private final LocationGroupMapper locationGroupMapper; @@ -110,11 +110,11 @@ public GTFSToOtpTransitServiceMapper( entranceMapper = new EntranceMapper(translationHelper, stationLookup); pathwayNodeMapper = new PathwayNodeMapper(translationHelper, stationLookup); boardingAreaMapper = new BoardingAreaMapper(translationHelper, stopLookup); - locationMapper = new LocationMapper(builder.stopModel()); - locationGroupMapper = new LocationGroupMapper(stopMapper, locationMapper, builder.stopModel()); + areaStopMapper = new AreaStopMapper(builder.stopModel()); + locationGroupMapper = new LocationGroupMapper(stopMapper, areaStopMapper, builder.stopModel()); // the use of stop areas were reverted in the spec // this code will go away, please migrate now! - stopAreaMapper = new StopAreaMapper(stopMapper, locationMapper, builder.stopModel()); + stopAreaMapper = new StopAreaMapper(stopMapper, areaStopMapper, builder.stopModel()); pathwayMapper = new PathwayMapper(stopMapper, entranceMapper, pathwayNodeMapper, boardingAreaMapper); routeMapper = new RouteMapper(agencyMapper, issueStore, translationHelper); @@ -124,7 +124,7 @@ public GTFSToOtpTransitServiceMapper( stopTimeMapper = new StopTimeMapper( stopMapper, - locationMapper, + areaStopMapper, locationGroupMapper, stopAreaMapper, tripMapper, @@ -164,7 +164,7 @@ public void mapStopTripAndRouteDataIntoBuilder() { if (OTPFeature.FlexRouting.isOn()) { // Stop areas and Stop groups are only used in FLEX routes - builder.stopModel().withAreaStops(locationMapper.map(data.getAllLocations())); + builder.stopModel().withAreaStops(areaStopMapper.map(data.getAllLocations())); builder.stopModel().withGroupStops(locationGroupMapper.map(data.getAllLocationGroups())); builder.stopModel().withGroupStops(stopAreaMapper.map(data.getAllStopAreas())); } diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java index 591a59c492e..25193185271 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java @@ -18,18 +18,18 @@ public class LocationGroupMapper { private final StopMapper stopMapper; - private final LocationMapper locationMapper; + private final AreaStopMapper areaStopMapper; private final StopModelBuilder stopModelBuilder; private final Map mappedLocationGroups = new HashMap<>(); public LocationGroupMapper( StopMapper stopMapper, - LocationMapper locationMapper, + AreaStopMapper areaStopMapper, StopModelBuilder stopModelBuilder ) { this.stopMapper = stopMapper; - this.locationMapper = locationMapper; + this.areaStopMapper = areaStopMapper; this.stopModelBuilder = stopModelBuilder; } @@ -54,7 +54,7 @@ private GroupStop doMap(LocationGroup element) { ); switch (location) { case Stop stop -> groupStopBuilder.addLocation(stopMapper.map(stop)); - case Location loc -> groupStopBuilder.addLocation(locationMapper.map(loc)); + case Location loc -> groupStopBuilder.addLocation(areaStopMapper.map(loc)); case LocationGroup ignored -> throw new RuntimeException( "Nested GroupStops are not allowed" ); diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/StopAreaMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/StopAreaMapper.java index 55c836aa458..a69a303d913 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/StopAreaMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/StopAreaMapper.java @@ -25,18 +25,18 @@ public class StopAreaMapper { private final StopMapper stopMapper; - private final LocationMapper locationMapper; + private final AreaStopMapper areaStopMapper; private final Map mappedStopAreas = new HashMap<>(); private final StopModelBuilder stopModel; public StopAreaMapper( StopMapper stopMapper, - LocationMapper locationMapper, + AreaStopMapper areaStopMapper, StopModelBuilder stopModel ) { this.stopMapper = stopMapper; - this.locationMapper = locationMapper; + this.areaStopMapper = areaStopMapper; this.stopModel = stopModel; } @@ -57,7 +57,7 @@ private GroupStop doMap(org.onebusaway.gtfs.model.StopArea element) { for (org.onebusaway.gtfs.model.StopLocation location : element.getLocations()) { switch (location) { case Stop stop -> groupStopBuilder.addLocation(stopMapper.map(stop)); - case Location loc -> groupStopBuilder.addLocation(locationMapper.map(loc)); + case Location loc -> groupStopBuilder.addLocation(areaStopMapper.map(loc)); case org.onebusaway.gtfs.model.StopArea ignored -> throw new RuntimeException( "Nested GroupStops are not allowed" ); diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java index 67b250c5061..e6b908d9442 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java @@ -19,7 +19,7 @@ class StopTimeMapper { private final StopMapper stopMapper; - private final LocationMapper locationMapper; + private final AreaStopMapper areaStopMapper; private final LocationGroupMapper locationGroupMapper; private final StopAreaMapper stopAreaMapper; @@ -33,7 +33,7 @@ class StopTimeMapper { StopTimeMapper( StopMapper stopMapper, - LocationMapper locationMapper, + AreaStopMapper areaStopMapper, LocationGroupMapper locationGroupMapper, StopAreaMapper stopAreaMapper, TripMapper tripMapper, @@ -41,7 +41,7 @@ class StopTimeMapper { TranslationHelper translationHelper ) { this.stopMapper = stopMapper; - this.locationMapper = locationMapper; + this.areaStopMapper = areaStopMapper; this.locationGroupMapper = locationGroupMapper; this.stopAreaMapper = stopAreaMapper; this.tripMapper = tripMapper; @@ -69,7 +69,7 @@ private StopTime doMap(org.onebusaway.gtfs.model.StopTime rhs) { ); switch (stopLocation) { case Stop stop -> lhs.setStop(stopMapper.map(stop)); - case Location location -> lhs.setStop(locationMapper.map(location)); + case Location location -> lhs.setStop(areaStopMapper.map(location)); case LocationGroup locGroup -> lhs.setStop(locationGroupMapper.map(locGroup)); // TODO: only here for backwards compatibility, this will be removed in the future case StopArea area -> lhs.setStop(stopAreaMapper.map(area)); diff --git a/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java b/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java index 685d8c65437..cf0ac3d0b3f 100644 --- a/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java +++ b/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java @@ -56,10 +56,11 @@ public class AreaStop if (!this.geometry.isValid()) { var error = new IsValidOp(this.geometry).getValidationError(); throw new IllegalArgumentException( - "Polygon geometry for AreaStop %s is invalid: %s at %s".formatted( + "Polygon geometry for AreaStop %s is invalid: %s at (lat: %s, lon: %s)".formatted( getId(), error.getMessage(), - error.getCoordinate() + error.getCoordinate().y, + error.getCoordinate().x ) ); } diff --git a/src/test/java/org/opentripplanner/_support/geometry/Polygons.java b/src/test/java/org/opentripplanner/_support/geometry/Polygons.java index ee110ab4f4f..bdf59c70e82 100644 --- a/src/test/java/org/opentripplanner/_support/geometry/Polygons.java +++ b/src/test/java/org/opentripplanner/_support/geometry/Polygons.java @@ -56,6 +56,15 @@ public class Polygons { } ); + public static final Polygon SELF_INTERSECTING = FAC.createPolygon( + new Coordinate[] { + Coordinates.of(1, 1), + Coordinates.of(1, 2), + Coordinates.of(1, 3), + Coordinates.of(1, 1), + } + ); + public static org.geojson.Polygon toGeoJson(Polygon polygon) { var ret = new org.geojson.Polygon(); diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java new file mode 100644 index 00000000000..8cdd4282e52 --- /dev/null +++ b/src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java @@ -0,0 +1,57 @@ +package org.opentripplanner.gtfs.mapping; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.util.stream.Stream; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.locationtech.jts.geom.Polygon; +import org.onebusaway.gtfs.model.AgencyAndId; +import org.onebusaway.gtfs.model.Location; +import org.opentripplanner._support.geometry.Polygons; +import org.opentripplanner.transit.service.StopModel; + +class AreaStopMapperTest { + + static Stream testCases() { + return Stream.of(Arguments.of(null, true), Arguments.of("a name", false)); + } + + @ParameterizedTest(name = "a name of <{0}> should set bogusName={1}") + @MethodSource("testCases") + void testMapping(String name, boolean isBogusName) { + final var gtfsLocation = getLocation(name, Polygons.OSLO); + + var mapper = new AreaStopMapper(StopModel.of()); + var flexLocation = mapper.map(gtfsLocation); + + assertEquals(isBogusName, flexLocation.hasFallbackName()); + } + + @Test + void invalidPolygon() { + var selfIntersecting = Polygons.SELF_INTERSECTING; + assertFalse(selfIntersecting.isValid()); + + var gtfsLocation = getLocation("invalid", selfIntersecting); + + var mapper = new AreaStopMapper(StopModel.of()); + var expectation = assertThrows(IllegalArgumentException.class, () -> mapper.map(gtfsLocation)); + assertEquals( + "Polygon geometry for AreaStop 1:zone-3 is invalid: Self-intersection at (lat: 1.0, lon: 2.0)", + expectation.getMessage() + ); + } + + private static Location getLocation(String name, Polygon polygon) { + var gtfsLocation = new Location(); + gtfsLocation.setId(new AgencyAndId("1", "zone-3")); + gtfsLocation.setName(name); + gtfsLocation.setGeometry(Polygons.toGeoJson(polygon)); + return gtfsLocation; + } +} diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java index f8fe52c4731..513c96edd13 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java @@ -22,7 +22,7 @@ void map() { var builder = StopModel.of(); var mapper = new LocationGroupMapper( new StopMapper(new TranslationHelper(), id -> null, builder), - new LocationMapper(builder), + new AreaStopMapper(builder), builder ); diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java deleted file mode 100644 index 4461c5a31f1..00000000000 --- a/src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.opentripplanner.gtfs.mapping; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.List; -import java.util.stream.Stream; -import org.geojson.LngLatAlt; -import org.geojson.Polygon; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; -import org.onebusaway.gtfs.model.AgencyAndId; -import org.onebusaway.gtfs.model.Location; -import org.opentripplanner.transit.service.StopModel; - -class LocationMapperTest { - - static Stream testCases() { - return Stream.of(Arguments.of(null, true), Arguments.of("a name", false)); - } - - @ParameterizedTest(name = "a name of <{0}> should set bogusName={1}") - @MethodSource("testCases") - void testMapping(String name, boolean isBogusName) { - var gtfsLocation = new Location(); - gtfsLocation.setId(new AgencyAndId("1", "zone-3")); - gtfsLocation.setName(name); - gtfsLocation.setGeometry( - new Polygon( - List.of(new LngLatAlt(1, 1), new LngLatAlt(1, 2), new LngLatAlt(1, 3), new LngLatAlt(1, 1)) - ) - ); - - var mapper = new LocationMapper(StopModel.of()); - var flexLocation = mapper.map(gtfsLocation); - - assertEquals(isBogusName, flexLocation.hasFallbackName()); - } -} diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java index f8597954475..d96d447ca5e 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java @@ -23,7 +23,7 @@ class StopAreaMapperTest { void map() { var stopModel = StopModel.of(); var stopMapper = new StopMapper(new TranslationHelper(), ignored -> null, stopModel); - var locationMapper = new LocationMapper(stopModel); + var locationMapper = new AreaStopMapper(stopModel); var mapper = new StopAreaMapper(stopMapper, locationMapper, stopModel); var area = new Area(); diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java index 826db744d43..ebeaccbda6a 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java @@ -76,21 +76,21 @@ public class StopTimeMapperTest { stopModelBuilder ); private final BookingRuleMapper bookingRuleMapper = new BookingRuleMapper(); - private final LocationMapper locationMapper = new LocationMapper(stopModelBuilder); + private final AreaStopMapper areaStopMapper = new AreaStopMapper(stopModelBuilder); private final LocationGroupMapper locationGroupMapper = new LocationGroupMapper( stopMapper, - locationMapper, + areaStopMapper, stopModelBuilder ); private final StopAreaMapper stopAreaMapper = new StopAreaMapper( stopMapper, - locationMapper, + areaStopMapper, stopModelBuilder ); private final TranslationHelper translationHelper = new TranslationHelper(); private final StopTimeMapper subject = new StopTimeMapper( stopMapper, - locationMapper, + areaStopMapper, locationGroupMapper, stopAreaMapper, new TripMapper( diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java index 458610d9660..f58355dbd84 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java @@ -46,7 +46,7 @@ public class TransferMapperTest { ); private static final BookingRuleMapper BOOKING_RULE_MAPPER = new BookingRuleMapper(); - private static final LocationMapper LOCATION_MAPPER = new LocationMapper(STOP_MODEL_BUILDER); + private static final AreaStopMapper LOCATION_MAPPER = new AreaStopMapper(STOP_MODEL_BUILDER); private static final LocationGroupMapper LOCATION_GROUP_MAPPER = new LocationGroupMapper( STOP_MAPPER, From 1ddadf2b25123564f90d3537cd88d57f74ebfc89 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 14 Jun 2024 08:45:01 +0200 Subject: [PATCH 025/132] Add test for AreaStop --- .../ext/flex/FlexIntegrationTestData.java | 28 - .../flex/trip/ScheduledDeviatedTripTest.java | 10 - .../flex/lincoln-county-flex.gtfs/agency.txt | 2 - .../flex/lincoln-county-flex.gtfs/areas.txt | 1 - .../booking_rules.txt | 7 - .../lincoln-county-flex.gtfs/calendar.txt | 4 - .../calendar_attributes.txt | 4 - .../calendar_dates.txt | 14 - .../lincoln-county-flex.gtfs/directions.txt | 11 - .../lincoln-county-flex.gtfs/feed_info.txt | 2 - .../locations.geojson | 93139 ---------------- .../flex/lincoln-county-flex.gtfs/routes.txt | 7 - .../lincoln-county-flex.gtfs/stop_times.txt | 1023 - .../flex/lincoln-county-flex.gtfs/stops.txt | 17 - .../flex/lincoln-county-flex.gtfs/trips.txt | 57 - .../gtfs/mapping/AreaStopMapperTest.java | 6 +- .../transit/model/site/AreaStopTest.java | 42 +- 17 files changed, 30 insertions(+), 94344 deletions(-) delete mode 100644 src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/agency.txt delete mode 100644 src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/areas.txt delete mode 100644 src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/booking_rules.txt delete mode 100644 src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar.txt delete mode 100644 src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar_attributes.txt delete mode 100644 src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar_dates.txt delete mode 100644 src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/directions.txt delete mode 100644 src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/feed_info.txt delete mode 100644 src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/locations.geojson delete mode 100644 src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/routes.txt delete mode 100644 src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/stop_times.txt delete mode 100644 src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/stops.txt delete mode 100644 src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/trips.txt diff --git a/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTestData.java b/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTestData.java index e0a85e23794..d3f4f7a62e8 100644 --- a/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTestData.java +++ b/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTestData.java @@ -2,16 +2,12 @@ import static graphql.Assert.assertTrue; -import gnu.trove.set.hash.TIntHashSet; import java.io.File; import java.time.LocalDate; -import java.time.LocalTime; import java.util.List; import java.util.Map; import org.opentripplanner.ConstantsForTests; import org.opentripplanner.TestOtpModel; -import org.opentripplanner.ext.flex.flexpathcalculator.DirectFlexPathCalculator; -import org.opentripplanner.ext.flex.template.FlexServiceDate; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.gtfs.graphbuilder.GtfsBundle; import org.opentripplanner.gtfs.graphbuilder.GtfsModule; @@ -19,7 +15,6 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.test.support.ResourceLoader; import org.opentripplanner.transit.model.framework.Deduplicator; -import org.opentripplanner.transit.model.timetable.booking.RoutingBookingInfo; import org.opentripplanner.transit.service.StopModel; import org.opentripplanner.transit.service.TransitModel; @@ -31,19 +26,8 @@ public final class FlexIntegrationTestData { static final File COBB_BUS_30_GTFS = RES.file("cobblinc-bus-30-only.gtfs.zip"); static final File COBB_FLEX_GTFS = RES.file("cobblinc-scheduled-deviated-flex.gtfs"); private static final File COBB_OSM = RES.file("cobb-county.filtered.osm.pbf"); - private static final File LINCOLN_COUNTY_GTFS = RES.file("lincoln-county-flex.gtfs"); static final File MARTA_BUS_856_GTFS = RES.file("marta-bus-856-only.gtfs.zip"); - public static final DirectFlexPathCalculator CALCULATOR = new DirectFlexPathCalculator(); - private static final LocalDate SERVICE_DATE = LocalDate.of(2021, 4, 11); - private static final int SECONDS_SINCE_MIDNIGHT = LocalTime.of(10, 0).toSecondOfDay(); - public static final FlexServiceDate FLEX_DATE = new FlexServiceDate( - SERVICE_DATE, - SECONDS_SINCE_MIDNIGHT, - RoutingBookingInfo.NOT_SET, - new TIntHashSet() - ); - public static TestOtpModel aspenGtfs() { return buildFlexGraph(ASPEN_GTFS); } @@ -52,18 +36,6 @@ public static TestOtpModel cobbFlexGtfs() { return buildFlexGraph(COBB_FLEX_GTFS); } - public static TestOtpModel cobbBus30Gtfs() { - return buildFlexGraph(COBB_BUS_30_GTFS); - } - - public static TestOtpModel martaBus856Gtfs() { - return buildFlexGraph(MARTA_BUS_856_GTFS); - } - - public static TestOtpModel lincolnCountyGtfs() { - return buildFlexGraph(LINCOLN_COUNTY_GTFS); - } - public static TestOtpModel cobbOsm() { return ConstantsForTests.buildOsmGraph(COBB_OSM); } diff --git a/src/ext-test/java/org/opentripplanner/ext/flex/trip/ScheduledDeviatedTripTest.java b/src/ext-test/java/org/opentripplanner/ext/flex/trip/ScheduledDeviatedTripTest.java index 2883394f837..3971d03ac6d 100644 --- a/src/ext-test/java/org/opentripplanner/ext/flex/trip/ScheduledDeviatedTripTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/flex/trip/ScheduledDeviatedTripTest.java @@ -2,7 +2,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.opentripplanner.test.support.PolylineAssert.assertThatPolylinesAreEqual; import java.time.LocalDateTime; @@ -188,15 +187,6 @@ void shouldNotInterpolateFlexTimes() { assertEquals(StopTime.MISSING_VALUE, arrivalTime); } - /** - * Checks that trips which have continuous pick up/drop off set are parsed correctly. - */ - @Test - void parseContinuousPickup() { - var lincolnGraph = FlexIntegrationTestData.lincolnCountyGtfs(); - assertNotNull(lincolnGraph); - } - @BeforeAll static void setup() { TestOtpModel model = FlexIntegrationTestData.cobbFlexGtfs(); diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/agency.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/agency.txt deleted file mode 100644 index 21af34a258c..00000000000 --- a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/agency.txt +++ /dev/null @@ -1,2 +0,0 @@ -agency_id,agency_url,agency_lang,agency_name,agency_phone,agency_timezone,agency_fare_url -89,http://www.co.lincoln.or.us/transit/,en,Lincoln County Transit,541-265-4900,America/Los_Angeles,http://www.co.lincoln.or.us/transit/page/fare-schedule diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/areas.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/areas.txt deleted file mode 100644 index cac45c7d043..00000000000 --- a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/areas.txt +++ /dev/null @@ -1 +0,0 @@ -area_id,wkt diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/booking_rules.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/booking_rules.txt deleted file mode 100644 index 43369cdba8d..00000000000 --- a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/booking_rules.txt +++ /dev/null @@ -1,7 +0,0 @@ -booking_rule_id,booking_type,prior_notice_duration_min,prior_notice_duration_max,prior_notice_start_day,prior_notice_start_time,prior_notice_last_day,prior_notice_last_time,prior_notice_service_id,message,pickup_message,drop_off_message,phone_number,info_url,booking_url -booking_route_13317,2,24:00:00,,,,,,,,Lincoln County Transit's Dial-A-Ride is a “curb to curb” accessible transit service available to everyone. Call (541) 265-4900 at least one day in advance to request your ride.,Lincoln County Transit's Dial-A-Ride is a “curb to curb” accessible transit service available to everyone. Call (541) 265-4900 at least one day in advance to request your ride.,,, -booking_route_491,1,00:30:00,,,,,,,,Newport City Loop allows deviated service pickups that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated pickup.,Newport City Loop allows deviated service drop offs that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated drop off.,,, -booking_route_492,1,00:30:00,,,,,,,,Lincoln City Loop allows deviated service pickups that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated pickup.,Lincoln City Loop allows deviated service drop offs that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated drop off.,,, -booking_route_493,1,00:30:00,,,,,,,,East County allows deviated service pickups that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated pickup.,East County allows deviated service drop offs that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated drop off.,,, -booking_route_495,1,00:30:00,,,,,,,,North County allows deviated service pickups that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated pickup.,North County allows deviated service drop offs that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated drop off.,,, -booking_route_497,1,00:30:00,,,,,,,,South County allows deviated service pickups that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated pickup.,South County allows deviated service drop offs that are scheduled at least 30 minutes in advance and do not deviate more than 3/4 mile off the scheduled route to retain normal schedule. Please call (541) 265-4900 to schedule a deviated drop off.,,, diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar.txt deleted file mode 100644 index a60858e8722..00000000000 --- a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar.txt +++ /dev/null @@ -1,4 +0,0 @@ -service_id,service_name,monday,tuesday,wednesday,thursday,friday,saturday,sunday,start_date,end_date -c_15353_b_26748_d_63,Year Round (No Sunday),1,1,1,1,1,1,0,20200607,20220101 -c_15353_b_26748_d_31,Year Round (Weekday),1,1,1,1,1,0,0,20200607,20220101 -c_15353_b_26748_d_127,Year Round (All days of week),1,1,1,1,1,1,1,20200607,20220101 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar_attributes.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar_attributes.txt deleted file mode 100644 index 4d5c9e1804a..00000000000 --- a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar_attributes.txt +++ /dev/null @@ -1,4 +0,0 @@ -service_id,service_description -c_15353_b_26748_d_63,Year Round (No Sunday) -c_15353_b_26748_d_31,Year Round (Weekday) -c_15353_b_26748_d_127,Year Round (All days of week) diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar_dates.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar_dates.txt deleted file mode 100644 index 9f5444a98e0..00000000000 --- a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/calendar_dates.txt +++ /dev/null @@ -1,14 +0,0 @@ -service_id,date,holiday_name,exception_type -c_15353_b_26748_d_63,20220101,New Year's Day,2 -c_15353_b_26748_d_63,20211225,Christmas Day,2 -c_15353_b_26748_d_63,20211125,Thanksgiving Day,2 -c_15353_b_26748_d_63,20210101,New Year's Day,2 -c_15353_b_26748_d_63,20201225,Christmas Day,2 -c_15353_b_26748_d_31,20211125,Thanksgiving Day,2 -c_15353_b_26748_d_31,20210101,New Year's Day,2 -c_15353_b_26748_d_31,20201225,Christmas Day,2 -c_15353_b_26748_d_127,20220101,New Year's Day,2 -c_15353_b_26748_d_127,20211225,Christmas Day,2 -c_15353_b_26748_d_127,20211125,Thanksgiving Day,2 -c_15353_b_26748_d_127,20210101,New Year's Day,2 -c_15353_b_26748_d_127,20201225,Christmas Day,2 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/directions.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/directions.txt deleted file mode 100644 index 141511296b4..00000000000 --- a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/directions.txt +++ /dev/null @@ -1,11 +0,0 @@ -route_id,direction_id,direction -491,0,No direction -492,0,Northbound -492,1,Southbound -493,0,Westbound -493,1,Eastbound -495,0,Northbound -495,1,Southbound -497,0,Northbound -497,1,Southbound -13317,0,No direction diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/feed_info.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/feed_info.txt deleted file mode 100644 index 036a20fbb91..00000000000 --- a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/feed_info.txt +++ /dev/null @@ -1,2 +0,0 @@ -feed_publisher_url,feed_publisher_name,feed_lang,feed_version,feed_license,feed_contact_email,feed_contact_url,feed_start_date,feed_end_date,feed_id -http://www.trilliumtransit.com,"Trillium Solutions, Inc.",en,UTC: 22-Dec-2020 22:38,,support+test+lincolncounty-or-us@trilliumtransit.com,http://support.trilliumtransit.com,20201222,20220101,lincolncounty-or-us diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/locations.geojson b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/locations.geojson deleted file mode 100644 index 5530bd15ffc..00000000000 --- a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/locations.geojson +++ /dev/null @@ -1,93139 +0,0 @@ -{ - "type": "FeatureCollection", - "features": [ - { - "id": "area_271", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0269929, - 44.6327988 - ], - [ - -124.027794, - 44.6327786 - ], - [ - -124.0277106, - 44.6311308 - ], - [ - -124.0268959, - 44.6311389 - ], - [ - -124.0269929, - 44.6327988 - ], - [ - -124.024068, - 44.6328757 - ], - [ - -124.0241089, - 44.6334103 - ], - [ - -124.0237571, - 44.6334298 - ], - [ - -124.0236022, - 44.633649 - ], - [ - -124.0235327, - 44.6328955 - ], - [ - -124.0221969, - 44.6329293 - ], - [ - -124.0222013, - 44.6336919 - ], - [ - -124.0215448, - 44.633856 - ], - [ - -124.0208617, - 44.6340437 - ], - [ - -124.020617, - 44.6340929 - ], - [ - -124.0203916, - 44.6341172 - ], - [ - -124.0201635, - 44.6341321 - ], - [ - -124.0199219, - 44.6341367 - ], - [ - -124.0197633, - 44.6341362 - ], - [ - -124.0196546, - 44.6341268 - ], - [ - -124.0196749, - 44.6339464 - ], - [ - -124.0192138, - 44.6339536 - ], - [ - -124.0191906, - 44.6339039 - ], - [ - -124.01918, - 44.6338844 - ], - [ - -124.0191597, - 44.6338544 - ], - [ - -124.0191363, - 44.6338295 - ], - [ - -124.0191129, - 44.6338105 - ], - [ - -124.0190998, - 44.6338017 - ], - [ - -124.019082, - 44.6337913 - ], - [ - -124.0190656, - 44.6337828 - ], - [ - -124.0190514, - 44.6337764 - ], - [ - -124.0190373, - 44.6337707 - ], - [ - -124.019024, - 44.6337658 - ], - [ - -124.0189643, - 44.6337447 - ], - [ - -124.0188263, - 44.6336892 - ], - [ - -124.0187485, - 44.6336601 - ], - [ - -124.0186902, - 44.6336187 - ], - [ - -124.018678, - 44.6335858 - ], - [ - -124.0186435, - 44.6334335 - ], - [ - -124.018641, - 44.6334185 - ], - [ - -124.0186395, - 44.6334077 - ], - [ - -124.0186363, - 44.6333554 - ], - [ - -124.0186453, - 44.6331262 - ], - [ - -124.0186603, - 44.6330391 - ], - [ - -124.0186618, - 44.6330199 - ], - [ - -124.0186632, - 44.6329217 - ], - [ - -124.0186825, - 44.632819 - ], - [ - -124.0186874, - 44.6327572 - ], - [ - -124.018685, - 44.6327279 - ], - [ - -124.0186438, - 44.6326013 - ], - [ - -124.0186334, - 44.6325672 - ], - [ - -124.0194447, - 44.6324527 - ], - [ - -124.0193717, - 44.6325982 - ], - [ - -124.0202495, - 44.6325828 - ], - [ - -124.0202947, - 44.6331294 - ], - [ - -124.0211169, - 44.6331041 - ], - [ - -124.0213096, - 44.6325633 - ], - [ - -124.0212887, - 44.6321591 - ], - [ - -124.0210921, - 44.6316437 - ], - [ - -124.020963, - 44.6314776 - ], - [ - -124.0208095, - 44.6313452 - ], - [ - -124.0206373, - 44.6312324 - ], - [ - -124.0203394, - 44.6311451 - ], - [ - -124.0203054, - 44.6315401 - ], - [ - -124.0201846, - 44.6315844 - ], - [ - -124.0193062, - 44.6314385 - ], - [ - -124.0194084, - 44.6320106 - ], - [ - -124.0187452, - 44.6317468 - ], - [ - -124.0188009, - 44.6317258 - ], - [ - -124.0188313, - 44.6317083 - ], - [ - -124.0188708, - 44.6316744 - ], - [ - -124.0189021, - 44.6316338 - ], - [ - -124.0189207, - 44.6315925 - ], - [ - -124.0189093, - 44.6314746 - ], - [ - -124.0188532, - 44.6313461 - ], - [ - -124.018805, - 44.6312558 - ], - [ - -124.0187443, - 44.6311227 - ], - [ - -124.0187328, - 44.6310641 - ], - [ - -124.0187194, - 44.6309961 - ], - [ - -124.0187151, - 44.6309176 - ], - [ - -124.01874, - 44.6308656 - ], - [ - -124.0188237, - 44.6307647 - ], - [ - -124.0189053, - 44.6306917 - ], - [ - -124.0190049, - 44.630646 - ], - [ - -124.0191298, - 44.6305913 - ], - [ - -124.0191939, - 44.6305615 - ], - [ - -124.0192531, - 44.6305247 - ], - [ - -124.0196607, - 44.6307533 - ], - [ - -124.0198394, - 44.6303829 - ], - [ - -124.0202117, - 44.6303457 - ], - [ - -124.0203068, - 44.6301086 - ], - [ - -124.0207851, - 44.6299569 - ], - [ - -124.0208023, - 44.6296833 - ], - [ - -124.0209365, - 44.6296809 - ], - [ - -124.0209255, - 44.6299546 - ], - [ - -124.0217663, - 44.6299354 - ], - [ - -124.0217709, - 44.6296539 - ], - [ - -124.0222225, - 44.6296401 - ], - [ - -124.0222103, - 44.6290281 - ], - [ - -124.0222203, - 44.6145375 - ], - [ - -124.0266336, - 44.6144827 - ], - [ - -124.0267072, - 44.6144877 - ], - [ - -124.0271157, - 44.6145043 - ], - [ - -124.0276094, - 44.6145243 - ], - [ - -124.0276518, - 44.6145258 - ], - [ - -124.0276942, - 44.6145268 - ], - [ - -124.0277792, - 44.6145284 - ], - [ - -124.0278254, - 44.6145284 - ], - [ - -124.0278717, - 44.614527 - ], - [ - -124.0279024, - 44.6145253 - ], - [ - -124.0279435, - 44.6145222 - ], - [ - -124.027998, - 44.6145167 - ], - [ - -124.0280292, - 44.6145129 - ], - [ - -124.0280647, - 44.6145081 - ], - [ - -124.0281048, - 44.6145018 - ], - [ - -124.0281446, - 44.6144943 - ], - [ - -124.0281707, - 44.6144885 - ], - [ - -124.0282049, - 44.6144797 - ], - [ - -124.0282241, - 44.6144741 - ], - [ - -124.0282455, - 44.6144671 - ], - [ - -124.0282694, - 44.6144582 - ], - [ - -124.0282958, - 44.614447 - ], - [ - -124.0283094, - 44.6144404 - ], - [ - -124.0285542, - 44.6143179 - ], - [ - -124.0288106, - 44.6141894 - ], - [ - -124.0288679, - 44.6141602 - ], - [ - -124.0289247, - 44.6141305 - ], - [ - -124.0290377, - 44.6140705 - ], - [ - -124.0291136, - 44.614031 - ], - [ - -124.0293646, - 44.613907 - ], - [ - -124.0296186, - 44.6137859 - ], - [ - -124.0298441, - 44.6136819 - ], - [ - -124.030073, - 44.6135819 - ], - [ - -124.0302271, - 44.613517 - ], - [ - -124.0304338, - 44.6134322 - ], - [ - -124.0304869, - 44.6134125 - ], - [ - -124.0305417, - 44.6133953 - ], - [ - -124.0305789, - 44.613385 - ], - [ - -124.0306293, - 44.6133722 - ], - [ - -124.030833, - 44.6133245 - ], - [ - -124.0308903, - 44.6133094 - ], - [ - -124.0309543, - 44.6132898 - ], - [ - -124.0309876, - 44.6132781 - ], - [ - -124.0310223, - 44.6132644 - ], - [ - -124.0310644, - 44.6132464 - ], - [ - -124.0311059, - 44.6132276 - ], - [ - -124.0311873, - 44.6131886 - ], - [ - -124.0312406, - 44.6131616 - ], - [ - -124.0313107, - 44.6131246 - ], - [ - -124.031403, - 44.613074 - ], - [ - -124.0314641, - 44.6130386 - ], - [ - -124.0315237, - 44.6130021 - ], - [ - -124.0316415, - 44.6129279 - ], - [ - -124.0317217, - 44.6128794 - ], - [ - -124.0317691, - 44.6128527 - ], - [ - -124.0318098, - 44.6128313 - ], - [ - -124.0318513, - 44.6128112 - ], - [ - -124.0318796, - 44.6127986 - ], - [ - -124.0319179, - 44.6127825 - ], - [ - -124.0319705, - 44.6127626 - ], - [ - -124.0320012, - 44.6127518 - ], - [ - -124.0320371, - 44.6127402 - ], - [ - -124.0320791, - 44.6127275 - ], - [ - -124.0321285, - 44.6127143 - ], - [ - -124.0321782, - 44.612703 - ], - [ - -124.0322116, - 44.6126965 - ], - [ - -124.0322562, - 44.6126889 - ], - [ - -124.032316, - 44.6126805 - ], - [ - -124.0323504, - 44.6126766 - ], - [ - -124.0323898, - 44.6126727 - ], - [ - -124.032435, - 44.6126691 - ], - [ - -124.0326973, - 44.6126709 - ], - [ - -124.0327366, - 44.612668 - ], - [ - -124.0327759, - 44.6126646 - ], - [ - -124.032802, - 44.6126616 - ], - [ - -124.0328365, - 44.6126567 - ], - [ - -124.0328561, - 44.6126532 - ], - [ - -124.0328782, - 44.6126485 - ], - [ - -124.0329031, - 44.6126421 - ], - [ - -124.0329162, - 44.6126382 - ], - [ - -124.03293, - 44.6126336 - ], - [ - -124.0329446, - 44.6126281 - ], - [ - -124.0329686, - 44.6126185 - ], - [ - -124.0329921, - 44.6126087 - ], - [ - -124.0330378, - 44.6125885 - ], - [ - -124.0330674, - 44.6125748 - ], - [ - -124.0331065, - 44.6125561 - ], - [ - -124.0331582, - 44.6125304 - ], - [ - -124.0333918, - 44.6124128 - ], - [ - -124.0335832, - 44.6123149 - ], - [ - -124.033648, - 44.6122822 - ], - [ - -124.0336659, - 44.6122736 - ], - [ - -124.0336845, - 44.6122655 - ], - [ - -124.0336971, - 44.6122604 - ], - [ - -124.0337143, - 44.6122542 - ], - [ - -124.0337242, - 44.612251 - ], - [ - -124.0337356, - 44.6122477 - ], - [ - -124.0337486, - 44.6122443 - ], - [ - -124.0337635, - 44.6122411 - ], - [ - -124.0337799, - 44.6122386 - ], - [ - -124.0337888, - 44.6122379 - ], - [ - -124.0337976, - 44.6122381 - ], - [ - -124.0338035, - 44.6122385 - ], - [ - -124.0338115, - 44.6122396 - ], - [ - -124.033822, - 44.6122418 - ], - [ - -124.0338361, - 44.6122457 - ], - [ - -124.0338442, - 44.6122483 - ], - [ - -124.033866, - 44.6122561 - ], - [ - -124.0338952, - 44.6122668 - ], - [ - -124.0339121, - 44.6122721 - ], - [ - -124.0339212, - 44.6122745 - ], - [ - -124.033931, - 44.6122765 - ], - [ - -124.0339414, - 44.6122779 - ], - [ - -124.0339526, - 44.6122786 - ], - [ - -124.0342926, - 44.6122808 - ], - [ - -124.034559, - 44.6122877 - ], - [ - -124.0345761, - 44.6122876 - ], - [ - -124.034593, - 44.6122872 - ], - [ - -124.0346268, - 44.6122851 - ], - [ - -124.0346492, - 44.612283 - ], - [ - -124.034679, - 44.6122792 - ], - [ - -124.0347186, - 44.6122727 - ], - [ - -124.0347411, - 44.6122684 - ], - [ - -124.0347668, - 44.6122631 - ], - [ - -124.0347961, - 44.6122564 - ], - [ - -124.0348296, - 44.6122483 - ], - [ - -124.0348799, - 44.6122349 - ], - [ - -124.0349287, - 44.6122202 - ], - [ - -124.0349605, - 44.6122094 - ], - [ - -124.0350018, - 44.6121939 - ], - [ - -124.0350248, - 44.6121844 - ], - [ - -124.0350507, - 44.6121729 - ], - [ - -124.0350796, - 44.6121589 - ], - [ - -124.0351118, - 44.6121418 - ], - [ - -124.0351475, - 44.6121207 - ], - [ - -124.0351734, - 44.6121034 - ], - [ - -124.0351976, - 44.6120853 - ], - [ - -124.0352131, - 44.6120729 - ], - [ - -124.0352331, - 44.612056 - ], - [ - -124.0353109, - 44.6119877 - ], - [ - -124.0353342, - 44.6119688 - ], - [ - -124.0353624, - 44.611948 - ], - [ - -124.0353898, - 44.6119282 - ], - [ - -124.0354169, - 44.6119077 - ], - [ - -124.0354712, - 44.6118661 - ], - [ - -124.0355082, - 44.6118393 - ], - [ - -124.03553, - 44.6118246 - ], - [ - -124.0355555, - 44.6118089 - ], - [ - -124.0355859, - 44.6117924 - ], - [ - -124.0356027, - 44.6117845 - ], - [ - -124.0356212, - 44.6117767 - ], - [ - -124.0356415, - 44.6117693 - ], - [ - -124.0356639, - 44.6117625 - ], - [ - -124.0356888, - 44.6117567 - ], - [ - -124.0361841, - 44.6116577 - ], - [ - -124.0367832, - 44.6116038 - ], - [ - -124.0368172, - 44.6116016 - ], - [ - -124.0368438, - 44.6116004 - ], - [ - -124.036897, - 44.6116002 - ], - [ - -124.0369325, - 44.6116016 - ], - [ - -124.0369798, - 44.611605 - ], - [ - -124.0370428, - 44.611612 - ], - [ - -124.0370788, - 44.6116171 - ], - [ - -124.0371198, - 44.6116237 - ], - [ - -124.0371667, - 44.6116321 - ], - [ - -124.0372916, - 44.6116568 - ], - [ - -124.0373495, - 44.6116696 - ], - [ - -124.0374059, - 44.6116838 - ], - [ - -124.0374429, - 44.6116939 - ], - [ - -124.0374919, - 44.6117079 - ], - [ - -124.0375569, - 44.6117275 - ], - [ - -124.0375852, - 44.6117373 - ], - [ - -124.0376125, - 44.6117486 - ], - [ - -124.0376303, - 44.6117568 - ], - [ - -124.0377006, - 44.6117907 - ], - [ - -124.0377212, - 44.6117998 - ], - [ - -124.0377454, - 44.6118093 - ], - [ - -124.0377586, - 44.6118139 - ], - [ - -124.0377731, - 44.6118183 - ], - [ - -124.037789, - 44.6118224 - ], - [ - -124.0378065, - 44.611826 - ], - [ - -124.0378242, - 44.611829 - ], - [ - -124.0378418, - 44.6118315 - ], - [ - -124.0378771, - 44.6118352 - ], - [ - -124.0379006, - 44.6118369 - ], - [ - -124.0379319, - 44.6118383 - ], - [ - -124.0379737, - 44.6118389 - ], - [ - -124.0380293, - 44.6118382 - ], - [ - -124.0381035, - 44.6118361 - ], - [ - -124.0382373, - 44.6118315 - ], - [ - -124.038371, - 44.6118252 - ], - [ - -124.03846, - 44.61182 - ], - [ - -124.0385784, - 44.6118119 - ], - [ - -124.0386017, - 44.6118098 - ], - [ - -124.0386248, - 44.611807 - ], - [ - -124.0386709, - 44.6117997 - ], - [ - -124.0387014, - 44.611794 - ], - [ - -124.0388228, - 44.6117695 - ], - [ - -124.0388575, - 44.6117635 - ], - [ - -124.0388974, - 44.611758 - ], - [ - -124.0389187, - 44.6117558 - ], - [ - -124.0389332, - 44.6117549 - ], - [ - -124.0389477, - 44.6117545 - ], - [ - -124.0389573, - 44.6117546 - ], - [ - -124.0389702, - 44.6117553 - ], - [ - -124.0389874, - 44.6117568 - ], - [ - -124.0389972, - 44.6117582 - ], - [ - -124.0390084, - 44.61176 - ], - [ - -124.0390212, - 44.6117626 - ], - [ - -124.0390358, - 44.6117663 - ], - [ - -124.0390524, - 44.6117713 - ], - [ - -124.0390612, - 44.6117743 - ], - [ - -124.0390706, - 44.6117778 - ], - [ - -124.0390806, - 44.6117819 - ], - [ - -124.0390881, - 44.6117854 - ], - [ - -124.0390951, - 44.6117892 - ], - [ - -124.0390994, - 44.6117918 - ], - [ - -124.0391048, - 44.6117956 - ], - [ - -124.0391116, - 44.6118007 - ], - [ - -124.0391199, - 44.6118079 - ], - [ - -124.0391302, - 44.6118177 - ], - [ - -124.0391439, - 44.6118307 - ], - [ - -124.0391522, - 44.6118378 - ], - [ - -124.0391569, - 44.6118413 - ], - [ - -124.0391623, - 44.611845 - ], - [ - -124.0391684, - 44.6118486 - ], - [ - -124.0391971, - 44.6118648 - ], - [ - -124.0392285, - 44.6118822 - ], - [ - -124.0392492, - 44.6118927 - ], - [ - -124.0392613, - 44.6118984 - ], - [ - -124.0392755, - 44.6119043 - ], - [ - -124.0392922, - 44.6119105 - ], - [ - -124.0393013, - 44.6119134 - ], - [ - -124.0393113, - 44.6119162 - ], - [ - -124.0393222, - 44.6119188 - ], - [ - -124.0393388, - 44.6119223 - ], - [ - -124.0393554, - 44.6119254 - ], - [ - -124.039389, - 44.6119307 - ], - [ - -124.0394564, - 44.6119399 - ], - [ - -124.039501, - 44.6119463 - ], - [ - -124.0395263, - 44.6119507 - ], - [ - -124.0395711, - 44.6119596 - ], - [ - -124.0396157, - 44.6119691 - ], - [ - -124.0397049, - 44.6119886 - ], - [ - -124.0397649, - 44.6120011 - ], - [ - -124.0397996, - 44.6120077 - ], - [ - -124.0398196, - 44.612011 - ], - [ - -124.0398397, - 44.6120139 - ], - [ - -124.0398803, - 44.6120184 - ], - [ - -124.0399075, - 44.6120206 - ], - [ - -124.0399438, - 44.6120225 - ], - [ - -124.0399923, - 44.6120238 - ], - [ - -124.0400563, - 44.6120238 - ], - [ - -124.0400923, - 44.6120234 - ], - [ - -124.0403284, - 44.6119724 - ], - [ - -124.0403538, - 44.6119724 - ], - [ - -124.0403792, - 44.6119734 - ], - [ - -124.0403961, - 44.6119746 - ], - [ - -124.0404187, - 44.6119769 - ], - [ - -124.0404488, - 44.6119813 - ], - [ - -124.040466, - 44.6119844 - ], - [ - -124.0404857, - 44.6119886 - ], - [ - -124.0405081, - 44.6119941 - ], - [ - -124.0405336, - 44.6120015 - ], - [ - -124.0405626, - 44.6120114 - ], - [ - -124.040578, - 44.6120173 - ], - [ - -124.0405945, - 44.6120241 - ], - [ - -124.0406221, - 44.612037 - ], - [ - -124.0406478, - 44.6120508 - ], - [ - -124.0406639, - 44.6120605 - ], - [ - -124.0406844, - 44.6120738 - ], - [ - -124.0407102, - 44.6120921 - ], - [ - -124.0407429, - 44.6121169 - ], - [ - -124.0407854, - 44.6121499 - ], - [ - -124.0408103, - 44.6121679 - ], - [ - -124.0408401, - 44.6121874 - ], - [ - -124.0408568, - 44.6121972 - ], - [ - -124.0408756, - 44.612207 - ], - [ - -124.0408967, - 44.6122166 - ], - [ - -124.0413571, - 44.6124103 - ], - [ - -124.0416952, - 44.6125534 - ], - [ - -124.0417058, - 44.6125577 - ], - [ - -124.0417171, - 44.6125619 - ], - [ - -124.0417415, - 44.6125702 - ], - [ - -124.0417588, - 44.6125757 - ], - [ - -124.0417826, - 44.612583 - ], - [ - -124.041815, - 44.6125929 - ], - [ - -124.0418576, - 44.6126067 - ], - [ - -124.0418806, - 44.612615 - ], - [ - -124.0419049, - 44.6126251 - ], - [ - -124.0419167, - 44.6126307 - ], - [ - -124.0419282, - 44.612637 - ], - [ - -124.0419392, - 44.612644 - ], - [ - -124.0419491, - 44.6126518 - ], - [ - -124.0419576, - 44.6126607 - ], - [ - -124.0419609, - 44.6126654 - ], - [ - -124.0419637, - 44.6126705 - ], - [ - -124.0419657, - 44.6126759 - ], - [ - -124.0419668, - 44.6126817 - ], - [ - -124.041967, - 44.6126879 - ], - [ - -124.041966, - 44.6126945 - ], - [ - -124.0419636, - 44.6127016 - ], - [ - -124.0419417, - 44.6127527 - ], - [ - -124.0419194, - 44.6128037 - ], - [ - -124.0418564, - 44.6129499 - ], - [ - -124.0418541, - 44.6129559 - ], - [ - -124.0418525, - 44.6129621 - ], - [ - -124.0418519, - 44.6129663 - ], - [ - -124.0418515, - 44.6129719 - ], - [ - -124.0418515, - 44.6129751 - ], - [ - -124.0418518, - 44.6129788 - ], - [ - -124.0418525, - 44.6129831 - ], - [ - -124.0418538, - 44.6129878 - ], - [ - -124.0418559, - 44.6129933 - ], - [ - -124.0418572, - 44.6129961 - ], - [ - -124.0418589, - 44.6129991 - ], - [ - -124.041861, - 44.6130023 - ], - [ - -124.0418635, - 44.6130056 - ], - [ - -124.0418666, - 44.613009 - ], - [ - -124.0418702, - 44.6130126 - ], - [ - -124.0418746, - 44.6130163 - ], - [ - -124.0418813, - 44.6130212 - ], - [ - -124.0418882, - 44.6130258 - ], - [ - -124.0419025, - 44.6130337 - ], - [ - -124.0419123, - 44.6130383 - ], - [ - -124.0419259, - 44.6130435 - ], - [ - -124.0419445, - 44.6130492 - ], - [ - -124.0419554, - 44.6130519 - ], - [ - -124.041968, - 44.6130546 - ], - [ - -124.0419826, - 44.6130573 - ], - [ - -124.0419994, - 44.6130599 - ], - [ - -124.0420442, - 44.6130664 - ], - [ - -124.0420693, - 44.6130707 - ], - [ - -124.0420823, - 44.6130735 - ], - [ - -124.042096, - 44.613077 - ], - [ - -124.0421101, - 44.6130814 - ], - [ - -124.0421245, - 44.6130871 - ], - [ - -124.0422083, - 44.6131242 - ], - [ - -124.0422358, - 44.613137 - ], - [ - -124.0422718, - 44.6131551 - ], - [ - -124.0422919, - 44.6131661 - ], - [ - -124.0423144, - 44.6131794 - ], - [ - -124.0423395, - 44.6131958 - ], - [ - -124.0423525, - 44.6132052 - ], - [ - -124.042366, - 44.6132156 - ], - [ - -124.0423733, - 44.6132216 - ], - [ - -124.0423801, - 44.6132277 - ], - [ - -124.0423927, - 44.6132401 - ], - [ - -124.0424004, - 44.6132486 - ], - [ - -124.0424097, - 44.6132601 - ], - [ - -124.042421, - 44.6132758 - ], - [ - -124.0424268, - 44.613285 - ], - [ - -124.0424331, - 44.6132955 - ], - [ - -124.0424399, - 44.6133076 - ], - [ - -124.0424566, - 44.6133405 - ], - [ - -124.0424597, - 44.6133479 - ], - [ - -124.0424619, - 44.6133554 - ], - [ - -124.0424629, - 44.6133605 - ], - [ - -124.0424638, - 44.6133674 - ], - [ - -124.0424644, - 44.6133767 - ], - [ - -124.0424645, - 44.6133892 - ], - [ - -124.0424645, - 44.6134059 - ], - [ - -124.0424649, - 44.6134153 - ], - [ - -124.0424661, - 44.6134258 - ], - [ - -124.0424673, - 44.6134313 - ], - [ - -124.0424689, - 44.613437 - ], - [ - -124.0424713, - 44.613443 - ], - [ - -124.0424741, - 44.6134481 - ], - [ - -124.0424779, - 44.6134528 - ], - [ - -124.0424809, - 44.6134558 - ], - [ - -124.0424853, - 44.6134596 - ], - [ - -124.042492, - 44.6134644 - ], - [ - -124.0425021, - 44.6134703 - ], - [ - -124.0425083, - 44.6134736 - ], - [ - -124.0425259, - 44.6134818 - ], - [ - -124.0425494, - 44.6134927 - ], - [ - -124.0425619, - 44.6134993 - ], - [ - -124.042568, - 44.613503 - ], - [ - -124.0425739, - 44.6135071 - ], - [ - -124.0425794, - 44.6135117 - ], - [ - -124.0425842, - 44.6135171 - ], - [ - -124.0425862, - 44.61352 - ], - [ - -124.042588, - 44.6135231 - ], - [ - -124.0425893, - 44.6135264 - ], - [ - -124.042592, - 44.6135354 - ], - [ - -124.042594, - 44.6135446 - ], - [ - -124.042595, - 44.6135509 - ], - [ - -124.0425959, - 44.6135594 - ], - [ - -124.0425963, - 44.613571 - ], - [ - -124.0426829, - 44.6132934 - ], - [ - -124.0426831, - 44.6125278 - ], - [ - -124.0428166, - 44.612574 - ], - [ - -124.0434451, - 44.6125845 - ], - [ - -124.0426738, - 44.6121514 - ], - [ - -124.0426488, - 44.6118259 - ], - [ - -124.0443559, - 44.6117848 - ], - [ - -124.0443478, - 44.6109338 - ], - [ - -124.044849, - 44.6109128 - ], - [ - -124.0451079, - 44.6110361 - ], - [ - -124.0454275, - 44.6111207 - ], - [ - -124.0459181, - 44.6111544 - ], - [ - -124.0463236, - 44.6111339 - ], - [ - -124.0463813, - 44.6119601 - ], - [ - -124.0468269, - 44.6119491 - ], - [ - -124.0468301, - 44.6120086 - ], - [ - -124.0473667, - 44.6119945 - ], - [ - -124.0473424, - 44.6117319 - ], - [ - -124.0476805, - 44.6117268 - ], - [ - -124.0476598, - 44.6091853 - ], - [ - -124.0453757, - 44.6091065 - ], - [ - -124.0453641, - 44.6091062 - ], - [ - -124.0449731, - 44.6090928 - ], - [ - -124.0442027, - 44.6090661 - ], - [ - -124.0441873, - 44.6090656 - ], - [ - -124.0427752, - 44.6090169 - ], - [ - -124.0422637, - 44.6084214 - ], - [ - -124.042233, - 44.6071636 - ], - [ - -124.0419163, - 44.6058809 - ], - [ - -124.0418953, - 44.6050181 - ], - [ - -124.0426775, - 44.6032982 - ], - [ - -124.0427226, - 44.6019886 - ], - [ - -124.0453402, - 44.6020595 - ], - [ - -124.0479252, - 44.6021297 - ], - [ - -124.0477944, - 44.6056576 - ], - [ - -124.0477738, - 44.6061975 - ], - [ - -124.0477704, - 44.6062968 - ], - [ - -124.0477694, - 44.6063123 - ], - [ - -124.0477497, - 44.606837 - ], - [ - -124.0477398, - 44.6071109 - ], - [ - -124.050208, - 44.6071705 - ], - [ - -124.0502298, - 44.6063327 - ], - [ - -124.0503264, - 44.606335 - ], - [ - -124.0511671, - 44.6063554 - ], - [ - -124.0511669, - 44.6057699 - ], - [ - -124.0511906, - 44.6057706 - ], - [ - -124.0512829, - 44.6057735 - ], - [ - -124.0515011, - 44.6057802 - ], - [ - -124.0515254, - 44.6057809 - ], - [ - -124.0515251, - 44.6057836 - ], - [ - -124.0515248, - 44.6057863 - ], - [ - -124.0515245, - 44.605789 - ], - [ - -124.0515243, - 44.6057917 - ], - [ - -124.051524, - 44.6057944 - ], - [ - -124.0515237, - 44.6057971 - ], - [ - -124.0515235, - 44.6057998 - ], - [ - -124.0515232, - 44.6058025 - ], - [ - -124.0515229, - 44.6058052 - ], - [ - -124.0515226, - 44.6058079 - ], - [ - -124.0515224, - 44.6058106 - ], - [ - -124.0515221, - 44.6058133 - ], - [ - -124.0515218, - 44.605816 - ], - [ - -124.0515216, - 44.6058187 - ], - [ - -124.0515213, - 44.6058215 - ], - [ - -124.0515211, - 44.6058242 - ], - [ - -124.0515208, - 44.6058269 - ], - [ - -124.0515205, - 44.6058296 - ], - [ - -124.0515203, - 44.6058323 - ], - [ - -124.05152, - 44.605835 - ], - [ - -124.0515198, - 44.6058377 - ], - [ - -124.0515195, - 44.6058404 - ], - [ - -124.0515193, - 44.6058431 - ], - [ - -124.051519, - 44.6058458 - ], - [ - -124.0515188, - 44.6058485 - ], - [ - -124.0515185, - 44.6058512 - ], - [ - -124.0515183, - 44.6058539 - ], - [ - -124.051518, - 44.6058566 - ], - [ - -124.0515178, - 44.6058593 - ], - [ - -124.0515176, - 44.605862 - ], - [ - -124.0515173, - 44.6058647 - ], - [ - -124.0515171, - 44.6058674 - ], - [ - -124.0515168, - 44.6058701 - ], - [ - -124.0515166, - 44.6058728 - ], - [ - -124.0515164, - 44.6058755 - ], - [ - -124.0515161, - 44.6058782 - ], - [ - -124.0515159, - 44.6058809 - ], - [ - -124.0515157, - 44.6058836 - ], - [ - -124.0515155, - 44.6058863 - ], - [ - -124.0515152, - 44.605889 - ], - [ - -124.051515, - 44.6058917 - ], - [ - -124.0515148, - 44.6058944 - ], - [ - -124.0515145, - 44.6058971 - ], - [ - -124.0515143, - 44.6058998 - ], - [ - -124.0515141, - 44.6059025 - ], - [ - -124.0515139, - 44.6059052 - ], - [ - -124.0515137, - 44.6059079 - ], - [ - -124.0515134, - 44.6059107 - ], - [ - -124.0515132, - 44.6059134 - ], - [ - -124.051513, - 44.6059161 - ], - [ - -124.0515128, - 44.6059188 - ], - [ - -124.0515126, - 44.6059215 - ], - [ - -124.0515124, - 44.6059242 - ], - [ - -124.0515122, - 44.6059269 - ], - [ - -124.051512, - 44.6059296 - ], - [ - -124.0515118, - 44.6059323 - ], - [ - -124.0515116, - 44.605935 - ], - [ - -124.0515113, - 44.6059377 - ], - [ - -124.0515111, - 44.6059404 - ], - [ - -124.0515109, - 44.6059431 - ], - [ - -124.0515107, - 44.6059458 - ], - [ - -124.0515105, - 44.6059485 - ], - [ - -124.0515103, - 44.6059512 - ], - [ - -124.0515102, - 44.6059539 - ], - [ - -124.05151, - 44.6059566 - ], - [ - -124.0515098, - 44.6059593 - ], - [ - -124.0515096, - 44.605962 - ], - [ - -124.0515094, - 44.6059647 - ], - [ - -124.0515092, - 44.6059675 - ], - [ - -124.051509, - 44.6059702 - ], - [ - -124.0515088, - 44.6059729 - ], - [ - -124.0515086, - 44.6059756 - ], - [ - -124.0515084, - 44.6059783 - ], - [ - -124.0515083, - 44.605981 - ], - [ - -124.0515081, - 44.6059837 - ], - [ - -124.0515079, - 44.6059864 - ], - [ - -124.0515077, - 44.6059891 - ], - [ - -124.0515075, - 44.6059918 - ], - [ - -124.0515074, - 44.6059945 - ], - [ - -124.0515072, - 44.6059972 - ], - [ - -124.051507, - 44.6059999 - ], - [ - -124.0515069, - 44.6060026 - ], - [ - -124.0515067, - 44.6060053 - ], - [ - -124.0515065, - 44.606008 - ], - [ - -124.0515063, - 44.6060107 - ], - [ - -124.0515062, - 44.6060134 - ], - [ - -124.051506, - 44.6060162 - ], - [ - -124.0515058, - 44.6060189 - ], - [ - -124.0515057, - 44.6060216 - ], - [ - -124.0515055, - 44.6060243 - ], - [ - -124.0515054, - 44.606027 - ], - [ - -124.0515052, - 44.6060297 - ], - [ - -124.051505, - 44.6060324 - ], - [ - -124.0515049, - 44.6060351 - ], - [ - -124.0515047, - 44.6060378 - ], - [ - -124.0515046, - 44.6060405 - ], - [ - -124.0515044, - 44.6060432 - ], - [ - -124.0515043, - 44.6060459 - ], - [ - -124.0515041, - 44.6060486 - ], - [ - -124.051504, - 44.6060513 - ], - [ - -124.0515038, - 44.606054 - ], - [ - -124.0515037, - 44.6060567 - ], - [ - -124.0515035, - 44.6060595 - ], - [ - -124.0515034, - 44.6060622 - ], - [ - -124.0515033, - 44.6060649 - ], - [ - -124.0515031, - 44.6060676 - ], - [ - -124.051503, - 44.6060703 - ], - [ - -124.0515028, - 44.606073 - ], - [ - -124.0515027, - 44.6060757 - ], - [ - -124.0515026, - 44.6060784 - ], - [ - -124.0515024, - 44.6060811 - ], - [ - -124.0515023, - 44.6060838 - ], - [ - -124.0515022, - 44.6060865 - ], - [ - -124.0515021, - 44.6060892 - ], - [ - -124.0515019, - 44.6060919 - ], - [ - -124.0515018, - 44.6060946 - ], - [ - -124.0515017, - 44.6060973 - ], - [ - -124.0515015, - 44.6061001 - ], - [ - -124.0515014, - 44.6061028 - ], - [ - -124.0515013, - 44.6061055 - ], - [ - -124.0515012, - 44.6061082 - ], - [ - -124.0515011, - 44.6061109 - ], - [ - -124.0515009, - 44.6061136 - ], - [ - -124.0515008, - 44.6061163 - ], - [ - -124.0515007, - 44.606119 - ], - [ - -124.0515006, - 44.6061217 - ], - [ - -124.0515005, - 44.6061244 - ], - [ - -124.0515004, - 44.6061271 - ], - [ - -124.0515003, - 44.6061298 - ], - [ - -124.0515002, - 44.6061325 - ], - [ - -124.0515001, - 44.6061352 - ], - [ - -124.0515, - 44.606138 - ], - [ - -124.0514998, - 44.6061407 - ], - [ - -124.0514997, - 44.6061434 - ], - [ - -124.0514996, - 44.6061461 - ], - [ - -124.0514995, - 44.6061488 - ], - [ - -124.0514994, - 44.6061515 - ], - [ - -124.0514994, - 44.6061542 - ], - [ - -124.0514993, - 44.6061569 - ], - [ - -124.0514992, - 44.6061596 - ], - [ - -124.0514991, - 44.6061623 - ], - [ - -124.051499, - 44.606165 - ], - [ - -124.0514989, - 44.6061677 - ], - [ - -124.0514988, - 44.6061704 - ], - [ - -124.0514987, - 44.6061732 - ], - [ - -124.0514986, - 44.6061759 - ], - [ - -124.0514985, - 44.6061786 - ], - [ - -124.0514985, - 44.6061813 - ], - [ - -124.0514984, - 44.606184 - ], - [ - -124.0514983, - 44.6061867 - ], - [ - -124.0514982, - 44.6061894 - ], - [ - -124.0514981, - 44.6061921 - ], - [ - -124.0514981, - 44.6061948 - ], - [ - -124.051498, - 44.6061975 - ], - [ - -124.0514979, - 44.6062002 - ], - [ - -124.0514978, - 44.6062029 - ], - [ - -124.0514978, - 44.6062057 - ], - [ - -124.0514977, - 44.6062084 - ], - [ - -124.0514976, - 44.6062111 - ], - [ - -124.0514975, - 44.6062138 - ], - [ - -124.0514975, - 44.6062165 - ], - [ - -124.0514974, - 44.6062192 - ], - [ - -124.0514974, - 44.6062219 - ], - [ - -124.0514973, - 44.6062246 - ], - [ - -124.0514972, - 44.6062273 - ], - [ - -124.0514972, - 44.60623 - ], - [ - -124.0514971, - 44.6062327 - ], - [ - -124.0514971, - 44.6062354 - ], - [ - -124.051497, - 44.6062381 - ], - [ - -124.0514969, - 44.6062409 - ], - [ - -124.0514969, - 44.6062436 - ], - [ - -124.0514968, - 44.6062463 - ], - [ - -124.0514968, - 44.606249 - ], - [ - -124.0514967, - 44.6062517 - ], - [ - -124.0514967, - 44.6062544 - ], - [ - -124.0514966, - 44.6062571 - ], - [ - -124.0514966, - 44.6062598 - ], - [ - -124.0514966, - 44.6062625 - ], - [ - -124.0514965, - 44.6062652 - ], - [ - -124.0514965, - 44.6062679 - ], - [ - -124.0514964, - 44.6062706 - ], - [ - -124.0514964, - 44.6062734 - ], - [ - -124.0514964, - 44.6062761 - ], - [ - -124.0514963, - 44.6062788 - ], - [ - -124.0514963, - 44.6062815 - ], - [ - -124.0514963, - 44.6062842 - ], - [ - -124.0514962, - 44.6062869 - ], - [ - -124.0514962, - 44.6062896 - ], - [ - -124.0514962, - 44.6062923 - ], - [ - -124.0514961, - 44.606295 - ], - [ - -124.0514961, - 44.6062977 - ], - [ - -124.0514961, - 44.6063004 - ], - [ - -124.0514961, - 44.6063032 - ], - [ - -124.051496, - 44.6063059 - ], - [ - -124.051496, - 44.6063086 - ], - [ - -124.051496, - 44.6063113 - ], - [ - -124.051496, - 44.606314 - ], - [ - -124.051496, - 44.6063167 - ], - [ - -124.0514959, - 44.6063194 - ], - [ - -124.0514959, - 44.6063221 - ], - [ - -124.0514959, - 44.6063248 - ], - [ - -124.0514959, - 44.6063275 - ], - [ - -124.0514959, - 44.6063302 - ], - [ - -124.0514959, - 44.6063329 - ], - [ - -124.0514959, - 44.6063357 - ], - [ - -124.0514959, - 44.6063384 - ], - [ - -124.0514959, - 44.6063411 - ], - [ - -124.0514959, - 44.6063438 - ], - [ - -124.0514959, - 44.6063465 - ], - [ - -124.0514959, - 44.6063492 - ], - [ - -124.0514959, - 44.6063519 - ], - [ - -124.0514959, - 44.6063546 - ], - [ - -124.0514959, - 44.6063573 - ], - [ - -124.0514959, - 44.60636 - ], - [ - -124.0514959, - 44.6063627 - ], - [ - -124.0514959, - 44.6063654 - ], - [ - -124.0514959, - 44.6063682 - ], - [ - -124.0514959, - 44.6063709 - ], - [ - -124.0514959, - 44.6063736 - ], - [ - -124.0514959, - 44.6063763 - ], - [ - -124.0514959, - 44.606379 - ], - [ - -124.0514959, - 44.6063817 - ], - [ - -124.051496, - 44.6063844 - ], - [ - -124.051496, - 44.6063871 - ], - [ - -124.051496, - 44.6063898 - ], - [ - -124.051496, - 44.6063925 - ], - [ - -124.051496, - 44.6063952 - ], - [ - -124.0514961, - 44.6063979 - ], - [ - -124.0514961, - 44.6064007 - ], - [ - -124.0514961, - 44.6064034 - ], - [ - -124.0514961, - 44.6064061 - ], - [ - -124.0514962, - 44.6064088 - ], - [ - -124.0514962, - 44.6064115 - ], - [ - -124.0514962, - 44.6064142 - ], - [ - -124.0514963, - 44.6064169 - ], - [ - -124.0514963, - 44.6064196 - ], - [ - -124.0514963, - 44.6064223 - ], - [ - -124.0514964, - 44.606425 - ], - [ - -124.0514964, - 44.6064277 - ], - [ - -124.0514964, - 44.6064304 - ], - [ - -124.0514965, - 44.6064332 - ], - [ - -124.0514965, - 44.6064359 - ], - [ - -124.0514966, - 44.6064386 - ], - [ - -124.0514966, - 44.6064413 - ], - [ - -124.0514967, - 44.606444 - ], - [ - -124.0514967, - 44.6064467 - ], - [ - -124.0514968, - 44.6064494 - ], - [ - -124.0514968, - 44.6064521 - ], - [ - -124.0514969, - 44.6064548 - ], - [ - -124.0514969, - 44.6064575 - ], - [ - -124.051497, - 44.6064602 - ], - [ - -124.051497, - 44.6064629 - ], - [ - -124.0514971, - 44.6064657 - ], - [ - -124.0514971, - 44.6064684 - ], - [ - -124.0514972, - 44.6064711 - ], - [ - -124.0514973, - 44.6064738 - ], - [ - -124.0514973, - 44.6064765 - ], - [ - -124.0514974, - 44.6064792 - ], - [ - -124.0514974, - 44.6064819 - ], - [ - -124.0514975, - 44.6064846 - ], - [ - -124.0514976, - 44.6064873 - ], - [ - -124.0514976, - 44.60649 - ], - [ - -124.0514977, - 44.6064927 - ], - [ - -124.0514978, - 44.6064954 - ], - [ - -124.0514979, - 44.6064982 - ], - [ - -124.0514979, - 44.6065009 - ], - [ - -124.051498, - 44.6065036 - ], - [ - -124.0514981, - 44.6065063 - ], - [ - -124.0514982, - 44.606509 - ], - [ - -124.0514982, - 44.6065117 - ], - [ - -124.0514983, - 44.6065144 - ], - [ - -124.0514984, - 44.6065171 - ], - [ - -124.0514985, - 44.6065198 - ], - [ - -124.0514986, - 44.6065225 - ], - [ - -124.0514987, - 44.6065252 - ], - [ - -124.0514987, - 44.6065279 - ], - [ - -124.0514988, - 44.6065306 - ], - [ - -124.0514989, - 44.6065334 - ], - [ - -124.051499, - 44.6065361 - ], - [ - -124.0514991, - 44.6065388 - ], - [ - -124.0514992, - 44.6065415 - ], - [ - -124.0514999, - 44.606688 - ], - [ - -124.0515041, - 44.6076178 - ], - [ - -124.0515059, - 44.6080232 - ], - [ - -124.0515106, - 44.6090486 - ], - [ - -124.0515144, - 44.6090487 - ], - [ - -124.0515182, - 44.6090488 - ], - [ - -124.0515221, - 44.6090488 - ], - [ - -124.0515259, - 44.6090489 - ], - [ - -124.0515297, - 44.609049 - ], - [ - -124.0515335, - 44.6090491 - ], - [ - -124.0515374, - 44.6090492 - ], - [ - -124.0515412, - 44.6090493 - ], - [ - -124.051545, - 44.6090494 - ], - [ - -124.0515488, - 44.6090495 - ], - [ - -124.0515526, - 44.6090496 - ], - [ - -124.0515565, - 44.6090497 - ], - [ - -124.0515603, - 44.6090498 - ], - [ - -124.0515641, - 44.6090499 - ], - [ - -124.0515679, - 44.6090501 - ], - [ - -124.0515717, - 44.6090502 - ], - [ - -124.0515756, - 44.6090503 - ], - [ - -124.0515794, - 44.6090504 - ], - [ - -124.0515832, - 44.6090506 - ], - [ - -124.051587, - 44.6090507 - ], - [ - -124.0515908, - 44.6090508 - ], - [ - -124.0515947, - 44.609051 - ], - [ - -124.0515985, - 44.6090511 - ], - [ - -124.0516023, - 44.6090513 - ], - [ - -124.0516061, - 44.6090514 - ], - [ - -124.0516099, - 44.6090516 - ], - [ - -124.0516137, - 44.6090518 - ], - [ - -124.0516176, - 44.6090519 - ], - [ - -124.0516214, - 44.6090521 - ], - [ - -124.0516252, - 44.6090523 - ], - [ - -124.051629, - 44.6090524 - ], - [ - -124.0516328, - 44.6090526 - ], - [ - -124.0516366, - 44.6090528 - ], - [ - -124.0516405, - 44.609053 - ], - [ - -124.0516443, - 44.6090532 - ], - [ - -124.0516481, - 44.6090534 - ], - [ - -124.0516519, - 44.6090536 - ], - [ - -124.0516557, - 44.6090538 - ], - [ - -124.0516595, - 44.609054 - ], - [ - -124.0516633, - 44.6090542 - ], - [ - -124.0516672, - 44.6090544 - ], - [ - -124.051671, - 44.6090546 - ], - [ - -124.0516748, - 44.6090548 - ], - [ - -124.0516786, - 44.609055 - ], - [ - -124.0516824, - 44.6090552 - ], - [ - -124.0516862, - 44.6090555 - ], - [ - -124.05169, - 44.6090557 - ], - [ - -124.0516938, - 44.6090559 - ], - [ - -124.0516977, - 44.6090562 - ], - [ - -124.0517015, - 44.6090564 - ], - [ - -124.0517053, - 44.6090566 - ], - [ - -124.0517091, - 44.6090569 - ], - [ - -124.0517129, - 44.6090571 - ], - [ - -124.0517167, - 44.6090574 - ], - [ - -124.0517205, - 44.6090577 - ], - [ - -124.0517243, - 44.6090579 - ], - [ - -124.0517281, - 44.6090582 - ], - [ - -124.0517319, - 44.6090584 - ], - [ - -124.0517357, - 44.6090587 - ], - [ - -124.0517395, - 44.609059 - ], - [ - -124.0517433, - 44.6090593 - ], - [ - -124.0517471, - 44.6090595 - ], - [ - -124.0517509, - 44.6090598 - ], - [ - -124.0517547, - 44.6090601 - ], - [ - -124.0517585, - 44.6090604 - ], - [ - -124.0517623, - 44.6090607 - ], - [ - -124.0517661, - 44.609061 - ], - [ - -124.05177, - 44.6090613 - ], - [ - -124.0517738, - 44.6090616 - ], - [ - -124.0517776, - 44.6090619 - ], - [ - -124.0517814, - 44.6090622 - ], - [ - -124.0517852, - 44.6090625 - ], - [ - -124.0517889, - 44.6090628 - ], - [ - -124.0517927, - 44.6090632 - ], - [ - -124.0517965, - 44.6090635 - ], - [ - -124.0518003, - 44.6090638 - ], - [ - -124.0518041, - 44.6090641 - ], - [ - -124.0518079, - 44.6090645 - ], - [ - -124.0518117, - 44.6090648 - ], - [ - -124.0518155, - 44.6090652 - ], - [ - -124.0518193, - 44.6090655 - ], - [ - -124.0518231, - 44.6090659 - ], - [ - -124.0518269, - 44.6090662 - ], - [ - -124.0518307, - 44.6090666 - ], - [ - -124.0518345, - 44.6090669 - ], - [ - -124.0518383, - 44.6090673 - ], - [ - -124.0518421, - 44.6090676 - ], - [ - -124.0518459, - 44.609068 - ], - [ - -124.0518496, - 44.6090684 - ], - [ - -124.0518534, - 44.6090688 - ], - [ - -124.0518572, - 44.6090691 - ], - [ - -124.051861, - 44.6090695 - ], - [ - -124.0518648, - 44.6090699 - ], - [ - -124.0518686, - 44.6090703 - ], - [ - -124.0518724, - 44.6090707 - ], - [ - -124.0518761, - 44.6090711 - ], - [ - -124.0518799, - 44.6090715 - ], - [ - -124.0518837, - 44.6090719 - ], - [ - -124.0518875, - 44.6090723 - ], - [ - -124.0518913, - 44.6090727 - ], - [ - -124.051895, - 44.6090731 - ], - [ - -124.0518988, - 44.6090735 - ], - [ - -124.0519026, - 44.6090739 - ], - [ - -124.0519064, - 44.6090744 - ], - [ - -124.0519102, - 44.6090748 - ], - [ - -124.0519139, - 44.6090752 - ], - [ - -124.0519177, - 44.6090756 - ], - [ - -124.0519215, - 44.6090761 - ], - [ - -124.0519253, - 44.6090765 - ], - [ - -124.051929, - 44.609077 - ], - [ - -124.0519328, - 44.6090774 - ], - [ - -124.0519366, - 44.6090779 - ], - [ - -124.0519404, - 44.6090783 - ], - [ - -124.0519441, - 44.6090788 - ], - [ - -124.0519479, - 44.6090792 - ], - [ - -124.0519517, - 44.6090797 - ], - [ - -124.0519554, - 44.6090802 - ], - [ - -124.0519592, - 44.6090806 - ], - [ - -124.051963, - 44.6090811 - ], - [ - -124.0519667, - 44.6090816 - ], - [ - -124.0519705, - 44.6090821 - ], - [ - -124.0521425, - 44.609104 - ], - [ - -124.0520302, - 44.609251 - ], - [ - -124.0519757, - 44.609334 - ], - [ - -124.051394, - 44.6102184 - ], - [ - -124.0503269, - 44.61018 - ], - [ - -124.0503253, - 44.609278 - ], - [ - -124.0501731, - 44.6092727 - ], - [ - -124.0501843, - 44.6116086 - ], - [ - -124.0506455, - 44.6110933 - ], - [ - -124.0509521, - 44.6107507 - ], - [ - -124.0511281, - 44.6105513 - ], - [ - -124.051541, - 44.6105767 - ], - [ - -124.052768, - 44.6106215 - ], - [ - -124.0527672, - 44.6119822 - ], - [ - -124.0527286, - 44.6121975 - ], - [ - -124.0528071, - 44.6119998 - ], - [ - -124.0528433, - 44.6118761 - ], - [ - -124.0528456, - 44.6102913 - ], - [ - -124.0528463, - 44.6093641 - ], - [ - -124.0558192, - 44.609488 - ], - [ - -124.0559053, - 44.6075211 - ], - [ - -124.0559275, - 44.6069463 - ], - [ - -124.0559572, - 44.6061791 - ], - [ - -124.0555452, - 44.6061707 - ], - [ - -124.0544257, - 44.6061465 - ], - [ - -124.0540908, - 44.6061397 - ], - [ - -124.0539378, - 44.6063726 - ], - [ - -124.0532389, - 44.6062725 - ], - [ - -124.0529285, - 44.6062807 - ], - [ - -124.0529407, - 44.6058244 - ], - [ - -124.0529422, - 44.605786 - ], - [ - -124.0529467, - 44.6056698 - ], - [ - -124.0530026, - 44.6056698 - ], - [ - -124.0530173, - 44.6052975 - ], - [ - -124.0533716, - 44.6052977 - ], - [ - -124.0535067, - 44.6052978 - ], - [ - -124.0546436, - 44.6052986 - ], - [ - -124.0543996, - 44.6056699 - ], - [ - -124.0541255, - 44.606087 - ], - [ - -124.0544603, - 44.6060938 - ], - [ - -124.0575908, - 44.6061574 - ], - [ - -124.0581383, - 44.6061685 - ], - [ - -124.0582447, - 44.6036342 - ], - [ - -124.0573334, - 44.6036267 - ], - [ - -124.0575738, - 44.6032557 - ], - [ - -124.0563094, - 44.6032568 - ], - [ - -124.0566361, - 44.6027579 - ], - [ - -124.0582774, - 44.6027563 - ], - [ - -124.0584, - 44.6001391 - ], - [ - -124.058432, - 44.5994111 - ], - [ - -124.0581672, - 44.5993232 - ], - [ - -124.0581819, - 44.5990018 - ], - [ - -124.0584467, - 44.59909 - ], - [ - -124.0584586, - 44.5988158 - ], - [ - -124.0592648, - 44.5988333 - ], - [ - -124.0636439, - 44.5988961 - ], - [ - -124.0657723, - 44.5989088 - ], - [ - -124.0658197, - 44.5981275 - ], - [ - -124.0596802, - 44.5981718 - ], - [ - -124.0596367, - 44.5977608 - ], - [ - -124.0585058, - 44.5977423 - ], - [ - -124.0584586, - 44.5988158 - ], - [ - -124.0542084, - 44.5987232 - ], - [ - -124.0540673, - 44.6022958 - ], - [ - -124.056551, - 44.602363 - ], - [ - -124.0563752, - 44.6026403 - ], - [ - -124.0558324, - 44.6034659 - ], - [ - -124.0530842, - 44.6034623 - ], - [ - -124.0531261, - 44.6022703 - ], - [ - -124.0479252, - 44.6021297 - ], - [ - -124.0480512, - 44.598582 - ], - [ - -124.0480675, - 44.598288 - ], - [ - -124.0459838, - 44.5978053 - ], - [ - -124.0464429, - 44.5969909 - ], - [ - -124.0458864, - 44.5967514 - ], - [ - -124.0427806, - 44.6003371 - ], - [ - -124.042846, - 44.5984619 - ], - [ - -124.0412385, - 44.5984734 - ], - [ - -124.0413324, - 44.5949635 - ], - [ - -124.0429676, - 44.5949354 - ], - [ - -124.0473862, - 44.5950197 - ], - [ - -124.0481883, - 44.595035 - ], - [ - -124.0480975, - 44.5914965 - ], - [ - -124.0533429, - 44.5915663 - ], - [ - -124.0532787, - 44.5879977 - ], - [ - -124.0479848, - 44.5879452 - ], - [ - -124.0481485, - 44.5736475 - ], - [ - -124.0534213, - 44.5736332 - ], - [ - -124.0534026, - 44.570986 - ], - [ - -124.05584, - 44.5709713 - ], - [ - -124.0560788, - 44.566409 - ], - [ - -124.0542291, - 44.5663902 - ], - [ - -124.0542197, - 44.5634813 - ], - [ - -124.0539144, - 44.5632787 - ], - [ - -124.0533081, - 44.5628369 - ], - [ - -124.0531502, - 44.5625452 - ], - [ - -124.0531104, - 44.5623158 - ], - [ - -124.0531379, - 44.5621317 - ], - [ - -124.0531531, - 44.5621095 - ], - [ - -124.0533669, - 44.5617982 - ], - [ - -124.0533969, - 44.5616766 - ], - [ - -124.0532968, - 44.5611959 - ], - [ - -124.053306, - 44.5610875 - ], - [ - -124.0533272, - 44.5609633 - ], - [ - -124.0533343, - 44.5609229 - ], - [ - -124.0532939, - 44.5608652 - ], - [ - -124.0532204, - 44.5608195 - ], - [ - -124.0529154, - 44.5608027 - ], - [ - -124.0526261, - 44.5609084 - ], - [ - -124.0523888, - 44.5610748 - ], - [ - -124.0518987, - 44.5615846 - ], - [ - -124.0514846, - 44.5618046 - ], - [ - -124.0510696, - 44.5620554 - ], - [ - -124.0509799, - 44.5621081 - ], - [ - -124.0507144, - 44.562264 - ], - [ - -124.0502902, - 44.5625325 - ], - [ - -124.0499237, - 44.5628557 - ], - [ - -124.0494612, - 44.5632441 - ], - [ - -124.0490476, - 44.5633926 - ], - [ - -124.0490464, - 44.5633931 - ], - [ - -124.0490475, - 44.5632699 - ], - [ - -124.0493645, - 44.563156 - ], - [ - -124.0498056, - 44.5627855 - ], - [ - -124.050179, - 44.5624564 - ], - [ - -124.0506148, - 44.5621805 - ], - [ - -124.0507384, - 44.5621079 - ], - [ - -124.0490465, - 44.5621011 - ], - [ - -124.0490445, - 44.5609061 - ], - [ - -124.049043, - 44.5600246 - ], - [ - -124.0490429, - 44.5579433 - ], - [ - -124.051636, - 44.5579251 - ], - [ - -124.0516216, - 44.5549724 - ], - [ - -124.0516178, - 44.5542089 - ], - [ - -124.0490382, - 44.5542068 - ], - [ - -124.0490302, - 44.5504703 - ], - [ - -124.0509424, - 44.5504869 - ], - [ - -124.0541999, - 44.5505153 - ], - [ - -124.0540665, - 44.5469839 - ], - [ - -124.0592328, - 44.5468935 - ], - [ - -124.059184, - 44.5451392 - ], - [ - -124.0604621, - 44.5451544 - ], - [ - -124.060178, - 44.545718 - ], - [ - -124.0603059, - 44.5459905 - ], - [ - -124.0606418, - 44.5467674 - ], - [ - -124.0605188, - 44.5469357 - ], - [ - -124.0606346, - 44.5472057 - ], - [ - -124.0610449, - 44.5474428 - ], - [ - -124.0611829, - 44.547882 - ], - [ - -124.0614395, - 44.5480984 - ], - [ - -124.0616392, - 44.5483127 - ], - [ - -124.0620749, - 44.5480952 - ], - [ - -124.0623087, - 44.5479421 - ], - [ - -124.0624676, - 44.5478394 - ], - [ - -124.0625279, - 44.547784 - ], - [ - -124.0625682, - 44.5476883 - ], - [ - -124.0625777, - 44.5475921 - ], - [ - -124.0623978, - 44.5471833 - ], - [ - -124.0627068, - 44.5471309 - ], - [ - -124.0628926, - 44.5470661 - ], - [ - -124.0631938, - 44.5471949 - ], - [ - -124.0636768, - 44.5470615 - ], - [ - -124.0641771, - 44.5471989 - ], - [ - -124.0642955, - 44.547195 - ], - [ - -124.0643831, - 44.5488009 - ], - [ - -124.0632357, - 44.5488149 - ], - [ - -124.0624067, - 44.552321 - ], - [ - -124.0618569, - 44.5523304 - ], - [ - -124.061863, - 44.5563705 - ], - [ - -124.0714813, - 44.5563959 - ], - [ - -124.0710625, - 44.5581415 - ], - [ - -124.0689219, - 44.5581518 - ], - [ - -124.068916, - 44.5590524 - ], - [ - -124.07088, - 44.5590363 - ], - [ - -124.0706478, - 44.5600297 - ], - [ - -124.0716923, - 44.5600267 - ], - [ - -124.071693, - 44.5600743 - ], - [ - -124.0716929, - 44.5601235 - ], - [ - -124.0716911, - 44.5601892 - ], - [ - -124.0716848, - 44.5602799 - ], - [ - -124.0716743, - 44.5603702 - ], - [ - -124.0716652, - 44.5604304 - ], - [ - -124.0716507, - 44.5605104 - ], - [ - -124.0716276, - 44.5606168 - ], - [ - -124.0716155, - 44.5606621 - ], - [ - -124.0716012, - 44.5607069 - ], - [ - -124.07157, - 44.5607961 - ], - [ - -124.0715505, - 44.5608558 - ], - [ - -124.0715409, - 44.5608903 - ], - [ - -124.0715307, - 44.560934 - ], - [ - -124.0715222, - 44.5609779 - ], - [ - -124.0715173, - 44.5610072 - ], - [ - -124.0715115, - 44.5610463 - ], - [ - -124.0715048, - 44.5610985 - ], - [ - -124.0715019, - 44.5611242 - ], - [ - -124.0715, - 44.5611501 - ], - [ - -124.0714996, - 44.5611674 - ], - [ - -124.0715009, - 44.5611884 - ], - [ - -124.0715027, - 44.5612011 - ], - [ - -124.071506, - 44.5612155 - ], - [ - -124.0715084, - 44.5612231 - ], - [ - -124.0715114, - 44.5612312 - ], - [ - -124.0715211, - 44.5612542 - ], - [ - -124.0715313, - 44.561277 - ], - [ - -124.0715531, - 44.5613223 - ], - [ - -124.0715683, - 44.5613523 - ], - [ - -124.0715892, - 44.5613921 - ], - [ - -124.0716703, - 44.561545 - ], - [ - -124.0716044, - 44.561624 - ], - [ - -124.0716014, - 44.5616272 - ], - [ - -124.071598, - 44.56163 - ], - [ - -124.0715954, - 44.5616318 - ], - [ - -124.0715918, - 44.5616339 - ], - [ - -124.0715866, - 44.5616364 - ], - [ - -124.0715834, - 44.5616377 - ], - [ - -124.0715796, - 44.561639 - ], - [ - -124.0715751, - 44.5616403 - ], - [ - -124.0715697, - 44.5616417 - ], - [ - -124.0715633, - 44.561643 - ], - [ - -124.0715557, - 44.5616442 - ], - [ - -124.0715469, - 44.5616454 - ], - [ - -124.0715366, - 44.5616464 - ], - [ - -124.071525, - 44.5616473 - ], - [ - -124.071512, - 44.5616482 - ], - [ - -124.0715053, - 44.5616488 - ], - [ - -124.0714778, - 44.5616509 - ], - [ - -124.0714501, - 44.5616527 - ], - [ - -124.0714317, - 44.5616536 - ], - [ - -124.0714071, - 44.5616542 - ], - [ - -124.071393, - 44.5616541 - ], - [ - -124.071377, - 44.5616537 - ], - [ - -124.0713588, - 44.5616528 - ], - [ - -124.0713365, - 44.5616508 - ], - [ - -124.0713142, - 44.5616483 - ], - [ - -124.0712697, - 44.5616424 - ], - [ - -124.07124, - 44.5616387 - ], - [ - -124.071223, - 44.561637 - ], - [ - -124.0712029, - 44.5616351 - ], - [ - -124.0711826, - 44.5616334 - ], - [ - -124.071169, - 44.5616326 - ], - [ - -124.0711509, - 44.5616319 - ], - [ - -124.0711405, - 44.5616317 - ], - [ - -124.0711287, - 44.5616318 - ], - [ - -124.0711153, - 44.5616324 - ], - [ - -124.0711, - 44.5616337 - ], - [ - -124.0710919, - 44.5616347 - ], - [ - -124.0710845, - 44.561636 - ], - [ - -124.0710772, - 44.5616378 - ], - [ - -124.0710724, - 44.5616392 - ], - [ - -124.0710661, - 44.5616415 - ], - [ - -124.071058, - 44.561645 - ], - [ - -124.0710535, - 44.5616472 - ], - [ - -124.0710486, - 44.56165 - ], - [ - -124.0710432, - 44.5616534 - ], - [ - -124.0710374, - 44.5616575 - ], - [ - -124.0710314, - 44.5616626 - ], - [ - -124.0710284, - 44.5616655 - ], - [ - -124.0710255, - 44.5616687 - ], - [ - -124.0710226, - 44.5616721 - ], - [ - -124.0710199, - 44.5616759 - ], - [ - -124.0710174, - 44.56168 - ], - [ - -124.0710152, - 44.5616845 - ], - [ - -124.0710134, - 44.5616893 - ], - [ - -124.0710113, - 44.5616972 - ], - [ - -124.0710094, - 44.5617051 - ], - [ - -124.0710067, - 44.5617209 - ], - [ - -124.0710054, - 44.5617314 - ], - [ - -124.0710042, - 44.5617454 - ], - [ - -124.0710034, - 44.5617641 - ], - [ - -124.071003, - 44.5617891 - ], - [ - -124.0710018, - 44.561897 - ], - [ - -124.0710022, - 44.561933 - ], - [ - -124.071015, - 44.5622646 - ], - [ - -124.0710156, - 44.5623461 - ], - [ - -124.0710141, - 44.5624277 - ], - [ - -124.071008, - 44.5625908 - ], - [ - -124.0710044, - 44.5626544 - ], - [ - -124.0709985, - 44.5627178 - ], - [ - -124.0709931, - 44.56276 - ], - [ - -124.0709838, - 44.5628162 - ], - [ - -124.0709773, - 44.5628483 - ], - [ - -124.0709687, - 44.562885 - ], - [ - -124.0709625, - 44.562908 - ], - [ - -124.0709554, - 44.5629307 - ], - [ - -124.0709392, - 44.5629757 - ], - [ - -124.0709268, - 44.5630054 - ], - [ - -124.0709088, - 44.5630446 - ], - [ - -124.0708824, - 44.5630964 - ], - [ - -124.070844, - 44.5631649 - ], - [ - -124.0707516, - 44.5633118 - ], - [ - -124.070719, - 44.5633599 - ], - [ - -124.070675, - 44.5634239 - ], - [ - -124.0706643, - 44.5634387 - ], - [ - -124.0706288, - 44.5634822 - ], - [ - -124.0705777, - 44.5635387 - ], - [ - -124.0705444, - 44.5635766 - ], - [ - -124.0705266, - 44.5635987 - ], - [ - -124.0705078, - 44.5636246 - ], - [ - -124.0705023, - 44.5636341 - ], - [ - -124.0704982, - 44.5636438 - ], - [ - -124.0704961, - 44.5636505 - ], - [ - -124.0704942, - 44.5636595 - ], - [ - -124.0704927, - 44.5636718 - ], - [ - -124.0704924, - 44.5636885 - ], - [ - -124.0704956, - 44.5637414 - ], - [ - -124.0704956, - 44.5637584 - ], - [ - -124.070495, - 44.5637674 - ], - [ - -124.0704936, - 44.5637768 - ], - [ - -124.0704912, - 44.5637867 - ], - [ - -124.0704874, - 44.5637971 - ], - [ - -124.0704817, - 44.5638077 - ], - [ - -124.0704667, - 44.5638311 - ], - [ - -124.0704509, - 44.5638543 - ], - [ - -124.0704177, - 44.5639 - ], - [ - -124.0703945, - 44.5639301 - ], - [ - -124.0703627, - 44.5639698 - ], - [ - -124.0703192, - 44.5640223 - ], - [ - -124.0703139, - 44.5640284 - ], - [ - -124.0703084, - 44.5640342 - ], - [ - -124.0702965, - 44.5640455 - ], - [ - -124.0702714, - 44.5640675 - ], - [ - -124.0702549, - 44.5640824 - ], - [ - -124.0702461, - 44.5640913 - ], - [ - -124.0702367, - 44.5641019 - ], - [ - -124.0702322, - 44.5641078 - ], - [ - -124.0702277, - 44.5641144 - ], - [ - -124.0702235, - 44.5641217 - ], - [ - -124.0702179, - 44.5641337 - ], - [ - -124.0702164, - 44.5641378 - ], - [ - -124.0702137, - 44.5641458 - ], - [ - -124.0702117, - 44.5641539 - ], - [ - -124.0702099, - 44.5641647 - ], - [ - -124.0702087, - 44.5641791 - ], - [ - -124.0702087, - 44.5641873 - ], - [ - -124.0702092, - 44.5641967 - ], - [ - -124.0702102, - 44.5642075 - ], - [ - -124.070212, - 44.5642198 - ], - [ - -124.0702147, - 44.5642338 - ], - [ - -124.0702233, - 44.5642708 - ], - [ - -124.0702356, - 44.5643192 - ], - [ - -124.0702486, - 44.5643676 - ], - [ - -124.0702747, - 44.5644644 - ], - [ - -124.0702912, - 44.5645342 - ], - [ - -124.0702922, - 44.5645394 - ], - [ - -124.0702942, - 44.5645498 - ], - [ - -124.0702957, - 44.5645566 - ], - [ - -124.0703083, - 44.5646037 - ], - [ - -124.0703231, - 44.5646505 - ], - [ - -124.0703555, - 44.5647437 - ], - [ - -124.0703763, - 44.5648059 - ], - [ - -124.0703868, - 44.5648416 - ], - [ - -124.0703976, - 44.5648864 - ], - [ - -124.0704061, - 44.5649316 - ], - [ - -124.0704205, - 44.5650223 - ], - [ - -124.0704312, - 44.5650826 - ], - [ - -124.0704389, - 44.5651168 - ], - [ - -124.070441, - 44.5651244 - ], - [ - -124.0704437, - 44.5651319 - ], - [ - -124.0704502, - 44.5651468 - ], - [ - -124.0704551, - 44.5651567 - ], - [ - -124.0704763, - 44.5651958 - ], - [ - -124.0704816, - 44.5652071 - ], - [ - -124.0704867, - 44.5652201 - ], - [ - -124.0704889, - 44.5652271 - ], - [ - -124.0704906, - 44.5652347 - ], - [ - -124.0704919, - 44.5652428 - ], - [ - -124.0704957, - 44.5652851 - ], - [ - -124.0704986, - 44.5653274 - ], - [ - -124.0705012, - 44.5653928 - ], - [ - -124.069634, - 44.5653988 - ], - [ - -124.0691868, - 44.5656699 - ], - [ - -124.06876, - 44.5674117 - ], - [ - -124.0684991, - 44.5673729 - ], - [ - -124.0681813, - 44.5673265 - ], - [ - -124.0681329, - 44.5675095 - ], - [ - -124.0683708, - 44.5675427 - ], - [ - -124.0683131, - 44.5677619 - ], - [ - -124.0664969, - 44.5674668 - ], - [ - -124.0661184, - 44.5673938 - ], - [ - -124.0657495, - 44.5672999 - ], - [ - -124.0653921, - 44.5671856 - ], - [ - -124.0650523, - 44.5670531 - ], - [ - -124.0648684, - 44.5669742 - ], - [ - -124.0647829, - 44.5669399 - ], - [ - -124.0646948, - 44.5669089 - ], - [ - -124.0616805, - 44.5659182 - ], - [ - -124.061572, - 44.5658864 - ], - [ - -124.0614649, - 44.5658622 - ], - [ - -124.0613552, - 44.5658444 - ], - [ - -124.0612439, - 44.5658332 - ], - [ - -124.0611317, - 44.5658287 - ], - [ - -124.0610193, - 44.5658309 - ], - [ - -124.0609076, - 44.5658397 - ], - [ - -124.0607972, - 44.5658552 - ], - [ - -124.0606891, - 44.5658772 - ], - [ - -124.060584, - 44.5659054 - ], - [ - -124.059632, - 44.5661964 - ], - [ - -124.059636, - 44.5664516 - ], - [ - -124.0598811, - 44.5664536 - ], - [ - -124.0598842, - 44.5665471 - ], - [ - -124.0611794, - 44.5665454 - ], - [ - -124.0607711, - 44.5700801 - ], - [ - -124.0638257, - 44.5700923 - ], - [ - -124.0638531, - 44.5717509 - ], - [ - -124.0671196, - 44.5717499 - ], - [ - -124.067063, - 44.5720131 - ], - [ - -124.0670281, - 44.5722221 - ], - [ - -124.06699, - 44.5724855 - ], - [ - -124.0669891, - 44.5724905 - ], - [ - -124.0661149, - 44.5748307 - ], - [ - -124.0660222, - 44.5750947 - ], - [ - -124.0659453, - 44.5753473 - ], - [ - -124.0658786, - 44.5756083 - ], - [ - -124.0658247, - 44.5758654 - ], - [ - -124.0657813, - 44.5761243 - ], - [ - -124.0657484, - 44.5763988 - ], - [ - -124.0656819, - 44.5770811 - ], - [ - -124.0655259, - 44.5786801 - ], - [ - -124.0655257, - 44.5786891 - ], - [ - -124.0655312, - 44.5787595 - ], - [ - -124.0655334, - 44.5788152 - ], - [ - -124.0655315, - 44.5788847 - ], - [ - -124.0655278, - 44.5789373 - ], - [ - -124.0655183, - 44.5790087 - ], - [ - -124.0655074, - 44.57907 - ], - [ - -124.0654177, - 44.5794345 - ], - [ - -124.0654032, - 44.5795118 - ], - [ - -124.0653932, - 44.579555 - ], - [ - -124.0653765, - 44.5796159 - ], - [ - -124.0653532, - 44.5796935 - ], - [ - -124.0653345, - 44.5797471 - ], - [ - -124.0653146, - 44.5797985 - ], - [ - -124.0652069, - 44.579979 - ], - [ - -124.0651736, - 44.5800385 - ], - [ - -124.0651362, - 44.5801116 - ], - [ - -124.0651039, - 44.5801818 - ], - [ - -124.0650751, - 44.5802508 - ], - [ - -124.0650498, - 44.5803222 - ], - [ - -124.0650295, - 44.5803868 - ], - [ - -124.0650059, - 44.5804724 - ], - [ - -124.0647907, - 44.5813567 - ], - [ - -124.0645885, - 44.5822772 - ], - [ - -124.0645883, - 44.5822807 - ], - [ - -124.0644274, - 44.583212 - ], - [ - -124.0643101, - 44.5841383 - ], - [ - -124.0643099, - 44.5841424 - ], - [ - -124.0642412, - 44.5848138 - ], - [ - -124.0639928, - 44.5848176 - ], - [ - -124.0640239, - 44.5852335 - ], - [ - -124.0641984, - 44.5852226 - ], - [ - -124.0641346, - 44.5858471 - ], - [ - -124.0640138, - 44.5867371 - ], - [ - -124.063889, - 44.587408 - ], - [ - -124.0638419, - 44.5876379 - ], - [ - -124.0638216, - 44.5877464 - ], - [ - -124.0638077, - 44.5878529 - ], - [ - -124.0637995, - 44.5879646 - ], - [ - -124.0637971, - 44.5880707 - ], - [ - -124.0637998, - 44.5881796 - ], - [ - -124.0637999, - 44.588181 - ], - [ - -124.0638084, - 44.5882823 - ], - [ - -124.0638078, - 44.5882846 - ], - [ - -124.0638098, - 44.5882993 - ], - [ - -124.0638238, - 44.5883975 - ], - [ - -124.0638242, - 44.5884032 - ], - [ - -124.0638461, - 44.5885173 - ], - [ - -124.063872, - 44.5886209 - ], - [ - -124.0639062, - 44.5887349 - ], - [ - -124.0641331, - 44.5894204 - ], - [ - -124.0641611, - 44.5895143 - ], - [ - -124.0641907, - 44.5896339 - ], - [ - -124.0642098, - 44.5897333 - ], - [ - -124.0642257, - 44.5898498 - ], - [ - -124.064234, - 44.5899547 - ], - [ - -124.0642376, - 44.5900589 - ], - [ - -124.0642349, - 44.5901779 - ], - [ - -124.0642268, - 44.5902789 - ], - [ - -124.0642111, - 44.5903997 - ], - [ - -124.0641915, - 44.5905069 - ], - [ - -124.0641644, - 44.5906178 - ], - [ - -124.0641328, - 44.5907245 - ], - [ - -124.064081, - 44.5908708 - ], - [ - -124.0644385, - 44.5909484 - ], - [ - -124.0659013, - 44.5909 - ], - [ - -124.0658454, - 44.5908086 - ], - [ - -124.0658067, - 44.5905322 - ], - [ - -124.0658182, - 44.5905319 - ], - [ - -124.06583, - 44.5905304 - ], - [ - -124.065841, - 44.5905284 - ], - [ - -124.065852, - 44.5905253 - ], - [ - -124.0658621, - 44.5905214 - ], - [ - -124.0658718, - 44.590517 - ], - [ - -124.0658807, - 44.5905115 - ], - [ - -124.0658888, - 44.5905058 - ], - [ - -124.0658961, - 44.5904992 - ], - [ - -124.0659026, - 44.5904922 - ], - [ - -124.0659079, - 44.5904849 - ], - [ - -124.0659117, - 44.5904771 - ], - [ - -124.0659147, - 44.590469 - ], - [ - -124.0659165, - 44.590461 - ], - [ - -124.0659171, - 44.5904527 - ], - [ - -124.0659162, - 44.5904442 - ], - [ - -124.0659146, - 44.5904361 - ], - [ - -124.0659114, - 44.5904282 - ], - [ - -124.0659071, - 44.5904204 - ], - [ - -124.065902, - 44.5904131 - ], - [ - -124.0658955, - 44.5904062 - ], - [ - -124.0658881, - 44.5903995 - ], - [ - -124.0658831, - 44.5903959 - ], - [ - -124.0658674, - 44.590387 - ], - [ - -124.0659973, - 44.5896771 - ], - [ - -124.0665748, - 44.5898438 - ], - [ - -124.0674253, - 44.5900893 - ], - [ - -124.0675566, - 44.5902658 - ], - [ - -124.0678176, - 44.5902658 - ], - [ - -124.0678026, - 44.5903856 - ], - [ - -124.0677873, - 44.5904762 - ], - [ - -124.0677473, - 44.5907122 - ], - [ - -124.0677075, - 44.5909476 - ], - [ - -124.0676949, - 44.5910217 - ], - [ - -124.0676836, - 44.5911089 - ], - [ - -124.0676751, - 44.5911963 - ], - [ - -124.0676624, - 44.5913712 - ], - [ - -124.067659, - 44.5914826 - ], - [ - -124.0676425, - 44.5916164 - ], - [ - -124.0676264, - 44.5917342 - ], - [ - -124.0675963, - 44.5919579 - ], - [ - -124.0675621, - 44.5921899 - ], - [ - -124.0675313, - 44.5923431 - ], - [ - -124.067493, - 44.5925044 - ], - [ - -124.0674696, - 44.5926121 - ], - [ - -124.0673748, - 44.5931126 - ], - [ - -124.0673097, - 44.5934066 - ], - [ - -124.0673026, - 44.5934488 - ], - [ - -124.067292, - 44.5935258 - ], - [ - -124.0672827, - 44.5936028 - ], - [ - -124.0672641, - 44.593757 - ], - [ - -124.0672018, - 44.5942175 - ], - [ - -124.0671366, - 44.5946177 - ], - [ - -124.067127, - 44.5946994 - ], - [ - -124.0671163, - 44.5949086 - ], - [ - -124.0671373, - 44.595235 - ], - [ - -124.0670825, - 44.5957807 - ], - [ - -124.0670188, - 44.5963577 - ], - [ - -124.0670088, - 44.5964925 - ], - [ - -124.0670028, - 44.5966274 - ], - [ - -124.0669957, - 44.5968974 - ], - [ - -124.0669888, - 44.5970773 - ], - [ - -124.0669766, - 44.5973073 - ], - [ - -124.0669615, - 44.5975373 - ], - [ - -124.0669003, - 44.5981749 - ], - [ - -124.066853, - 44.5987679 - ], - [ - -124.0668338, - 44.5989793 - ], - [ - -124.0668105, - 44.5991904 - ], - [ - -124.0667831, - 44.5993843 - ], - [ - -124.066772, - 44.5994371 - ], - [ - -124.0667443, - 44.5995423 - ], - [ - -124.066678, - 44.5997514 - ], - [ - -124.0666356, - 44.5998912 - ], - [ - -124.0666153, - 44.5999717 - ], - [ - -124.0665842, - 44.6001031 - ], - [ - -124.0665552, - 44.6002347 - ], - [ - -124.0665406, - 44.6003226 - ], - [ - -124.0665319, - 44.6004305 - ], - [ - -124.0665673, - 44.6009462 - ], - [ - -124.0665901, - 44.601207 - ], - [ - -124.0665966, - 44.601294 - ], - [ - -124.0665987, - 44.60134 - ], - [ - -124.066599, - 44.6013859 - ], - [ - -124.0665952, - 44.6014778 - ], - [ - -124.0665902, - 44.6015391 - ], - [ - -124.0665626, - 44.6017841 - ], - [ - -124.0665057, - 44.6021944 - ], - [ - -124.0665012, - 44.6022532 - ], - [ - -124.0664878, - 44.602677 - ], - [ - -124.0664661, - 44.6030978 - ], - [ - -124.0664525, - 44.6033636 - ], - [ - -124.0664243, - 44.6036245 - ], - [ - -124.0663794, - 44.6039643 - ], - [ - -124.0663591, - 44.604132 - ], - [ - -124.0663548, - 44.6041855 - ], - [ - -124.0663535, - 44.6042391 - ], - [ - -124.0663547, - 44.6043464 - ], - [ - -124.0663544, - 44.6044179 - ], - [ - -124.0663525, - 44.6044587 - ], - [ - -124.0663058, - 44.6049243 - ], - [ - -124.0662994, - 44.60506 - ], - [ - -124.0662866, - 44.6054672 - ], - [ - -124.0662817, - 44.605544 - ], - [ - -124.0662748, - 44.6056209 - ], - [ - -124.066259, - 44.6057746 - ], - [ - -124.0662506, - 44.6058771 - ], - [ - -124.0662478, - 44.6059355 - ], - [ - -124.066248, - 44.6059595 - ], - [ - -124.0662499, - 44.6059833 - ], - [ - -124.066252, - 44.6059992 - ], - [ - -124.0662557, - 44.6060204 - ], - [ - -124.0662618, - 44.6060486 - ], - [ - -124.0662715, - 44.6060862 - ], - [ - -124.0662854, - 44.6061362 - ], - [ - -124.0662911, - 44.6061571 - ], - [ - -124.0662971, - 44.6061779 - ], - [ - -124.066305, - 44.6061993 - ], - [ - -124.0663089, - 44.6062081 - ], - [ - -124.0663208, - 44.6062291 - ], - [ - -124.0663378, - 44.6062521 - ], - [ - -124.0663511, - 44.6062689 - ], - [ - -124.0663788, - 44.6063017 - ], - [ - -124.0663978, - 44.6063233 - ], - [ - -124.0664761, - 44.6064082 - ], - [ - -124.0665036, - 44.6064373 - ], - [ - -124.0665318, - 44.6064659 - ], - [ - -124.0665891, - 44.6065227 - ], - [ - -124.066627, - 44.6065612 - ], - [ - -124.0666481, - 44.6065838 - ], - [ - -124.0666717, - 44.6066103 - ], - [ - -124.066691, - 44.606634 - ], - [ - -124.0667085, - 44.6066583 - ], - [ - -124.0667191, - 44.6066748 - ], - [ - -124.066732, - 44.6066971 - ], - [ - -124.066747, - 44.6067274 - ], - [ - -124.0667543, - 44.6067448 - ], - [ - -124.0667617, - 44.606765 - ], - [ - -124.0667686, - 44.6067882 - ], - [ - -124.0667748, - 44.6068149 - ], - [ - -124.0667794, - 44.6068456 - ], - [ - -124.0667808, - 44.606862 - ], - [ - -124.0667714, - 44.6071361 - ], - [ - -124.0667956, - 44.6074643 - ], - [ - -124.0668061, - 44.6076421 - ], - [ - -124.0668125, - 44.6077012 - ], - [ - -124.0668179, - 44.6077349 - ], - [ - -124.0668263, - 44.6077734 - ], - [ - -124.0668342, - 44.6078027 - ], - [ - -124.0668431, - 44.6078318 - ], - [ - -124.0668631, - 44.6078896 - ], - [ - -124.0668776, - 44.6079278 - ], - [ - -124.0669384, - 44.6080802 - ], - [ - -124.0670754, - 44.6084362 - ], - [ - -124.0671385, - 44.6086018 - ], - [ - -124.0672001, - 44.6087676 - ], - [ - -124.0672034, - 44.6087784 - ], - [ - -124.0672054, - 44.6087893 - ], - [ - -124.0672063, - 44.6087966 - ], - [ - -124.0672068, - 44.6088064 - ], - [ - -124.0672067, - 44.6088195 - ], - [ - -124.0672058, - 44.6088371 - ], - [ - -124.0672042, - 44.6088606 - ], - [ - -124.0672039, - 44.608874 - ], - [ - -124.0672045, - 44.6088892 - ], - [ - -124.0672054, - 44.6088973 - ], - [ - -124.067207, - 44.6089058 - ], - [ - -124.0672179, - 44.6089533 - ], - [ - -124.0672297, - 44.6090007 - ], - [ - -124.0672383, - 44.6090323 - ], - [ - -124.0672512, - 44.6090741 - ], - [ - -124.0672594, - 44.6090978 - ], - [ - -124.0673083, - 44.6092322 - ], - [ - -124.0673895, - 44.6094595 - ], - [ - -124.0673962, - 44.6094764 - ], - [ - -124.0674039, - 44.6094931 - ], - [ - -124.0674214, - 44.6095259 - ], - [ - -124.0674344, - 44.6095475 - ], - [ - -124.0674889, - 44.6096332 - ], - [ - -124.0675033, - 44.6096579 - ], - [ - -124.0675181, - 44.6096866 - ], - [ - -124.0675249, - 44.6097022 - ], - [ - -124.067585, - 44.6098485 - ], - [ - -124.0676439, - 44.6099951 - ], - [ - -124.0677411, - 44.6102414 - ], - [ - -124.0678104, - 44.6104358 - ], - [ - -124.0678219, - 44.6104633 - ], - [ - -124.0678316, - 44.6104845 - ], - [ - -124.0678419, - 44.6105055 - ], - [ - -124.067864, - 44.6105472 - ], - [ - -124.0678796, - 44.6105748 - ], - [ - -124.0679445, - 44.6106843 - ], - [ - -124.0681261, - 44.6109835 - ], - [ - -124.0683375, - 44.6114375 - ], - [ - -124.0683488, - 44.6114557 - ], - [ - -124.0683608, - 44.6114736 - ], - [ - -124.0683869, - 44.6115089 - ], - [ - -124.0684054, - 44.6115321 - ], - [ - -124.0684813, - 44.6116239 - ], - [ - -124.0685019, - 44.6116504 - ], - [ - -124.0685238, - 44.6116813 - ], - [ - -124.0685456, - 44.6117163 - ], - [ - -124.0685652, - 44.611752 - ], - [ - -124.0686019, - 44.6118243 - ], - [ - -124.0686275, - 44.6118723 - ], - [ - -124.0686436, - 44.6118993 - ], - [ - -124.0686639, - 44.6119296 - ], - [ - -124.0686794, - 44.6119504 - ], - [ - -124.0686958, - 44.6119709 - ], - [ - -124.0687072, - 44.6119844 - ], - [ - -124.068723, - 44.612002 - ], - [ - -124.0687454, - 44.6120248 - ], - [ - -124.0687589, - 44.6120375 - ], - [ - -124.0687749, - 44.6120516 - ], - [ - -124.0687941, - 44.6120672 - ], - [ - -124.0689366, - 44.6121766 - ], - [ - -124.0660195, - 44.6133543 - ], - [ - -124.0661675, - 44.6134867 - ], - [ - -124.066263, - 44.6134694 - ], - [ - -124.0673297, - 44.6131829 - ], - [ - -124.0679565, - 44.6131167 - ], - [ - -124.067982, - 44.6134284 - ], - [ - -124.0682876, - 44.6133953 - ], - [ - -124.0687354, - 44.6134072 - ], - [ - -124.0689433, - 44.6137098 - ], - [ - -124.0813143, - 44.6088557 - ], - [ - -124.0818463, - 44.6114344 - ], - [ - -124.066998, - 44.6174677 - ], - [ - -124.0637072, - 44.621303 - ], - [ - -124.063893, - 44.6214054 - ], - [ - -124.0647338, - 44.6204187 - ], - [ - -124.0647453, - 44.6204649 - ], - [ - -124.0652587, - 44.6225354 - ], - [ - -124.0653228, - 44.622795 - ], - [ - -124.0658191, - 44.6239498 - ], - [ - -124.0661689, - 44.6244771 - ], - [ - -124.0659163, - 44.6250555 - ], - [ - -124.0661252, - 44.6258223 - ], - [ - -124.066995, - 44.6258384 - ], - [ - -124.0670722, - 44.6261028 - ], - [ - -124.0670952, - 44.6262324 - ], - [ - -124.0671136, - 44.6263625 - ], - [ - -124.0671232, - 44.6264493 - ], - [ - -124.0671327, - 44.6265652 - ], - [ - -124.0671392, - 44.6267198 - ], - [ - -124.0671398, - 44.6268081 - ], - [ - -124.067138, - 44.6269591 - ], - [ - -124.0671332, - 44.6271103 - ], - [ - -124.0671271, - 44.627211 - ], - [ - -124.067114, - 44.627345 - ], - [ - -124.0671033, - 44.6274214 - ], - [ - -124.0670878, - 44.6275083 - ], - [ - -124.066787, - 44.629003 - ], - [ - -124.0666764, - 44.6295617 - ], - [ - -124.0666474, - 44.6296959 - ], - [ - -124.066613, - 44.6298296 - ], - [ - -124.0665864, - 44.6299181 - ], - [ - -124.0665453, - 44.6300352 - ], - [ - -124.0665187, - 44.6301014 - ], - [ - -124.066485, - 44.6301764 - ], - [ - -124.0661772, - 44.6308129 - ], - [ - -124.0658122, - 44.6315767 - ], - [ - -124.0656294, - 44.6319622 - ], - [ - -124.0654516, - 44.632349 - ], - [ - -124.0654079, - 44.63245 - ], - [ - -124.0653667, - 44.6325515 - ], - [ - -124.0652897, - 44.6327555 - ], - [ - -124.065144, - 44.6331654 - ], - [ - -124.0650727, - 44.6333631 - ], - [ - -124.0650034, - 44.6335611 - ], - [ - -124.0649598, - 44.6336936 - ], - [ - -124.0649066, - 44.6338711 - ], - [ - -124.0648513, - 44.6340931 - ], - [ - -124.064806, - 44.6343163 - ], - [ - -124.0647266, - 44.6347638 - ], - [ - -124.0646667, - 44.6350612 - ], - [ - -124.0645402, - 44.6355453 - ], - [ - -124.064525, - 44.6356148 - ], - [ - -124.0645082, - 44.6357156 - ], - [ - -124.064497, - 44.6358167 - ], - [ - -124.0644823, - 44.6360196 - ], - [ - -124.064471, - 44.6361548 - ], - [ - -124.0644614, - 44.6362319 - ], - [ - -124.064447, - 44.6363398 - ], - [ - -124.064431, - 44.6364476 - ], - [ - -124.0644168, - 44.636519 - ], - [ - -124.0644068, - 44.6365596 - ], - [ - -124.064393, - 44.6366056 - ], - [ - -124.0643739, - 44.6366578 - ], - [ - -124.0643327, - 44.6367553 - ], - [ - -124.0642897, - 44.6368522 - ], - [ - -124.0642009, - 44.6370451 - ], - [ - -124.0640087, - 44.6374578 - ], - [ - -124.0639687, - 44.6375491 - ], - [ - -124.0639305, - 44.6376408 - ], - [ - -124.0638587, - 44.6378252 - ], - [ - -124.0638135, - 44.6379487 - ], - [ - -124.0637556, - 44.6381137 - ], - [ - -124.0635716, - 44.6387272 - ], - [ - -124.0635409, - 44.638814 - ], - [ - -124.0633874, - 44.639218 - ], - [ - -124.063303, - 44.6394365 - ], - [ - -124.0632767, - 44.6395098 - ], - [ - -124.0632522, - 44.6395835 - ], - [ - -124.0632075, - 44.6397315 - ], - [ - -124.0631267, - 44.6400288 - ], - [ - -124.0629318, - 44.640765 - ], - [ - -124.0628407, - 44.6411135 - ], - [ - -124.0627519, - 44.6414623 - ], - [ - -124.0627296, - 44.6415562 - ], - [ - -124.0627086, - 44.6416503 - ], - [ - -124.0626679, - 44.6418386 - ], - [ - -124.0626152, - 44.6420875 - ], - [ - -124.0625647, - 44.6423367 - ], - [ - -124.0625532, - 44.642399 - ], - [ - -124.0625434, - 44.6424615 - ], - [ - -124.0625274, - 44.6425867 - ], - [ - -124.0625005, - 44.6428374 - ], - [ - -124.0624968, - 44.6428776 - ], - [ - -124.0624947, - 44.642918 - ], - [ - -124.0624943, - 44.642945 - ], - [ - -124.062495, - 44.6429809 - ], - [ - -124.0624982, - 44.6430287 - ], - [ - -124.0625012, - 44.6430559 - ], - [ - -124.0625057, - 44.6430868 - ], - [ - -124.062508, - 44.6430959 - ], - [ - -124.0625116, - 44.6431045 - ], - [ - -124.0625148, - 44.6431101 - ], - [ - -124.0625197, - 44.6431174 - ], - [ - -124.0625276, - 44.6431266 - ], - [ - -124.0625401, - 44.6431385 - ], - [ - -124.062548, - 44.643145 - ], - [ - -124.0625576, - 44.6431524 - ], - [ - -124.0625692, - 44.6431606 - ], - [ - -124.0625829, - 44.6431698 - ], - [ - -124.0626196, - 44.6431945 - ], - [ - -124.0626389, - 44.6432092 - ], - [ - -124.0626483, - 44.6432173 - ], - [ - -124.0626573, - 44.6432262 - ], - [ - -124.0626655, - 44.6432361 - ], - [ - -124.0626724, - 44.6432472 - ], - [ - -124.0626818, - 44.6432668 - ], - [ - -124.06269, - 44.6432873 - ], - [ - -124.0626946, - 44.6433014 - ], - [ - -124.0626995, - 44.6433203 - ], - [ - -124.0627016, - 44.6433312 - ], - [ - -124.0627032, - 44.6433437 - ], - [ - -124.0627041, - 44.6433579 - ], - [ - -124.0627037, - 44.6433739 - ], - [ - -124.0627028, - 44.6433823 - ], - [ - -124.0627013, - 44.6433912 - ], - [ - -124.062699, - 44.6434005 - ], - [ - -124.0626958, - 44.6434102 - ], - [ - -124.0626923, - 44.6434184 - ], - [ - -124.0626883, - 44.6434265 - ], - [ - -124.0626787, - 44.6434425 - ], - [ - -124.0626713, - 44.6434529 - ], - [ - -124.0626606, - 44.6434668 - ], - [ - -124.0626131, - 44.6435216 - ], - [ - -124.0626002, - 44.6435374 - ], - [ - -124.0625868, - 44.6435559 - ], - [ - -124.0625805, - 44.6435659 - ], - [ - -124.0625746, - 44.6435768 - ], - [ - -124.0625693, - 44.6435886 - ], - [ - -124.0625651, - 44.6436015 - ], - [ - -124.0625254, - 44.643756 - ], - [ - -124.0624885, - 44.6439111 - ], - [ - -124.0624287, - 44.6441701 - ], - [ - -124.0624122, - 44.644257 - ], - [ - -124.0624045, - 44.644307 - ], - [ - -124.0624011, - 44.6443368 - ], - [ - -124.0623988, - 44.6443666 - ], - [ - -124.0623974, - 44.6444262 - ], - [ - -124.0623983, - 44.6444659 - ], - [ - -124.0624013, - 44.6445188 - ], - [ - -124.062421, - 44.6447302 - ], - [ - -124.0624686, - 44.6451203 - ], - [ - -124.0624712, - 44.6451583 - ], - [ - -124.0624727, - 44.6451968 - ], - [ - -124.0624726, - 44.6452226 - ], - [ - -124.0624707, - 44.6452568 - ], - [ - -124.0624686, - 44.6452762 - ], - [ - -124.0624649, - 44.6452983 - ], - [ - -124.0624591, - 44.6453231 - ], - [ - -124.0624499, - 44.645351 - ], - [ - -124.0624438, - 44.6453656 - ], - [ - -124.0624362, - 44.645381 - ], - [ - -124.062427, - 44.645397 - ], - [ - -124.0622731, - 44.6456434 - ], - [ - -124.062084, - 44.6458929 - ], - [ - -124.0620623, - 44.645924 - ], - [ - -124.0620434, - 44.645956 - ], - [ - -124.0620321, - 44.6459777 - ], - [ - -124.0620185, - 44.6460071 - ], - [ - -124.0620023, - 44.6460468 - ], - [ - -124.0619458, - 44.646208 - ], - [ - -124.0617654, - 44.6467005 - ], - [ - -124.0616965, - 44.6468827 - ], - [ - -124.061625, - 44.6470644 - ], - [ - -124.0615736, - 44.6471848 - ], - [ - -124.0615319, - 44.6472752 - ], - [ - -124.061488, - 44.647365 - ], - [ - -124.0613978, - 44.6475441 - ], - [ - -124.0613389, - 44.6476638 - ], - [ - -124.0611725, - 44.6480002 - ], - [ - -124.0611211, - 44.6481132 - ], - [ - -124.0610941, - 44.6481783 - ], - [ - -124.0610662, - 44.6482533 - ], - [ - -124.0610173, - 44.6483983 - ], - [ - -124.0609703, - 44.6485436 - ], - [ - -124.0608781, - 44.6488344 - ], - [ - -124.0607098, - 44.649363 - ], - [ - -124.0605292, - 44.6497976 - ], - [ - -124.060509, - 44.6498617 - ], - [ - -124.0604904, - 44.6499261 - ], - [ - -124.0604569, - 44.6500552 - ], - [ - -124.0604365, - 44.6501416 - ], - [ - -124.0604106, - 44.6502571 - ], - [ - -124.0603939, - 44.6503355 - ], - [ - -124.0603789, - 44.650414 - ], - [ - -124.0603702, - 44.6504664 - ], - [ - -124.0603607, - 44.6505365 - ], - [ - -124.0603586, - 44.6510792 - ], - [ - -124.060344, - 44.6512071 - ], - [ - -124.0603267, - 44.6513349 - ], - [ - -124.0603128, - 44.6514198 - ], - [ - -124.0602904, - 44.6515328 - ], - [ - -124.0601797, - 44.652028 - ], - [ - -124.0600691, - 44.6525123 - ], - [ - -124.0599466, - 44.6529524 - ], - [ - -124.0598319, - 44.653445 - ], - [ - -124.0596831, - 44.654098 - ], - [ - -124.0595464, - 44.6544764 - ], - [ - -124.0595411, - 44.6545022 - ], - [ - -124.0594797, - 44.6548536 - ], - [ - -124.0594035, - 44.655302 - ], - [ - -124.0593459, - 44.6556327 - ], - [ - -124.0592855, - 44.6559633 - ], - [ - -124.0591523, - 44.6565306 - ], - [ - -124.0590374, - 44.6571224 - ], - [ - -124.0589388, - 44.6576208 - ], - [ - -124.0588884, - 44.6578728 - ], - [ - -124.0588356, - 44.6581246 - ], - [ - -124.0588285, - 44.6581537 - ], - [ - -124.0588203, - 44.6581826 - ], - [ - -124.0588007, - 44.6582399 - ], - [ - -124.0587861, - 44.6582778 - ], - [ - -124.0587247, - 44.6584294 - ], - [ - -124.058709, - 44.6584731 - ], - [ - -124.0586877, - 44.6585351 - ], - [ - -124.0586672, - 44.6585972 - ], - [ - -124.0586555, - 44.6586388 - ], - [ - -124.0586497, - 44.6586628 - ], - [ - -124.0586443, - 44.6586902 - ], - [ - -124.0586423, - 44.6587048 - ], - [ - -124.0586399, - 44.6587219 - ], - [ - -124.0586371, - 44.6587676 - ], - [ - -124.058638, - 44.6588133 - ], - [ - -124.0586402, - 44.6588437 - ], - [ - -124.0586447, - 44.6588842 - ], - [ - -124.0586686, - 44.659046 - ], - [ - -124.0586737, - 44.6590923 - ], - [ - -124.0586764, - 44.6591453 - ], - [ - -124.0586778, - 44.6593156 - ], - [ - -124.0586767, - 44.659486 - ], - [ - -124.0586736, - 44.6595996 - ], - [ - -124.0586205, - 44.6600639 - ], - [ - -124.0586208, - 44.6601303 - ], - [ - -124.05863, - 44.6602903 - ], - [ - -124.0586424, - 44.6604501 - ], - [ - -124.0586731, - 44.6607696 - ], - [ - -124.0587033, - 44.66107 - ], - [ - -124.0587365, - 44.6613702 - ], - [ - -124.0587568, - 44.6615252 - ], - [ - -124.0587788, - 44.66168 - ], - [ - -124.0588234, - 44.6619897 - ], - [ - -124.0588473, - 44.6621753 - ], - [ - -124.0588677, - 44.6623611 - ], - [ - -124.0588793, - 44.662485 - ], - [ - -124.0588818, - 44.6625406 - ], - [ - -124.0588801, - 44.6625962 - ], - [ - -124.058877, - 44.6626333 - ], - [ - -124.0588709, - 44.6626827 - ], - [ - -124.05886, - 44.6627485 - ], - [ - -124.0588425, - 44.6628362 - ], - [ - -124.0588185, - 44.6629526 - ], - [ - -124.0588148, - 44.6629687 - ], - [ - -124.0588102, - 44.6629846 - ], - [ - -124.0587986, - 44.6630163 - ], - [ - -124.0587896, - 44.6630373 - ], - [ - -124.0587513, - 44.6631207 - ], - [ - -124.0587418, - 44.6631445 - ], - [ - -124.058733, - 44.6631717 - ], - [ - -124.0587294, - 44.6631862 - ], - [ - -124.0587266, - 44.6632018 - ], - [ - -124.058726, - 44.6632101 - ], - [ - -124.0587263, - 44.6632185 - ], - [ - -124.058727, - 44.6632241 - ], - [ - -124.0587284, - 44.6632316 - ], - [ - -124.0587312, - 44.6632416 - ], - [ - -124.0587331, - 44.6632474 - ], - [ - -124.0587357, - 44.6632539 - ], - [ - -124.0587389, - 44.6632613 - ], - [ - -124.058743, - 44.6632698 - ], - [ - -124.058748, - 44.6632794 - ], - [ - -124.058754, - 44.6632902 - ], - [ - -124.0587626, - 44.6633035 - ], - [ - -124.058773, - 44.6633162 - ], - [ - -124.0587806, - 44.6633244 - ], - [ - -124.0587914, - 44.663335 - ], - [ - -124.0588378, - 44.663376 - ], - [ - -124.0588504, - 44.6633878 - ], - [ - -124.0588635, - 44.6634016 - ], - [ - -124.0588698, - 44.6634092 - ], - [ - -124.0588758, - 44.6634174 - ], - [ - -124.0588814, - 44.6634265 - ], - [ - -124.0588861, - 44.6634366 - ], - [ - -124.0588897, - 44.6634477 - ], - [ - -124.0589061, - 44.6635207 - ], - [ - -124.0589199, - 44.6635938 - ], - [ - -124.0589279, - 44.6636427 - ], - [ - -124.0589371, - 44.6637079 - ], - [ - -124.0590002, - 44.6641948 - ], - [ - -124.0590491, - 44.6645994 - ], - [ - -124.0590676, - 44.6647342 - ], - [ - -124.0590828, - 44.6648135 - ], - [ - -124.0591041, - 44.664892 - ], - [ - -124.059121, - 44.664944 - ], - [ - -124.0591458, - 44.6650131 - ], - [ - -124.0592523, - 44.6652885 - ], - [ - -124.0592785, - 44.6653678 - ], - [ - -124.059347, - 44.6655915 - ], - [ - -124.0594134, - 44.6658155 - ], - [ - -124.0594541, - 44.6659654 - ], - [ - -124.0594919, - 44.6661197 - ], - [ - -124.059527, - 44.6662743 - ], - [ - -124.0595947, - 44.6665839 - ], - [ - -124.0596424, - 44.6667899 - ], - [ - -124.0597653, - 44.6672542 - ], - [ - -124.0598024, - 44.6674094 - ], - [ - -124.0598466, - 44.667625 - ], - [ - -124.0598871, - 44.6678409 - ], - [ - -124.059968, - 44.6682729 - ], - [ - -124.0600365, - 44.6686063 - ], - [ - -124.0601093, - 44.6689393 - ], - [ - -124.0601391, - 44.6690623 - ], - [ - -124.0601728, - 44.6691847 - ], - [ - -124.0601978, - 44.6692659 - ], - [ - -124.0602346, - 44.6693736 - ], - [ - -124.0602576, - 44.6694348 - ], - [ - -124.0605463, - 44.6701645 - ], - [ - -124.0607219, - 44.6706157 - ], - [ - -124.0607458, - 44.6706737 - ], - [ - -124.0607713, - 44.6707313 - ], - [ - -124.0608272, - 44.6708454 - ], - [ - -124.0608676, - 44.6709207 - ], - [ - -124.0609247, - 44.6710203 - ], - [ - -124.0610058, - 44.671152 - ], - [ - -124.0610266, - 44.6711838 - ], - [ - -124.0610482, - 44.6712151 - ], - [ - -124.0610937, - 44.6712769 - ], - [ - -124.0611253, - 44.6713176 - ], - [ - -124.0611685, - 44.6713713 - ], - [ - -124.0612271, - 44.6714426 - ], - [ - -124.061241, - 44.6714582 - ], - [ - -124.0612562, - 44.6714734 - ], - [ - -124.0612881, - 44.6715029 - ], - [ - -124.0613089, - 44.6715228 - ], - [ - -124.0613201, - 44.6715345 - ], - [ - -124.0613319, - 44.6715483 - ], - [ - -124.0613377, - 44.6715559 - ], - [ - -124.0613434, - 44.6715642 - ], - [ - -124.0613645, - 44.6715992 - ], - [ - -124.0613836, - 44.6716346 - ], - [ - -124.0613955, - 44.6716585 - ], - [ - -124.0614103, - 44.6716905 - ], - [ - -124.0614289, - 44.6717334 - ], - [ - -124.0614526, - 44.6717909 - ], - [ - -124.0615811, - 44.67212 - ], - [ - -124.0616136, - 44.6721964 - ], - [ - -124.0616477, - 44.6722724 - ], - [ - -124.0616721, - 44.6723227 - ], - [ - -124.0617075, - 44.672389 - ], - [ - -124.0617295, - 44.6724263 - ], - [ - -124.0617567, - 44.6724686 - ], - [ - -124.0617899, - 44.672515 - ], - [ - -124.0618255, - 44.6725605 - ], - [ - -124.0618995, - 44.6726502 - ], - [ - -124.0619478, - 44.6727103 - ], - [ - -124.061974, - 44.6727452 - ], - [ - -124.0621051, - 44.6729288 - ], - [ - -124.0622342, - 44.6731131 - ], - [ - -124.0622634, - 44.6731573 - ], - [ - -124.0622908, - 44.6732022 - ], - [ - -124.0623439, - 44.6732924 - ], - [ - -124.0623811, - 44.673352 - ], - [ - -124.0624042, - 44.6733855 - ], - [ - -124.0624328, - 44.673423 - ], - [ - -124.0624726, - 44.6734694 - ], - [ - -124.0625151, - 44.6735144 - ], - [ - -124.0625447, - 44.6735438 - ], - [ - -124.0625852, - 44.6735824 - ], - [ - -124.0627512, - 44.6737352 - ], - [ - -124.0628082, - 44.6737894 - ], - [ - -124.0628658, - 44.6738429 - ], - [ - -124.0629051, - 44.6738782 - ], - [ - -124.0629594, - 44.6739246 - ], - [ - -124.0629917, - 44.6739508 - ], - [ - -124.0630045, - 44.6739605 - ], - [ - -124.0630178, - 44.6739696 - ], - [ - -124.0630454, - 44.6739867 - ], - [ - -124.0630647, - 44.6739971 - ], - [ - -124.0630914, - 44.67401 - ], - [ - -124.0631285, - 44.6740257 - ], - [ - -124.0631504, - 44.674034 - ], - [ - -124.063176, - 44.674043 - ], - [ - -124.063206, - 44.6740528 - ], - [ - -124.0632409, - 44.6740636 - ], - [ - -124.0633367, - 44.6740919 - ], - [ - -124.0633949, - 44.674109 - ], - [ - -124.0634531, - 44.6741248 - ], - [ - -124.0634919, - 44.6741339 - ], - [ - -124.0635393, - 44.6741429 - ], - [ - -124.0635681, - 44.674147 - ], - [ - -124.0636009, - 44.6741501 - ], - [ - -124.0636183, - 44.674151 - ], - [ - -124.0636368, - 44.6741513 - ], - [ - -124.0636564, - 44.6741509 - ], - [ - -124.0636773, - 44.6741495 - ], - [ - -124.0636952, - 44.6741476 - ], - [ - -124.0637132, - 44.6741452 - ], - [ - -124.063749, - 44.6741393 - ], - [ - -124.0637728, - 44.6741344 - ], - [ - -124.0638045, - 44.6741268 - ], - [ - -124.0638466, - 44.6741152 - ], - [ - -124.0638704, - 44.6741078 - ], - [ - -124.0638976, - 44.6740988 - ], - [ - -124.0639284, - 44.6740879 - ], - [ - -124.0639633, - 44.6740747 - ], - [ - -124.0640028, - 44.6740589 - ], - [ - -124.0640411, - 44.6740427 - ], - [ - -124.0641159, - 44.6740104 - ], - [ - -124.064166, - 44.6739893 - ], - [ - -124.0641952, - 44.6739777 - ], - [ - -124.0645512, - 44.6738445 - ], - [ - -124.0646156, - 44.6738186 - ], - [ - -124.0646788, - 44.6737915 - ], - [ - -124.0647204, - 44.6737727 - ], - [ - -124.0647755, - 44.6737471 - ], - [ - -124.0648483, - 44.6737117 - ], - [ - -124.0648856, - 44.6736922 - ], - [ - -124.0649214, - 44.6736714 - ], - [ - -124.0649445, - 44.6736569 - ], - [ - -124.0649743, - 44.6736369 - ], - [ - -124.0650126, - 44.673609 - ], - [ - -124.0650338, - 44.6735926 - ], - [ - -124.0650575, - 44.6735735 - ], - [ - -124.065084, - 44.6735512 - ], - [ - -124.0650898, - 44.6735458 - ], - [ - -124.065095, - 44.6735402 - ], - [ - -124.0650981, - 44.6735364 - ], - [ - -124.0651022, - 44.6735312 - ], - [ - -124.0651172, - 44.6735097 - ], - [ - -124.0651217, - 44.6735037 - ], - [ - -124.0651273, - 44.6734969 - ], - [ - -124.0651305, - 44.6734934 - ], - [ - -124.0651342, - 44.6734898 - ], - [ - -124.0651802, - 44.6734486 - ], - [ - -124.0652285, - 44.6734096 - ], - [ - -124.0652619, - 44.6733847 - ], - [ - -124.065308, - 44.6733525 - ], - [ - -124.0653723, - 44.6733112 - ], - [ - -124.0654105, - 44.6732881 - ], - [ - -124.0654555, - 44.673262 - ], - [ - -124.0655087, - 44.6732324 - ], - [ - -124.0655337, - 44.6732191 - ], - [ - -124.0655598, - 44.6732061 - ], - [ - -124.0655777, - 44.6731978 - ], - [ - -124.0656022, - 44.6731876 - ], - [ - -124.0656163, - 44.6731822 - ], - [ - -124.0656327, - 44.6731767 - ], - [ - -124.0656515, - 44.6731712 - ], - [ - -124.0656732, - 44.6731662 - ], - [ - -124.0656847, - 44.6731641 - ], - [ - -124.0656971, - 44.6731624 - ], - [ - -124.0657102, - 44.6731613 - ], - [ - -124.0657242, - 44.6731608 - ], - [ - -124.0657391, - 44.6731613 - ], - [ - -124.0657548, - 44.6731629 - ], - [ - -124.0657714, - 44.673166 - ], - [ - -124.0657766, - 44.6731673 - ], - [ - -124.0657822, - 44.6731686 - ], - [ - -124.065794, - 44.6731717 - ], - [ - -124.0658023, - 44.6731739 - ], - [ - -124.0658135, - 44.6731772 - ], - [ - -124.0658284, - 44.673182 - ], - [ - -124.0658367, - 44.6731849 - ], - [ - -124.0658457, - 44.6731885 - ], - [ - -124.0658553, - 44.6731928 - ], - [ - -124.06586, - 44.6731952 - ], - [ - -124.0658646, - 44.6731978 - ], - [ - -124.065869, - 44.6732006 - ], - [ - -124.0658731, - 44.6732037 - ], - [ - -124.0658768, - 44.6732071 - ], - [ - -124.0658796, - 44.6732108 - ], - [ - -124.0658807, - 44.6732128 - ], - [ - -124.0658814, - 44.6732148 - ], - [ - -124.0658818, - 44.6732169 - ], - [ - -124.0658818, - 44.6732192 - ], - [ - -124.0658813, - 44.6732215 - ], - [ - -124.0658804, - 44.6732239 - ], - [ - -124.0658765, - 44.6732304 - ], - [ - -124.0658718, - 44.673237 - ], - [ - -124.0658682, - 44.6732415 - ], - [ - -124.065863, - 44.6732474 - ], - [ - -124.0658554, - 44.6732553 - ], - [ - -124.0658442, - 44.673266 - ], - [ - -124.0658283, - 44.6732801 - ], - [ - -124.065807, - 44.673299 - ], - [ - -124.0657955, - 44.6733097 - ], - [ - -124.0657936, - 44.6733115 - ], - [ - -124.0657915, - 44.6733132 - ], - [ - -124.0657867, - 44.6733167 - ], - [ - -124.0657831, - 44.6733191 - ], - [ - -124.0657781, - 44.6733223 - ], - [ - -124.0657563, - 44.6733348 - ], - [ - -124.0657503, - 44.6733384 - ], - [ - -124.065744, - 44.6733424 - ], - [ - -124.0657409, - 44.6733445 - ], - [ - -124.065738, - 44.6733467 - ], - [ - -124.0657353, - 44.6733491 - ], - [ - -124.0657329, - 44.6733515 - ], - [ - -124.0657309, - 44.6733541 - ], - [ - -124.0657303, - 44.6733554 - ], - [ - -124.0657298, - 44.6733567 - ], - [ - -124.0657295, - 44.6733581 - ], - [ - -124.0657296, - 44.6733595 - ], - [ - -124.0657299, - 44.6733609 - ], - [ - -124.0657307, - 44.6733623 - ], - [ - -124.0657318, - 44.6733637 - ], - [ - -124.0657335, - 44.6733652 - ], - [ - -124.0657396, - 44.6733691 - ], - [ - -124.0657464, - 44.6733723 - ], - [ - -124.0657513, - 44.6733741 - ], - [ - -124.0657583, - 44.673376 - ], - [ - -124.0657684, - 44.6733779 - ], - [ - -124.0657745, - 44.6733787 - ], - [ - -124.0657816, - 44.6733793 - ], - [ - -124.0657901, - 44.6733796 - ], - [ - -124.0658001, - 44.6733797 - ], - [ - -124.0658119, - 44.6733793 - ], - [ - -124.0658256, - 44.6733784 - ], - [ - -124.0658414, - 44.673377 - ], - [ - -124.0658594, - 44.673375 - ], - [ - -124.0658794, - 44.6733727 - ], - [ - -124.0658896, - 44.6733715 - ], - [ - -124.0659001, - 44.6733704 - ], - [ - -124.0659291, - 44.6733677 - ], - [ - -124.0659582, - 44.6733647 - ], - [ - -124.0659775, - 44.6733623 - ], - [ - -124.0660032, - 44.6733583 - ], - [ - -124.0660179, - 44.6733556 - ], - [ - -124.0660345, - 44.6733519 - ], - [ - -124.0660534, - 44.6733468 - ], - [ - -124.0660634, - 44.6733437 - ], - [ - -124.0660741, - 44.6733401 - ], - [ - -124.0661061, - 44.6733277 - ], - [ - -124.0661364, - 44.6733144 - ], - [ - -124.0661559, - 44.673305 - ], - [ - -124.0661808, - 44.6732919 - ], - [ - -124.0662127, - 44.6732735 - ], - [ - -124.0662531, - 44.6732475 - ], - [ - -124.0662754, - 44.6732321 - ], - [ - -124.0663003, - 44.673214 - ], - [ - -124.0663284, - 44.6731928 - ], - [ - -124.0663603, - 44.6731681 - ], - [ - -124.0663791, - 44.6731521 - ], - [ - -124.0663957, - 44.6731353 - ], - [ - -124.0664059, - 44.6731238 - ], - [ - -124.0664185, - 44.6731082 - ], - [ - -124.0664655, - 44.6730435 - ], - [ - -124.06648, - 44.673025 - ], - [ - -124.0664983, - 44.6730042 - ], - [ - -124.0665091, - 44.6729933 - ], - [ - -124.0665215, - 44.6729819 - ], - [ - -124.066536, - 44.6729701 - ], - [ - -124.066553, - 44.6729578 - ], - [ - -124.0665824, - 44.6729382 - ], - [ - -124.0666123, - 44.6729191 - ], - [ - -124.0666326, - 44.6729069 - ], - [ - -124.0666601, - 44.672892 - ], - [ - -124.066676, - 44.6728843 - ], - [ - -124.0666944, - 44.6728764 - ], - [ - -124.0667156, - 44.6728687 - ], - [ - -124.066727, - 44.6728652 - ], - [ - -124.0667393, - 44.6728621 - ], - [ - -124.0667525, - 44.6728595 - ], - [ - -124.0667666, - 44.6728575 - ], - [ - -124.0667819, - 44.6728564 - ], - [ - -124.0667983, - 44.6728564 - ], - [ - -124.0668159, - 44.6728579 - ], - [ - -124.0668272, - 44.6728596 - ], - [ - -124.0668385, - 44.6728615 - ], - [ - -124.0668611, - 44.672866 - ], - [ - -124.0668762, - 44.6728693 - ], - [ - -124.0669368, - 44.6728836 - ], - [ - -124.0669542, - 44.6728874 - ], - [ - -124.0669742, - 44.6728912 - ], - [ - -124.0670381, - 44.672902 - ], - [ - -124.0671024, - 44.6729122 - ], - [ - -124.0671452, - 44.6729186 - ], - [ - -124.0671574, - 44.6729198 - ], - [ - -124.0671696, - 44.6729201 - ], - [ - -124.0671779, - 44.6729198 - ], - [ - -124.0671889, - 44.672919 - ], - [ - -124.0672037, - 44.6729173 - ], - [ - -124.0672631, - 44.6729082 - ], - [ - -124.06728, - 44.6729065 - ], - [ - -124.0672889, - 44.672906 - ], - [ - -124.0672985, - 44.672906 - ], - [ - -124.0673085, - 44.6729065 - ], - [ - -124.0673192, - 44.6729077 - ], - [ - -124.0673305, - 44.6729101 - ], - [ - -124.0673407, - 44.6729132 - ], - [ - -124.0673499, - 44.6729172 - ], - [ - -124.0673555, - 44.6729203 - ], - [ - -124.0673625, - 44.6729248 - ], - [ - -124.0673708, - 44.6729316 - ], - [ - -124.0673752, - 44.6729358 - ], - [ - -124.06738, - 44.6729409 - ], - [ - -124.0673851, - 44.6729469 - ], - [ - -124.0673907, - 44.6729541 - ], - [ - -124.0673969, - 44.6729626 - ], - [ - -124.0674132, - 44.6729856 - ], - [ - -124.0674235, - 44.6729982 - ], - [ - -124.0674296, - 44.6730046 - ], - [ - -124.0674367, - 44.673011 - ], - [ - -124.0674449, - 44.6730174 - ], - [ - -124.0674548, - 44.6730235 - ], - [ - -124.0674681, - 44.6730304 - ], - [ - -124.0674816, - 44.673037 - ], - [ - -124.0674907, - 44.6730411 - ], - [ - -124.0675029, - 44.6730464 - ], - [ - -124.0675195, - 44.6730529 - ], - [ - -124.067529, - 44.6730563 - ], - [ - -124.06754, - 44.6730599 - ], - [ - -124.0675526, - 44.6730637 - ], - [ - -124.0675672, - 44.6730675 - ], - [ - -124.0675696, - 44.673068 - ], - [ - -124.0675721, - 44.6730683 - ], - [ - -124.067577, - 44.6730685 - ], - [ - -124.0675803, - 44.6730684 - ], - [ - -124.0675848, - 44.6730678 - ], - [ - -124.0675908, - 44.6730665 - ], - [ - -124.0675942, - 44.6730655 - ], - [ - -124.0675981, - 44.6730641 - ], - [ - -124.0676027, - 44.6730624 - ], - [ - -124.0676389, - 44.6730456 - ], - [ - -124.0676437, - 44.6730437 - ], - [ - -124.0676488, - 44.6730419 - ], - [ - -124.0676542, - 44.6730404 - ], - [ - -124.0676599, - 44.6730393 - ], - [ - -124.0676628, - 44.673039 - ], - [ - -124.0676658, - 44.6730389 - ], - [ - -124.0676688, - 44.673039 - ], - [ - -124.067672, - 44.6730393 - ], - [ - -124.0676752, - 44.67304 - ], - [ - -124.0676802, - 44.6730415 - ], - [ - -124.0676849, - 44.6730435 - ], - [ - -124.0676878, - 44.6730451 - ], - [ - -124.0676914, - 44.6730475 - ], - [ - -124.0676959, - 44.6730512 - ], - [ - -124.0677012, - 44.6730567 - ], - [ - -124.0677041, - 44.6730602 - ], - [ - -124.0677071, - 44.6730644 - ], - [ - -124.0677105, - 44.6730693 - ], - [ - -124.0677141, - 44.6730752 - ], - [ - -124.0677237, - 44.6730911 - ], - [ - -124.0677296, - 44.6730997 - ], - [ - -124.0677331, - 44.673104 - ], - [ - -124.067737, - 44.6731083 - ], - [ - -124.0677415, - 44.6731124 - ], - [ - -124.0677468, - 44.6731162 - ], - [ - -124.0677498, - 44.6731179 - ], - [ - -124.0677531, - 44.6731195 - ], - [ - -124.0677567, - 44.6731209 - ], - [ - -124.0677606, - 44.673122 - ], - [ - -124.0677649, - 44.6731229 - ], - [ - -124.0677913, - 44.6731269 - ], - [ - -124.0678179, - 44.6731307 - ], - [ - -124.0678357, - 44.673133 - ], - [ - -124.0678595, - 44.6731356 - ], - [ - -124.0678731, - 44.6731368 - ], - [ - -124.0679514, - 44.673143 - ], - [ - -124.0679775, - 44.6731448 - ], - [ - -124.0681985, - 44.6731586 - ], - [ - -124.0684223, - 44.6731307 - ], - [ - -124.0684266, - 44.6731301 - ], - [ - -124.0684308, - 44.6731292 - ], - [ - -124.0684388, - 44.673127 - ], - [ - -124.0684438, - 44.6731251 - ], - [ - -124.0684502, - 44.6731222 - ], - [ - -124.0684583, - 44.6731176 - ], - [ - -124.0684627, - 44.6731147 - ], - [ - -124.0684675, - 44.6731111 - ], - [ - -124.0684729, - 44.6731068 - ], - [ - -124.0684788, - 44.6731015 - ], - [ - -124.0684853, - 44.6730953 - ], - [ - -124.0685022, - 44.673078 - ], - [ - -124.068512, - 44.6730684 - ], - [ - -124.0685174, - 44.6730636 - ], - [ - -124.0685234, - 44.6730587 - ], - [ - -124.0685416, - 44.6730438 - ], - [ - -124.0685592, - 44.6730286 - ], - [ - -124.0685935, - 44.6729975 - ], - [ - -124.0686166, - 44.6729771 - ], - [ - -124.0686303, - 44.6729658 - ], - [ - -124.0686466, - 44.6729532 - ], - [ - -124.0686531, - 44.672949 - ], - [ - -124.0686601, - 44.6729454 - ], - [ - -124.0686651, - 44.6729434 - ], - [ - -124.068672, - 44.672941 - ], - [ - -124.0686816, - 44.6729385 - ], - [ - -124.0686953, - 44.672936 - ], - [ - -124.0687033, - 44.672935 - ], - [ - -124.0687128, - 44.6729341 - ], - [ - -124.0687239, - 44.6729333 - ], - [ - -124.0687368, - 44.6729327 - ], - [ - -124.0687714, - 44.6729311 - ], - [ - -124.0687909, - 44.6729294 - ], - [ - -124.068801, - 44.672928 - ], - [ - -124.0688114, - 44.6729261 - ], - [ - -124.0688221, - 44.6729234 - ], - [ - -124.068833, - 44.6729196 - ], - [ - -124.0688383, - 44.6729172 - ], - [ - -124.0688436, - 44.6729145 - ], - [ - -124.0688532, - 44.6729087 - ], - [ - -124.0688622, - 44.6729025 - ], - [ - -124.0688678, - 44.6728982 - ], - [ - -124.0688749, - 44.6728923 - ], - [ - -124.0688839, - 44.672884 - ], - [ - -124.0688887, - 44.6728792 - ], - [ - -124.068894, - 44.6728736 - ], - [ - -124.0688998, - 44.6728671 - ], - [ - -124.0689062, - 44.6728595 - ], - [ - -124.0689132, - 44.6728508 - ], - [ - -124.0689163, - 44.6728465 - ], - [ - -124.0689191, - 44.6728421 - ], - [ - -124.0689235, - 44.672833 - ], - [ - -124.0689257, - 44.6728267 - ], - [ - -124.068928, - 44.6728182 - ], - [ - -124.06893, - 44.6728065 - ], - [ - -124.0689331, - 44.6727583 - ], - [ - -124.0689349, - 44.6727449 - ], - [ - -124.0689364, - 44.6727378 - ], - [ - -124.0689385, - 44.6727305 - ], - [ - -124.0689415, - 44.6727229 - ], - [ - -124.0689457, - 44.6727151 - ], - [ - -124.0689514, - 44.6727071 - ], - [ - -124.0689551, - 44.6727033 - ], - [ - -124.0689595, - 44.6726997 - ], - [ - -124.0689629, - 44.6726974 - ], - [ - -124.0689678, - 44.6726945 - ], - [ - -124.068975, - 44.672691 - ], - [ - -124.0689795, - 44.6726892 - ], - [ - -124.0689848, - 44.6726873 - ], - [ - -124.0689911, - 44.6726854 - ], - [ - -124.0689986, - 44.6726835 - ], - [ - -124.0690074, - 44.6726818 - ], - [ - -124.0690175, - 44.6726805 - ], - [ - -124.069023, - 44.6726801 - ], - [ - -124.0690287, - 44.6726799 - ], - [ - -124.0690347, - 44.67268 - ], - [ - -124.069041, - 44.6726804 - ], - [ - -124.0690475, - 44.6726813 - ], - [ - -124.0690541, - 44.6726826 - ], - [ - -124.0690607, - 44.6726846 - ], - [ - -124.0690639, - 44.6726858 - ], - [ - -124.069067, - 44.6726873 - ], - [ - -124.06907, - 44.6726889 - ], - [ - -124.0690729, - 44.6726909 - ], - [ - -124.0690756, - 44.6726931 - ], - [ - -124.0690868, - 44.6727037 - ], - [ - -124.0690971, - 44.6727146 - ], - [ - -124.0691033, - 44.6727221 - ], - [ - -124.0691109, - 44.6727322 - ], - [ - -124.0691148, - 44.6727381 - ], - [ - -124.0691189, - 44.6727449 - ], - [ - -124.0691231, - 44.6727527 - ], - [ - -124.0691272, - 44.6727618 - ], - [ - -124.0691309, - 44.6727723 - ], - [ - -124.0691325, - 44.672778 - ], - [ - -124.0691339, - 44.6727841 - ], - [ - -124.0691359, - 44.6727978 - ], - [ - -124.0691368, - 44.6728119 - ], - [ - -124.0691368, - 44.6728214 - ], - [ - -124.0691361, - 44.6728341 - ], - [ - -124.0691342, - 44.6728511 - ], - [ - -124.0691326, - 44.6728607 - ], - [ - -124.0691304, - 44.6728715 - ], - [ - -124.0691274, - 44.6728836 - ], - [ - -124.0691235, - 44.672897 - ], - [ - -124.0691186, - 44.6729114 - ], - [ - -124.0691147, - 44.6729192 - ], - [ - -124.069109, - 44.6729269 - ], - [ - -124.0691044, - 44.6729321 - ], - [ - -124.0690971, - 44.6729389 - ], - [ - -124.069086, - 44.6729479 - ], - [ - -124.069069, - 44.6729599 - ], - [ - -124.069044, - 44.6729756 - ], - [ - -124.06901, - 44.6729963 - ], - [ - -124.0689918, - 44.6730079 - ], - [ - -124.0689829, - 44.6730141 - ], - [ - -124.0689742, - 44.6730206 - ], - [ - -124.0689661, - 44.6730274 - ], - [ - -124.0689589, - 44.6730347 - ], - [ - -124.0689532, - 44.6730424 - ], - [ - -124.0689512, - 44.6730463 - ], - [ - -124.0689498, - 44.6730503 - ], - [ - -124.0689492, - 44.6730538 - ], - [ - -124.0689493, - 44.6730587 - ], - [ - -124.0689505, - 44.6730631 - ], - [ - -124.068953, - 44.6730676 - ], - [ - -124.0689567, - 44.6730721 - ], - [ - -124.0689676, - 44.6730825 - ], - [ - -124.0689797, - 44.6730928 - ], - [ - -124.0689883, - 44.6730997 - ], - [ - -124.0690004, - 44.6731087 - ], - [ - -124.0690174, - 44.6731208 - ], - [ - -124.0690409, - 44.6731367 - ], - [ - -124.0690728, - 44.6731578 - ], - [ - -124.06908, - 44.6731625 - ], - [ - -124.0690873, - 44.673167 - ], - [ - -124.0691022, - 44.6731757 - ], - [ - -124.0691321, - 44.6731924 - ], - [ - -124.0691515, - 44.6732036 - ], - [ - -124.0691622, - 44.6732102 - ], - [ - -124.0691683, - 44.6732147 - ], - [ - -124.0691735, - 44.6732196 - ], - [ - -124.0691766, - 44.6732232 - ], - [ - -124.0691801, - 44.6732282 - ], - [ - -124.0691842, - 44.6732352 - ], - [ - -124.0691884, - 44.6732452 - ], - [ - -124.0691904, - 44.6732512 - ], - [ - -124.0691948, - 44.6732676 - ], - [ - -124.0692003, - 44.6732896 - ], - [ - -124.0692044, - 44.6733016 - ], - [ - -124.0692072, - 44.6733077 - ], - [ - -124.0692107, - 44.673314 - ], - [ - -124.0692151, - 44.6733202 - ], - [ - -124.0692208, - 44.6733263 - ], - [ - -124.0692242, - 44.6733292 - ], - [ - -124.0692281, - 44.673332 - ], - [ - -124.0692307, - 44.6733335 - ], - [ - -124.0692336, - 44.6733346 - ], - [ - -124.0692355, - 44.673335 - ], - [ - -124.0692383, - 44.6733355 - ], - [ - -124.0692421, - 44.6733356 - ], - [ - -124.0692443, - 44.6733354 - ], - [ - -124.0692469, - 44.6733351 - ], - [ - -124.06925, - 44.6733346 - ], - [ - -124.0692537, - 44.6733338 - ], - [ - -124.0692579, - 44.6733325 - ], - [ - -124.0692629, - 44.6733308 - ], - [ - -124.0692686, - 44.6733286 - ], - [ - -124.0692842, - 44.673322 - ], - [ - -124.069293, - 44.6733183 - ], - [ - -124.0692976, - 44.6733165 - ], - [ - -124.0693025, - 44.6733149 - ], - [ - -124.0693074, - 44.6733134 - ], - [ - -124.0693125, - 44.6733123 - ], - [ - -124.069315, - 44.6733119 - ], - [ - -124.0693176, - 44.6733118 - ], - [ - -124.0693201, - 44.6733118 - ], - [ - -124.0693226, - 44.673312 - ], - [ - -124.0693251, - 44.6733125 - ], - [ - -124.0693293, - 44.673314 - ], - [ - -124.0693334, - 44.673316 - ], - [ - -124.069336, - 44.6733176 - ], - [ - -124.0693394, - 44.67332 - ], - [ - -124.0693437, - 44.6733237 - ], - [ - -124.0693491, - 44.6733293 - ], - [ - -124.0693521, - 44.6733328 - ], - [ - -124.06936, - 44.6733427 - ], - [ - -124.0693705, - 44.6733562 - ], - [ - -124.0693769, - 44.6733634 - ], - [ - -124.0693805, - 44.673367 - ], - [ - -124.0693845, - 44.6733706 - ], - [ - -124.069389, - 44.6733739 - ], - [ - -124.0693941, - 44.673377 - ], - [ - -124.0693969, - 44.6733783 - ], - [ - -124.0693998, - 44.6733795 - ], - [ - -124.069403, - 44.6733805 - ], - [ - -124.0694064, - 44.6733813 - ], - [ - -124.0694101, - 44.6733818 - ], - [ - -124.0694136, - 44.673382 - ], - [ - -124.0694171, - 44.6733819 - ], - [ - -124.0694194, - 44.6733817 - ], - [ - -124.0694226, - 44.6733813 - ], - [ - -124.0694269, - 44.6733804 - ], - [ - -124.0694326, - 44.673379 - ], - [ - -124.0694403, - 44.6733768 - ], - [ - -124.0694507, - 44.6733737 - ], - [ - -124.0694565, - 44.6733722 - ], - [ - -124.0694596, - 44.6733715 - ], - [ - -124.0694629, - 44.6733709 - ], - [ - -124.0694664, - 44.6733704 - ], - [ - -124.0694701, - 44.6733702 - ], - [ - -124.069474, - 44.6733703 - ], - [ - -124.069476, - 44.6733704 - ], - [ - -124.0694817, - 44.6733713 - ], - [ - -124.0694873, - 44.6733727 - ], - [ - -124.0694911, - 44.6733737 - ], - [ - -124.069496, - 44.6733754 - ], - [ - -124.0695027, - 44.6733778 - ], - [ - -124.0695115, - 44.6733814 - ], - [ - -124.0695233, - 44.6733864 - ], - [ - -124.0695301, - 44.673389 - ], - [ - -124.0695379, - 44.6733916 - ], - [ - -124.0695421, - 44.6733928 - ], - [ - -124.0695466, - 44.6733939 - ], - [ - -124.0695515, - 44.6733948 - ], - [ - -124.0695567, - 44.6733954 - ], - [ - -124.0695623, - 44.6733955 - ], - [ - -124.0695652, - 44.6733954 - ], - [ - -124.0695803, - 44.6733942 - ], - [ - -124.0695955, - 44.6733926 - ], - [ - -124.0696257, - 44.6733887 - ], - [ - -124.0696865, - 44.67338 - ], - [ - -124.0697038, - 44.6733779 - ], - [ - -124.0697238, - 44.6733759 - ], - [ - -124.0697564, - 44.6733737 - ], - [ - -124.0697891, - 44.6733723 - ], - [ - -124.0698986, - 44.6733686 - ], - [ - -124.0699236, - 44.6733671 - ], - [ - -124.0699521, - 44.6733647 - ], - [ - -124.0699727, - 44.6733622 - ], - [ - -124.0699928, - 44.6733586 - ], - [ - -124.0700059, - 44.6733557 - ], - [ - -124.070023, - 44.673351 - ], - [ - -124.0700325, - 44.6733479 - ], - [ - -124.0700433, - 44.673344 - ], - [ - -124.0700553, - 44.6733391 - ], - [ - -124.0700688, - 44.6733327 - ], - [ - -124.0700837, - 44.6733245 - ], - [ - -124.0700915, - 44.6733197 - ], - [ - -124.0700996, - 44.6733142 - ], - [ - -124.0701081, - 44.673308 - ], - [ - -124.070117, - 44.6733009 - ], - [ - -124.0701262, - 44.6732929 - ], - [ - -124.0701321, - 44.673287 - ], - [ - -124.070137, - 44.6732811 - ], - [ - -124.0701398, - 44.673277 - ], - [ - -124.070143, - 44.6732716 - ], - [ - -124.0701464, - 44.6732642 - ], - [ - -124.0701479, - 44.6732599 - ], - [ - -124.0701493, - 44.673255 - ], - [ - -124.0701504, - 44.6732493 - ], - [ - -124.0701512, - 44.6732429 - ], - [ - -124.0701514, - 44.6732355 - ], - [ - -124.070151, - 44.673227 - ], - [ - -124.0701497, - 44.6732165 - ], - [ - -124.0701478, - 44.6732068 - ], - [ - -124.0701449, - 44.6731949 - ], - [ - -124.0701414, - 44.673182 - ], - [ - -124.0701383, - 44.6731736 - ], - [ - -124.0701336, - 44.6731653 - ], - [ - -124.0701298, - 44.6731598 - ], - [ - -124.070124, - 44.6731524 - ], - [ - -124.0701152, - 44.6731427 - ], - [ - -124.0700752, - 44.673104 - ], - [ - -124.0700648, - 44.6730929 - ], - [ - -124.0700598, - 44.673087 - ], - [ - -124.0700551, - 44.6730806 - ], - [ - -124.0700509, - 44.6730738 - ], - [ - -124.0700474, - 44.6730665 - ], - [ - -124.070045, - 44.6730587 - ], - [ - -124.0700444, - 44.6730546 - ], - [ - -124.0700438, - 44.6730452 - ], - [ - -124.070044, - 44.6730356 - ], - [ - -124.0700446, - 44.6730291 - ], - [ - -124.0700459, - 44.6730204 - ], - [ - -124.0700489, - 44.6730087 - ], - [ - -124.0700512, - 44.673002 - ], - [ - -124.0700545, - 44.6729943 - ], - [ - -124.070059, - 44.6729856 - ], - [ - -124.0700653, - 44.6729755 - ], - [ - -124.0700692, - 44.6729702 - ], - [ - -124.0700738, - 44.6729646 - ], - [ - -124.0700792, - 44.6729586 - ], - [ - -124.0700855, - 44.6729523 - ], - [ - -124.0700929, - 44.6729456 - ], - [ - -124.0701016, - 44.6729386 - ], - [ - -124.070106, - 44.6729352 - ], - [ - -124.0701106, - 44.6729322 - ], - [ - -124.0701197, - 44.6729266 - ], - [ - -124.0701258, - 44.6729233 - ], - [ - -124.0701341, - 44.6729193 - ], - [ - -124.0701452, - 44.6729149 - ], - [ - -124.0701516, - 44.6729126 - ], - [ - -124.070159, - 44.6729104 - ], - [ - -124.0701675, - 44.6729081 - ], - [ - -124.0701773, - 44.6729057 - ], - [ - -124.0701886, - 44.6729033 - ], - [ - -124.0702192, - 44.6728976 - ], - [ - -124.070237, - 44.672894 - ], - [ - -124.07025, - 44.6728916 - ], - [ - -124.0702632, - 44.6728898 - ], - [ - -124.0702721, - 44.6728889 - ], - [ - -124.0702841, - 44.672888 - ], - [ - -124.0703323, - 44.6728855 - ], - [ - -124.0703458, - 44.6728844 - ], - [ - -124.0703611, - 44.6728826 - ], - [ - -124.0703691, - 44.6728813 - ], - [ - -124.0703775, - 44.6728796 - ], - [ - -124.0703863, - 44.6728774 - ], - [ - -124.0703955, - 44.6728745 - ], - [ - -124.0704012, - 44.6728724 - ], - [ - -124.0704067, - 44.67287 - ], - [ - -124.0704169, - 44.6728646 - ], - [ - -124.0704233, - 44.6728607 - ], - [ - -124.0704313, - 44.672855 - ], - [ - -124.0704414, - 44.6728469 - ], - [ - -124.0704541, - 44.6728353 - ], - [ - -124.0704707, - 44.6728193 - ], - [ - -124.0704805, - 44.6728103 - ], - [ - -124.0704924, - 44.6728005 - ], - [ - -124.0704991, - 44.6727955 - ], - [ - -124.0705068, - 44.6727906 - ], - [ - -124.0705156, - 44.6727857 - ], - [ - -124.0705375, - 44.6727749 - ], - [ - -124.07056, - 44.6727649 - ], - [ - -124.0705752, - 44.6727587 - ], - [ - -124.0705957, - 44.672751 - ], - [ - -124.0706075, - 44.6727469 - ], - [ - -124.0706211, - 44.6727425 - ], - [ - -124.0706366, - 44.672738 - ], - [ - -124.0706544, - 44.6727333 - ], - [ - -124.0706753, - 44.6727287 - ], - [ - -124.0706971, - 44.672725 - ], - [ - -124.0707119, - 44.6727231 - ], - [ - -124.0707321, - 44.6727215 - ], - [ - -124.0707437, - 44.6727211 - ], - [ - -124.0707571, - 44.6727211 - ], - [ - -124.0707725, - 44.6727217 - ], - [ - -124.0707901, - 44.6727233 - ], - [ - -124.0708102, - 44.6727264 - ], - [ - -124.0708209, - 44.6727287 - ], - [ - -124.0708322, - 44.6727315 - ], - [ - -124.0708441, - 44.6727352 - ], - [ - -124.0708568, - 44.6727397 - ], - [ - -124.07087, - 44.6727454 - ], - [ - -124.070884, - 44.6727523 - ], - [ - -124.0708985, - 44.6727609 - ], - [ - -124.070904, - 44.6727646 - ], - [ - -124.0709089, - 44.6727686 - ], - [ - -124.0709119, - 44.6727713 - ], - [ - -124.0709155, - 44.672775 - ], - [ - -124.0709197, - 44.6727801 - ], - [ - -124.0709218, - 44.672783 - ], - [ - -124.0709238, - 44.6727865 - ], - [ - -124.0709259, - 44.6727905 - ], - [ - -124.0709277, - 44.6727951 - ], - [ - -124.0709293, - 44.6728004 - ], - [ - -124.0709304, - 44.6728065 - ], - [ - -124.0709307, - 44.6728135 - ], - [ - -124.0709305, - 44.6728172 - ], - [ - -124.07093, - 44.6728211 - ], - [ - -124.0709292, - 44.6728252 - ], - [ - -124.0709281, - 44.6728295 - ], - [ - -124.0709264, - 44.6728341 - ], - [ - -124.0709243, - 44.6728388 - ], - [ - -124.0709216, - 44.6728436 - ], - [ - -124.070909, - 44.672864 - ], - [ - -124.0708958, - 44.6728844 - ], - [ - -124.070868, - 44.672925 - ], - [ - -124.0708486, - 44.672952 - ], - [ - -124.0708219, - 44.6729876 - ], - [ - -124.0708067, - 44.6730066 - ], - [ - -124.0707906, - 44.6730253 - ], - [ - -124.0707577, - 44.6730622 - ], - [ - -124.0707366, - 44.6730868 - ], - [ - -124.0707253, - 44.673101 - ], - [ - -124.0707216, - 44.6731063 - ], - [ - -124.0707184, - 44.673112 - ], - [ - -124.0707166, - 44.6731159 - ], - [ - -124.0707145, - 44.6731214 - ], - [ - -124.0707125, - 44.6731289 - ], - [ - -124.0707117, - 44.6731332 - ], - [ - -124.0707112, - 44.6731383 - ], - [ - -124.070711, - 44.6731441 - ], - [ - -124.0707114, - 44.6731508 - ], - [ - -124.0707128, - 44.6731583 - ], - [ - -124.070714, - 44.6731622 - ], - [ - -124.0707155, - 44.6731663 - ], - [ - -124.0707174, - 44.6731706 - ], - [ - -124.07072, - 44.673175 - ], - [ - -124.0707231, - 44.6731795 - ], - [ - -124.0707271, - 44.6731841 - ], - [ - -124.070732, - 44.6731887 - ], - [ - -124.070738, - 44.6731931 - ], - [ - -124.0707414, - 44.6731952 - ], - [ - -124.0707484, - 44.6731988 - ], - [ - -124.0707556, - 44.6732017 - ], - [ - -124.0707607, - 44.6732033 - ], - [ - -124.0707675, - 44.6732051 - ], - [ - -124.070777, - 44.6732067 - ], - [ - -124.0707825, - 44.6732073 - ], - [ - -124.0707889, - 44.6732078 - ], - [ - -124.0707964, - 44.6732079 - ], - [ - -124.0708049, - 44.6732076 - ], - [ - -124.0708148, - 44.6732068 - ], - [ - -124.070826, - 44.6732052 - ], - [ - -124.0708388, - 44.6732027 - ], - [ - -124.070853, - 44.673199 - ], - [ - -124.0708604, - 44.6731967 - ], - [ - -124.070868, - 44.6731941 - ], - [ - -124.0708759, - 44.6731911 - ], - [ - -124.0708839, - 44.6731877 - ], - [ - -124.070892, - 44.673184 - ], - [ - -124.0709923, - 44.6731348 - ], - [ - -124.0710924, - 44.673085 - ], - [ - -124.0711587, - 44.6730513 - ], - [ - -124.0713787, - 44.6729364 - ], - [ - -124.0714526, - 44.6728985 - ], - [ - -124.0714926, - 44.6728789 - ], - [ - -124.0715333, - 44.6728599 - ], - [ - -124.0716161, - 44.672824 - ], - [ - -124.0716723, - 44.672801 - ], - [ - -124.0717481, - 44.6727713 - ], - [ - -124.0718504, - 44.6727321 - ], - [ - -124.0718879, - 44.6727186 - ], - [ - -124.0719261, - 44.6727063 - ], - [ - -124.0719863, - 44.672689 - ], - [ - -124.0720326, - 44.6726766 - ], - [ - -124.0720942, - 44.6726603 - ], - [ - -124.0721258, - 44.6726516 - ], - [ - -124.0721585, - 44.6726431 - ], - [ - -124.0721808, - 44.6726381 - ], - [ - -124.0721936, - 44.6726358 - ], - [ - -124.0722082, - 44.6726336 - ], - [ - -124.072225, - 44.672632 - ], - [ - -124.0722339, - 44.6726316 - ], - [ - -124.0722434, - 44.6726315 - ], - [ - -124.0722535, - 44.6726319 - ], - [ - -124.0722642, - 44.6726328 - ], - [ - -124.0722755, - 44.6726345 - ], - [ - -124.0722874, - 44.6726372 - ], - [ - -124.0723, - 44.6726411 - ], - [ - -124.0723064, - 44.6726435 - ], - [ - -124.0723149, - 44.6726474 - ], - [ - -124.0723227, - 44.6726516 - ], - [ - -124.0723276, - 44.6726546 - ], - [ - -124.0723337, - 44.6726589 - ], - [ - -124.0723411, - 44.672665 - ], - [ - -124.072345, - 44.6726686 - ], - [ - -124.0723492, - 44.6726729 - ], - [ - -124.0723535, - 44.672678 - ], - [ - -124.072358, - 44.6726841 - ], - [ - -124.0723626, - 44.6726912 - ], - [ - -124.0723671, - 44.6726995 - ], - [ - -124.0723714, - 44.6727092 - ], - [ - -124.0723752, - 44.6727205 - ], - [ - -124.0723769, - 44.6727265 - ], - [ - -124.0723861, - 44.672766 - ], - [ - -124.0723939, - 44.6728056 - ], - [ - -124.0723984, - 44.672832 - ], - [ - -124.0724039, - 44.6728673 - ], - [ - -124.0724201, - 44.673025 - ], - [ - -124.0724214, - 44.6730317 - ], - [ - -124.0724231, - 44.6730382 - ], - [ - -124.0724246, - 44.6730425 - ], - [ - -124.0724269, - 44.6730482 - ], - [ - -124.0724306, - 44.6730557 - ], - [ - -124.0724331, - 44.6730599 - ], - [ - -124.0724362, - 44.6730646 - ], - [ - -124.0724402, - 44.6730699 - ], - [ - -124.0724452, - 44.6730758 - ], - [ - -124.0724518, - 44.6730824 - ], - [ - -124.0724556, - 44.6730858 - ], - [ - -124.0724599, - 44.6730894 - ], - [ - -124.0724647, - 44.6730931 - ], - [ - -124.0724703, - 44.673097 - ], - [ - -124.072476, - 44.6731005 - ], - [ - -124.0724821, - 44.6731035 - ], - [ - -124.0724863, - 44.6731051 - ], - [ - -124.0724921, - 44.673107 - ], - [ - -124.0725002, - 44.673109 - ], - [ - -124.0725049, - 44.6731098 - ], - [ - -124.0725104, - 44.6731105 - ], - [ - -124.0725168, - 44.673111 - ], - [ - -124.0725242, - 44.6731112 - ], - [ - -124.0725328, - 44.673111 - ], - [ - -124.0725427, - 44.6731102 - ], - [ - -124.0725539, - 44.6731086 - ], - [ - -124.0725666, - 44.6731061 - ], - [ - -124.0725732, - 44.6731044 - ], - [ - -124.0725801, - 44.6731025 - ], - [ - -124.0725873, - 44.6731002 - ], - [ - -124.0725947, - 44.6730976 - ], - [ - -124.0726021, - 44.6730947 - ], - [ - -124.0726096, - 44.6730913 - ], - [ - -124.0726297, - 44.6730818 - ], - [ - -124.0726496, - 44.6730717 - ], - [ - -124.0726625, - 44.6730647 - ], - [ - -124.0726792, - 44.6730547 - ], - [ - -124.0726884, - 44.6730487 - ], - [ - -124.0726984, - 44.6730415 - ], - [ - -124.0727093, - 44.6730328 - ], - [ - -124.0727147, - 44.673028 - ], - [ - -124.0727203, - 44.6730226 - ], - [ - -124.0727259, - 44.6730166 - ], - [ - -124.072731, - 44.6730107 - ], - [ - -124.0727356, - 44.6730047 - ], - [ - -124.0727439, - 44.6729925 - ], - [ - -124.0727489, - 44.6729844 - ], - [ - -124.0727677, - 44.6729514 - ], - [ - -124.0727737, - 44.672942 - ], - [ - -124.0727813, - 44.6729313 - ], - [ - -124.0727859, - 44.6729256 - ], - [ - -124.0727912, - 44.6729196 - ], - [ - -124.0727949, - 44.6729153 - ], - [ - -124.0727986, - 44.6729107 - ], - [ - -124.072806, - 44.6729012 - ], - [ - -124.0728109, - 44.672895 - ], - [ - -124.0728137, - 44.6728916 - ], - [ - -124.072817, - 44.6728881 - ], - [ - -124.0728187, - 44.6728864 - ], - [ - -124.0728206, - 44.6728847 - ], - [ - -124.0728226, - 44.6728831 - ], - [ - -124.0728248, - 44.6728816 - ], - [ - -124.0728271, - 44.6728803 - ], - [ - -124.0728296, - 44.6728792 - ], - [ - -124.0728309, - 44.6728788 - ], - [ - -124.0728323, - 44.6728786 - ], - [ - -124.0728337, - 44.6728784 - ], - [ - -124.0728391, - 44.6728786 - ], - [ - -124.0728446, - 44.6728795 - ], - [ - -124.0728483, - 44.6728806 - ], - [ - -124.0728532, - 44.6728826 - ], - [ - -124.0728599, - 44.672886 - ], - [ - -124.0728637, - 44.6728884 - ], - [ - -124.0728681, - 44.6728914 - ], - [ - -124.0728731, - 44.6728952 - ], - [ - -124.0728789, - 44.6729 - ], - [ - -124.0728855, - 44.672906 - ], - [ - -124.0728931, - 44.6729133 - ], - [ - -124.0729019, - 44.6729222 - ], - [ - -124.0729253, - 44.672947 - ], - [ - -124.0729387, - 44.6729607 - ], - [ - -124.0729459, - 44.6729674 - ], - [ - -124.0729535, - 44.6729741 - ], - [ - -124.0729615, - 44.6729805 - ], - [ - -124.0729679, - 44.6729851 - ], - [ - -124.0729745, - 44.67299 - ], - [ - -124.0729884, - 44.6730001 - ], - [ - -124.072998, - 44.6730069 - ], - [ - -124.0730112, - 44.6730158 - ], - [ - -124.0730188, - 44.6730205 - ], - [ - -124.0730275, - 44.6730256 - ], - [ - -124.0730374, - 44.6730309 - ], - [ - -124.0730426, - 44.6730334 - ], - [ - -124.0730482, - 44.6730358 - ], - [ - -124.073054, - 44.673038 - ], - [ - -124.0730601, - 44.6730399 - ], - [ - -124.0730665, - 44.6730414 - ], - [ - -124.0730687, - 44.6730417 - ], - [ - -124.0730709, - 44.6730417 - ], - [ - -124.0730723, - 44.6730415 - ], - [ - -124.0730743, - 44.673041 - ], - [ - -124.0730768, - 44.6730401 - ], - [ - -124.0730782, - 44.6730394 - ], - [ - -124.0730798, - 44.6730385 - ], - [ - -124.0730817, - 44.6730373 - ], - [ - -124.0730837, - 44.6730358 - ], - [ - -124.0730861, - 44.6730338 - ], - [ - -124.0730887, - 44.6730313 - ], - [ - -124.0730916, - 44.6730281 - ], - [ - -124.0730948, - 44.6730243 - ], - [ - -124.0730984, - 44.6730197 - ], - [ - -124.0731024, - 44.6730143 - ], - [ - -124.0731067, - 44.6730083 - ], - [ - -124.0731089, - 44.6730053 - ], - [ - -124.0731153, - 44.6729955 - ], - [ - -124.0731203, - 44.6729856 - ], - [ - -124.0731229, - 44.6729791 - ], - [ - -124.0731255, - 44.6729704 - ], - [ - -124.0731278, - 44.6729587 - ], - [ - -124.0731292, - 44.6729432 - ], - [ - -124.0731293, - 44.6729225 - ], - [ - -124.0731288, - 44.6728951 - ], - [ - -124.0731297, - 44.6728795 - ], - [ - -124.0731309, - 44.6728712 - ], - [ - -124.0731328, - 44.6728624 - ], - [ - -124.0731358, - 44.6728531 - ], - [ - -124.0731429, - 44.6728351 - ], - [ - -124.0731506, - 44.6728174 - ], - [ - -124.0731563, - 44.6728058 - ], - [ - -124.0731646, - 44.6727905 - ], - [ - -124.0731699, - 44.6727818 - ], - [ - -124.0731765, - 44.672772 - ], - [ - -124.0731848, - 44.6727608 - ], - [ - -124.0731953, - 44.6727481 - ], - [ - -124.0732015, - 44.6727413 - ], - [ - -124.0732086, - 44.6727341 - ], - [ - -124.0732149, - 44.6727284 - ], - [ - -124.0732219, - 44.6727229 - ], - [ - -124.0732269, - 44.6727194 - ], - [ - -124.0732339, - 44.6727149 - ], - [ - -124.0732439, - 44.6727094 - ], - [ - -124.0732499, - 44.6727064 - ], - [ - -124.0732569, - 44.6727034 - ], - [ - -124.0732651, - 44.6727002 - ], - [ - -124.0732745, - 44.6726971 - ], - [ - -124.0732855, - 44.6726942 - ], - [ - -124.0732913, - 44.672693 - ], - [ - -124.0732975, - 44.672692 - ], - [ - -124.073304, - 44.6726913 - ], - [ - -124.0733109, - 44.6726909 - ], - [ - -124.073318, - 44.6726909 - ], - [ - -124.0733254, - 44.6726915 - ], - [ - -124.073333, - 44.6726928 - ], - [ - -124.0733367, - 44.6726937 - ], - [ - -124.0733405, - 44.6726949 - ], - [ - -124.0733491, - 44.6726982 - ], - [ - -124.0733575, - 44.672702 - ], - [ - -124.0733631, - 44.6727048 - ], - [ - -124.0733703, - 44.6727089 - ], - [ - -124.0733796, - 44.6727149 - ], - [ - -124.0733848, - 44.6727186 - ], - [ - -124.0733905, - 44.672723 - ], - [ - -124.0733968, - 44.6727282 - ], - [ - -124.0734036, - 44.6727346 - ], - [ - -124.0734109, - 44.6727421 - ], - [ - -124.0734184, - 44.6727511 - ], - [ - -124.0734221, - 44.6727561 - ], - [ - -124.0734257, - 44.6727614 - ], - [ - -124.0734317, - 44.6727722 - ], - [ - -124.073436, - 44.6727831 - ], - [ - -124.0734381, - 44.6727905 - ], - [ - -124.0734399, - 44.6728005 - ], - [ - -124.073441, - 44.6728139 - ], - [ - -124.0734406, - 44.672832 - ], - [ - -124.0734379, - 44.6728562 - ], - [ - -124.0734338, - 44.6728883 - ], - [ - -124.0734328, - 44.6729063 - ], - [ - -124.073433, - 44.6729157 - ], - [ - -124.073434, - 44.6729256 - ], - [ - -124.0734361, - 44.672936 - ], - [ - -124.0734397, - 44.6729468 - ], - [ - -124.0734454, - 44.672958 - ], - [ - -124.0734513, - 44.6729666 - ], - [ - -124.0734578, - 44.672975 - ], - [ - -124.0734626, - 44.6729806 - ], - [ - -124.0734692, - 44.6729879 - ], - [ - -124.0734965, - 44.673017 - ], - [ - -124.0735038, - 44.6730254 - ], - [ - -124.0735113, - 44.6730353 - ], - [ - -124.0735199, - 44.6730475 - ], - [ - -124.0735286, - 44.6730603 - ], - [ - -124.0735341, - 44.6730691 - ], - [ - -124.0735407, - 44.6730809 - ], - [ - -124.073544, - 44.6730876 - ], - [ - -124.0735471, - 44.6730953 - ], - [ - -124.0735498, - 44.6731041 - ], - [ - -124.0735508, - 44.6731086 - ], - [ - -124.0735515, - 44.6731135 - ], - [ - -124.0735517, - 44.6731186 - ], - [ - -124.0735513, - 44.6731239 - ], - [ - -124.0735502, - 44.6731294 - ], - [ - -124.0735472, - 44.673137 - ], - [ - -124.0735427, - 44.6731443 - ], - [ - -124.073539, - 44.6731489 - ], - [ - -124.0735331, - 44.6731548 - ], - [ - -124.073524, - 44.6731623 - ], - [ - -124.0735182, - 44.6731664 - ], - [ - -124.0735111, - 44.673171 - ], - [ - -124.0735024, - 44.6731761 - ], - [ - -124.073492, - 44.6731818 - ], - [ - -124.0734795, - 44.6731883 - ], - [ - -124.0734452, - 44.6732055 - ], - [ - -124.0734262, - 44.6732157 - ], - [ - -124.0734166, - 44.6732214 - ], - [ - -124.0734069, - 44.6732278 - ], - [ - -124.0733975, - 44.6732349 - ], - [ - -124.0733886, - 44.6732429 - ], - [ - -124.0733816, - 44.6732496 - ], - [ - -124.0733742, - 44.6732567 - ], - [ - -124.0733588, - 44.6732713 - ], - [ - -124.0733488, - 44.6732814 - ], - [ - -124.0733436, - 44.6732872 - ], - [ - -124.073338, - 44.6732939 - ], - [ - -124.0733325, - 44.6733015 - ], - [ - -124.0733301, - 44.6733055 - ], - [ - -124.0733278, - 44.6733098 - ], - [ - -124.0733259, - 44.6733143 - ], - [ - -124.0733245, - 44.6733191 - ], - [ - -124.0733238, - 44.6733241 - ], - [ - -124.073324, - 44.6733293 - ], - [ - -124.0733245, - 44.6733319 - ], - [ - -124.0733253, - 44.6733346 - ], - [ - -124.0733266, - 44.6733373 - ], - [ - -124.0733298, - 44.6733425 - ], - [ - -124.0733338, - 44.6733476 - ], - [ - -124.0733369, - 44.673351 - ], - [ - -124.0733416, - 44.6733554 - ], - [ - -124.0733487, - 44.673361 - ], - [ - -124.0733531, - 44.6733642 - ], - [ - -124.0733584, - 44.6733677 - ], - [ - -124.0733648, - 44.6733715 - ], - [ - -124.0733725, - 44.6733757 - ], - [ - -124.0733817, - 44.6733802 - ], - [ - -124.0733926, - 44.6733849 - ], - [ - -124.0734054, - 44.6733896 - ], - [ - -124.0734123, - 44.6733918 - ], - [ - -124.0734196, - 44.673394 - ], - [ - -124.0734273, - 44.6733959 - ], - [ - -124.0734353, - 44.6733977 - ], - [ - -124.0734443, - 44.673399 - ], - [ - -124.0734534, - 44.6733996 - ], - [ - -124.0734595, - 44.6733995 - ], - [ - -124.0734677, - 44.673399 - ], - [ - -124.0734787, - 44.6733975 - ], - [ - -124.073485, - 44.6733964 - ], - [ - -124.0734922, - 44.6733947 - ], - [ - -124.0735005, - 44.6733925 - ], - [ - -124.0735098, - 44.6733896 - ], - [ - -124.0735205, - 44.6733858 - ], - [ - -124.0735326, - 44.673381 - ], - [ - -124.0735461, - 44.6733751 - ], - [ - -124.0735611, - 44.6733681 - ], - [ - -124.0735776, - 44.6733601 - ], - [ - -124.0735859, - 44.6733559 - ], - [ - -124.0735941, - 44.6733514 - ], - [ - -124.0736016, - 44.6733462 - ], - [ - -124.0736064, - 44.6733424 - ], - [ - -124.0736125, - 44.673337 - ], - [ - -124.0736201, - 44.6733294 - ], - [ - -124.0736298, - 44.6733187 - ], - [ - -124.0736421, - 44.6733042 - ], - [ - -124.0736492, - 44.6732963 - ], - [ - -124.0736575, - 44.6732877 - ], - [ - -124.0736621, - 44.6732835 - ], - [ - -124.0736672, - 44.6732794 - ], - [ - -124.0736728, - 44.6732754 - ], - [ - -124.0736791, - 44.6732717 - ], - [ - -124.0736863, - 44.6732686 - ], - [ - -124.0736902, - 44.6732673 - ], - [ - -124.0736943, - 44.6732663 - ], - [ - -124.0736986, - 44.6732657 - ], - [ - -124.0737017, - 44.6732654 - ], - [ - -124.0737059, - 44.6732653 - ], - [ - -124.0737118, - 44.6732656 - ], - [ - -124.0737152, - 44.6732658 - ], - [ - -124.0737192, - 44.6732663 - ], - [ - -124.0737238, - 44.673267 - ], - [ - -124.0737292, - 44.673268 - ], - [ - -124.0737353, - 44.6732693 - ], - [ - -124.0737422, - 44.6732711 - ], - [ - -124.07375, - 44.6732734 - ], - [ - -124.0737585, - 44.6732762 - ], - [ - -124.0737628, - 44.6732778 - ], - [ - -124.0737671, - 44.6732794 - ], - [ - -124.0737715, - 44.6732812 - ], - [ - -124.0737787, - 44.6732848 - ], - [ - -124.0737855, - 44.673289 - ], - [ - -124.0737899, - 44.6732922 - ], - [ - -124.0737955, - 44.6732969 - ], - [ - -124.0738026, - 44.6733037 - ], - [ - -124.0738117, - 44.6733136 - ], - [ - -124.0738232, - 44.6733277 - ], - [ - -124.0738378, - 44.6733465 - ], - [ - -124.0738462, - 44.6733565 - ], - [ - -124.0738507, - 44.6733615 - ], - [ - -124.0738556, - 44.6733665 - ], - [ - -124.0738609, - 44.6733712 - ], - [ - -124.0738667, - 44.6733756 - ], - [ - -124.0738732, - 44.6733794 - ], - [ - -124.0738766, - 44.673381 - ], - [ - -124.0738803, - 44.6733823 - ], - [ - -124.0738841, - 44.6733833 - ], - [ - -124.0738882, - 44.6733839 - ], - [ - -124.073891, - 44.6733841 - ], - [ - -124.0738939, - 44.6733841 - ], - [ - -124.0739001, - 44.6733839 - ], - [ - -124.0739044, - 44.6733835 - ], - [ - -124.0739105, - 44.6733826 - ], - [ - -124.073919, - 44.6733808 - ], - [ - -124.0739239, - 44.6733795 - ], - [ - -124.0739297, - 44.6733778 - ], - [ - -124.0739363, - 44.6733756 - ], - [ - -124.0739437, - 44.6733727 - ], - [ - -124.0739521, - 44.673369 - ], - [ - -124.0739613, - 44.6733642 - ], - [ - -124.0739659, - 44.6733615 - ], - [ - -124.0739707, - 44.6733584 - ], - [ - -124.0739754, - 44.6733549 - ], - [ - -124.07398, - 44.6733511 - ], - [ - -124.0739844, - 44.6733468 - ], - [ - -124.0739884, - 44.673342 - ], - [ - -124.0739941, - 44.6733341 - ], - [ - -124.0739993, - 44.6733261 - ], - [ - -124.0740083, - 44.6733099 - ], - [ - -124.0740135, - 44.673299 - ], - [ - -124.0740196, - 44.6732845 - ], - [ - -124.0740406, - 44.6732263 - ], - [ - -124.0740472, - 44.6732099 - ], - [ - -124.0740562, - 44.6731913 - ], - [ - -124.0740617, - 44.6731816 - ], - [ - -124.0740699, - 44.6731676 - ], - [ - -124.0740775, - 44.6731537 - ], - [ - -124.0740926, - 44.6731259 - ], - [ - -124.0741033, - 44.6731082 - ], - [ - -124.0741102, - 44.6730979 - ], - [ - -124.074119, - 44.6730864 - ], - [ - -124.0741305, - 44.6730732 - ], - [ - -124.0741374, - 44.6730663 - ], - [ - -124.0741454, - 44.673059 - ], - [ - -124.0741547, - 44.6730512 - ], - [ - -124.0741657, - 44.673043 - ], - [ - -124.0741809, - 44.6730328 - ], - [ - -124.0741966, - 44.6730236 - ], - [ - -124.0742072, - 44.673018 - ], - [ - -124.0742216, - 44.6730113 - ], - [ - -124.0742524, - 44.6729995 - ], - [ - -124.0742654, - 44.6729955 - ], - [ - -124.0742805, - 44.6729914 - ], - [ - -124.0742978, - 44.6729875 - ], - [ - -124.0743178, - 44.6729838 - ], - [ - -124.0743409, - 44.6729807 - ], - [ - -124.0743673, - 44.6729782 - ], - [ - -124.0743975, - 44.6729767 - ], - [ - -124.0744254, - 44.6729763 - ], - [ - -124.0744535, - 44.6729766 - ], - [ - -124.0744724, - 44.6729773 - ], - [ - -124.0744976, - 44.6729789 - ], - [ - -124.0745314, - 44.6729822 - ], - [ - -124.0745506, - 44.6729848 - ], - [ - -124.0745726, - 44.6729884 - ], - [ - -124.0745976, - 44.6729934 - ], - [ - -124.074626, - 44.6730003 - ], - [ - -124.074641, - 44.6730046 - ], - [ - -124.074657, - 44.6730096 - ], - [ - -124.0746951, - 44.6730226 - ], - [ - -124.0747317, - 44.673036 - ], - [ - -124.0747553, - 44.6730453 - ], - [ - -124.0747858, - 44.6730583 - ], - [ - -124.0748028, - 44.6730661 - ], - [ - -124.0748217, - 44.6730754 - ], - [ - -124.0748429, - 44.6730867 - ], - [ - -124.0748665, - 44.6731006 - ], - [ - -124.0749966, - 44.6731818 - ], - [ - -124.0752633, - 44.6733497 - ], - [ - -124.0753087, - 44.6733789 - ], - [ - -124.0753682, - 44.6734191 - ], - [ - -124.0754016, - 44.6734431 - ], - [ - -124.0754143, - 44.6734534 - ], - [ - -124.0754263, - 44.6734651 - ], - [ - -124.0754324, - 44.6734718 - ], - [ - -124.0754407, - 44.6734823 - ], - [ - -124.0754505, - 44.6734967 - ], - [ - -124.0754617, - 44.6735167 - ], - [ - -124.0754674, - 44.6735285 - ], - [ - -124.0754733, - 44.6735421 - ], - [ - -124.0754797, - 44.6735578 - ], - [ - -124.0754961, - 44.6735998 - ], - [ - -124.0755065, - 44.6736233 - ], - [ - -124.0755086, - 44.6736281 - ], - [ - -124.0755104, - 44.673633 - ], - [ - -124.0755132, - 44.6736431 - ], - [ - -124.0755147, - 44.6736499 - ], - [ - -124.07552, - 44.6736773 - ], - [ - -124.075522, - 44.673685 - ], - [ - -124.075525, - 44.6736934 - ], - [ - -124.075527, - 44.6736978 - ], - [ - -124.0755295, - 44.6737024 - ], - [ - -124.0755326, - 44.6737071 - ], - [ - -124.0755365, - 44.673712 - ], - [ - -124.0755414, - 44.6737169 - ], - [ - -124.0755514, - 44.6737255 - ], - [ - -124.0755616, - 44.6737339 - ], - [ - -124.0755824, - 44.6737503 - ], - [ - -124.0755961, - 44.6737614 - ], - [ - -124.0756455, - 44.6738029 - ], - [ - -124.0756622, - 44.6738167 - ], - [ - -124.0756664, - 44.6738201 - ], - [ - -124.075671, - 44.6738236 - ], - [ - -124.0756807, - 44.6738306 - ], - [ - -124.0756877, - 44.6738352 - ], - [ - -124.0756974, - 44.6738413 - ], - [ - -124.0757109, - 44.673849 - ], - [ - -124.0757189, - 44.673853 - ], - [ - -124.0757281, - 44.6738572 - ], - [ - -124.0757385, - 44.6738613 - ], - [ - -124.0757441, - 44.6738631 - ], - [ - -124.0757499, - 44.6738648 - ], - [ - -124.0757561, - 44.6738663 - ], - [ - -124.0757625, - 44.6738674 - ], - [ - -124.0757691, - 44.673868 - ], - [ - -124.0757759, - 44.673868 - ], - [ - -124.0757793, - 44.6738677 - ], - [ - -124.0757827, - 44.6738672 - ], - [ - -124.0757861, - 44.6738664 - ], - [ - -124.0757878, - 44.6738659 - ], - [ - -124.0757895, - 44.6738653 - ], - [ - -124.0757927, - 44.6738638 - ], - [ - -124.0757948, - 44.6738626 - ], - [ - -124.0757976, - 44.6738608 - ], - [ - -124.0758012, - 44.6738581 - ], - [ - -124.0758031, - 44.6738564 - ], - [ - -124.0758054, - 44.6738543 - ], - [ - -124.0758079, - 44.6738518 - ], - [ - -124.0758106, - 44.6738488 - ], - [ - -124.0758137, - 44.6738453 - ], - [ - -124.0758217, - 44.6738356 - ], - [ - -124.075826, - 44.6738302 - ], - [ - -124.0758283, - 44.6738275 - ], - [ - -124.0758323, - 44.6738223 - ], - [ - -124.0758356, - 44.6738168 - ], - [ - -124.0758375, - 44.6738131 - ], - [ - -124.0758398, - 44.6738079 - ], - [ - -124.0758423, - 44.6738008 - ], - [ - -124.0758452, - 44.6737913 - ], - [ - -124.0758486, - 44.6737787 - ], - [ - -124.0758507, - 44.6737717 - ], - [ - -124.0758535, - 44.673764 - ], - [ - -124.0758552, - 44.6737602 - ], - [ - -124.0758572, - 44.6737563 - ], - [ - -124.0758598, - 44.6737523 - ], - [ - -124.0758629, - 44.6737484 - ], - [ - -124.0758668, - 44.6737447 - ], - [ - -124.075869, - 44.6737432 - ], - [ - -124.0758716, - 44.6737419 - ], - [ - -124.0758735, - 44.6737412 - ], - [ - -124.0758763, - 44.6737405 - ], - [ - -124.0758803, - 44.6737399 - ], - [ - -124.0758827, - 44.6737398 - ], - [ - -124.0758856, - 44.6737397 - ], - [ - -124.0758891, - 44.6737398 - ], - [ - -124.0758931, - 44.6737401 - ], - [ - -124.075898, - 44.6737408 - ], - [ - -124.0759036, - 44.6737418 - ], - [ - -124.07591, - 44.6737434 - ], - [ - -124.0759174, - 44.6737457 - ], - [ - -124.0759211, - 44.6737471 - ], - [ - -124.0759252, - 44.6737487 - ], - [ - -124.0759292, - 44.6737506 - ], - [ - -124.0759334, - 44.6737527 - ], - [ - -124.0759375, - 44.6737551 - ], - [ - -124.0759415, - 44.6737577 - ], - [ - -124.0759452, - 44.6737607 - ], - [ - -124.0759468, - 44.6737622 - ], - [ - -124.0759484, - 44.6737639 - ], - [ - -124.0759607, - 44.6737783 - ], - [ - -124.0759727, - 44.6737929 - ], - [ - -124.0759963, - 44.673822 - ], - [ - -124.0760124, - 44.6738413 - ], - [ - -124.0760219, - 44.6738522 - ], - [ - -124.0762081, - 44.6740598 - ], - [ - -124.0763947, - 44.6742726 - ], - [ - -124.0764209, - 44.6743018 - ], - [ - -124.076448, - 44.6743305 - ], - [ - -124.0764668, - 44.6743493 - ], - [ - -124.0764931, - 44.6743737 - ], - [ - -124.0765088, - 44.6743874 - ], - [ - -124.0765275, - 44.6744027 - ], - [ - -124.0765499, - 44.6744197 - ], - [ - -124.0765772, - 44.6744385 - ], - [ - -124.0765886, - 44.6744454 - ], - [ - -124.0766003, - 44.6744517 - ], - [ - -124.0766084, - 44.6744556 - ], - [ - -124.0766194, - 44.6744604 - ], - [ - -124.0766344, - 44.6744663 - ], - [ - -124.076655, - 44.6744735 - ], - [ - -124.0767207, - 44.6744936 - ], - [ - -124.0767314, - 44.6744968 - ], - [ - -124.0767422, - 44.6744996 - ], - [ - -124.0767641, - 44.6745046 - ], - [ - -124.0768085, - 44.6745134 - ], - [ - -124.0768381, - 44.6745195 - ], - [ - -124.0768548, - 44.6745236 - ], - [ - -124.0768736, - 44.6745289 - ], - [ - -124.0768835, - 44.6745322 - ], - [ - -124.0769013, - 44.6745388 - ], - [ - -124.0769185, - 44.674546 - ], - [ - -124.0769296, - 44.6745512 - ], - [ - -124.0769439, - 44.6745587 - ], - [ - -124.0769518, - 44.6745631 - ], - [ - -124.0769605, - 44.6745685 - ], - [ - -124.07697, - 44.6745749 - ], - [ - -124.0769802, - 44.6745827 - ], - [ - -124.0769964, - 44.6745974 - ], - [ - -124.0770072, - 44.6746097 - ], - [ - -124.0770385, - 44.6746512 - ], - [ - -124.0770675, - 44.6746931 - ], - [ - -124.0770857, - 44.6747212 - ], - [ - -124.0771089, - 44.6747589 - ], - [ - -124.077138, - 44.6748095 - ], - [ - -124.0771748, - 44.6748779 - ], - [ - -124.0773307, - 44.675193 - ], - [ - -124.0773414, - 44.6752146 - ], - [ - -124.0773514, - 44.6752368 - ], - [ - -124.0773712, - 44.6752819 - ], - [ - -124.0773855, - 44.6753115 - ], - [ - -124.0773946, - 44.6753279 - ], - [ - -124.0774061, - 44.6753462 - ], - [ - -124.077421, - 44.675366 - ], - [ - -124.0774299, - 44.675376 - ], - [ - -124.0774401, - 44.6753863 - ], - [ - -124.077452, - 44.6753966 - ], - [ - -124.0774658, - 44.675407 - ], - [ - -124.0774822, - 44.675417 - ], - [ - -124.0776802, - 44.6755279 - ], - [ - -124.0779121, - 44.6756129 - ], - [ - -124.0779317, - 44.6756201 - ], - [ - -124.0779514, - 44.6756275 - ], - [ - -124.0779644, - 44.6756327 - ], - [ - -124.0779812, - 44.6756401 - ], - [ - -124.0779904, - 44.6756447 - ], - [ - -124.0780006, - 44.6756503 - ], - [ - -124.0780116, - 44.6756572 - ], - [ - -124.0780172, - 44.6756611 - ], - [ - -124.0780228, - 44.6756655 - ], - [ - -124.0780286, - 44.6756704 - ], - [ - -124.0780343, - 44.6756759 - ], - [ - -124.0780399, - 44.6756823 - ], - [ - -124.078046, - 44.6756902 - ], - [ - -124.0780517, - 44.6756982 - ], - [ - -124.0780616, - 44.6757144 - ], - [ - -124.0780673, - 44.6757254 - ], - [ - -124.0780739, - 44.6757401 - ], - [ - -124.0780814, - 44.6757599 - ], - [ - -124.0781065, - 44.67584 - ], - [ - -124.078112, - 44.6758574 - ], - [ - -124.0781165, - 44.6758748 - ], - [ - -124.0781248, - 44.6759099 - ], - [ - -124.0781311, - 44.6759333 - ], - [ - -124.0781355, - 44.6759465 - ], - [ - -124.0781416, - 44.6759617 - ], - [ - -124.0781444, - 44.6759673 - ], - [ - -124.0781478, - 44.6759727 - ], - [ - -124.0781503, - 44.6759762 - ], - [ - -124.078154, - 44.6759808 - ], - [ - -124.0781595, - 44.6759867 - ], - [ - -124.078163, - 44.6759899 - ], - [ - -124.0781672, - 44.6759934 - ], - [ - -124.0781723, - 44.6759973 - ], - [ - -124.0781785, - 44.6760015 - ], - [ - -124.0781861, - 44.676006 - ], - [ - -124.0781953, - 44.6760107 - ], - [ - -124.0782004, - 44.676013 - ], - [ - -124.0782061, - 44.6760153 - ], - [ - -124.0782123, - 44.6760175 - ], - [ - -124.078219, - 44.6760197 - ], - [ - -124.0782239, - 44.676021 - ], - [ - -124.0782287, - 44.676022 - ], - [ - -124.0782383, - 44.6760232 - ], - [ - -124.0782447, - 44.6760234 - ], - [ - -124.0782532, - 44.6760231 - ], - [ - -124.0782645, - 44.6760218 - ], - [ - -124.0782709, - 44.6760206 - ], - [ - -124.0782783, - 44.6760189 - ], - [ - -124.0782867, - 44.6760166 - ], - [ - -124.0783539, - 44.6759934 - ], - [ - -124.0783628, - 44.6759908 - ], - [ - -124.0783723, - 44.6759886 - ], - [ - -124.0783825, - 44.675987 - ], - [ - -124.0783934, - 44.6759861 - ], - [ - -124.078399, - 44.6759861 - ], - [ - -124.0784048, - 44.6759864 - ], - [ - -124.0784358, - 44.6759893 - ], - [ - -124.0784667, - 44.6759928 - ], - [ - -124.0784873, - 44.6759956 - ], - [ - -124.0785147, - 44.676 - ], - [ - -124.0785304, - 44.676003 - ], - [ - -124.0785482, - 44.676007 - ], - [ - -124.0785687, - 44.6760121 - ], - [ - -124.0785921, - 44.6760189 - ], - [ - -124.0786034, - 44.6760227 - ], - [ - -124.0786179, - 44.6760278 - ], - [ - -124.0786351, - 44.6760346 - ], - [ - -124.0786514, - 44.6760418 - ], - [ - -124.0786619, - 44.6760467 - ], - [ - -124.0786752, - 44.6760536 - ], - [ - -124.0786919, - 44.6760633 - ], - [ - -124.078701, - 44.6760691 - ], - [ - -124.0787111, - 44.676076 - ], - [ - -124.078722, - 44.6760843 - ], - [ - -124.078734, - 44.6760943 - ], - [ - -124.0787469, - 44.6761064 - ], - [ - -124.0787536, - 44.6761131 - ], - [ - -124.0787592, - 44.67612 - ], - [ - -124.0787637, - 44.6761271 - ], - [ - -124.078766, - 44.6761319 - ], - [ - -124.0787685, - 44.6761385 - ], - [ - -124.0787707, - 44.6761476 - ], - [ - -124.078772, - 44.67616 - ], - [ - -124.0787722, - 44.6761672 - ], - [ - -124.07877, - 44.6762123 - ], - [ - -124.0787707, - 44.6762278 - ], - [ - -124.0787718, - 44.6762355 - ], - [ - -124.0787739, - 44.6762437 - ], - [ - -124.0787771, - 44.6762522 - ], - [ - -124.078782, - 44.676261 - ], - [ - -124.0787852, - 44.6762654 - ], - [ - -124.0787928, - 44.6762749 - ], - [ - -124.0788009, - 44.6762841 - ], - [ - -124.0788065, - 44.67629 - ], - [ - -124.0788145, - 44.6762976 - ], - [ - -124.0788194, - 44.6763017 - ], - [ - -124.0788251, - 44.6763063 - ], - [ - -124.0788321, - 44.6763112 - ], - [ - -124.0788406, - 44.6763163 - ], - [ - -124.0788454, - 44.6763189 - ], - [ - -124.0788507, - 44.6763215 - ], - [ - -124.0788567, - 44.676324 - ], - [ - -124.0788633, - 44.6763265 - ], - [ - -124.0788707, - 44.6763289 - ], - [ - -124.0788768, - 44.6763304 - ], - [ - -124.078883, - 44.6763312 - ], - [ - -124.0788871, - 44.6763314 - ], - [ - -124.0788926, - 44.6763313 - ], - [ - -124.0788999, - 44.6763306 - ], - [ - -124.0789041, - 44.6763299 - ], - [ - -124.0789089, - 44.676329 - ], - [ - -124.0789143, - 44.6763277 - ], - [ - -124.078958, - 44.6763147 - ], - [ - -124.0789638, - 44.6763134 - ], - [ - -124.0789699, - 44.6763122 - ], - [ - -124.0789764, - 44.6763115 - ], - [ - -124.0789833, - 44.6763113 - ], - [ - -124.0789869, - 44.6763114 - ], - [ - -124.0789906, - 44.6763118 - ], - [ - -124.0789943, - 44.6763124 - ], - [ - -124.0790419, - 44.6763222 - ], - [ - -124.0790894, - 44.6763324 - ], - [ - -124.0791843, - 44.6763535 - ], - [ - -124.0791886, - 44.6763546 - ], - [ - -124.079193, - 44.676356 - ], - [ - -124.0791959, - 44.6763571 - ], - [ - -124.0791998, - 44.6763587 - ], - [ - -124.0792156, - 44.6763655 - ], - [ - -124.07922, - 44.6763672 - ], - [ - -124.079225, - 44.6763691 - ], - [ - -124.0792276, - 44.6763699 - ], - [ - -124.0792304, - 44.6763706 - ], - [ - -124.0792334, - 44.6763713 - ], - [ - -124.0792364, - 44.6763717 - ], - [ - -124.0792397, - 44.676372 - ], - [ - -124.079243, - 44.6763718 - ], - [ - -124.0792447, - 44.6763716 - ], - [ - -124.0792464, - 44.6763713 - ], - [ - -124.0792482, - 44.6763708 - ], - [ - -124.07925, - 44.6763701 - ], - [ - -124.0792535, - 44.6763683 - ], - [ - -124.0792566, - 44.6763663 - ], - [ - -124.0792584, - 44.6763647 - ], - [ - -124.0792604, - 44.6763625 - ], - [ - -124.0792626, - 44.6763593 - ], - [ - -124.0792637, - 44.6763573 - ], - [ - -124.0792646, - 44.6763549 - ], - [ - -124.0792655, - 44.676352 - ], - [ - -124.0792663, - 44.6763486 - ], - [ - -124.0792668, - 44.6763445 - ], - [ - -124.0792671, - 44.6763396 - ], - [ - -124.0792672, - 44.6763339 - ], - [ - -124.0792668, - 44.6763182 - ], - [ - -124.0792669, - 44.6763093 - ], - [ - -124.0792672, - 44.6763048 - ], - [ - -124.079268, - 44.6763001 - ], - [ - -124.0792692, - 44.6762954 - ], - [ - -124.0792946, - 44.6762117 - ], - [ - -124.0792991, - 44.6761999 - ], - [ - -124.0793051, - 44.6761865 - ], - [ - -124.0793131, - 44.6761713 - ], - [ - -124.0793181, - 44.6761633 - ], - [ - -124.079324, - 44.6761549 - ], - [ - -124.0793309, - 44.676146 - ], - [ - -124.0793364, - 44.6761403 - ], - [ - -124.0793426, - 44.6761353 - ], - [ - -124.0793471, - 44.6761324 - ], - [ - -124.0793536, - 44.6761289 - ], - [ - -124.0793628, - 44.6761249 - ], - [ - -124.0793685, - 44.6761229 - ], - [ - -124.0793751, - 44.6761208 - ], - [ - -124.079383, - 44.6761187 - ], - [ - -124.0793923, - 44.6761165 - ], - [ - -124.0794032, - 44.6761143 - ], - [ - -124.0794328, - 44.6761088 - ], - [ - -124.0794494, - 44.6761053 - ], - [ - -124.079458, - 44.6761032 - ], - [ - -124.0794669, - 44.6761006 - ], - [ - -124.079476, - 44.6760974 - ], - [ - -124.0794851, - 44.6760934 - ], - [ - -124.0794955, - 44.6760885 - ], - [ - -124.0795063, - 44.6760838 - ], - [ - -124.0795284, - 44.6760743 - ], - [ - -124.079543, - 44.6760678 - ], - [ - -124.079551, - 44.6760638 - ], - [ - -124.0795597, - 44.6760591 - ], - [ - -124.0795689, - 44.6760533 - ], - [ - -124.0795735, - 44.6760501 - ], - [ - -124.079578, - 44.6760465 - ], - [ - -124.0795824, - 44.6760424 - ], - [ - -124.0795865, - 44.6760378 - ], - [ - -124.0795903, - 44.6760325 - ], - [ - -124.0795934, - 44.6760266 - ], - [ - -124.0795982, - 44.6760152 - ], - [ - -124.0796026, - 44.6760039 - ], - [ - -124.0796107, - 44.6759811 - ], - [ - -124.0796253, - 44.6759354 - ], - [ - -124.0796356, - 44.675905 - ], - [ - -124.0796635, - 44.6758238 - ], - [ - -124.0796739, - 44.6757968 - ], - [ - -124.0796805, - 44.6757813 - ], - [ - -124.0796889, - 44.6757636 - ], - [ - -124.0796961, - 44.6757513 - ], - [ - -124.0797048, - 44.6757391 - ], - [ - -124.0797115, - 44.6757312 - ], - [ - -124.0797214, - 44.6757208 - ], - [ - -124.0797359, - 44.6757076 - ], - [ - -124.0797448, - 44.6757004 - ], - [ - -124.0797555, - 44.6756925 - ], - [ - -124.0797683, - 44.6756839 - ], - [ - -124.0797833, - 44.6756749 - ], - [ - -124.0798009, - 44.6756658 - ], - [ - -124.0798104, - 44.6756615 - ], - [ - -124.0798205, - 44.6756573 - ], - [ - -124.0798313, - 44.6756533 - ], - [ - -124.0798426, - 44.6756498 - ], - [ - -124.0798545, - 44.6756468 - ], - [ - -124.0798668, - 44.6756446 - ], - [ - -124.0798752, - 44.6756439 - ], - [ - -124.0798839, - 44.6756439 - ], - [ - -124.0798898, - 44.6756444 - ], - [ - -124.0798978, - 44.6756455 - ], - [ - -124.0799087, - 44.6756478 - ], - [ - -124.0799149, - 44.6756496 - ], - [ - -124.0799222, - 44.6756519 - ], - [ - -124.0799305, - 44.6756549 - ], - [ - -124.07994, - 44.6756589 - ], - [ - -124.0799509, - 44.6756641 - ], - [ - -124.0799633, - 44.6756706 - ], - [ - -124.0799772, - 44.6756789 - ], - [ - -124.0799927, - 44.6756891 - ], - [ - -124.0800095, - 44.6757015 - ], - [ - -124.0800181, - 44.6757083 - ], - [ - -124.0800307, - 44.6757192 - ], - [ - -124.0800421, - 44.6757302 - ], - [ - -124.080049, - 44.6757376 - ], - [ - -124.0800568, - 44.6757465 - ], - [ - -124.0800676, - 44.6757606 - ], - [ - -124.0800792, - 44.6757783 - ], - [ - -124.0800851, - 44.6757885 - ], - [ - -124.0800913, - 44.6758002 - ], - [ - -124.0800978, - 44.6758137 - ], - [ - -124.0801048, - 44.6758293 - ], - [ - -124.0801231, - 44.6758714 - ], - [ - -124.0801284, - 44.6758855 - ], - [ - -124.080132, - 44.6758998 - ], - [ - -124.0801336, - 44.6759094 - ], - [ - -124.080135, - 44.6759223 - ], - [ - -124.0801379, - 44.6759744 - ], - [ - -124.0801396, - 44.6759893 - ], - [ - -124.0801431, - 44.6760063 - ], - [ - -124.0801459, - 44.6760153 - ], - [ - -124.0801496, - 44.6760248 - ], - [ - -124.0801546, - 44.6760349 - ], - [ - -124.0801614, - 44.6760457 - ], - [ - -124.0801703, - 44.676057 - ], - [ - -124.0801778, - 44.6760655 - ], - [ - -124.0801857, - 44.6760743 - ], - [ - -124.0802024, - 44.6760919 - ], - [ - -124.080214, - 44.6761031 - ], - [ - -124.0802208, - 44.6761091 - ], - [ - -124.0802285, - 44.6761153 - ], - [ - -124.0802378, - 44.676122 - ], - [ - -124.0802427, - 44.6761251 - ], - [ - -124.0802479, - 44.6761281 - ], - [ - -124.0802534, - 44.6761308 - ], - [ - -124.0802594, - 44.6761332 - ], - [ - -124.0802657, - 44.6761352 - ], - [ - -124.0802723, - 44.6761365 - ], - [ - -124.0802758, - 44.6761368 - ], - [ - -124.0802793, - 44.6761369 - ], - [ - -124.0802829, - 44.6761367 - ], - [ - -124.080288, - 44.6761359 - ], - [ - -124.0802932, - 44.6761345 - ], - [ - -124.0802967, - 44.6761334 - ], - [ - -124.0803015, - 44.6761315 - ], - [ - -124.0803078, - 44.6761284 - ], - [ - -124.0803115, - 44.6761264 - ], - [ - -124.0803156, - 44.6761239 - ], - [ - -124.0803204, - 44.6761208 - ], - [ - -124.0803258, - 44.676117 - ], - [ - -124.0803318, - 44.6761123 - ], - [ - -124.0803387, - 44.6761067 - ], - [ - -124.0803462, - 44.6761 - ], - [ - -124.0803544, - 44.6760921 - ], - [ - -124.0803632, - 44.6760832 - ], - [ - -124.0803675, - 44.6760786 - ], - [ - -124.0803776, - 44.6760672 - ], - [ - -124.0803872, - 44.6760559 - ], - [ - -124.0804053, - 44.6760332 - ], - [ - -124.0804391, - 44.6759878 - ], - [ - -124.0804618, - 44.6759576 - ], - [ - -124.0804756, - 44.6759404 - ], - [ - -124.0805056, - 44.6759034 - ], - [ - -124.0805361, - 44.6758662 - ], - [ - -124.0805566, - 44.6758421 - ], - [ - -124.0805685, - 44.6758288 - ], - [ - -124.0805822, - 44.6758142 - ], - [ - -124.0805981, - 44.6757986 - ], - [ - -124.0806066, - 44.6757907 - ], - [ - -124.0806074, - 44.6757901 - ], - [ - -124.0806082, - 44.6757897 - ], - [ - -124.0806089, - 44.6757895 - ], - [ - -124.0806097, - 44.6757893 - ], - [ - -124.0806108, - 44.6757892 - ], - [ - -124.0806115, - 44.6757893 - ], - [ - -124.0806123, - 44.6757894 - ], - [ - -124.0806132, - 44.6757897 - ], - [ - -124.0806143, - 44.6757901 - ], - [ - -124.0806156, - 44.6757907 - ], - [ - -124.0806171, - 44.6757915 - ], - [ - -124.0806189, - 44.6757926 - ], - [ - -124.0806209, - 44.6757942 - ], - [ - -124.0806232, - 44.6757961 - ], - [ - -124.0806259, - 44.6757986 - ], - [ - -124.0806289, - 44.6758015 - ], - [ - -124.0806322, - 44.6758049 - ], - [ - -124.0806339, - 44.6758066 - ], - [ - -124.0806357, - 44.6758084 - ], - [ - -124.0806374, - 44.6758101 - ], - [ - -124.0806447, - 44.6758175 - ], - [ - -124.0806514, - 44.6758248 - ], - [ - -124.0806555, - 44.6758297 - ], - [ - -124.0806607, - 44.6758362 - ], - [ - -124.0806669, - 44.675845 - ], - [ - -124.08067, - 44.67585 - ], - [ - -124.0806734, - 44.6758559 - ], - [ - -124.0806767, - 44.6758626 - ], - [ - -124.0806801, - 44.6758705 - ], - [ - -124.0806833, - 44.6758797 - ], - [ - -124.0806847, - 44.6758847 - ], - [ - -124.0806909, - 44.6759111 - ], - [ - -124.0806958, - 44.6759377 - ], - [ - -124.0806983, - 44.6759554 - ], - [ - -124.0807005, - 44.6759791 - ], - [ - -124.0807011, - 44.6759926 - ], - [ - -124.0807011, - 44.676008 - ], - [ - -124.0807002, - 44.6760256 - ], - [ - -124.080674, - 44.6762774 - ], - [ - -124.080667, - 44.6764518 - ], - [ - -124.0806656, - 44.676464 - ], - [ - -124.0806632, - 44.6764766 - ], - [ - -124.080661, - 44.6764847 - ], - [ - -124.0806573, - 44.6764954 - ], - [ - -124.0806547, - 44.6765014 - ], - [ - -124.0806513, - 44.6765082 - ], - [ - -124.0806469, - 44.676516 - ], - [ - -124.0806409, - 44.6765247 - ], - [ - -124.0806331, - 44.6765346 - ], - [ - -124.0806283, - 44.6765398 - ], - [ - -124.0806228, - 44.6765453 - ], - [ - -124.0806165, - 44.6765512 - ], - [ - -124.0806092, - 44.6765574 - ], - [ - -124.0806019, - 44.6765629 - ], - [ - -124.0805943, - 44.6765679 - ], - [ - -124.0805892, - 44.6765709 - ], - [ - -124.0805821, - 44.6765746 - ], - [ - -124.0805726, - 44.6765789 - ], - [ - -124.080567, - 44.6765812 - ], - [ - -124.0805606, - 44.6765835 - ], - [ - -124.0805531, - 44.676586 - ], - [ - -124.0805444, - 44.6765885 - ], - [ - -124.0805343, - 44.676591 - ], - [ - -124.0805227, - 44.6765935 - ], - [ - -124.0805092, - 44.6765961 - ], - [ - -124.0804936, - 44.6765989 - ], - [ - -124.0804763, - 44.6766015 - ], - [ - -124.0804588, - 44.6766034 - ], - [ - -124.0804471, - 44.6766043 - ], - [ - -124.0804313, - 44.676605 - ], - [ - -124.0804222, - 44.6766052 - ], - [ - -124.0804118, - 44.676605 - ], - [ - -124.0804, - 44.6766046 - ], - [ - -124.0803865, - 44.6766035 - ], - [ - -124.0803711, - 44.6766017 - ], - [ - -124.0803629, - 44.6766004 - ], - [ - -124.0803543, - 44.6765988 - ], - [ - -124.080343, - 44.6765963 - ], - [ - -124.080332, - 44.6765935 - ], - [ - -124.0803248, - 44.6765915 - ], - [ - -124.0803155, - 44.6765885 - ], - [ - -124.0803034, - 44.676584 - ], - [ - -124.0802967, - 44.6765812 - ], - [ - -124.0802892, - 44.6765777 - ], - [ - -124.0802809, - 44.6765735 - ], - [ - -124.0802717, - 44.6765683 - ], - [ - -124.0802616, - 44.6765617 - ], - [ - -124.0802564, - 44.676558 - ], - [ - -124.080251, - 44.6765538 - ], - [ - -124.0802454, - 44.6765492 - ], - [ - -124.0802428, - 44.6765467 - ], - [ - -124.0802407, - 44.6765441 - ], - [ - -124.0802395, - 44.6765423 - ], - [ - -124.0802383, - 44.6765399 - ], - [ - -124.0802371, - 44.6765366 - ], - [ - -124.0802361, - 44.676532 - ], - [ - -124.0802358, - 44.6765293 - ], - [ - -124.0802357, - 44.6765262 - ], - [ - -124.0802358, - 44.6765226 - ], - [ - -124.0802361, - 44.6765185 - ], - [ - -124.0802369, - 44.6765074 - ], - [ - -124.0802368, - 44.6765011 - ], - [ - -124.0802364, - 44.6764978 - ], - [ - -124.0802356, - 44.6764943 - ], - [ - -124.0802343, - 44.6764906 - ], - [ - -124.0802323, - 44.6764868 - ], - [ - -124.080231, - 44.6764849 - ], - [ - -124.0802294, - 44.676483 - ], - [ - -124.0802278, - 44.6764811 - ], - [ - -124.0802261, - 44.6764792 - ], - [ - -124.0802225, - 44.6764751 - ], - [ - -124.0802199, - 44.6764721 - ], - [ - -124.0802164, - 44.6764681 - ], - [ - -124.0802114, - 44.6764627 - ], - [ - -124.0802046, - 44.6764557 - ], - [ - -124.0802007, - 44.676452 - ], - [ - -124.0801963, - 44.676448 - ], - [ - -124.0801939, - 44.6764462 - ], - [ - -124.0801915, - 44.6764443 - ], - [ - -124.0801889, - 44.6764426 - ], - [ - -124.0801862, - 44.6764411 - ], - [ - -124.0801835, - 44.6764398 - ], - [ - -124.0801821, - 44.6764393 - ], - [ - -124.0801807, - 44.676439 - ], - [ - -124.0801794, - 44.6764387 - ], - [ - -124.080178, - 44.6764386 - ], - [ - -124.0801766, - 44.6764387 - ], - [ - -124.0801753, - 44.676439 - ], - [ - -124.0801739, - 44.6764395 - ], - [ - -124.0801727, - 44.6764403 - ], - [ - -124.0801714, - 44.6764414 - ], - [ - -124.080169, - 44.676444 - ], - [ - -124.0801666, - 44.6764468 - ], - [ - -124.0801618, - 44.6764528 - ], - [ - -124.0801587, - 44.6764571 - ], - [ - -124.0801546, - 44.6764631 - ], - [ - -124.0801493, - 44.6764715 - ], - [ - -124.0801424, - 44.6764832 - ], - [ - -124.0801337, - 44.676499 - ], - [ - -124.0801289, - 44.6765078 - ], - [ - -124.0801241, - 44.6765173 - ], - [ - -124.0801198, - 44.6765269 - ], - [ - -124.0801115, - 44.676546 - ], - [ - -124.0801057, - 44.6765586 - ], - [ - -124.0801021, - 44.6765657 - ], - [ - -124.0801, - 44.6765694 - ], - [ - -124.0800977, - 44.676573 - ], - [ - -124.0800925, - 44.67658 - ], - [ - -124.0800887, - 44.6765845 - ], - [ - -124.0800833, - 44.6765904 - ], - [ - -124.0800602, - 44.6766137 - ], - [ - -124.0800538, - 44.6766205 - ], - [ - -124.0800471, - 44.6766286 - ], - [ - -124.0800439, - 44.6766331 - ], - [ - -124.0800407, - 44.6766379 - ], - [ - -124.0800369, - 44.676645 - ], - [ - -124.0800337, - 44.6766522 - ], - [ - -124.080032, - 44.6766571 - ], - [ - -124.0800302, - 44.6766637 - ], - [ - -124.0800284, - 44.6766726 - ], - [ - -124.0800278, - 44.6766777 - ], - [ - -124.0800273, - 44.6766835 - ], - [ - -124.0800271, - 44.6766901 - ], - [ - -124.0800273, - 44.6766976 - ], - [ - -124.0800279, - 44.6767059 - ], - [ - -124.0800292, - 44.6767152 - ], - [ - -124.0800298, - 44.6767179 - ], - [ - -124.0800307, - 44.6767205 - ], - [ - -124.080033, - 44.6767257 - ], - [ - -124.080035, - 44.6767292 - ], - [ - -124.0800382, - 44.6767338 - ], - [ - -124.080043, - 44.6767398 - ], - [ - -124.0800652, - 44.6767638 - ], - [ - -124.0800708, - 44.6767707 - ], - [ - -124.0800734, - 44.6767744 - ], - [ - -124.0800758, - 44.6767784 - ], - [ - -124.0800779, - 44.6767826 - ], - [ - -124.0800794, - 44.6767872 - ], - [ - -124.0800805, - 44.6767926 - ], - [ - -124.0800812, - 44.6767981 - ], - [ - -124.0800813, - 44.6768018 - ], - [ - -124.0800812, - 44.6768069 - ], - [ - -124.0800804, - 44.6768138 - ], - [ - -124.0800797, - 44.6768177 - ], - [ - -124.0800786, - 44.6768222 - ], - [ - -124.080077, - 44.6768274 - ], - [ - -124.0800747, - 44.6768332 - ], - [ - -124.0800714, - 44.6768399 - ], - [ - -124.0800695, - 44.6768433 - ], - [ - -124.0800672, - 44.676847 - ], - [ - -124.0800645, - 44.6768508 - ], - [ - -124.0800608, - 44.6768552 - ], - [ - -124.0800564, - 44.676859 - ], - [ - -124.0800532, - 44.6768614 - ], - [ - -124.0800486, - 44.6768642 - ], - [ - -124.0800418, - 44.6768676 - ], - [ - -124.0800319, - 44.6768715 - ], - [ - -124.0800265, - 44.6768732 - ], - [ - -124.0800187, - 44.6768755 - ], - [ - -124.0800103, - 44.6768776 - ], - [ - -124.0800004, - 44.6768798 - ], - [ - -124.0799743, - 44.6768854 - ], - [ - -124.0799602, - 44.6768889 - ], - [ - -124.0799532, - 44.676891 - ], - [ - -124.0799462, - 44.6768936 - ], - [ - -124.0799394, - 44.6768967 - ], - [ - -124.079933, - 44.6769005 - ], - [ - -124.0799301, - 44.6769028 - ], - [ - -124.0799274, - 44.6769052 - ], - [ - -124.0799251, - 44.676908 - ], - [ - -124.079923, - 44.6769111 - ], - [ - -124.0799214, - 44.6769146 - ], - [ - -124.0799163, - 44.6769285 - ], - [ - -124.0799119, - 44.6769424 - ], - [ - -124.0799093, - 44.6769517 - ], - [ - -124.079906, - 44.6769642 - ], - [ - -124.0799019, - 44.6769808 - ], - [ - -124.079894, - 44.677031 - ], - [ - -124.079892, - 44.6770381 - ], - [ - -124.0798906, - 44.6770419 - ], - [ - -124.0798894, - 44.6770447 - ], - [ - -124.0798879, - 44.6770474 - ], - [ - -124.0798842, - 44.6770525 - ], - [ - -124.0798813, - 44.6770557 - ], - [ - -124.0798768, - 44.6770598 - ], - [ - -124.07987, - 44.6770648 - ], - [ - -124.0798658, - 44.6770675 - ], - [ - -124.0798607, - 44.6770705 - ], - [ - -124.0798166, - 44.677093 - ], - [ - -124.0798111, - 44.6770962 - ], - [ - -124.0798056, - 44.6770998 - ], - [ - -124.0798002, - 44.6771039 - ], - [ - -124.079795, - 44.6771086 - ], - [ - -124.0797904, - 44.6771139 - ], - [ - -124.079752, - 44.6771668 - ], - [ - -124.079728, - 44.677199 - ], - [ - -124.0797034, - 44.6772311 - ], - [ - -124.0796865, - 44.6772525 - ], - [ - -124.0796808, - 44.677259 - ], - [ - -124.0796744, - 44.6772651 - ], - [ - -124.0796698, - 44.6772691 - ], - [ - -124.0796633, - 44.6772742 - ], - [ - -124.079654, - 44.6772806 - ], - [ - -124.0796484, - 44.6772841 - ], - [ - -124.0796419, - 44.6772879 - ], - [ - -124.0796343, - 44.677292 - ], - [ - -124.0796254, - 44.6772963 - ], - [ - -124.0796152, - 44.6773009 - ], - [ - -124.0796036, - 44.6773056 - ], - [ - -124.0795975, - 44.6773078 - ], - [ - -124.0795915, - 44.6773096 - ], - [ - -124.0795851, - 44.6773109 - ], - [ - -124.0795807, - 44.6773115 - ], - [ - -124.0795746, - 44.6773121 - ], - [ - -124.0795662, - 44.6773123 - ], - [ - -124.0795612, - 44.6773122 - ], - [ - -124.0795555, - 44.6773118 - ], - [ - -124.0795489, - 44.6773111 - ], - [ - -124.0795414, - 44.6773099 - ], - [ - -124.0795328, - 44.6773081 - ], - [ - -124.0795231, - 44.6773054 - ], - [ - -124.0795181, - 44.6773037 - ], - [ - -124.0795129, - 44.6773017 - ], - [ - -124.0795075, - 44.6772994 - ], - [ - -124.0795019, - 44.6772967 - ], - [ - -124.0794963, - 44.6772935 - ], - [ - -124.0794907, - 44.6772899 - ], - [ - -124.0794853, - 44.6772857 - ], - [ - -124.0794837, - 44.6772844 - ], - [ - -124.0794823, - 44.677283 - ], - [ - -124.0794798, - 44.6772802 - ], - [ - -124.0794783, - 44.6772783 - ], - [ - -124.0794766, - 44.6772757 - ], - [ - -124.0794745, - 44.6772721 - ], - [ - -124.0794675, - 44.677258 - ], - [ - -124.0794651, - 44.6772541 - ], - [ - -124.0794637, - 44.677252 - ], - [ - -124.0794619, - 44.6772499 - ], - [ - -124.0794543, - 44.6772409 - ], - [ - -124.0794469, - 44.677232 - ], - [ - -124.0794416, - 44.6772262 - ], - [ - -124.0794384, - 44.6772229 - ], - [ - -124.0794345, - 44.6772192 - ], - [ - -124.0794296, - 44.677215 - ], - [ - -124.0794268, - 44.6772129 - ], - [ - -124.0794236, - 44.6772105 - ], - [ - -124.0794199, - 44.6772081 - ], - [ - -124.0794157, - 44.6772055 - ], - [ - -124.079409, - 44.6772017 - ], - [ - -124.0794021, - 44.6771982 - ], - [ - -124.0793975, - 44.6771961 - ], - [ - -124.0793914, - 44.6771935 - ], - [ - -124.0793831, - 44.6771904 - ], - [ - -124.0793783, - 44.6771888 - ], - [ - -124.0793729, - 44.6771871 - ], - [ - -124.0793666, - 44.6771855 - ], - [ - -124.0793595, - 44.6771839 - ], - [ - -124.0793513, - 44.6771825 - ], - [ - -124.079342, - 44.6771813 - ], - [ - -124.079337, - 44.6771809 - ], - [ - -124.0793317, - 44.6771807 - ], - [ - -124.0793261, - 44.6771806 - ], - [ - -124.07931, - 44.6771809 - ], - [ - -124.0792938, - 44.6771818 - ], - [ - -124.0792828, - 44.6771829 - ], - [ - -124.0792682, - 44.6771848 - ], - [ - -124.0792486, - 44.6771883 - ], - [ - -124.0792375, - 44.6771907 - ], - [ - -124.0792248, - 44.677194 - ], - [ - -124.0792104, - 44.6771982 - ], - [ - -124.0791943, - 44.6772039 - ], - [ - -124.0791763, - 44.6772114 - ], - [ - -124.079167, - 44.6772158 - ], - [ - -124.0791572, - 44.6772209 - ], - [ - -124.079147, - 44.6772267 - ], - [ - -124.0791365, - 44.6772334 - ], - [ - -124.0791233, - 44.6772428 - ], - [ - -124.0791112, - 44.6772522 - ], - [ - -124.0791036, - 44.6772586 - ], - [ - -124.0790941, - 44.6772672 - ], - [ - -124.0790822, - 44.6772786 - ], - [ - -124.0790671, - 44.6772939 - ], - [ - -124.0790473, - 44.6773142 - ], - [ - -124.0790354, - 44.6773257 - ], - [ - -124.0790209, - 44.6773386 - ], - [ - -124.0789854, - 44.6773692 - ], - [ - -124.07895, - 44.6773994 - ], - [ - -124.0789253, - 44.6774191 - ], - [ - -124.0789105, - 44.6774301 - ], - [ - -124.0788927, - 44.6774424 - ], - [ - -124.0788711, - 44.6774562 - ], - [ - -124.0788588, - 44.6774634 - ], - [ - -124.0788496, - 44.6774682 - ], - [ - -124.07884, - 44.6774723 - ], - [ - -124.0788334, - 44.6774747 - ], - [ - -124.078812, - 44.6774806 - ], - [ - -124.0788048, - 44.677482 - ], - [ - -124.0787964, - 44.6774833 - ], - [ - -124.0787867, - 44.6774845 - ], - [ - -124.0787755, - 44.6774853 - ], - [ - -124.0787627, - 44.6774858 - ], - [ - -124.078748, - 44.6774857 - ], - [ - -124.0787312, - 44.6774849 - ], - [ - -124.0787124, - 44.677483 - ], - [ - -124.0787026, - 44.6774817 - ], - [ - -124.0786924, - 44.6774801 - ], - [ - -124.0786507, - 44.6774727 - ], - [ - -124.078609, - 44.6774645 - ], - [ - -124.0785813, - 44.6774586 - ], - [ - -124.0785444, - 44.6774504 - ], - [ - -124.0784951, - 44.6774387 - ], - [ - -124.0784431, - 44.6774267 - ], - [ - -124.0783916, - 44.6774147 - ], - [ - -124.0783578, - 44.6774059 - ], - [ - -124.0783386, - 44.6774004 - ], - [ - -124.078317, - 44.6773933 - ], - [ - -124.0782925, - 44.6773843 - ], - [ - -124.0782796, - 44.677379 - ], - [ - -124.078266, - 44.6773728 - ], - [ - -124.0782595, - 44.6773696 - ], - [ - -124.0782533, - 44.6773662 - ], - [ - -124.0782417, - 44.677359 - ], - [ - -124.0782345, - 44.6773539 - ], - [ - -124.0782256, - 44.6773467 - ], - [ - -124.0782146, - 44.6773366 - ], - [ - -124.0782088, - 44.6773306 - ], - [ - -124.0782024, - 44.6773235 - ], - [ - -124.0781955, - 44.6773152 - ], - [ - -124.078188, - 44.6773056 - ], - [ - -124.0781797, - 44.6772945 - ], - [ - -124.0781577, - 44.6772647 - ], - [ - -124.0781513, - 44.6772559 - ], - [ - -124.0781454, - 44.6772471 - ], - [ - -124.0781347, - 44.677229 - ], - [ - -124.0781281, - 44.6772168 - ], - [ - -124.0781031, - 44.6771676 - ], - [ - -124.0780951, - 44.6771537 - ], - [ - -124.078085, - 44.6771379 - ], - [ - -124.078079, - 44.6771297 - ], - [ - -124.078072, - 44.677121 - ], - [ - -124.0780648, - 44.6771131 - ], - [ - -124.078057, - 44.6771056 - ], - [ - -124.0780514, - 44.6771008 - ], - [ - -124.0780437, - 44.6770947 - ], - [ - -124.0780328, - 44.677087 - ], - [ - -124.0780263, - 44.6770828 - ], - [ - -124.0780186, - 44.6770782 - ], - [ - -124.0780095, - 44.6770731 - ], - [ - -124.0779988, - 44.6770675 - ], - [ - -124.0779862, - 44.6770614 - ], - [ - -124.0779713, - 44.6770547 - ], - [ - -124.0779651, - 44.6770521 - ], - [ - -124.0779583, - 44.6770498 - ], - [ - -124.0779536, - 44.6770484 - ], - [ - -124.0779472, - 44.6770467 - ], - [ - -124.0779383, - 44.6770449 - ], - [ - -124.0779332, - 44.677044 - ], - [ - -124.0779273, - 44.6770433 - ], - [ - -124.0779206, - 44.6770428 - ], - [ - -124.0779131, - 44.6770427 - ], - [ - -124.0779091, - 44.6770428 - ], - [ - -124.077905, - 44.6770431 - ], - [ - -124.0779007, - 44.6770437 - ], - [ - -124.0778963, - 44.6770445 - ], - [ - -124.0778918, - 44.6770456 - ], - [ - -124.0778872, - 44.6770471 - ], - [ - -124.0778827, - 44.6770492 - ], - [ - -124.0778784, - 44.6770518 - ], - [ - -124.0778645, - 44.677062 - ], - [ - -124.0778512, - 44.6770727 - ], - [ - -124.0778427, - 44.6770801 - ], - [ - -124.0778316, - 44.6770901 - ], - [ - -124.0778175, - 44.6771039 - ], - [ - -124.0778097, - 44.6771119 - ], - [ - -124.0778011, - 44.6771212 - ], - [ - -124.0777777, - 44.6771474 - ], - [ - -124.0777552, - 44.6771738 - ], - [ - -124.0777111, - 44.6772268 - ], - [ - -124.0776806, - 44.677262 - ], - [ - -124.0776623, - 44.677282 - ], - [ - -124.077644, - 44.6773009 - ], - [ - -124.0776245, - 44.6773195 - ], - [ - -124.077611, - 44.6773316 - ], - [ - -124.0775923, - 44.6773471 - ], - [ - -124.0775814, - 44.6773555 - ], - [ - -124.0775697, - 44.6773639 - ], - [ - -124.0775538, - 44.6773745 - ], - [ - -124.0775366, - 44.6773848 - ], - [ - -124.0775273, - 44.6773898 - ], - [ - -124.0775226, - 44.6773918 - ], - [ - -124.0775176, - 44.6773934 - ], - [ - -124.0775142, - 44.6773942 - ], - [ - -124.0775095, - 44.6773949 - ], - [ - -124.077503, - 44.6773953 - ], - [ - -124.0774991, - 44.6773953 - ], - [ - -124.0774946, - 44.677395 - ], - [ - -124.0774894, - 44.6773944 - ], - [ - -124.0774833, - 44.6773934 - ], - [ - -124.0774763, - 44.6773918 - ], - [ - -124.077468, - 44.6773895 - ], - [ - -124.0774586, - 44.6773863 - ], - [ - -124.0774477, - 44.6773821 - ], - [ - -124.0774355, - 44.6773765 - ], - [ - -124.0774218, - 44.6773696 - ], - [ - -124.0774069, - 44.6773612 - ], - [ - -124.0773994, - 44.6773567 - ], - [ - -124.0773861, - 44.6773482 - ], - [ - -124.0773736, - 44.6773397 - ], - [ - -124.0773657, - 44.677334 - ], - [ - -124.077356, - 44.6773263 - ], - [ - -124.0773509, - 44.6773217 - ], - [ - -124.0773454, - 44.6773165 - ], - [ - -124.0773397, - 44.6773103 - ], - [ - -124.0773339, - 44.6773031 - ], - [ - -124.0773311, - 44.6772991 - ], - [ - -124.0773285, - 44.6772948 - ], - [ - -124.0773261, - 44.67729 - ], - [ - -124.0773238, - 44.6772849 - ], - [ - -124.0773219, - 44.6772792 - ], - [ - -124.0773197, - 44.6772698 - ], - [ - -124.0773184, - 44.6772603 - ], - [ - -124.0773179, - 44.6772539 - ], - [ - -124.0773177, - 44.6772453 - ], - [ - -124.0773182, - 44.6772338 - ], - [ - -124.0773199, - 44.6772185 - ], - [ - -124.0773235, - 44.6771981 - ], - [ - -124.0773292, - 44.6771713 - ], - [ - -124.0773305, - 44.6771661 - ], - [ - -124.0773322, - 44.6771609 - ], - [ - -124.0773367, - 44.6771505 - ], - [ - -124.0773403, - 44.6771436 - ], - [ - -124.0773457, - 44.6771344 - ], - [ - -124.0773697, - 44.6770978 - ], - [ - -124.077376, - 44.6770875 - ], - [ - -124.077382, - 44.6770757 - ], - [ - -124.0773845, - 44.6770694 - ], - [ - -124.0773866, - 44.6770628 - ], - [ - -124.0773881, - 44.6770557 - ], - [ - -124.0773886, - 44.6770482 - ], - [ - -124.0773878, - 44.6770402 - ], - [ - -124.0773867, - 44.6770361 - ], - [ - -124.0773853, - 44.6770321 - ], - [ - -124.0773833, - 44.6770281 - ], - [ - -124.0773817, - 44.6770255 - ], - [ - -124.0773792, - 44.6770219 - ], - [ - -124.0773754, - 44.6770173 - ], - [ - -124.0773731, - 44.6770147 - ], - [ - -124.0773701, - 44.6770117 - ], - [ - -124.0773666, - 44.6770085 - ], - [ - -124.0773623, - 44.677005 - ], - [ - -124.0773572, - 44.6770012 - ], - [ - -124.0773511, - 44.6769972 - ], - [ - -124.0773478, - 44.6769953 - ], - [ - -124.0773442, - 44.6769935 - ], - [ - -124.0773405, - 44.6769917 - ], - [ - -124.0773365, - 44.67699 - ], - [ - -124.0773323, - 44.6769886 - ], - [ - -124.0773261, - 44.6769871 - ], - [ - -124.0773198, - 44.6769864 - ], - [ - -124.0773156, - 44.6769863 - ], - [ - -124.0773098, - 44.6769866 - ], - [ - -124.0773021, - 44.6769878 - ], - [ - -124.0772976, - 44.6769888 - ], - [ - -124.0772925, - 44.6769903 - ], - [ - -124.0772866, - 44.6769924 - ], - [ - -124.0772798, - 44.6769953 - ], - [ - -124.0772721, - 44.6769991 - ], - [ - -124.0772633, - 44.6770042 - ], - [ - -124.0772532, - 44.6770106 - ], - [ - -124.077242, - 44.6770187 - ], - [ - -124.0772294, - 44.6770288 - ], - [ - -124.0772156, - 44.6770408 - ], - [ - -124.0772008, - 44.6770546 - ], - [ - -124.0771934, - 44.6770618 - ], - [ - -124.0771859, - 44.6770692 - ], - [ - -124.0771784, - 44.6770771 - ], - [ - -124.0771715, - 44.6770852 - ], - [ - -124.0771593, - 44.6771015 - ], - [ - -124.0771521, - 44.6771125 - ], - [ - -124.0771434, - 44.6771273 - ], - [ - -124.0771329, - 44.6771471 - ], - [ - -124.0771192, - 44.6771735 - ], - [ - -124.0771108, - 44.6771883 - ], - [ - -124.0771002, - 44.6772051 - ], - [ - -124.0770939, - 44.6772138 - ], - [ - -124.0770865, - 44.677223 - ], - [ - -124.0770778, - 44.6772327 - ], - [ - -124.0770505, - 44.6772601 - ], - [ - -124.0770222, - 44.6772865 - ], - [ - -124.0770025, - 44.6773034 - ], - [ - -124.0769751, - 44.6773251 - ], - [ - -124.0769586, - 44.6773369 - ], - [ - -124.0769391, - 44.6773501 - ], - [ - -124.0769156, - 44.6773644 - ], - [ - -124.0768872, - 44.6773799 - ], - [ - -124.0768713, - 44.6773878 - ], - [ - -124.0768538, - 44.6773959 - ], - [ - -124.076842, - 44.6774006 - ], - [ - -124.0768299, - 44.6774048 - ], - [ - -124.0768216, - 44.6774072 - ], - [ - -124.0768103, - 44.67741 - ], - [ - -124.0767949, - 44.677413 - ], - [ - -124.076786, - 44.6774144 - ], - [ - -124.0767758, - 44.6774156 - ], - [ - -124.0767641, - 44.6774165 - ], - [ - -124.0767506, - 44.6774171 - ], - [ - -124.0767354, - 44.677417 - ], - [ - -124.0767182, - 44.677416 - ], - [ - -124.0767091, - 44.6774151 - ], - [ - -124.0766997, - 44.6774138 - ], - [ - -124.0766898, - 44.677412 - ], - [ - -124.0766795, - 44.6774098 - ], - [ - -124.0766585, - 44.6774044 - ], - [ - -124.0766377, - 44.6773982 - ], - [ - -124.0765966, - 44.6773843 - ], - [ - -124.0765695, - 44.677374 - ], - [ - -124.0764609, - 44.6773316 - ], - [ - -124.0764292, - 44.6773206 - ], - [ - -124.0763924, - 44.6773095 - ], - [ - -124.0763723, - 44.6773044 - ], - [ - -124.0763506, - 44.6772998 - ], - [ - -124.0761886, - 44.6772686 - ], - [ - -124.0760259, - 44.6772384 - ], - [ - -124.075917, - 44.6772196 - ], - [ - -124.0753588, - 44.6771288 - ], - [ - -124.0752129, - 44.6771051 - ], - [ - -124.0750667, - 44.6770826 - ], - [ - -124.0749688, - 44.6770696 - ], - [ - -124.0749125, - 44.6770633 - ], - [ - -124.0748479, - 44.6770573 - ], - [ - -124.0748124, - 44.6770555 - ], - [ - -124.0747769, - 44.6770557 - ], - [ - -124.0747217, - 44.6770591 - ], - [ - -124.0746797, - 44.6770636 - ], - [ - -124.0745118, - 44.6770869 - ], - [ - -124.0744637, - 44.6770919 - ], - [ - -124.074438, - 44.6770937 - ], - [ - -124.0739157, - 44.6771019 - ], - [ - -124.0738415, - 44.6771078 - ], - [ - -124.0737866, - 44.6771145 - ], - [ - -124.0737321, - 44.677123 - ], - [ - -124.0736961, - 44.6771298 - ], - [ - -124.0736485, - 44.67714 - ], - [ - -124.0735859, - 44.6771556 - ], - [ - -124.0735506, - 44.6771655 - ], - [ - -124.0735107, - 44.6771776 - ], - [ - -124.0734657, - 44.6771925 - ], - [ - -124.0734151, - 44.6772107 - ], - [ - -124.0733585, - 44.677233 - ], - [ - -124.072844, - 44.6774489 - ], - [ - -124.0723111, - 44.6776653 - ], - [ - -124.0722353, - 44.6776986 - ], - [ - -124.0721614, - 44.6777341 - ], - [ - -124.0721133, - 44.677759 - ], - [ - -124.0720507, - 44.6777937 - ], - [ - -124.07197, - 44.6778425 - ], - [ - -124.0719254, - 44.6778717 - ], - [ - -124.0718758, - 44.6779062 - ], - [ - -124.0718212, - 44.677947 - ], - [ - -124.0717613, - 44.6779954 - ], - [ - -124.0716966, - 44.6780529 - ], - [ - -124.0716223, - 44.6781238 - ], - [ - -124.07155, - 44.6781953 - ], - [ - -124.0714102, - 44.6783399 - ], - [ - -124.0713193, - 44.6784373 - ], - [ - -124.0711992, - 44.6785682 - ], - [ - -124.0709178, - 44.6788571 - ], - [ - -124.0708804, - 44.6788994 - ], - [ - -124.0708403, - 44.6789486 - ], - [ - -124.0707987, - 44.6790063 - ], - [ - -124.0707787, - 44.6790379 - ], - [ - -124.0707593, - 44.6790723 - ], - [ - -124.0705822, - 44.679407 - ], - [ - -124.0703701, - 44.6796893 - ], - [ - -124.0703612, - 44.6797001 - ], - [ - -124.0703514, - 44.6797105 - ], - [ - -124.0703444, - 44.6797172 - ], - [ - -124.0703347, - 44.679726 - ], - [ - -124.0702945, - 44.6797606 - ], - [ - -124.0702835, - 44.6797707 - ], - [ - -124.0702718, - 44.6797826 - ], - [ - -124.0702661, - 44.6797892 - ], - [ - -124.07025, - 44.6798105 - ], - [ - -124.0702364, - 44.6798327 - ], - [ - -124.0702285, - 44.6798479 - ], - [ - -124.0702189, - 44.6798686 - ], - [ - -124.0701855, - 44.679953 - ], - [ - -124.0701751, - 44.6799769 - ], - [ - -124.0701615, - 44.6800035 - ], - [ - -124.0701532, - 44.6800173 - ], - [ - -124.0701434, - 44.6800317 - ], - [ - -124.0701317, - 44.6800465 - ], - [ - -124.0701134, - 44.6800671 - ], - [ - -124.0700942, - 44.6800872 - ], - [ - -124.0700538, - 44.6801266 - ], - [ - -124.0699708, - 44.6802047 - ], - [ - -124.069948, - 44.6802274 - ], - [ - -124.069923, - 44.680254 - ], - [ - -124.0698637, - 44.6803188 - ], - [ - -124.0698053, - 44.6803839 - ], - [ - -124.069769, - 44.6804283 - ], - [ - -124.0697497, - 44.6804542 - ], - [ - -124.0697295, - 44.6804845 - ], - [ - -124.069709, - 44.68052 - ], - [ - -124.0696995, - 44.6805394 - ], - [ - -124.0696908, - 44.6805593 - ], - [ - -124.0696831, - 44.6805794 - ], - [ - -124.06967, - 44.6806198 - ], - [ - -124.0696625, - 44.680647 - ], - [ - -124.0696537, - 44.6806833 - ], - [ - -124.0696426, - 44.6807318 - ], - [ - -124.0696266, - 44.6807963 - ], - [ - -124.0696154, - 44.6808328 - ], - [ - -124.0695888, - 44.6809094 - ], - [ - -124.0695604, - 44.6809856 - ], - [ - -124.0695402, - 44.6810363 - ], - [ - -124.0695114, - 44.6811038 - ], - [ - -124.0695024, - 44.6811221 - ], - [ - -124.0694919, - 44.68114 - ], - [ - -124.0694841, - 44.6811517 - ], - [ - -124.0694729, - 44.6811669 - ], - [ - -124.0694567, - 44.6811869 - ], - [ - -124.0694333, - 44.6812127 - ], - [ - -124.0693997, - 44.6812462 - ], - [ - -124.0693534, - 44.6812896 - ], - [ - -124.0693453, - 44.6812961 - ], - [ - -124.069336, - 44.6813018 - ], - [ - -124.0693292, - 44.6813052 - ], - [ - -124.0693194, - 44.6813093 - ], - [ - -124.0693053, - 44.681314 - ], - [ - -124.0692852, - 44.6813194 - ], - [ - -124.069257, - 44.6813255 - ], - [ - -124.0692191, - 44.6813332 - ], - [ - -124.0691986, - 44.6813379 - ], - [ - -124.0691882, - 44.6813408 - ], - [ - -124.0691778, - 44.6813442 - ], - [ - -124.0691676, - 44.6813482 - ], - [ - -124.0691578, - 44.6813531 - ], - [ - -124.0691487, - 44.6813592 - ], - [ - -124.0691447, - 44.6813626 - ], - [ - -124.0691411, - 44.6813665 - ], - [ - -124.069138, - 44.6813708 - ], - [ - -124.0691354, - 44.6813756 - ], - [ - -124.0691334, - 44.681381 - ], - [ - -124.0691302, - 44.6813935 - ], - [ - -124.0691274, - 44.681406 - ], - [ - -124.0691229, - 44.681431 - ], - [ - -124.0691205, - 44.6814477 - ], - [ - -124.0691176, - 44.68147 - ], - [ - -124.0691141, - 44.6814997 - ], - [ - -124.0691115, - 44.6815268 - ], - [ - -124.0691097, - 44.681554 - ], - [ - -124.0691071, - 44.6816084 - ], - [ - -124.0691044, - 44.6816446 - ], - [ - -124.0691019, - 44.6816652 - ], - [ - -124.0690979, - 44.6816887 - ], - [ - -124.0690915, - 44.6817154 - ], - [ - -124.0690838, - 44.6817395 - ], - [ - -124.0690749, - 44.6817632 - ], - [ - -124.0690535, - 44.6818099 - ], - [ - -124.0690371, - 44.6818405 - ], - [ - -124.0690132, - 44.6818807 - ], - [ - -124.0689091, - 44.6820398 - ], - [ - -124.0688814, - 44.6820857 - ], - [ - -124.0688533, - 44.6821391 - ], - [ - -124.0686841, - 44.6824959 - ], - [ - -124.0686298, - 44.6826153 - ], - [ - -124.06838, - 44.683183 - ], - [ - -124.0681723, - 44.683634 - ], - [ - -124.0681556, - 44.6836738 - ], - [ - -124.0681402, - 44.6837138 - ], - [ - -124.0681125, - 44.6837943 - ], - [ - -124.0680958, - 44.6838484 - ], - [ - -124.0680346, - 44.6840653 - ], - [ - -124.0679315, - 44.6845526 - ], - [ - -124.0679186, - 44.6845917 - ], - [ - -124.0679028, - 44.6846302 - ], - [ - -124.0678909, - 44.6846556 - ], - [ - -124.0678735, - 44.6846891 - ], - [ - -124.0678482, - 44.6847332 - ], - [ - -124.067812, - 44.6847914 - ], - [ - -124.0677618, - 44.6848682 - ], - [ - -124.067751, - 44.6848826 - ], - [ - -124.0677385, - 44.6848963 - ], - [ - -124.0677294, - 44.684905 - ], - [ - -124.0677164, - 44.6849164 - ], - [ - -124.0676607, - 44.6849603 - ], - [ - -124.0676452, - 44.6849731 - ], - [ - -124.0676307, - 44.6849864 - ], - [ - -124.0676206, - 44.6849965 - ], - [ - -124.0676127, - 44.6850057 - ], - [ - -124.067605, - 44.6850158 - ], - [ - -124.067598, - 44.6850272 - ], - [ - -124.0675921, - 44.6850399 - ], - [ - -124.0675877, - 44.6850517 - ], - [ - -124.0675839, - 44.6850635 - ], - [ - -124.0675779, - 44.6850871 - ], - [ - -124.0675749, - 44.6851028 - ], - [ - -124.067572, - 44.6851238 - ], - [ - -124.0675698, - 44.6851518 - ], - [ - -124.0675689, - 44.6851892 - ], - [ - -124.0675696, - 44.6852391 - ], - [ - -124.067572, - 44.6852745 - ], - [ - -124.0675766, - 44.6853066 - ], - [ - -124.0675909, - 44.6853808 - ], - [ - -124.067599, - 44.6854279 - ], - [ - -124.067602, - 44.6854549 - ], - [ - -124.0676031, - 44.6854856 - ], - [ - -124.0676025, - 44.685502 - ], - [ - -124.0676007, - 44.6855195 - ], - [ - -124.0675974, - 44.6855381 - ], - [ - -124.0675909, - 44.6855647 - ], - [ - -124.0675834, - 44.685591 - ], - [ - -124.067578, - 44.6856084 - ], - [ - -124.0675703, - 44.6856317 - ], - [ - -124.0675596, - 44.6856626 - ], - [ - -124.0674509, - 44.685959 - ], - [ - -124.0674174, - 44.6860583 - ], - [ - -124.0673997, - 44.6861167 - ], - [ - -124.0673832, - 44.6861754 - ], - [ - -124.0673514, - 44.6862929 - ], - [ - -124.0673295, - 44.686371 - ], - [ - -124.067313, - 44.6864231 - ], - [ - -124.0672947, - 44.6864749 - ], - [ - -124.0672567, - 44.6865784 - ], - [ - -124.0672332, - 44.6866477 - ], - [ - -124.0672215, - 44.6866875 - ], - [ - -124.0672103, - 44.6867334 - ], - [ - -124.0672025, - 44.6867749 - ], - [ - -124.0671967, - 44.6868166 - ], - [ - -124.067189, - 44.6869002 - ], - [ - -124.0671779, - 44.6870677 - ], - [ - -124.0671727, - 44.6871154 - ], - [ - -124.0671509, - 44.6872718 - ], - [ - -124.0671271, - 44.6874282 - ], - [ - -124.0671199, - 44.6874729 - ], - [ - -124.0671115, - 44.6875173 - ], - [ - -124.067105, - 44.6875467 - ], - [ - -124.0670945, - 44.6875859 - ], - [ - -124.0670876, - 44.6876083 - ], - [ - -124.0670785, - 44.6876338 - ], - [ - -124.0670666, - 44.687663 - ], - [ - -124.0670507, - 44.6876964 - ], - [ - -124.0670442, - 44.6877073 - ], - [ - -124.0670363, - 44.6877175 - ], - [ - -124.0670303, - 44.6877239 - ], - [ - -124.0670216, - 44.6877321 - ], - [ - -124.0670086, - 44.6877422 - ], - [ - -124.0670007, - 44.6877477 - ], - [ - -124.0669911, - 44.6877537 - ], - [ - -124.0669797, - 44.6877603 - ], - [ - -124.066966, - 44.6877673 - ], - [ - -124.0669499, - 44.687775 - ], - [ - -124.066931, - 44.6877832 - ], - [ - -124.0669091, - 44.6877921 - ], - [ - -124.0668843, - 44.6878018 - ], - [ - -124.0668793, - 44.6878034 - ], - [ - -124.0668742, - 44.6878045 - ], - [ - -124.0668707, - 44.687805 - ], - [ - -124.0668659, - 44.6878053 - ], - [ - -124.0668593, - 44.6878053 - ], - [ - -124.0668504, - 44.6878045 - ], - [ - -124.0668452, - 44.6878039 - ], - [ - -124.0668311, - 44.6878014 - ], - [ - -124.0668122, - 44.6877979 - ], - [ - -124.0668015, - 44.6877964 - ], - [ - -124.0667959, - 44.6877959 - ], - [ - -124.06679, - 44.6877956 - ], - [ - -124.0667838, - 44.6877957 - ], - [ - -124.0667774, - 44.6877964 - ], - [ - -124.0667741, - 44.687797 - ], - [ - -124.0667708, - 44.6877979 - ], - [ - -124.0667675, - 44.687799 - ], - [ - -124.0667641, - 44.6878003 - ], - [ - -124.0667608, - 44.687802 - ], - [ - -124.0667517, - 44.6878073 - ], - [ - -124.0667428, - 44.6878128 - ], - [ - -124.0667372, - 44.6878167 - ], - [ - -124.0667301, - 44.687822 - ], - [ - -124.0667263, - 44.6878251 - ], - [ - -124.0667223, - 44.6878288 - ], - [ - -124.0667181, - 44.6878331 - ], - [ - -124.066714, - 44.6878381 - ], - [ - -124.0667121, - 44.6878408 - ], - [ - -124.0667103, - 44.6878438 - ], - [ - -124.0667088, - 44.687847 - ], - [ - -124.0667075, - 44.6878505 - ], - [ - -124.0667065, - 44.6878542 - ], - [ - -124.0667061, - 44.6878583 - ], - [ - -124.0667063, - 44.6878628 - ], - [ - -124.0667129, - 44.6879085 - ], - [ - -124.0667208, - 44.6879542 - ], - [ - -124.0667383, - 44.6880455 - ], - [ - -124.0667714, - 44.6881944 - ], - [ - -124.0667809, - 44.6882441 - ], - [ - -124.0667852, - 44.6882725 - ], - [ - -124.0667868, - 44.688293 - ], - [ - -124.0667865, - 44.6883134 - ], - [ - -124.0667853, - 44.688327 - ], - [ - -124.0667826, - 44.6883451 - ], - [ - -124.0667773, - 44.6883693 - ], - [ - -124.0667679, - 44.6884014 - ], - [ - -124.0667204, - 44.6885296 - ], - [ - -124.0667162, - 44.6885409 - ], - [ - -124.0667115, - 44.6885522 - ], - [ - -124.0667008, - 44.6885744 - ], - [ - -124.066677, - 44.6886182 - ], - [ - -124.0666618, - 44.6886474 - ], - [ - -124.0666541, - 44.6886642 - ], - [ - -124.0666468, - 44.6886837 - ], - [ - -124.0666438, - 44.6886942 - ], - [ - -124.0666413, - 44.6887055 - ], - [ - -124.0666395, - 44.6887178 - ], - [ - -124.0666385, - 44.6887311 - ], - [ - -124.066638, - 44.6887445 - ], - [ - -124.0666385, - 44.6887713 - ], - [ - -124.0666421, - 44.6888249 - ], - [ - -124.066644, - 44.6888606 - ], - [ - -124.066644, - 44.688881 - ], - [ - -124.0666422, - 44.688926 - ], - [ - -124.0666393, - 44.6889709 - ], - [ - -124.0666336, - 44.6890609 - ], - [ - -124.0666322, - 44.6891209 - ], - [ - -124.066633, - 44.6891551 - ], - [ - -124.0666359, - 44.6892023 - ], - [ - -124.0666398, - 44.6892495 - ], - [ - -124.0666485, - 44.6893439 - ], - [ - -124.0666534, - 44.6894068 - ], - [ - -124.0666586, - 44.6894898 - ], - [ - -124.0666632, - 44.6895727 - ], - [ - -124.0666653, - 44.6896281 - ], - [ - -124.0666664, - 44.6897 - ], - [ - -124.0666655, - 44.6897855 - ], - [ - -124.0666628, - 44.6899159 - ], - [ - -124.0666622, - 44.6900246 - ], - [ - -124.0666598, - 44.6901558 - ], - [ - -124.0666544, - 44.6902357 - ], - [ - -124.0666491, - 44.6902814 - ], - [ - -124.0666405, - 44.6903335 - ], - [ - -124.0666322, - 44.6903697 - ], - [ - -124.0666217, - 44.6904054 - ], - [ - -124.0666137, - 44.6904291 - ], - [ - -124.0666022, - 44.6904605 - ], - [ - -124.0665524, - 44.6905855 - ], - [ - -124.0665088, - 44.6907025 - ], - [ - -124.0664641, - 44.6908191 - ], - [ - -124.0664309, - 44.6908961 - ], - [ - -124.06641, - 44.6909398 - ], - [ - -124.0663965, - 44.6909658 - ], - [ - -124.0663823, - 44.6909917 - ], - [ - -124.0663526, - 44.6910428 - ], - [ - -124.0662908, - 44.6911445 - ], - [ - -124.0660047, - 44.6915944 - ], - [ - -124.0659672, - 44.6916598 - ], - [ - -124.0659492, - 44.691694 - ], - [ - -124.0659327, - 44.6917286 - ], - [ - -124.0659033, - 44.6917986 - ], - [ - -124.0658856, - 44.6918457 - ], - [ - -124.065819, - 44.6920351 - ], - [ - -124.065798, - 44.6920888 - ], - [ - -124.0657711, - 44.6921494 - ], - [ - -124.0656173, - 44.6924623 - ], - [ - -124.0655386, - 44.6926308 - ], - [ - -124.0654625, - 44.6927999 - ], - [ - -124.0654134, - 44.6929132 - ], - [ - -124.0653861, - 44.692979 - ], - [ - -124.0653608, - 44.6930452 - ], - [ - -124.0653454, - 44.6930896 - ], - [ - -124.0653274, - 44.6931491 - ], - [ - -124.0653185, - 44.6931833 - ], - [ - -124.0653099, - 44.6932225 - ], - [ - -124.0653022, - 44.6932676 - ], - [ - -124.0652378, - 44.6937213 - ], - [ - -124.0651927, - 44.6940423 - ], - [ - -124.0651881, - 44.6940828 - ], - [ - -124.0651852, - 44.6941234 - ], - [ - -124.0651837, - 44.6942046 - ], - [ - -124.065189, - 44.6943644 - ], - [ - -124.0651914, - 44.6944759 - ], - [ - -124.0651898, - 44.6945378 - ], - [ - -124.0651764, - 44.6947465 - ], - [ - -124.0651573, - 44.694955 - ], - [ - -124.0651409, - 44.695094 - ], - [ - -124.0651289, - 44.6951821 - ], - [ - -124.065115, - 44.6952699 - ], - [ - -124.0651042, - 44.6953284 - ], - [ - -124.0650871, - 44.695406 - ], - [ - -124.0650758, - 44.6954501 - ], - [ - -124.0650613, - 44.6955004 - ], - [ - -124.0650438, - 44.6955562 - ], - [ - -124.0648906, - 44.6955568 - ], - [ - -124.0627989, - 44.6955646 - ], - [ - -124.0629488, - 44.6947835 - ], - [ - -124.0631386, - 44.6948024 - ], - [ - -124.0632425, - 44.6942723 - ], - [ - -124.0628997, - 44.6942383 - ], - [ - -124.0631673, - 44.6928704 - ], - [ - -124.0633237, - 44.6920705 - ], - [ - -124.0634286, - 44.6915256 - ], - [ - -124.0635318, - 44.690986 - ], - [ - -124.0630662, - 44.6909866 - ], - [ - -124.0628682, - 44.6920181 - ], - [ - -124.0628419, - 44.692145 - ], - [ - -124.0627888, - 44.6924169 - ], - [ - -124.0626897, - 44.6929287 - ], - [ - -124.062573, - 44.6935317 - ], - [ - -124.0625099, - 44.6938477 - ], - [ - -124.0624457, - 44.6941795 - ], - [ - -124.0622928, - 44.6941647 - ], - [ - -124.0622214, - 44.6945356 - ], - [ - -124.0621528, - 44.6948885 - ], - [ - -124.062087, - 44.6952255 - ], - [ - -124.0620195, - 44.6955678 - ], - [ - -124.0607227, - 44.6955726 - ], - [ - -124.0607219, - 44.6955908 - ], - [ - -124.060586, - 44.6991531 - ], - [ - -124.0543888, - 44.6991649 - ], - [ - -124.0544975, - 44.6963438 - ], - [ - -124.0556176, - 44.6963408 - ], - [ - -124.0556464, - 44.6955916 - ], - [ - -124.0556814, - 44.693851 - ], - [ - -124.0556801, - 44.692802 - ], - [ - -124.0608752, - 44.6928723 - ], - [ - -124.0609229, - 44.6920872 - ], - [ - -124.0595765, - 44.6920695 - ], - [ - -124.0572013, - 44.6920356 - ], - [ - -124.0572139, - 44.6901816 - ], - [ - -124.0571853, - 44.690187 - ], - [ - -124.0569565, - 44.6902198 - ], - [ - -124.0569316, - 44.6902233 - ], - [ - -124.0568041, - 44.6902468 - ], - [ - -124.0566791, - 44.6902795 - ], - [ - -124.0565699, - 44.6903182 - ], - [ - -124.0548564, - 44.6903185 - ], - [ - -124.0543046, - 44.6903187 - ], - [ - -124.0543034, - 44.6899827 - ], - [ - -124.0548632, - 44.6896449 - ], - [ - -124.0548784, - 44.6882324 - ], - [ - -124.0521876, - 44.6882263 - ], - [ - -124.0522576, - 44.6811543 - ], - [ - -124.0530428, - 44.6811561 - ], - [ - -124.0538662, - 44.6811581 - ], - [ - -124.053867, - 44.6793873 - ], - [ - -124.0538854, - 44.6766304 - ], - [ - -124.0569895, - 44.6766405 - ], - [ - -124.0569932, - 44.6760456 - ], - [ - -124.0573319, - 44.6760464 - ], - [ - -124.0573666, - 44.6705331 - ], - [ - -124.0573672, - 44.6702924 - ], - [ - -124.0573734, - 44.6693033 - ], - [ - -124.057375, - 44.6690802 - ], - [ - -124.0573794, - 44.6689324 - ], - [ - -124.0573764, - 44.6689253 - ], - [ - -124.0572031, - 44.6685138 - ], - [ - -124.0568033, - 44.6686063 - ], - [ - -124.0563464, - 44.6687023 - ], - [ - -124.0559888, - 44.6678479 - ], - [ - -124.0557626, - 44.6672978 - ], - [ - -124.0558728, - 44.6672748 - ], - [ - -124.0547511, - 44.6646225 - ], - [ - -124.054396, - 44.6646987 - ], - [ - -124.052542, - 44.6652973 - ], - [ - -124.0517759, - 44.6653529 - ], - [ - -124.0507118, - 44.6656899 - ], - [ - -124.0503519, - 44.6658455 - ], - [ - -124.0499791, - 44.6659755 - ], - [ - -124.0494619, - 44.6661998 - ], - [ - -124.0492616, - 44.6666028 - ], - [ - -124.0496024, - 44.6669499 - ], - [ - -124.0492262, - 44.6670868 - ], - [ - -124.049192, - 44.6671898 - ], - [ - -124.0493764, - 44.6674961 - ], - [ - -124.0499453, - 44.6672997 - ], - [ - -124.0504438, - 44.6678981 - ], - [ - -124.0501871, - 44.6679455 - ], - [ - -124.0509074, - 44.6702704 - ], - [ - -124.0472013, - 44.6702574 - ], - [ - -124.0471937, - 44.6666336 - ], - [ - -124.0471237, - 44.6593112 - ], - [ - -124.0466641, - 44.6593123 - ], - [ - -124.0412752, - 44.6593229 - ], - [ - -124.0413266, - 44.6575506 - ], - [ - -124.0413097, - 44.6575703 - ], - [ - -124.0412817, - 44.6576019 - ], - [ - -124.0412525, - 44.6576336 - ], - [ - -124.0412217, - 44.6576649 - ], - [ - -124.0411898, - 44.6576956 - ], - [ - -124.0411568, - 44.6577256 - ], - [ - -124.0411229, - 44.6577548 - ], - [ - -124.0411051, - 44.6577695 - ], - [ - -124.0410866, - 44.6577843 - ], - [ - -124.0410496, - 44.6578125 - ], - [ - -124.041028, - 44.6578277 - ], - [ - -124.0409851, - 44.6578549 - ], - [ - -124.0409401, - 44.6578798 - ], - [ - -124.0409148, - 44.6578925 - ], - [ - -124.0408892, - 44.6579039 - ], - [ - -124.0408631, - 44.6579147 - ], - [ - -124.0408364, - 44.6579245 - ], - [ - -124.0408085, - 44.6579339 - ], - [ - -124.0407803, - 44.6579419 - ], - [ - -124.0407514, - 44.6579495 - ], - [ - -124.04072, - 44.6579559 - ], - [ - -124.0406756, - 44.6579631 - ], - [ - -124.0406174, - 44.6579692 - ], - [ - -124.040584, - 44.657971 - ], - [ - -124.0405238, - 44.657971 - ], - [ - -124.0404637, - 44.6579671 - ], - [ - -124.0404323, - 44.6579631 - ], - [ - -124.0404038, - 44.6579588 - ], - [ - -124.0403753, - 44.6579538 - ], - [ - -124.0403477, - 44.6579481 - ], - [ - -124.0402988, - 44.6579373 - ], - [ - -124.0402763, - 44.6579324 - ], - [ - -124.0402544, - 44.657928 - ], - [ - -124.0402338, - 44.6579242 - ], - [ - -124.0402144, - 44.6579213 - ], - [ - -124.0401946, - 44.657919 - ], - [ - -124.0401777, - 44.6579175 - ], - [ - -124.0401611, - 44.6579173 - ], - [ - -124.0401436, - 44.6579176 - ], - [ - -124.0401137, - 44.65792 - ], - [ - -124.0400931, - 44.6579224 - ], - [ - -124.0400711, - 44.6579253 - ], - [ - -124.0400484, - 44.6579288 - ], - [ - -124.0400255, - 44.6579324 - ], - [ - -124.0400029, - 44.6579364 - ], - [ - -124.0399796, - 44.6579407 - ], - [ - -124.0399566, - 44.6579451 - ], - [ - -124.0399336, - 44.6579497 - ], - [ - -124.0399105, - 44.6579545 - ], - [ - -124.0398878, - 44.6579595 - ], - [ - -124.039865, - 44.6579647 - ], - [ - -124.0398423, - 44.65797 - ], - [ - -124.0398199, - 44.6579756 - ], - [ - -124.0397976, - 44.6579813 - ], - [ - -124.0397753, - 44.6579872 - ], - [ - -124.0397533, - 44.6579933 - ], - [ - -124.0397314, - 44.6579997 - ], - [ - -124.0397102, - 44.658006 - ], - [ - -124.0396675, - 44.6580198 - ], - [ - -124.0396253, - 44.6580346 - ], - [ - -124.039583, - 44.6580506 - ], - [ - -124.0395682, - 44.6580564 - ], - [ - -124.0395401, - 44.6580674 - ], - [ - -124.0394967, - 44.6580848 - ], - [ - -124.0394532, - 44.6581024 - ], - [ - -124.0394095, - 44.6581201 - ], - [ - -124.0393002, - 44.6581647 - ], - [ - -124.0392567, - 44.6581824 - ], - [ - -124.0391922, - 44.6582091 - ], - [ - -124.0391498, - 44.6582271 - ], - [ - -124.0391288, - 44.6582362 - ], - [ - -124.0391078, - 44.6582453 - ], - [ - -124.0390873, - 44.6582544 - ], - [ - -124.0390671, - 44.6582636 - ], - [ - -124.0390474, - 44.6582727 - ], - [ - -124.0390277, - 44.6582823 - ], - [ - -124.0389895, - 44.6583017 - ], - [ - -124.0389716, - 44.6583112 - ], - [ - -124.0389534, - 44.6583215 - ], - [ - -124.0389351, - 44.6583319 - ], - [ - -124.0389172, - 44.6583427 - ], - [ - -124.0388989, - 44.6583538 - ], - [ - -124.038881, - 44.658365 - ], - [ - -124.0388633, - 44.6583762 - ], - [ - -124.038846, - 44.6583876 - ], - [ - -124.0388291, - 44.6583991 - ], - [ - -124.0387948, - 44.6584233 - ], - [ - -124.0387784, - 44.6584352 - ], - [ - -124.038762, - 44.6584475 - ], - [ - -124.0387283, - 44.6584733 - ], - [ - -124.0386948, - 44.6584993 - ], - [ - -124.0386613, - 44.6585258 - ], - [ - -124.0386447, - 44.658539 - ], - [ - -124.0386113, - 44.6585656 - ], - [ - -124.0385781, - 44.6585922 - ], - [ - -124.038545, - 44.6586191 - ], - [ - -124.0385282, - 44.6586328 - ], - [ - -124.0385111, - 44.6586466 - ], - [ - -124.0384768, - 44.6586738 - ], - [ - -124.0384591, - 44.6586876 - ], - [ - -124.0384238, - 44.6587146 - ], - [ - -124.0384055, - 44.6587283 - ], - [ - -124.0383872, - 44.6587417 - ], - [ - -124.0383682, - 44.6587554 - ], - [ - -124.03833, - 44.6587817 - ], - [ - -124.0383099, - 44.6587949 - ], - [ - -124.0382895, - 44.658808 - ], - [ - -124.038249, - 44.6588326 - ], - [ - -124.0382276, - 44.6588451 - ], - [ - -124.0382059, - 44.6588571 - ], - [ - -124.0381835, - 44.6588692 - ], - [ - -124.0381599, - 44.658881 - ], - [ - -124.0381362, - 44.6588922 - ], - [ - -124.0381125, - 44.6589027 - ], - [ - -124.0380887, - 44.6589128 - ], - [ - -124.0380652, - 44.6589223 - ], - [ - -124.0380415, - 44.6589316 - ], - [ - -124.038018, - 44.6589404 - ], - [ - -124.0379951, - 44.6589489 - ], - [ - -124.0379721, - 44.6589574 - ], - [ - -124.0379641, - 44.6589602 - ], - [ - -124.0379669, - 44.6593387 - ], - [ - -124.0378132, - 44.659339 - ], - [ - -124.0376817, - 44.6594337 - ], - [ - -124.0377302, - 44.6594835 - ], - [ - -124.0380705, - 44.6598327 - ], - [ - -124.038398, - 44.6598164 - ], - [ - -124.0385684, - 44.6600661 - ], - [ - -124.0380403, - 44.6604237 - ], - [ - -124.0373254, - 44.6596902 - ], - [ - -124.0370491, - 44.6598891 - ], - [ - -124.0370555, - 44.6606545 - ], - [ - -124.0272345, - 44.6607196 - ], - [ - -124.0272256, - 44.6616303 - ], - [ - -124.0268463, - 44.6616326 - ], - [ - -124.0268214, - 44.6629782 - ], - [ - -124.0267546, - 44.6665967 - ], - [ - -124.0240385, - 44.6665819 - ], - [ - -124.0218657, - 44.6665701 - ], - [ - -124.0219909, - 44.6595599 - ], - [ - -124.0194708, - 44.658917 - ], - [ - -124.0181971, - 44.6608633 - ], - [ - -124.0170122, - 44.660863 - ], - [ - -124.0170217, - 44.6593393 - ], - [ - -124.0170364, - 44.6569857 - ], - [ - -124.0154744, - 44.6565504 - ], - [ - -124.0153613, - 44.6565472 - ], - [ - -124.0149906, - 44.6562393 - ], - [ - -124.0140327, - 44.6562303 - ], - [ - -124.0135828, - 44.6560918 - ], - [ - -124.0131617, - 44.656127 - ], - [ - -124.0130597, - 44.6567379 - ], - [ - -124.0127962, - 44.657248 - ], - [ - -124.0121266, - 44.6575469 - ], - [ - -124.0121271, - 44.657442 - ], - [ - -124.0121699, - 44.6571766 - ], - [ - -124.0121281, - 44.6572069 - ], - [ - -124.0121344, - 44.6557523 - ], - [ - -124.0121346, - 44.6556975 - ], - [ - -124.0127825, - 44.6557001 - ], - [ - -124.0127824, - 44.655724 - ], - [ - -124.0134508, - 44.6553628 - ], - [ - -124.0135328, - 44.6548974 - ], - [ - -124.0138327, - 44.6548493 - ], - [ - -124.013892, - 44.6553219 - ], - [ - -124.014773, - 44.655763 - ], - [ - -124.017044, - 44.6557721 - ], - [ - -124.0219689, - 44.6557916 - ], - [ - -124.0268938, - 44.655811 - ], - [ - -124.0306983, - 44.6557939 - ], - [ - -124.0370149, - 44.6557653 - ], - [ - -124.0405365, - 44.6557492 - ], - [ - -124.0405361, - 44.6539517 - ], - [ - -124.0407899, - 44.6539517 - ], - [ - -124.0420579, - 44.6539515 - ], - [ - -124.0438333, - 44.6539512 - ], - [ - -124.043822, - 44.6521317 - ], - [ - -124.0428396, - 44.6521386 - ], - [ - -124.0426035, - 44.6484754 - ], - [ - -124.0417331, - 44.6484777 - ], - [ - -124.0416204, - 44.6487914 - ], - [ - -124.0362624, - 44.6488204 - ], - [ - -124.0309025, - 44.6488493 - ], - [ - -124.0310251, - 44.6480862 - ], - [ - -124.0313005, - 44.6463674 - ], - [ - -124.0314698, - 44.6453015 - ], - [ - -124.0355531, - 44.6452831 - ], - [ - -124.035552, - 44.6446066 - ], - [ - -124.0348694, - 44.6446073 - ], - [ - -124.0348655, - 44.6417839 - ], - [ - -124.0343636, - 44.6417845 - ], - [ - -124.0339041, - 44.6417849 - ], - [ - -124.0338137, - 44.641785 - ], - [ - -124.0337368, - 44.6417849 - ], - [ - -124.0320332, - 44.6417862 - ], - [ - -124.0320414, - 44.6417331 - ], - [ - -124.0320919, - 44.6414253 - ], - [ - -124.0315659, - 44.6410327 - ], - [ - -124.0307851, - 44.6410302 - ], - [ - -124.030175, - 44.6406446 - ], - [ - -124.0302209, - 44.640577 - ], - [ - -124.0302273, - 44.6399915 - ], - [ - -124.0298191, - 44.6399828 - ], - [ - -124.0298453, - 44.639971 - ], - [ - -124.0299386, - 44.6398614 - ], - [ - -124.0301568, - 44.6394682 - ], - [ - -124.0303992, - 44.6396269 - ], - [ - -124.0305202, - 44.6396561 - ], - [ - -124.0306253, - 44.6396457 - ], - [ - -124.0307888, - 44.6395837 - ], - [ - -124.0310147, - 44.6394724 - ], - [ - -124.0311247, - 44.6393859 - ], - [ - -124.0311721, - 44.6393127 - ], - [ - -124.0326102, - 44.63956 - ], - [ - -124.0326108, - 44.6394443 - ], - [ - -124.0331356, - 44.6394443 - ], - [ - -124.0334145, - 44.6394439 - ], - [ - -124.0334135, - 44.6398366 - ], - [ - -124.0337193, - 44.6398369 - ], - [ - -124.0337353, - 44.6398374 - ], - [ - -124.0337351, - 44.6397186 - ], - [ - -124.03486, - 44.6397184 - ], - [ - -124.0348597, - 44.6396827 - ], - [ - -124.0348603, - 44.6394403 - ], - [ - -124.0397838, - 44.6394268 - ], - [ - -124.0397851, - 44.6394188 - ], - [ - -124.0399736, - 44.6394192 - ], - [ - -124.0399742, - 44.6390543 - ], - [ - -124.0397819, - 44.6390544 - ], - [ - -124.0397821, - 44.6381475 - ], - [ - -124.0377715, - 44.6381524 - ], - [ - -124.0377659, - 44.637911 - ], - [ - -124.0377004, - 44.6379089 - ], - [ - -124.0376597, - 44.6379026 - ], - [ - -124.0376323, - 44.6378955 - ], - [ - -124.0376087, - 44.6378873 - ], - [ - -124.0375791, - 44.6378745 - ], - [ - -124.0375532, - 44.6378595 - ], - [ - -124.0375311, - 44.6378441 - ], - [ - -124.0375148, - 44.6378291 - ], - [ - -124.0375025, - 44.6378158 - ], - [ - -124.0374919, - 44.6378017 - ], - [ - -124.0374813, - 44.6377845 - ], - [ - -124.0374237, - 44.637661 - ], - [ - -124.037413, - 44.6376435 - ], - [ - -124.0373982, - 44.6376213 - ], - [ - -124.0373836, - 44.6376025 - ], - [ - -124.0373671, - 44.6375838 - ], - [ - -124.0373405, - 44.6375568 - ], - [ - -124.0373078, - 44.6375269 - ], - [ - -124.0372795, - 44.6375048 - ], - [ - -124.0372434, - 44.6374795 - ], - [ - -124.0372035, - 44.637456 - ], - [ - -124.0371718, - 44.6374401 - ], - [ - -124.0371342, - 44.6374224 - ], - [ - -124.037081, - 44.6374021 - ], - [ - -124.0370241, - 44.637385 - ], - [ - -124.0369812, - 44.6373746 - ], - [ - -124.0369442, - 44.6373675 - ], - [ - -124.0369034, - 44.6373612 - ], - [ - -124.0368648, - 44.6373573 - ], - [ - -124.0368281, - 44.6373546 - ], - [ - -124.0368418, - 44.6364813 - ], - [ - -124.037766, - 44.6365026 - ], - [ - -124.0377068, - 44.6358509 - ], - [ - -124.0363646, - 44.6358174 - ], - [ - -124.0363616, - 44.6352978 - ], - [ - -124.0353216, - 44.6353003 - ], - [ - -124.0353229, - 44.6350397 - ], - [ - -124.0353273, - 44.6346105 - ], - [ - -124.0353271, - 44.6345425 - ], - [ - -124.0346623, - 44.6345458 - ], - [ - -124.0346613, - 44.6346282 - ], - [ - -124.0346537, - 44.6351629 - ], - [ - -124.0340612, - 44.6351581 - ], - [ - -124.0340708, - 44.6346234 - ], - [ - -124.0340712, - 44.6345487 - ], - [ - -124.0335895, - 44.634551 - ], - [ - -124.0335863, - 44.633496 - ], - [ - -124.0325848, - 44.6334986 - ], - [ - -124.0326027, - 44.6310949 - ], - [ - -124.0299787, - 44.6311114 - ], - [ - -124.0300761, - 44.633707 - ], - [ - -124.0310652, - 44.633706 - ], - [ - -124.0310753, - 44.6346323 - ], - [ - -124.0284322, - 44.6346167 - ], - [ - -124.0275999, - 44.6342386 - ], - [ - -124.0271011, - 44.6340175 - ], - [ - -124.0269929, - 44.6327988 - ] - ] - ] - } - }, - { - "id": "area_272", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0090805, - 45.0239254 - ], - [ - -124.0083172, - 45.0237164 - ], - [ - -124.0083328, - 45.0237952 - ], - [ - -124.0082493, - 45.0238718 - ], - [ - -124.0081378, - 45.0239374 - ], - [ - -124.0080998, - 45.0238785 - ], - [ - -124.0078721, - 45.0235267 - ], - [ - -124.0077542, - 45.0231876 - ], - [ - -124.0077432, - 45.0231562 - ], - [ - -124.007849, - 45.0231264 - ], - [ - -124.007902, - 45.0231037 - ], - [ - -124.0078052, - 45.0229854 - ], - [ - -124.0078297, - 45.0229698 - ], - [ - -124.0078512, - 45.0228668 - ], - [ - -124.0078059, - 45.0228538 - ], - [ - -124.0073414, - 45.0227205 - ], - [ - -124.0073186, - 45.0227045 - ], - [ - -124.0072648, - 45.0224401 - ], - [ - -124.0067411, - 45.0223699 - ], - [ - -124.0067239, - 45.0223416 - ], - [ - -124.0069235, - 45.0222128 - ], - [ - -124.0068194, - 45.0221317 - ], - [ - -124.0068923, - 45.0220846 - ], - [ - -124.0069044, - 45.022001 - ], - [ - -124.0069193, - 45.021898 - ], - [ - -124.0069253, - 45.021857 - ], - [ - -124.0065346, - 45.0218699 - ], - [ - -124.0065405, - 45.0218292 - ], - [ - -124.0065612, - 45.0216859 - ], - [ - -124.0065879, - 45.0215018 - ], - [ - -124.0066146, - 45.0213176 - ], - [ - -124.0066412, - 45.0211332 - ], - [ - -124.0066592, - 45.0210094 - ], - [ - -124.0066614, - 45.0209941 - ], - [ - -124.0066851, - 45.0208303 - ], - [ - -124.0068731, - 45.020815 - ], - [ - -124.0068602, - 45.0206336 - ], - [ - -124.0068363, - 45.0202974 - ], - [ - -124.0067922, - 45.0202059 - ], - [ - -124.0067615, - 45.0201108 - ], - [ - -124.0067611, - 45.0201088 - ], - [ - -124.0067607, - 45.0201068 - ], - [ - -124.0067603, - 45.0201049 - ], - [ - -124.0067599, - 45.020103 - ], - [ - -124.0067594, - 45.020101 - ], - [ - -124.006759, - 45.0200991 - ], - [ - -124.0067586, - 45.0200972 - ], - [ - -124.0067582, - 45.0200952 - ], - [ - -124.0067578, - 45.0200933 - ], - [ - -124.0067574, - 45.0200914 - ], - [ - -124.006757, - 45.0200894 - ], - [ - -124.0067566, - 45.0200875 - ], - [ - -124.0067561, - 45.0200856 - ], - [ - -124.0067557, - 45.0200836 - ], - [ - -124.0067553, - 45.0200817 - ], - [ - -124.0067549, - 45.0200798 - ], - [ - -124.0067545, - 45.0200778 - ], - [ - -124.0067541, - 45.0200759 - ], - [ - -124.0067537, - 45.020074 - ], - [ - -124.0067532, - 45.020072 - ], - [ - -124.0067528, - 45.0200701 - ], - [ - -124.0067332, - 45.0199622 - ], - [ - -124.0067077, - 45.0198261 - ], - [ - -124.0066825, - 45.0196901 - ], - [ - -124.0066574, - 45.0195542 - ], - [ - -124.0066323, - 45.0194182 - ], - [ - -124.0066082, - 45.0192876 - ], - [ - -124.0065595, - 45.0191605 - ], - [ - -124.0065088, - 45.0190281 - ], - [ - -124.0064878, - 45.018973 - ], - [ - -124.0064582, - 45.0188957 - ], - [ - -124.0068291, - 45.0188243 - ], - [ - -124.0068314, - 45.0188239 - ], - [ - -124.0066041, - 45.0182391 - ], - [ - -124.0061604, - 45.0176441 - ], - [ - -124.0058226, - 45.0162651 - ], - [ - -124.0057813, - 45.0160965 - ], - [ - -124.0045632, - 45.0160969 - ], - [ - -124.0045643, - 45.0159446 - ], - [ - -124.0045367, - 45.0159411 - ], - [ - -124.0045348, - 45.0154158 - ], - [ - -124.0030417, - 45.0154169 - ], - [ - -124.0030384, - 45.0160418 - ], - [ - -124.0030381, - 45.0160979 - ], - [ - -124.003037, - 45.0163177 - ], - [ - -124.0045684, - 45.0163211 - ], - [ - -124.0046592, - 45.0196434 - ], - [ - -124.0021219, - 45.0196451 - ], - [ - -123.9995845, - 45.0196468 - ], - [ - -123.9996135, - 45.0232029 - ], - [ - -123.9970624, - 45.0231913 - ], - [ - -123.994521, - 45.0231955 - ], - [ - -123.9919821, - 45.0231996 - ], - [ - -123.9919627, - 45.0196361 - ], - [ - -123.9919878, - 45.0160732 - ], - [ - -123.9894335, - 45.0160721 - ], - [ - -123.9868792, - 45.0160711 - ], - [ - -123.9843375, - 45.0160132 - ], - [ - -123.981771, - 45.0160184 - ], - [ - -123.9817019, - 45.0124952 - ], - [ - -123.9792936, - 45.0124907 - ], - [ - -123.9790371, - 45.0124903 - ], - [ - -123.9790332, - 45.012445 - ], - [ - -123.9794459, - 45.0124458 - ], - [ - -123.9794435, - 45.0119751 - ], - [ - -123.9794408, - 45.0114457 - ], - [ - -123.9791577, - 45.0108139 - ], - [ - -123.978341, - 45.0110094 - ], - [ - -123.9781753, - 45.0107348 - ], - [ - -123.978172, - 45.0107294 - ], - [ - -123.9781691, - 45.010724 - ], - [ - -123.9780981, - 45.0105919 - ], - [ - -123.9780243, - 45.0104047 - ], - [ - -123.9779785, - 45.010213 - ], - [ - -123.9779612, - 45.0100189 - ], - [ - -123.9805007, - 45.0100244 - ], - [ - -123.9805033, - 45.0106814 - ], - [ - -123.98115, - 45.0106671 - ], - [ - -123.9810611, - 45.0108914 - ], - [ - -123.9810596, - 45.0111702 - ], - [ - -123.9811245, - 45.0114366 - ], - [ - -123.9814009, - 45.0116144 - ], - [ - -123.9816986, - 45.0116798 - ], - [ - -123.981699, - 45.011766 - ], - [ - -123.981752, - 45.0117777 - ], - [ - -123.9819804, - 45.0117697 - ], - [ - -123.9823381, - 45.0116303 - ], - [ - -123.9830037, - 45.011574 - ], - [ - -123.9830159, - 45.0124976 - ], - [ - -123.9842645, - 45.0124999 - ], - [ - -123.9867114, - 45.0125043 - ], - [ - -123.986703, - 45.0104888 - ], - [ - -123.986819, - 45.010489 - ], - [ - -123.9868271, - 45.0125045 - ], - [ - -123.9868313, - 45.0127897 - ], - [ - -123.9872335, - 45.0127893 - ], - [ - -123.9872293, - 45.012504 - ], - [ - -123.9893767, - 45.0125016 - ], - [ - -123.9919263, - 45.0124987 - ], - [ - -123.9944798, - 45.0124958 - ], - [ - -123.9944362, - 45.0089171 - ], - [ - -123.991895, - 45.0089249 - ], - [ - -123.9893538, - 45.0089328 - ], - [ - -123.9868127, - 45.0089407 - ], - [ - -123.9867295, - 45.0053074 - ], - [ - -123.9867291, - 45.0052894 - ], - [ - -123.9860718, - 45.0052901 - ], - [ - -123.9853373, - 45.0052901 - ], - [ - -123.9853373, - 45.0053239 - ], - [ - -123.984857, - 45.005357 - ], - [ - -123.9844731, - 45.0054241 - ], - [ - -123.9833699, - 45.0056392 - ], - [ - -123.9833372, - 45.0054162 - ], - [ - -123.9824299, - 45.0054141 - ], - [ - -123.9823779, - 45.0052936 - ], - [ - -123.98221, - 45.0052938 - ], - [ - -123.9822022, - 45.0052938 - ], - [ - -123.9826103, - 45.0051739 - ], - [ - -123.9831877, - 45.0050043 - ], - [ - -123.9833341, - 45.0049562 - ], - [ - -123.9834724, - 45.0048975 - ], - [ - -123.9836013, - 45.0048289 - ], - [ - -123.9837193, - 45.0047511 - ], - [ - -123.9838252, - 45.004665 - ], - [ - -123.9838521, - 45.00464 - ], - [ - -123.9842213, - 45.0042909 - ], - [ - -123.984502, - 45.0040256 - ], - [ - -123.9869851, - 45.0016782 - ], - [ - -123.9870295, - 45.0016362 - ], - [ - -123.9871003, - 45.001559 - ], - [ - -123.9871028, - 45.0015566 - ], - [ - -123.9871053, - 45.0015543 - ], - [ - -123.9871078, - 45.001552 - ], - [ - -123.9871103, - 45.0015496 - ], - [ - -123.9871128, - 45.0015473 - ], - [ - -123.9871153, - 45.001545 - ], - [ - -123.9871178, - 45.0015427 - ], - [ - -123.9871203, - 45.0015403 - ], - [ - -123.9871228, - 45.001538 - ], - [ - -123.9871253, - 45.0015357 - ], - [ - -123.9871278, - 45.0015334 - ], - [ - -123.9871303, - 45.0015311 - ], - [ - -123.9871328, - 45.0015287 - ], - [ - -123.9871354, - 45.0015264 - ], - [ - -123.9871379, - 45.0015241 - ], - [ - -123.9871404, - 45.0015218 - ], - [ - -123.9871429, - 45.0015195 - ], - [ - -123.9871455, - 45.0015172 - ], - [ - -123.987148, - 45.0015149 - ], - [ - -123.9871505, - 45.0015126 - ], - [ - -123.987153, - 45.0015102 - ], - [ - -123.9871556, - 45.0015079 - ], - [ - -123.9871581, - 45.0015056 - ], - [ - -123.9871607, - 45.0015033 - ], - [ - -123.9871632, - 45.001501 - ], - [ - -123.9871658, - 45.0014987 - ], - [ - -123.9871683, - 45.0014964 - ], - [ - -123.9871709, - 45.0014941 - ], - [ - -123.9871734, - 45.0014918 - ], - [ - -123.987176, - 45.0014895 - ], - [ - -123.9871785, - 45.0014873 - ], - [ - -123.9871811, - 45.001485 - ], - [ - -123.9871837, - 45.0014827 - ], - [ - -123.9871862, - 45.0014804 - ], - [ - -123.9871888, - 45.0014781 - ], - [ - -123.9871914, - 45.0014758 - ], - [ - -123.987194, - 45.0014735 - ], - [ - -123.9871965, - 45.0014712 - ], - [ - -123.9871991, - 45.001469 - ], - [ - -123.9872017, - 45.0014667 - ], - [ - -123.9872043, - 45.0014644 - ], - [ - -123.9872069, - 45.0014621 - ], - [ - -123.9872094, - 45.0014599 - ], - [ - -123.987212, - 45.0014576 - ], - [ - -123.9872146, - 45.0014553 - ], - [ - -123.9872172, - 45.001453 - ], - [ - -123.9872198, - 45.0014508 - ], - [ - -123.9872224, - 45.0014485 - ], - [ - -123.987225, - 45.0014462 - ], - [ - -123.9872276, - 45.001444 - ], - [ - -123.9872303, - 45.0014417 - ], - [ - -123.9872329, - 45.0014394 - ], - [ - -123.9872355, - 45.0014372 - ], - [ - -123.9872381, - 45.0014349 - ], - [ - -123.9872407, - 45.0014327 - ], - [ - -123.9872433, - 45.0014304 - ], - [ - -123.987246, - 45.0014281 - ], - [ - -123.9872486, - 45.0014259 - ], - [ - -123.9872512, - 45.0014236 - ], - [ - -123.9872538, - 45.0014214 - ], - [ - -123.9872565, - 45.0014191 - ], - [ - -123.9872591, - 45.0014169 - ], - [ - -123.9872618, - 45.0014146 - ], - [ - -123.9872644, - 45.0014124 - ], - [ - -123.987267, - 45.0014101 - ], - [ - -123.9872697, - 45.0014079 - ], - [ - -123.9872723, - 45.0014057 - ], - [ - -123.987275, - 45.0014034 - ], - [ - -123.9872776, - 45.0014012 - ], - [ - -123.9872803, - 45.0013989 - ], - [ - -123.9872829, - 45.0013967 - ], - [ - -123.9872856, - 45.0013945 - ], - [ - -123.9872883, - 45.0013922 - ], - [ - -123.9872909, - 45.00139 - ], - [ - -123.9872936, - 45.0013878 - ], - [ - -123.9872963, - 45.0013855 - ], - [ - -123.9872989, - 45.0013833 - ], - [ - -123.9873016, - 45.0013811 - ], - [ - -123.9873043, - 45.0013789 - ], - [ - -123.987307, - 45.0013766 - ], - [ - -123.9873097, - 45.0013744 - ], - [ - -123.9873123, - 45.0013722 - ], - [ - -123.987315, - 45.00137 - ], - [ - -123.9873177, - 45.0013678 - ], - [ - -123.9873204, - 45.0013656 - ], - [ - -123.9873231, - 45.0013633 - ], - [ - -123.9873258, - 45.0013611 - ], - [ - -123.9873285, - 45.0013589 - ], - [ - -123.9873312, - 45.0013567 - ], - [ - -123.9873339, - 45.0013545 - ], - [ - -123.9873366, - 45.0013523 - ], - [ - -123.9873393, - 45.0013501 - ], - [ - -123.987342, - 45.0013479 - ], - [ - -123.9873447, - 45.0013457 - ], - [ - -123.9873475, - 45.0013435 - ], - [ - -123.9873502, - 45.0013413 - ], - [ - -123.9873529, - 45.0013391 - ], - [ - -123.9873556, - 45.0013369 - ], - [ - -123.9873583, - 45.0013347 - ], - [ - -123.9873611, - 45.0013325 - ], - [ - -123.9873638, - 45.0013303 - ], - [ - -123.9873665, - 45.0013281 - ], - [ - -123.9873693, - 45.0013259 - ], - [ - -123.987372, - 45.0013237 - ], - [ - -123.9873747, - 45.0013216 - ], - [ - -123.9873775, - 45.0013194 - ], - [ - -123.9873802, - 45.0013172 - ], - [ - -123.987383, - 45.001315 - ], - [ - -123.9873857, - 45.0013128 - ], - [ - -123.9873885, - 45.0013106 - ], - [ - -123.9873912, - 45.0013085 - ], - [ - -123.987394, - 45.0013063 - ], - [ - -123.9873967, - 45.0013041 - ], - [ - -123.9873995, - 45.0013019 - ], - [ - -123.9874023, - 45.0012998 - ], - [ - -123.987405, - 45.0012976 - ], - [ - -123.9874078, - 45.0012954 - ], - [ - -123.9874106, - 45.0012933 - ], - [ - -123.9874133, - 45.0012911 - ], - [ - -123.9874161, - 45.0012889 - ], - [ - -123.9874189, - 45.0012868 - ], - [ - -123.9874217, - 45.0012846 - ], - [ - -123.9874244, - 45.0012825 - ], - [ - -123.9874272, - 45.0012803 - ], - [ - -123.98743, - 45.0012781 - ], - [ - -123.9874328, - 45.001276 - ], - [ - -123.9874356, - 45.0012738 - ], - [ - -123.9874384, - 45.0012717 - ], - [ - -123.9874412, - 45.0012695 - ], - [ - -123.987444, - 45.0012674 - ], - [ - -123.9874468, - 45.0012652 - ], - [ - -123.9874496, - 45.0012631 - ], - [ - -123.9874524, - 45.001261 - ], - [ - -123.9874552, - 45.0012588 - ], - [ - -123.987458, - 45.0012567 - ], - [ - -123.9874608, - 45.0012545 - ], - [ - -123.9874636, - 45.0012524 - ], - [ - -123.9874664, - 45.0012503 - ], - [ - -123.9874693, - 45.0012481 - ], - [ - -123.9874721, - 45.001246 - ], - [ - -123.9874749, - 45.0012439 - ], - [ - -123.9874777, - 45.0012417 - ], - [ - -123.9874806, - 45.0012396 - ], - [ - -123.9874834, - 45.0012375 - ], - [ - -123.9874862, - 45.0012353 - ], - [ - -123.987489, - 45.0012332 - ], - [ - -123.9874919, - 45.0012311 - ], - [ - -123.9874947, - 45.001229 - ], - [ - -123.9874976, - 45.0012269 - ], - [ - -123.9875004, - 45.0012247 - ], - [ - -123.9875033, - 45.0012226 - ], - [ - -123.9875061, - 45.0012205 - ], - [ - -123.987509, - 45.0012184 - ], - [ - -123.9875118, - 45.0012163 - ], - [ - -123.9875147, - 45.0012142 - ], - [ - -123.9875175, - 45.0012121 - ], - [ - -123.9875204, - 45.00121 - ], - [ - -123.9875232, - 45.0012079 - ], - [ - -123.9875261, - 45.0012058 - ], - [ - -123.987529, - 45.0012036 - ], - [ - -123.9875318, - 45.0012015 - ], - [ - -123.9875347, - 45.0011994 - ], - [ - -123.9875376, - 45.0011973 - ], - [ - -123.9875405, - 45.0011953 - ], - [ - -123.9875433, - 45.0011932 - ], - [ - -123.9875462, - 45.0011911 - ], - [ - -123.9875491, - 45.001189 - ], - [ - -123.987552, - 45.0011869 - ], - [ - -123.9875549, - 45.0011848 - ], - [ - -123.9875578, - 45.0011827 - ], - [ - -123.9875606, - 45.0011806 - ], - [ - -123.9875635, - 45.0011785 - ], - [ - -123.9875664, - 45.0011765 - ], - [ - -123.9875693, - 45.0011744 - ], - [ - -123.9875722, - 45.0011723 - ], - [ - -123.9875751, - 45.0011702 - ], - [ - -123.987578, - 45.0011681 - ], - [ - -123.9875809, - 45.0011661 - ], - [ - -123.9875839, - 45.001164 - ], - [ - -123.9875868, - 45.0011619 - ], - [ - -123.9875897, - 45.0011599 - ], - [ - -123.9875926, - 45.0011578 - ], - [ - -123.9875955, - 45.0011557 - ], - [ - -123.9875984, - 45.0011537 - ], - [ - -123.9876014, - 45.0011516 - ], - [ - -123.9876043, - 45.0011495 - ], - [ - -123.9876072, - 45.0011475 - ], - [ - -123.9876101, - 45.0011454 - ], - [ - -123.9876131, - 45.0011434 - ], - [ - -123.987616, - 45.0011413 - ], - [ - -123.9876189, - 45.0011393 - ], - [ - -123.9876219, - 45.0011372 - ], - [ - -123.9876248, - 45.0011352 - ], - [ - -123.9876278, - 45.0011331 - ], - [ - -123.9876307, - 45.0011311 - ], - [ - -123.9876336, - 45.001129 - ], - [ - -123.9876366, - 45.001127 - ], - [ - -123.9876395, - 45.0011249 - ], - [ - -123.9876425, - 45.0011229 - ], - [ - -123.9876455, - 45.0011208 - ], - [ - -123.9876484, - 45.0011188 - ], - [ - -123.9876514, - 45.0011168 - ], - [ - -123.9876543, - 45.0011147 - ], - [ - -123.9876573, - 45.0011127 - ], - [ - -123.9876603, - 45.0011107 - ], - [ - -123.9876632, - 45.0011086 - ], - [ - -123.9876662, - 45.0011066 - ], - [ - -123.9876692, - 45.0011046 - ], - [ - -123.9876722, - 45.0011026 - ], - [ - -123.9876751, - 45.0011005 - ], - [ - -123.9876781, - 45.0010985 - ], - [ - -123.9876811, - 45.0010965 - ], - [ - -123.9876841, - 45.0010945 - ], - [ - -123.9876871, - 45.0010925 - ], - [ - -123.9876901, - 45.0010905 - ], - [ - -123.987693, - 45.0010884 - ], - [ - -123.987696, - 45.0010864 - ], - [ - -123.987699, - 45.0010844 - ], - [ - -123.987702, - 45.0010824 - ], - [ - -123.987705, - 45.0010804 - ], - [ - -123.987708, - 45.0010784 - ], - [ - -123.987711, - 45.0010764 - ], - [ - -123.987714, - 45.0010744 - ], - [ - -123.987717, - 45.0010724 - ], - [ - -123.9877201, - 45.0010704 - ], - [ - -123.9877231, - 45.0010684 - ], - [ - -123.9877261, - 45.0010664 - ], - [ - -123.9877291, - 45.0010644 - ], - [ - -123.9877321, - 45.0010624 - ], - [ - -123.9877351, - 45.0010604 - ], - [ - -123.9877382, - 45.0010584 - ], - [ - -123.9877412, - 45.0010565 - ], - [ - -123.9877442, - 45.0010545 - ], - [ - -123.9877472, - 45.0010525 - ], - [ - -123.9877503, - 45.0010505 - ], - [ - -123.9877533, - 45.0010485 - ], - [ - -123.9877563, - 45.0010465 - ], - [ - -123.9877594, - 45.0010446 - ], - [ - -123.9877624, - 45.0010426 - ], - [ - -123.9877655, - 45.0010406 - ], - [ - -123.9877685, - 45.0010386 - ], - [ - -123.9877716, - 45.0010367 - ], - [ - -123.9877746, - 45.0010347 - ], - [ - -123.9877777, - 45.0010327 - ], - [ - -123.9877807, - 45.0010308 - ], - [ - -123.9877838, - 45.0010288 - ], - [ - -123.9877868, - 45.0010268 - ], - [ - -123.9877899, - 45.0010249 - ], - [ - -123.9877929, - 45.0010229 - ], - [ - -123.987796, - 45.001021 - ], - [ - -123.9877991, - 45.001019 - ], - [ - -123.9878021, - 45.0010171 - ], - [ - -123.9878052, - 45.0010151 - ], - [ - -123.9878083, - 45.0010132 - ], - [ - -123.9878114, - 45.0010112 - ], - [ - -123.9878144, - 45.0010093 - ], - [ - -123.9878175, - 45.0010073 - ], - [ - -123.9878206, - 45.0010054 - ], - [ - -123.9878237, - 45.0010034 - ], - [ - -123.9878268, - 45.0010015 - ], - [ - -123.9878298, - 45.0009995 - ], - [ - -123.9878329, - 45.0009976 - ], - [ - -123.987836, - 45.0009957 - ], - [ - -123.9878391, - 45.0009937 - ], - [ - -123.9878422, - 45.0009918 - ], - [ - -123.9878453, - 45.0009899 - ], - [ - -123.9878484, - 45.0009879 - ], - [ - -123.9878515, - 45.000986 - ], - [ - -123.9878546, - 45.0009841 - ], - [ - -123.9878577, - 45.0009822 - ], - [ - -123.9878608, - 45.0009802 - ], - [ - -123.9878639, - 45.0009783 - ], - [ - -123.987867, - 45.0009764 - ], - [ - -123.9878702, - 45.0009745 - ], - [ - -123.9878733, - 45.0009726 - ], - [ - -123.9878764, - 45.0009707 - ], - [ - -123.9878795, - 45.0009688 - ], - [ - -123.9878826, - 45.0009668 - ], - [ - -123.9878858, - 45.0009649 - ], - [ - -123.9878889, - 45.000963 - ], - [ - -123.987892, - 45.0009611 - ], - [ - -123.9878951, - 45.0009592 - ], - [ - -123.9878983, - 45.0009573 - ], - [ - -123.9879014, - 45.0009554 - ], - [ - -123.9879045, - 45.0009535 - ], - [ - -123.9879077, - 45.0009516 - ], - [ - -123.9879108, - 45.0009497 - ], - [ - -123.987914, - 45.0009478 - ], - [ - -123.9879171, - 45.0009459 - ], - [ - -123.9879203, - 45.0009441 - ], - [ - -123.9879234, - 45.0009422 - ], - [ - -123.9879266, - 45.0009403 - ], - [ - -123.9879297, - 45.0009384 - ], - [ - -123.9879329, - 45.0009365 - ], - [ - -123.987936, - 45.0009346 - ], - [ - -123.9879392, - 45.0009327 - ], - [ - -123.9879423, - 45.0009309 - ], - [ - -123.9879455, - 45.000929 - ], - [ - -123.9879487, - 45.0009271 - ], - [ - -123.9879518, - 45.0009252 - ], - [ - -123.987955, - 45.0009234 - ], - [ - -123.9879582, - 45.0009215 - ], - [ - -123.9879613, - 45.0009196 - ], - [ - -123.9879645, - 45.0009178 - ], - [ - -123.9879677, - 45.0009159 - ], - [ - -123.9879709, - 45.000914 - ], - [ - -123.9879741, - 45.0009122 - ], - [ - -123.9879772, - 45.0009103 - ], - [ - -123.9879804, - 45.0009085 - ], - [ - -123.9879836, - 45.0009066 - ], - [ - -123.9879868, - 45.0009048 - ], - [ - -123.98799, - 45.0009029 - ], - [ - -123.9879932, - 45.0009011 - ], - [ - -123.9879964, - 45.0008992 - ], - [ - -123.9879996, - 45.0008974 - ], - [ - -123.9880028, - 45.0008955 - ], - [ - -123.988006, - 45.0008937 - ], - [ - -123.9880092, - 45.0008918 - ], - [ - -123.9880124, - 45.00089 - ], - [ - -123.9880156, - 45.0008882 - ], - [ - -123.9880188, - 45.0008863 - ], - [ - -123.988022, - 45.0008845 - ], - [ - -123.9880252, - 45.0008827 - ], - [ - -123.9880284, - 45.0008808 - ], - [ - -123.9880317, - 45.000879 - ], - [ - -123.9880349, - 45.0008772 - ], - [ - -123.9880381, - 45.0008753 - ], - [ - -123.9880413, - 45.0008735 - ], - [ - -123.9880445, - 45.0008717 - ], - [ - -123.9880478, - 45.0008699 - ], - [ - -123.988051, - 45.0008681 - ], - [ - -123.9880542, - 45.0008662 - ], - [ - -123.9880575, - 45.0008644 - ], - [ - -123.9880607, - 45.0008626 - ], - [ - -123.9880639, - 45.0008608 - ], - [ - -123.9880672, - 45.000859 - ], - [ - -123.9880704, - 45.0008572 - ], - [ - -123.9880737, - 45.0008554 - ], - [ - -123.9880769, - 45.0008536 - ], - [ - -123.9880801, - 45.0008518 - ], - [ - -123.9880834, - 45.00085 - ], - [ - -123.9880866, - 45.0008482 - ], - [ - -123.9880899, - 45.0008464 - ], - [ - -123.9880931, - 45.0008446 - ], - [ - -123.9880964, - 45.0008428 - ], - [ - -123.9880997, - 45.000841 - ], - [ - -123.9881029, - 45.0008392 - ], - [ - -123.9881062, - 45.0008374 - ], - [ - -123.9881094, - 45.0008356 - ], - [ - -123.9881127, - 45.0008338 - ], - [ - -123.988116, - 45.000832 - ], - [ - -123.9881193, - 45.0008303 - ], - [ - -123.9881225, - 45.0008285 - ], - [ - -123.9881258, - 45.0008267 - ], - [ - -123.9881291, - 45.0008249 - ], - [ - -123.9881323, - 45.0008232 - ], - [ - -123.9881356, - 45.0008214 - ], - [ - -123.9879111, - 45.0006671 - ], - [ - -123.9873562, - 45.0003196 - ], - [ - -123.9869959, - 45.0000809 - ], - [ - -123.9869638, - 45.0000653 - ], - [ - -123.9869686, - 45.0000588 - ], - [ - -123.9876764, - 44.9991043 - ], - [ - -123.9877738, - 44.9989729 - ], - [ - -123.9887466, - 44.9980164 - ], - [ - -123.9888379, - 44.9979365 - ], - [ - -123.9891099, - 44.9977307 - ], - [ - -123.9894107, - 44.9975462 - ], - [ - -123.9895569, - 44.9974695 - ], - [ - -123.9898937, - 44.9973196 - ], - [ - -123.9900062, - 44.9972768 - ], - [ - -123.9901317, - 44.9972311 - ], - [ - -123.9903711, - 44.9971439 - ], - [ - -123.9906579, - 44.9970395 - ], - [ - -123.9909847, - 44.9969204 - ], - [ - -123.9914004, - 44.996769 - ], - [ - -123.9915395, - 44.9967184 - ], - [ - -123.9914161, - 44.996367 - ], - [ - -123.9913345, - 44.9961343 - ], - [ - -123.9912625, - 44.9959291 - ], - [ - -123.9913274, - 44.9957363 - ], - [ - -123.9914016, - 44.9955161 - ], - [ - -123.9914753, - 44.9952958 - ], - [ - -123.9914756, - 44.9952951 - ], - [ - -123.9915542, - 44.9950501 - ], - [ - -123.9915542, - 44.99505 - ], - [ - -123.9915569, - 44.9950417 - ], - [ - -123.9916244, - 44.9948324 - ], - [ - -123.9920276, - 44.9948274 - ], - [ - -123.99252, - 44.9948213 - ], - [ - -123.9931476, - 44.9948132 - ], - [ - -123.9932141, - 44.9948123 - ], - [ - -123.9932257, - 44.9948122 - ], - [ - -123.9932458, - 44.9948734 - ], - [ - -123.9932369, - 44.9949417 - ], - [ - -123.9932439, - 44.9950084 - ], - [ - -123.9932682, - 44.9950491 - ], - [ - -123.993292, - 44.9951687 - ], - [ - -123.9932893, - 44.9952368 - ], - [ - -123.9932049, - 44.9953186 - ], - [ - -123.9931717, - 44.9953965 - ], - [ - -123.9931746, - 44.995452 - ], - [ - -123.9932112, - 44.9954782 - ], - [ - -123.9932341, - 44.995524 - ], - [ - -123.9933358, - 44.9955503 - ], - [ - -123.9934576, - 44.9955534 - ], - [ - -123.9936026, - 44.9955978 - ], - [ - -123.9936973, - 44.9956305 - ], - [ - -123.9938282, - 44.9956403 - ], - [ - -123.9939275, - 44.9956421 - ], - [ - -123.9939991, - 44.9956688 - ], - [ - -123.9941097, - 44.995691 - ], - [ - -123.9941948, - 44.9957618 - ], - [ - -123.9942105, - 44.9958079 - ], - [ - -123.994206, - 44.9958585 - ], - [ - -123.9942039, - 44.9958944 - ], - [ - -123.9941826, - 44.9959501 - ], - [ - -123.9940854, - 44.9960575 - ], - [ - -123.9940274, - 44.9961359 - ], - [ - -123.9939853, - 44.9962226 - ], - [ - -123.9939164, - 44.9962895 - ], - [ - -123.9938347, - 44.9963623 - ], - [ - -123.9937533, - 44.9964412 - ], - [ - -123.9937058, - 44.9965196 - ], - [ - -123.993638, - 44.9965894 - ], - [ - -123.9936112, - 44.9966714 - ], - [ - -123.9936026, - 44.9967462 - ], - [ - -123.993616, - 44.9968249 - ], - [ - -123.9936513, - 44.9969097 - ], - [ - -123.9937054, - 44.9969961 - ], - [ - -123.9937561, - 44.9970761 - ], - [ - -123.9937964, - 44.9971366 - ], - [ - -123.9938364, - 44.9971904 - ], - [ - -123.9938921, - 44.9972483 - ], - [ - -123.9939255, - 44.9972933 - ], - [ - -123.9939919, - 44.9973226 - ], - [ - -123.9940669, - 44.9973333 - ], - [ - -123.9941553, - 44.9973176 - ], - [ - -123.9942316, - 44.9973193 - ], - [ - -123.9942943, - 44.9973528 - ], - [ - -123.9944344, - 44.9975046 - ], - [ - -123.9944452, - 44.9975176 - ], - [ - -123.9945291, - 44.9976182 - ], - [ - -123.9946906, - 44.9976819 - ], - [ - -123.9949486, - 44.9976691 - ], - [ - -123.9950548, - 44.9975654 - ], - [ - -123.9951688, - 44.9974919 - ], - [ - -123.9953383, - 44.9973559 - ], - [ - -123.995613, - 44.9972102 - ], - [ - -123.9958511, - 44.9970912 - ], - [ - -123.9958931, - 44.9970938 - ], - [ - -123.9959031, - 44.9970944 - ], - [ - -123.9959929, - 44.997055 - ], - [ - -123.996241, - 44.9969706 - ], - [ - -123.9962641, - 44.9969628 - ], - [ - -123.9962818, - 44.9969567 - ], - [ - -123.9963155, - 44.9969208 - ], - [ - -123.996354, - 44.99688 - ], - [ - -123.9963582, - 44.9968565 - ], - [ - -123.9963775, - 44.99675 - ], - [ - -123.9963344, - 44.9966699 - ], - [ - -123.9964043, - 44.9964875 - ], - [ - -123.9964598, - 44.9963645 - ], - [ - -123.9965408, - 44.9963636 - ], - [ - -123.9966294, - 44.9963769 - ], - [ - -123.9966739, - 44.9964058 - ], - [ - -123.9966932, - 44.9963542 - ], - [ - -123.9965457, - 44.9963332 - ], - [ - -123.9964342, - 44.9963143 - ], - [ - -123.9963845, - 44.996238 - ], - [ - -123.9963845, - 44.9960945 - ], - [ - -123.9963845, - 44.9960529 - ], - [ - -123.9964155, - 44.9958971 - ], - [ - -123.996415, - 44.9958934 - ], - [ - -123.996395, - 44.9957294 - ], - [ - -123.9963468, - 44.9957317 - ], - [ - -123.9963804, - 44.9955704 - ], - [ - -123.9964096, - 44.9954298 - ], - [ - -123.9964674, - 44.9952334 - ], - [ - -123.9964149, - 44.9952222 - ], - [ - -123.9964095, - 44.9951806 - ], - [ - -123.9964022, - 44.9951253 - ], - [ - -123.9963982, - 44.9949483 - ], - [ - -123.9963566, - 44.9948236 - ], - [ - -123.9963387, - 44.99477 - ], - [ - -123.9963184, - 44.9947098 - ], - [ - -123.9962559, - 44.9946377 - ], - [ - -123.9962262, - 44.9946032 - ], - [ - -123.9961759, - 44.9945578 - ], - [ - -123.9961238, - 44.9945107 - ], - [ - -123.9959827, - 44.994523 - ], - [ - -123.9959619, - 44.9945073 - ], - [ - -123.9958717, - 44.9944397 - ], - [ - -123.9956884, - 44.9942787 - ], - [ - -123.9955975, - 44.9942178 - ], - [ - -123.9955335, - 44.9941749 - ], - [ - -123.9954341, - 44.9940879 - ], - [ - -123.9952958, - 44.9939668 - ], - [ - -123.9952187, - 44.9938915 - ], - [ - -123.9950995, - 44.993775 - ], - [ - -123.9951007, - 44.9936438 - ], - [ - -123.9951009, - 44.9936273 - ], - [ - -123.9951017, - 44.9935422 - ], - [ - -123.9950676, - 44.9935001 - ], - [ - -123.9950559, - 44.9934468 - ], - [ - -123.9950551, - 44.9934431 - ], - [ - -123.9951821, - 44.9933115 - ], - [ - -123.9952071, - 44.9932331 - ], - [ - -123.9952123, - 44.9932165 - ], - [ - -123.9952712, - 44.9931492 - ], - [ - -123.9954119, - 44.9930663 - ], - [ - -123.9954168, - 44.9930634 - ], - [ - -123.9956273, - 44.9930091 - ], - [ - -123.9957435, - 44.9929657 - ], - [ - -123.9959111, - 44.992903 - ], - [ - -123.9960135, - 44.9928882 - ], - [ - -123.996073, - 44.992857 - ], - [ - -123.9960807, - 44.9928445 - ], - [ - -123.9960992, - 44.9928144 - ], - [ - -123.9962009, - 44.9926495 - ], - [ - -123.9963126, - 44.9924683 - ], - [ - -123.9963232, - 44.9922875 - ], - [ - -123.9963289, - 44.9921892 - ], - [ - -123.9963303, - 44.9921664 - ], - [ - -123.9963351, - 44.9920253 - ], - [ - -123.9963377, - 44.9919485 - ], - [ - -123.9961159, - 44.9918581 - ], - [ - -123.9959173, - 44.9917771 - ], - [ - -123.9958901, - 44.9917712 - ], - [ - -123.9958519, - 44.99176 - ], - [ - -123.9956669, - 44.9916896 - ], - [ - -123.9956764, - 44.9916581 - ], - [ - -123.9955933, - 44.9916352 - ], - [ - -123.9955458, - 44.9916068 - ], - [ - -123.9955088, - 44.9915702 - ], - [ - -123.9954965, - 44.9915241 - ], - [ - -123.9954748, - 44.9915145 - ], - [ - -123.9954425, - 44.9915097 - ], - [ - -123.9954328, - 44.9915009 - ], - [ - -123.9954019, - 44.9914901 - ], - [ - -123.9952043, - 44.9914245 - ], - [ - -123.9952017, - 44.9914237 - ], - [ - -123.9951469, - 44.9914076 - ], - [ - -123.9949821, - 44.9912732 - ], - [ - -123.9950345, - 44.9911926 - ], - [ - -123.9950522, - 44.9910924 - ], - [ - -123.9951018, - 44.9910196 - ], - [ - -123.9951133, - 44.990977 - ], - [ - -123.9951587, - 44.9908526 - ], - [ - -123.9951625, - 44.9908423 - ], - [ - -123.9952328, - 44.9907189 - ], - [ - -123.9952424, - 44.990689 - ], - [ - -123.9952634, - 44.9906237 - ], - [ - -123.9952998, - 44.9905356 - ], - [ - -123.9953025, - 44.9905238 - ], - [ - -123.9953101, - 44.9904909 - ], - [ - -123.9953322, - 44.990383 - ], - [ - -123.9953326, - 44.9903614 - ], - [ - -123.9953349, - 44.9902572 - ], - [ - -123.9953252, - 44.9902087 - ], - [ - -123.9952975, - 44.9900709 - ], - [ - -123.9952966, - 44.9899711 - ], - [ - -123.9952643, - 44.9898685 - ], - [ - -123.9951627, - 44.9897829 - ], - [ - -123.9951176, - 44.989727 - ], - [ - -123.9950865, - 44.989705 - ], - [ - -123.995076, - 44.9896976 - ], - [ - -123.9949297, - 44.9895941 - ], - [ - -123.9948284, - 44.9895139 - ], - [ - -123.9947666, - 44.9894282 - ], - [ - -123.9946717, - 44.9890261 - ], - [ - -123.994655, - 44.9889804 - ], - [ - -123.9946203, - 44.9888854 - ], - [ - -123.9945431, - 44.988833 - ], - [ - -123.9942248, - 44.9886834 - ], - [ - -123.9939067, - 44.9885316 - ], - [ - -123.9936628, - 44.9883255 - ], - [ - -123.993581, - 44.988211 - ], - [ - -123.9935425, - 44.9880885 - ], - [ - -123.9935606, - 44.9878692 - ], - [ - -123.9935338, - 44.987734 - ], - [ - -123.9935634, - 44.9876837 - ], - [ - -123.9936021, - 44.9876178 - ], - [ - -123.9935782, - 44.9874838 - ], - [ - -123.9935824, - 44.9874727 - ], - [ - -123.9936123, - 44.9873953 - ], - [ - -123.993611, - 44.9872689 - ], - [ - -123.9936096, - 44.9871257 - ], - [ - -123.9935966, - 44.9870975 - ], - [ - -123.9935525, - 44.9870017 - ], - [ - -123.9935234, - 44.9869485 - ], - [ - -123.9934934, - 44.9869295 - ], - [ - -123.9933298, - 44.9868255 - ], - [ - -123.9933274, - 44.9868248 - ], - [ - -123.9931274, - 44.9867658 - ], - [ - -123.9930713, - 44.986722 - ], - [ - -123.9929055, - 44.9865927 - ], - [ - -123.9928884, - 44.9865795 - ], - [ - -123.9926881, - 44.9864255 - ], - [ - -123.9926315, - 44.9863391 - ], - [ - -123.9925995, - 44.9862903 - ], - [ - -123.9925446, - 44.9862063 - ], - [ - -123.9925248, - 44.9861761 - ], - [ - -123.9924468, - 44.9860954 - ], - [ - -123.9923642, - 44.9860099 - ], - [ - -123.992241, - 44.9858825 - ], - [ - -123.9921954, - 44.9858354 - ], - [ - -123.9921116, - 44.9857761 - ], - [ - -123.991951, - 44.9856625 - ], - [ - -123.9918949, - 44.9856227 - ], - [ - -123.9917268, - 44.9854454 - ], - [ - -123.9915967, - 44.9853081 - ], - [ - -123.9915877, - 44.9852872 - ], - [ - -123.9915217, - 44.9851578 - ], - [ - -123.9915023, - 44.9850477 - ], - [ - -123.9914923, - 44.9848833 - ], - [ - -123.9914934, - 44.984841 - ], - [ - -123.9915286, - 44.9847635 - ], - [ - -123.9915265, - 44.9847037 - ], - [ - -123.991503, - 44.9846518 - ], - [ - -123.9914725, - 44.9845919 - ], - [ - -123.9914116, - 44.9844721 - ], - [ - -123.9914069, - 44.9844629 - ], - [ - -123.9913002, - 44.9843569 - ], - [ - -123.9912224, - 44.9842796 - ], - [ - -123.9909872, - 44.9841669 - ], - [ - -123.9908182, - 44.9841738 - ], - [ - -123.990692, - 44.984179 - ], - [ - -123.990326, - 44.9842082 - ], - [ - -123.9902491, - 44.9841956 - ], - [ - -123.9902348, - 44.9841001 - ], - [ - -123.9903126, - 44.9839898 - ], - [ - -123.9905042, - 44.9838729 - ], - [ - -123.9907595, - 44.9837602 - ], - [ - -123.9910111, - 44.9836549 - ], - [ - -123.9910814, - 44.9836703 - ], - [ - -123.9911082, - 44.9836546 - ], - [ - -123.9912988, - 44.9835281 - ], - [ - -123.9913105, - 44.9835253 - ], - [ - -123.9915697, - 44.9834628 - ], - [ - -123.9916386, - 44.9834288 - ], - [ - -123.9917129, - 44.983426 - ], - [ - -123.9917924, - 44.9833727 - ], - [ - -123.9918618, - 44.9833642 - ], - [ - -123.9919316, - 44.9833467 - ], - [ - -123.9923182, - 44.9833322 - ], - [ - -123.9923565, - 44.9833307 - ], - [ - -123.9925108, - 44.9833079 - ], - [ - -123.9925869, - 44.9832967 - ], - [ - -123.9926739, - 44.983198 - ], - [ - -123.9926999, - 44.9831867 - ], - [ - -123.992851, - 44.9831207 - ], - [ - -123.9928927, - 44.9830082 - ], - [ - -123.9928982, - 44.9829933 - ], - [ - -123.9931065, - 44.982804 - ], - [ - -123.9932762, - 44.9827026 - ], - [ - -123.9933921, - 44.9826333 - ], - [ - -123.9936471, - 44.9825865 - ], - [ - -123.9936588, - 44.982587 - ], - [ - -123.9939396, - 44.9825985 - ], - [ - -123.9939686, - 44.9826074 - ], - [ - -123.9943058, - 44.9827102 - ], - [ - -123.9943623, - 44.9826949 - ], - [ - -123.9947674, - 44.9825851 - ], - [ - -123.9949088, - 44.9825573 - ], - [ - -123.9951424, - 44.9825663 - ], - [ - -123.9951741, - 44.9825775 - ], - [ - -123.9954647, - 44.9826809 - ], - [ - -123.995561, - 44.9825868 - ], - [ - -123.9956107, - 44.9825383 - ], - [ - -123.9956748, - 44.9821932 - ], - [ - -123.9956989, - 44.982064 - ], - [ - -123.9957014, - 44.9820553 - ], - [ - -123.9958015, - 44.9817157 - ], - [ - -123.9958489, - 44.9815566 - ], - [ - -123.9958439, - 44.9815554 - ], - [ - -123.9955702, - 44.9814911 - ], - [ - -123.9955664, - 44.9814873 - ], - [ - -123.9955632, - 44.9814865 - ], - [ - -123.9954336, - 44.9813585 - ], - [ - -123.9954262, - 44.9813551 - ], - [ - -123.9953405, - 44.981316 - ], - [ - -123.9953363, - 44.9813127 - ], - [ - -123.9953336, - 44.9813115 - ], - [ - -123.9952021, - 44.9812095 - ], - [ - -123.9950278, - 44.9812477 - ], - [ - -123.9949263, - 44.9812478 - ], - [ - -123.9948922, - 44.9812313 - ], - [ - -123.9948604, - 44.9812158 - ], - [ - -123.9948043, - 44.9811886 - ], - [ - -123.9948032, - 44.9811869 - ], - [ - -123.9947973, - 44.981184 - ], - [ - -123.9947179, - 44.9810606 - ], - [ - -123.9946752, - 44.980915 - ], - [ - -123.9946853, - 44.9808847 - ], - [ - -123.994695, - 44.9808554 - ], - [ - -123.9947395, - 44.9807211 - ], - [ - -123.9947388, - 44.9806682 - ], - [ - -123.9947385, - 44.980639 - ], - [ - -123.9947368, - 44.9805018 - ], - [ - -123.9947363, - 44.9804604 - ], - [ - -123.9947358, - 44.9803108 - ], - [ - -123.9947334, - 44.980297 - ], - [ - -123.9947038, - 44.9801319 - ], - [ - -123.9946057, - 44.979979 - ], - [ - -123.9943212, - 44.9797509 - ], - [ - -123.9941648, - 44.9795428 - ], - [ - -123.9941486, - 44.9794962 - ], - [ - -123.9940981, - 44.97935 - ], - [ - -123.9940164, - 44.9792429 - ], - [ - -123.9939609, - 44.97917 - ], - [ - -123.9937611, - 44.9790484 - ], - [ - -123.9937612, - 44.9790481 - ], - [ - -123.9937541, - 44.9790438 - ], - [ - -123.9938087, - 44.9788293 - ], - [ - -123.9939463, - 44.9787291 - ], - [ - -123.9940199, - 44.9786124 - ], - [ - -123.9940581, - 44.9785518 - ], - [ - -123.9942692, - 44.9784176 - ], - [ - -123.994286, - 44.9784069 - ], - [ - -123.9944971, - 44.9782685 - ], - [ - -123.9946315, - 44.9781804 - ], - [ - -123.9946737, - 44.978162 - ], - [ - -123.9947248, - 44.9781397 - ], - [ - -123.9949239, - 44.9780451 - ], - [ - -123.9950703, - 44.9779755 - ], - [ - -123.9951489, - 44.9779565 - ], - [ - -123.9953634, - 44.9778613 - ], - [ - -123.9955125, - 44.9777951 - ], - [ - -123.9955687, - 44.9777817 - ], - [ - -123.9955996, - 44.9777634 - ], - [ - -123.9957704, - 44.9776153 - ], - [ - -123.9957665, - 44.9775515 - ], - [ - -123.9957611, - 44.9774627 - ], - [ - -123.9957004, - 44.9771618 - ], - [ - -123.9956655, - 44.9770065 - ], - [ - -123.9955797, - 44.976915 - ], - [ - -123.9955498, - 44.9768409 - ], - [ - -123.9954725, - 44.9767359 - ], - [ - -123.9953672, - 44.9765929 - ], - [ - -123.995365, - 44.9765899 - ], - [ - -123.995173, - 44.976514 - ], - [ - -123.995166, - 44.9765094 - ], - [ - -123.9950829, - 44.9764554 - ], - [ - -123.9950759, - 44.9764508 - ], - [ - -123.9950657, - 44.9763715 - ], - [ - -123.9950558, - 44.9762941 - ], - [ - -123.9950561, - 44.9762449 - ], - [ - -123.9950335, - 44.9762212 - ], - [ - -123.9950142, - 44.9761835 - ], - [ - -123.9950196, - 44.9761438 - ], - [ - -123.9950532, - 44.976132 - ], - [ - -123.9950582, - 44.9761372 - ], - [ - -123.9950602, - 44.9761365 - ], - [ - -123.9950774, - 44.9761545 - ], - [ - -123.9951213, - 44.9761688 - ], - [ - -123.9951452, - 44.9761659 - ], - [ - -123.9951622, - 44.9761555 - ], - [ - -123.9951908, - 44.9761277 - ], - [ - -123.9952102, - 44.9760927 - ], - [ - -123.9952398, - 44.9759528 - ], - [ - -123.9953008, - 44.9758436 - ], - [ - -123.995357, - 44.9757431 - ], - [ - -123.9953728, - 44.9757136 - ], - [ - -123.9953766, - 44.9757066 - ], - [ - -123.9954348, - 44.9755983 - ], - [ - -123.9954385, - 44.9755949 - ], - [ - -123.9955709, - 44.9754727 - ], - [ - -123.9955777, - 44.9754555 - ], - [ - -123.9956186, - 44.9753528 - ], - [ - -123.9956383, - 44.9753252 - ], - [ - -123.9957218, - 44.9752087 - ], - [ - -123.995729, - 44.9751958 - ], - [ - -123.995845, - 44.9749888 - ], - [ - -123.9958455, - 44.9749878 - ], - [ - -123.9958069, - 44.9749651 - ], - [ - -123.9958071, - 44.9749648 - ], - [ - -123.9957999, - 44.9749605 - ], - [ - -123.9959123, - 44.9748281 - ], - [ - -123.9959232, - 44.9747259 - ], - [ - -123.9959257, - 44.9747018 - ], - [ - -123.9960057, - 44.9745224 - ], - [ - -123.9960397, - 44.9744409 - ], - [ - -123.9960665, - 44.9743767 - ], - [ - -123.9959967, - 44.9742261 - ], - [ - -123.9960009, - 44.9741372 - ], - [ - -123.9960022, - 44.974109 - ], - [ - -123.9960659, - 44.9739327 - ], - [ - -123.9961726, - 44.9738901 - ], - [ - -123.9961917, - 44.9738824 - ], - [ - -123.9964838, - 44.9736456 - ], - [ - -123.9965504, - 44.9736217 - ], - [ - -123.9965957, - 44.9736054 - ], - [ - -123.9966757, - 44.9735692 - ], - [ - -123.9967025, - 44.9735234 - ], - [ - -123.9967665, - 44.9735334 - ], - [ - -123.9969471, - 44.973498 - ], - [ - -123.9971654, - 44.9734552 - ], - [ - -123.9971286, - 44.9733857 - ], - [ - -123.9972116, - 44.9733983 - ], - [ - -123.9973303, - 44.9734266 - ], - [ - -123.9973663, - 44.973393 - ], - [ - -123.9974186, - 44.9733834 - ], - [ - -123.997467, - 44.9734095 - ], - [ - -123.9975291, - 44.9734488 - ], - [ - -123.9976359, - 44.9734516 - ], - [ - -123.9976998, - 44.9734727 - ], - [ - -123.9977384, - 44.9734853 - ], - [ - -123.9977902, - 44.9734825 - ], - [ - -123.9978252, - 44.9734735 - ], - [ - -123.9978575, - 44.9734921 - ], - [ - -123.9978578, - 44.9734928 - ], - [ - -123.9978645, - 44.9734967 - ], - [ - -123.9978736, - 44.9735191 - ], - [ - -123.997855, - 44.9735406 - ], - [ - -123.9978869, - 44.9735757 - ], - [ - -123.9979132, - 44.9736093 - ], - [ - -123.9979114, - 44.9736163 - ], - [ - -123.9979062, - 44.9736366 - ], - [ - -123.9979187, - 44.973675 - ], - [ - -123.9979443, - 44.9736884 - ], - [ - -123.9980037, - 44.9736687 - ], - [ - -123.9980446, - 44.9736853 - ], - [ - -123.9980021, - 44.9737271 - ], - [ - -123.9980042, - 44.9737474 - ], - [ - -123.9980325, - 44.9737614 - ], - [ - -123.9980613, - 44.9737757 - ], - [ - -123.9981624, - 44.9738081 - ], - [ - -123.9982106, - 44.9738134 - ], - [ - -123.9982418, - 44.9738167 - ], - [ - -123.9983454, - 44.9738111 - ], - [ - -123.9983889, - 44.9738147 - ], - [ - -123.9984553, - 44.9738073 - ], - [ - -123.998571, - 44.9737944 - ], - [ - -123.9985674, - 44.973772 - ], - [ - -123.998636, - 44.9737592 - ], - [ - -123.9986922, - 44.9737536 - ], - [ - -123.9989209, - 44.9737609 - ], - [ - -123.9991139, - 44.9737504 - ], - [ - -123.9992017, - 44.9737431 - ], - [ - -123.9993007, - 44.9737431 - ], - [ - -123.9995335, - 44.9737235 - ], - [ - -123.9996152, - 44.9737225 - ], - [ - -123.9996627, - 44.973689 - ], - [ - -123.9996831, - 44.973677 - ], - [ - -123.9997312, - 44.9736487 - ], - [ - -123.9998767, - 44.9736267 - ], - [ - -123.9999081, - 44.9736219 - ], - [ - -124.0000799, - 44.9735898 - ], - [ - -124.0001038, - 44.9735854 - ], - [ - -124.0001946, - 44.9735917 - ], - [ - -124.0002986, - 44.9735547 - ], - [ - -124.000306, - 44.9735211 - ], - [ - -124.0003099, - 44.9735038 - ], - [ - -124.0003051, - 44.9734593 - ], - [ - -124.0001373, - 44.9734484 - ], - [ - -124.0001726, - 44.9733062 - ], - [ - -124.0001767, - 44.9732897 - ], - [ - -124.0001207, - 44.9731846 - ], - [ - -123.9999892, - 44.9730921 - ], - [ - -124.0001023, - 44.9730183 - ], - [ - -124.0001621, - 44.973018 - ], - [ - -124.0002372, - 44.9729966 - ], - [ - -124.0002805, - 44.9729631 - ], - [ - -124.0003227, - 44.9729106 - ], - [ - -124.0003381, - 44.9728962 - ], - [ - -124.0003834, - 44.9728538 - ], - [ - -124.0004568, - 44.9727978 - ], - [ - -124.0005182, - 44.9727509 - ], - [ - -124.0005312, - 44.9727409 - ], - [ - -124.0005833, - 44.9726471 - ], - [ - -124.0006061, - 44.972601 - ], - [ - -124.0006084, - 44.9725962 - ], - [ - -124.0006641, - 44.9724837 - ], - [ - -124.0007071, - 44.9724026 - ], - [ - -124.0007904, - 44.9722458 - ], - [ - -124.0008711, - 44.972205 - ], - [ - -124.0011165, - 44.9720807 - ], - [ - -124.0012667, - 44.9720047 - ], - [ - -124.0013375, - 44.9719462 - ], - [ - -124.00134, - 44.9719441 - ], - [ - -124.0015452, - 44.9718558 - ], - [ - -124.0015804, - 44.9718404 - ], - [ - -124.0018179, - 44.9717359 - ], - [ - -124.0018304, - 44.9717305 - ], - [ - -124.0018628, - 44.971673 - ], - [ - -124.0020525, - 44.9716253 - ], - [ - -124.0020583, - 44.97163 - ], - [ - -124.002078, - 44.9716391 - ], - [ - -124.0021313, - 44.9716442 - ], - [ - -124.0021837, - 44.9716189 - ], - [ - -124.0022933, - 44.9716206 - ], - [ - -124.0023431, - 44.9716213 - ], - [ - -124.0024194, - 44.9716098 - ], - [ - -124.0024863, - 44.9716013 - ], - [ - -124.0025937, - 44.9715877 - ], - [ - -124.0026793, - 44.9715851 - ], - [ - -124.0028726, - 44.9715791 - ], - [ - -124.0028808, - 44.9715788 - ], - [ - -124.003078, - 44.9715709 - ], - [ - -124.003172, - 44.9715535 - ], - [ - -124.0032395, - 44.9715359 - ], - [ - -124.0032908, - 44.9715225 - ], - [ - -124.0034712, - 44.9715202 - ], - [ - -124.0034887, - 44.97152 - ], - [ - -124.0037149, - 44.9715274 - ], - [ - -124.0038843, - 44.9715329 - ], - [ - -124.0039601, - 44.9715691 - ], - [ - -124.0039765, - 44.9715769 - ], - [ - -124.0042174, - 44.9715727 - ], - [ - -124.0043908, - 44.9716232 - ], - [ - -124.004568, - 44.9717009 - ], - [ - -124.0046752, - 44.9717097 - ], - [ - -124.0046949, - 44.9716855 - ], - [ - -124.0048405, - 44.9716566 - ], - [ - -124.005064, - 44.9716123 - ], - [ - -124.0050547, - 44.9715958 - ], - [ - -124.0052695, - 44.9715432 - ], - [ - -124.0053406, - 44.9715525 - ], - [ - -124.005396, - 44.971591 - ], - [ - -124.005402, - 44.971598 - ], - [ - -124.0056062, - 44.9715665 - ], - [ - -124.0057779, - 44.9715401 - ], - [ - -124.0058084, - 44.9714807 - ], - [ - -124.0058852, - 44.9714149 - ], - [ - -124.0059529, - 44.9714049 - ], - [ - -124.0060047, - 44.9713972 - ], - [ - -124.0062002, - 44.9714272 - ], - [ - -124.0063723, - 44.9714536 - ], - [ - -124.0064705, - 44.9714484 - ], - [ - -124.0064862, - 44.9714476 - ], - [ - -124.0066022, - 44.9714313 - ], - [ - -124.0067223, - 44.9714144 - ], - [ - -124.0067614, - 44.9713895 - ], - [ - -124.0068184, - 44.9713938 - ], - [ - -124.0068408, - 44.9713954 - ], - [ - -124.0069482, - 44.9713604 - ], - [ - -124.0070592, - 44.971304 - ], - [ - -124.0071066, - 44.9712799 - ], - [ - -124.0072221, - 44.9712063 - ], - [ - -124.0073226, - 44.9711421 - ], - [ - -124.0073699, - 44.9711169 - ], - [ - -124.0075075, - 44.9710437 - ], - [ - -124.0075248, - 44.9710347 - ], - [ - -124.0076784, - 44.9709547 - ], - [ - -124.0076861, - 44.9709506 - ], - [ - -124.0078044, - 44.9709011 - ], - [ - -124.0078442, - 44.9708845 - ], - [ - -124.0079271, - 44.9708499 - ], - [ - -124.0079681, - 44.9708328 - ], - [ - -124.0079878, - 44.9708246 - ], - [ - -124.0080054, - 44.9708197 - ], - [ - -124.0080464, - 44.9708085 - ], - [ - -124.0080873, - 44.9707972 - ], - [ - -124.0081028, - 44.970793 - ], - [ - -124.0081209, - 44.9707824 - ], - [ - -124.00815, - 44.9707655 - ], - [ - -124.0081643, - 44.9707572 - ], - [ - -124.0081777, - 44.9707478 - ], - [ - -124.0082127, - 44.9707234 - ], - [ - -124.008243, - 44.9707023 - ], - [ - -124.0082734, - 44.9706812 - ], - [ - -124.0083069, - 44.9706578 - ], - [ - -124.0083405, - 44.9706344 - ], - [ - -124.0083741, - 44.970611 - ], - [ - -124.0084105, - 44.9705857 - ], - [ - -124.008444, - 44.9705623 - ], - [ - -124.0084665, - 44.9705466 - ], - [ - -124.0084504, - 44.9705112 - ], - [ - -124.0084011, - 44.9704028 - ], - [ - -124.0083726, - 44.9703404 - ], - [ - -124.0082655, - 44.9702533 - ], - [ - -124.0082627, - 44.9702081 - ], - [ - -124.0082653, - 44.9702056 - ], - [ - -124.0082942, - 44.9701776 - ], - [ - -124.0083108, - 44.9701614 - ], - [ - -124.0083202, - 44.9701471 - ], - [ - -124.0084157, - 44.9700044 - ], - [ - -124.0084092, - 44.9699232 - ], - [ - -124.0084461, - 44.9698769 - ], - [ - -124.008597, - 44.9696371 - ], - [ - -124.0086467, - 44.9696175 - ], - [ - -124.0088185, - 44.9695127 - ], - [ - -124.0090788, - 44.9693961 - ], - [ - -124.0092131, - 44.9693016 - ], - [ - -124.0091617, - 44.9692941 - ], - [ - -124.0095015, - 44.9692294 - ], - [ - -124.0096224, - 44.9691632 - ], - [ - -124.0090866, - 44.968106 - ], - [ - -124.0090219, - 44.9677489 - ], - [ - -124.0088419, - 44.9676657 - ], - [ - -124.0086282, - 44.9675179 - ], - [ - -124.0083652, - 44.9673988 - ], - [ - -124.0080805, - 44.967344 - ], - [ - -124.0077979, - 44.9672285 - ], - [ - -124.0075916, - 44.9671792 - ], - [ - -124.0075449, - 44.9671607 - ], - [ - -124.0072758, - 44.9670315 - ], - [ - -124.0070066, - 44.966932 - ], - [ - -124.006718, - 44.9668137 - ], - [ - -124.0064844, - 44.9667573 - ], - [ - -124.0060765, - 44.966779 - ], - [ - -124.0058495, - 44.9668314 - ], - [ - -124.0054821, - 44.9668882 - ], - [ - -124.0051822, - 44.9668968 - ], - [ - -124.0050941, - 44.96692 - ], - [ - -124.0050925, - 44.9670001 - ], - [ - -124.0049555, - 44.9670588 - ], - [ - -124.0046508, - 44.9670955 - ], - [ - -124.004577, - 44.9671431 - ], - [ - -124.0045181, - 44.9672267 - ], - [ - -124.0043666, - 44.9672586 - ], - [ - -124.0043325, - 44.9672643 - ], - [ - -124.0043325, - 44.9663106 - ], - [ - -124.0043325, - 44.9662009 - ], - [ - -124.0043325, - 44.9660533 - ], - [ - -124.0043325, - 44.9660363 - ], - [ - -124.0043325, - 44.9659814 - ], - [ - -124.0043325, - 44.9659648 - ], - [ - -124.0043325, - 44.965762 - ], - [ - -124.0043325, - 44.9655837 - ], - [ - -124.0043325, - 44.9652134 - ], - [ - -124.0043325, - 44.9648842 - ], - [ - -124.0043325, - 44.9647197 - ], - [ - -124.0043325, - 44.9646155 - ], - [ - -124.0043308, - 44.9644454 - ], - [ - -124.0043028, - 44.9616326 - ], - [ - -124.0043012, - 44.9614679 - ], - [ - -124.0042963, - 44.9609738 - ], - [ - -124.0042701, - 44.9583444 - ], - [ - -124.004268, - 44.9581286 - ], - [ - -124.004263, - 44.9576223 - ], - [ - -124.0042619, - 44.9575151 - ], - [ - -124.0042606, - 44.957387 - ], - [ - -124.0042601, - 44.9573388 - ], - [ - -124.0042601, - 44.9573322 - ], - [ - -124.004256, - 44.956236 - ], - [ - -124.004247, - 44.9538544 - ], - [ - -124.004709, - 44.9538619 - ], - [ - -124.0050953, - 44.9538665 - ], - [ - -124.005249, - 44.9538684 - ], - [ - -124.0057537, - 44.9538744 - ], - [ - -124.006156, - 44.9538792 - ], - [ - -124.0063161, - 44.9538811 - ], - [ - -124.0067151, - 44.9538905 - ], - [ - -124.0071124, - 44.9538998 - ], - [ - -124.007272, - 44.9539031 - ], - [ - -124.007737, - 44.9539106 - ], - [ - -124.0080872, - 44.9539162 - ], - [ - -124.0083653, - 44.9539207 - ], - [ - -124.0086434, - 44.9539252 - ], - [ - -124.0089215, - 44.9539296 - ], - [ - -124.0091996, - 44.9539341 - ], - [ - -124.0095163, - 44.95394 - ], - [ - -124.00951, - 44.9534584 - ], - [ - -124.0094932, - 44.9521689 - ], - [ - -124.0094695, - 44.9503522 - ], - [ - -124.0098435, - 44.9503599 - ], - [ - -124.0099219, - 44.9503615 - ], - [ - -124.0100002, - 44.9503631 - ], - [ - -124.0107246, - 44.9503779 - ], - [ - -124.0115149, - 44.950394 - ], - [ - -124.0126726, - 44.9504177 - ], - [ - -124.0132778, - 44.95043 - ], - [ - -124.0138551, - 44.9504463 - ], - [ - -124.0138562, - 44.9504438 - ], - [ - -124.0138572, - 44.9504413 - ], - [ - -124.0138583, - 44.9504388 - ], - [ - -124.0138594, - 44.9504364 - ], - [ - -124.0138604, - 44.9504339 - ], - [ - -124.0138615, - 44.9504314 - ], - [ - -124.0138626, - 44.950429 - ], - [ - -124.0138637, - 44.9504265 - ], - [ - -124.0138648, - 44.950424 - ], - [ - -124.0138659, - 44.9504216 - ], - [ - -124.013867, - 44.9504191 - ], - [ - -124.0138681, - 44.9504166 - ], - [ - -124.0138692, - 44.9504142 - ], - [ - -124.0138703, - 44.9504117 - ], - [ - -124.0138714, - 44.9504092 - ], - [ - -124.0138725, - 44.9504068 - ], - [ - -124.0138736, - 44.9504043 - ], - [ - -124.0138747, - 44.9504019 - ], - [ - -124.0138758, - 44.9503994 - ], - [ - -124.013877, - 44.9503969 - ], - [ - -124.0138781, - 44.9503945 - ], - [ - -124.0138792, - 44.950392 - ], - [ - -124.0138803, - 44.9503896 - ], - [ - -124.0138815, - 44.9503871 - ], - [ - -124.0138826, - 44.9503847 - ], - [ - -124.0138838, - 44.9503822 - ], - [ - -124.0138849, - 44.9503798 - ], - [ - -124.0138861, - 44.9503773 - ], - [ - -124.0138872, - 44.9503749 - ], - [ - -124.0138884, - 44.9503724 - ], - [ - -124.0138895, - 44.95037 - ], - [ - -124.0138907, - 44.9503675 - ], - [ - -124.0138919, - 44.9503651 - ], - [ - -124.013893, - 44.9503626 - ], - [ - -124.0138942, - 44.9503602 - ], - [ - -124.0138954, - 44.9503577 - ], - [ - -124.0138966, - 44.9503553 - ], - [ - -124.0138978, - 44.9503528 - ], - [ - -124.0138989, - 44.9503504 - ], - [ - -124.0139001, - 44.9503479 - ], - [ - -124.0139013, - 44.9503455 - ], - [ - -124.0139025, - 44.9503431 - ], - [ - -124.0139037, - 44.9503406 - ], - [ - -124.013905, - 44.9503381 - ], - [ - -124.0139062, - 44.9503355 - ], - [ - -124.0139075, - 44.950333 - ], - [ - -124.0139087, - 44.9503305 - ], - [ - -124.01391, - 44.9503279 - ], - [ - -124.0139113, - 44.9503254 - ], - [ - -124.0139125, - 44.9503229 - ], - [ - -124.0139138, - 44.9503204 - ], - [ - -124.0139151, - 44.9503178 - ], - [ - -124.0139164, - 44.9503153 - ], - [ - -124.0139177, - 44.9503128 - ], - [ - -124.013919, - 44.9503102 - ], - [ - -124.0139202, - 44.9503077 - ], - [ - -124.0139215, - 44.9503052 - ], - [ - -124.0139228, - 44.9503027 - ], - [ - -124.0139241, - 44.9503001 - ], - [ - -124.0139254, - 44.9502976 - ], - [ - -124.0139268, - 44.9502951 - ], - [ - -124.0139281, - 44.9502926 - ], - [ - -124.0139294, - 44.9502901 - ], - [ - -124.0139307, - 44.9502876 - ], - [ - -124.013932, - 44.950285 - ], - [ - -124.0139334, - 44.9502825 - ], - [ - -124.0139347, - 44.95028 - ], - [ - -124.013936, - 44.9502775 - ], - [ - -124.0139374, - 44.950275 - ], - [ - -124.0139387, - 44.9502725 - ], - [ - -124.01394, - 44.95027 - ], - [ - -124.0139414, - 44.9502674 - ], - [ - -124.0139427, - 44.9502649 - ], - [ - -124.0139441, - 44.9502624 - ], - [ - -124.0139455, - 44.9502599 - ], - [ - -124.0139468, - 44.9502574 - ], - [ - -124.0139482, - 44.9502549 - ], - [ - -124.0139496, - 44.9502524 - ], - [ - -124.0139509, - 44.9502499 - ], - [ - -124.0139523, - 44.9502474 - ], - [ - -124.0139537, - 44.9502449 - ], - [ - -124.0139551, - 44.9502424 - ], - [ - -124.0139565, - 44.9502399 - ], - [ - -124.0139578, - 44.9502374 - ], - [ - -124.0139592, - 44.9502349 - ], - [ - -124.0139606, - 44.9502324 - ], - [ - -124.013962, - 44.9502299 - ], - [ - -124.0139634, - 44.9502274 - ], - [ - -124.0139648, - 44.9502249 - ], - [ - -124.0139663, - 44.9502224 - ], - [ - -124.0139677, - 44.9502199 - ], - [ - -124.0139691, - 44.9502174 - ], - [ - -124.0139705, - 44.950215 - ], - [ - -124.0139719, - 44.9502125 - ], - [ - -124.0139734, - 44.95021 - ], - [ - -124.0139748, - 44.9502075 - ], - [ - -124.0139762, - 44.950205 - ], - [ - -124.0139777, - 44.9502025 - ], - [ - -124.0139791, - 44.9502 - ], - [ - -124.0139805, - 44.9501976 - ], - [ - -124.013982, - 44.9501951 - ], - [ - -124.0139834, - 44.9501926 - ], - [ - -124.0139849, - 44.9501901 - ], - [ - -124.0139864, - 44.9501876 - ], - [ - -124.0139878, - 44.9501852 - ], - [ - -124.0139893, - 44.9501827 - ], - [ - -124.0139908, - 44.9501802 - ], - [ - -124.0139922, - 44.9501777 - ], - [ - -124.0139937, - 44.9501753 - ], - [ - -124.0139952, - 44.9501728 - ], - [ - -124.0139967, - 44.9501703 - ], - [ - -124.0139982, - 44.9501678 - ], - [ - -124.0139996, - 44.9501654 - ], - [ - -124.0140011, - 44.9501629 - ], - [ - -124.0140026, - 44.9501604 - ], - [ - -124.0140041, - 44.950158 - ], - [ - -124.0140056, - 44.9501555 - ], - [ - -124.0140071, - 44.950153 - ], - [ - -124.0140087, - 44.9501506 - ], - [ - -124.0140102, - 44.9501481 - ], - [ - -124.0140117, - 44.9501457 - ], - [ - -124.0140132, - 44.9501432 - ], - [ - -124.0140147, - 44.9501407 - ], - [ - -124.0140163, - 44.9501383 - ], - [ - -124.0140178, - 44.9501358 - ], - [ - -124.0140193, - 44.9501334 - ], - [ - -124.0140209, - 44.9501309 - ], - [ - -124.0140224, - 44.9501285 - ], - [ - -124.0140239, - 44.950126 - ], - [ - -124.0140255, - 44.9501236 - ], - [ - -124.014027, - 44.9501211 - ], - [ - -124.0140286, - 44.9501187 - ], - [ - -124.0140302, - 44.9501162 - ], - [ - -124.0140317, - 44.9501138 - ], - [ - -124.0140333, - 44.9501113 - ], - [ - -124.0140348, - 44.9501089 - ], - [ - -124.0140364, - 44.9501064 - ], - [ - -124.014038, - 44.950104 - ], - [ - -124.0140396, - 44.9501015 - ], - [ - -124.0140412, - 44.9500991 - ], - [ - -124.0140427, - 44.9500967 - ], - [ - -124.0140443, - 44.9500942 - ], - [ - -124.0140459, - 44.9500918 - ], - [ - -124.0140475, - 44.9500894 - ], - [ - -124.0140491, - 44.9500869 - ], - [ - -124.0140507, - 44.9500845 - ], - [ - -124.0140523, - 44.9500821 - ], - [ - -124.0140539, - 44.9500796 - ], - [ - -124.0140555, - 44.9500772 - ], - [ - -124.0140572, - 44.9500748 - ], - [ - -124.0140588, - 44.9500723 - ], - [ - -124.0140604, - 44.9500699 - ], - [ - -124.014062, - 44.9500675 - ], - [ - -124.0140636, - 44.9500651 - ], - [ - -124.0140653, - 44.9500626 - ], - [ - -124.0140669, - 44.9500602 - ], - [ - -124.0140686, - 44.9500578 - ], - [ - -124.0140702, - 44.9500554 - ], - [ - -124.0140718, - 44.950053 - ], - [ - -124.0140735, - 44.9500505 - ], - [ - -124.0140751, - 44.9500481 - ], - [ - -124.0140768, - 44.9500457 - ], - [ - -124.0140785, - 44.9500433 - ], - [ - -124.0140801, - 44.9500409 - ], - [ - -124.0140818, - 44.9500385 - ], - [ - -124.0140835, - 44.9500361 - ], - [ - -124.0140851, - 44.9500336 - ], - [ - -124.0140868, - 44.9500312 - ], - [ - -124.0140885, - 44.9500288 - ], - [ - -124.0140902, - 44.9500264 - ], - [ - -124.0140918, - 44.950024 - ], - [ - -124.0140935, - 44.9500216 - ], - [ - -124.0140952, - 44.9500192 - ], - [ - -124.0140969, - 44.9500168 - ], - [ - -124.0140986, - 44.9500144 - ], - [ - -124.0141003, - 44.950012 - ], - [ - -124.014102, - 44.9500096 - ], - [ - -124.0141037, - 44.9500072 - ], - [ - -124.0141054, - 44.9500048 - ], - [ - -124.0141072, - 44.9500024 - ], - [ - -124.0141089, - 44.95 - ], - [ - -124.0141106, - 44.9499976 - ], - [ - -124.0141123, - 44.9499952 - ], - [ - -124.0141141, - 44.9499929 - ], - [ - -124.0141158, - 44.9499905 - ], - [ - -124.0141175, - 44.9499881 - ], - [ - -124.0141193, - 44.9499857 - ], - [ - -124.014121, - 44.9499833 - ], - [ - -124.0141228, - 44.9499809 - ], - [ - -124.0141245, - 44.9499785 - ], - [ - -124.0141263, - 44.9499762 - ], - [ - -124.014128, - 44.9499738 - ], - [ - -124.0141298, - 44.9499714 - ], - [ - -124.0141315, - 44.949969 - ], - [ - -124.0141333, - 44.9499667 - ], - [ - -124.0141351, - 44.9499643 - ], - [ - -124.0141368, - 44.9499619 - ], - [ - -124.0141386, - 44.9499595 - ], - [ - -124.0141404, - 44.9499572 - ], - [ - -124.0141422, - 44.9499548 - ], - [ - -124.014144, - 44.9499524 - ], - [ - -124.0141457, - 44.9499501 - ], - [ - -124.0141475, - 44.9499477 - ], - [ - -124.0141493, - 44.9499453 - ], - [ - -124.0141511, - 44.949943 - ], - [ - -124.0141529, - 44.9499406 - ], - [ - -124.0141547, - 44.9499382 - ], - [ - -124.0141565, - 44.9499359 - ], - [ - -124.0141584, - 44.9499335 - ], - [ - -124.0141602, - 44.9499312 - ], - [ - -124.014162, - 44.9499288 - ], - [ - -124.0141638, - 44.9499265 - ], - [ - -124.0141656, - 44.9499241 - ], - [ - -124.0141675, - 44.9499217 - ], - [ - -124.0141693, - 44.9499194 - ], - [ - -124.0141711, - 44.949917 - ], - [ - -124.014173, - 44.9499147 - ], - [ - -124.0141748, - 44.9499124 - ], - [ - -124.0141766, - 44.94991 - ], - [ - -124.0141785, - 44.9499077 - ], - [ - -124.0141803, - 44.9499053 - ], - [ - -124.0141822, - 44.949903 - ], - [ - -124.014184, - 44.9499006 - ], - [ - -124.0141859, - 44.9498983 - ], - [ - -124.0141878, - 44.949896 - ], - [ - -124.0141896, - 44.9498936 - ], - [ - -124.0141915, - 44.9498913 - ], - [ - -124.0141934, - 44.949889 - ], - [ - -124.0141953, - 44.9498866 - ], - [ - -124.0141971, - 44.9498843 - ], - [ - -124.014199, - 44.949882 - ], - [ - -124.0142009, - 44.9498796 - ], - [ - -124.0142028, - 44.9498773 - ], - [ - -124.0142047, - 44.949875 - ], - [ - -124.0142066, - 44.9498727 - ], - [ - -124.0142085, - 44.9498703 - ], - [ - -124.0142104, - 44.949868 - ], - [ - -124.0142123, - 44.9498657 - ], - [ - -124.0142142, - 44.9498634 - ], - [ - -124.0145586, - 44.9494451 - ], - [ - -124.0145586, - 44.9493193 - ], - [ - -124.0145582, - 44.9483745 - ], - [ - -124.014558, - 44.9478955 - ], - [ - -124.0145579, - 44.9476866 - ], - [ - -124.0156312, - 44.9481429 - ], - [ - -124.0157287, - 44.9480245 - ], - [ - -124.0160575, - 44.9476252 - ], - [ - -124.0153717, - 44.9471997 - ], - [ - -124.0153697, - 44.9471994 - ], - [ - -124.0145576, - 44.9471148 - ], - [ - -124.0145575, - 44.9468707 - ], - [ - -124.0151943, - 44.9468898 - ], - [ - -124.0151938, - 44.9459515 - ], - [ - -124.0151935, - 44.9451002 - ], - [ - -124.0145567, - 44.9450782 - ], - [ - -124.0094897, - 44.9449033 - ], - [ - -124.0094965, - 44.943087 - ], - [ - -124.0099606, - 44.9394628 - ], - [ - -124.0104247, - 44.9358386 - ], - [ - -124.0103609, - 44.9336746 - ], - [ - -124.010355, - 44.9334768 - ], - [ - -124.0103545, - 44.9334572 - ], - [ - -124.0103415, - 44.9330176 - ], - [ - -124.010328, - 44.9327782 - ], - [ - -124.0102572, - 44.9328263 - ], - [ - -124.0100697, - 44.932927 - ], - [ - -124.0095982, - 44.9330595 - ], - [ - -124.0091061, - 44.9331566 - ], - [ - -124.0087515, - 44.9331643 - ], - [ - -124.0083129, - 44.9330795 - ], - [ - -124.0079074, - 44.9329348 - ], - [ - -124.0074834, - 44.9327874 - ], - [ - -124.0071086, - 44.9326909 - ], - [ - -124.0067516, - 44.9326593 - ], - [ - -124.0063474, - 44.9326849 - ], - [ - -124.0059642, - 44.9327524 - ], - [ - -124.0057326, - 44.9328119 - ], - [ - -124.0055809, - 44.9328952 - ], - [ - -124.0053524, - 44.9330038 - ], - [ - -124.0049906, - 44.9331261 - ], - [ - -124.004991, - 44.9330031 - ], - [ - -124.0049933, - 44.932189 - ], - [ - -124.0005502, - 44.9321722 - ], - [ - -124.0003104, - 44.9321687 - ], - [ - -123.9996687, - 44.9321593 - ], - [ - -123.9997231, - 44.9306202 - ], - [ - -123.9997264, - 44.9305259 - ], - [ - -123.999759, - 44.9296047 - ], - [ - -123.999764, - 44.9294623 - ], - [ - -124.005001, - 44.9294831 - ], - [ - -124.0050036, - 44.9285779 - ], - [ - -124.0082431, - 44.9285907 - ], - [ - -124.0082612, - 44.9285906 - ], - [ - -124.0084748, - 44.9285915 - ], - [ - -124.0084825, - 44.9285915 - ], - [ - -124.0087864, - 44.9285928 - ], - [ - -124.0087863, - 44.9291716 - ], - [ - -124.0087863, - 44.9294569 - ], - [ - -124.0087863, - 44.9297833 - ], - [ - -124.0087863, - 44.9308284 - ], - [ - -124.0098612, - 44.9308284 - ], - [ - -124.0098614, - 44.9308281 - ], - [ - -124.010209, - 44.9308338 - ], - [ - -124.0102102, - 44.9285983 - ], - [ - -124.0102114, - 44.9282203 - ], - [ - -124.0102115, - 44.9280771 - ], - [ - -124.0102115, - 44.9280497 - ], - [ - -124.0102115, - 44.9279126 - ], - [ - -124.0102116, - 44.9277754 - ], - [ - -124.0102121, - 44.927 - ], - [ - -124.0102122, - 44.9268236 - ], - [ - -124.0102128, - 44.925773 - ], - [ - -124.0102132, - 44.9249782 - ], - [ - -124.0102152, - 44.921412 - ], - [ - -124.0102153, - 44.9213581 - ], - [ - -124.0102239, - 44.9195746 - ], - [ - -124.0102247, - 44.9193977 - ], - [ - -124.0102255, - 44.9192213 - ], - [ - -124.0102265, - 44.9190015 - ], - [ - -124.0102283, - 44.9186289 - ], - [ - -124.0102301, - 44.9182501 - ], - [ - -124.0102329, - 44.9176797 - ], - [ - -124.0102447, - 44.9152137 - ], - [ - -124.0102447, - 44.915206 - ], - [ - -124.0102505, - 44.9140013 - ], - [ - -124.0102429, - 44.9136212 - ], - [ - -124.0102606, - 44.9136222 - ], - [ - -124.0103918, - 44.9136182 - ], - [ - -124.0104442, - 44.9136155 - ], - [ - -124.0104612, - 44.9136147 - ], - [ - -124.0105234, - 44.9136195 - ], - [ - -124.0105725, - 44.9136233 - ], - [ - -124.0106172, - 44.9136166 - ], - [ - -124.0106709, - 44.9136029 - ], - [ - -124.0107315, - 44.9135891 - ], - [ - -124.0108009, - 44.9135882 - ], - [ - -124.0108799, - 44.9135898 - ], - [ - -124.0109611, - 44.9135967 - ], - [ - -124.011057, - 44.9135977 - ], - [ - -124.011136, - 44.9135993 - ], - [ - -124.0112104, - 44.9135863 - ], - [ - -124.0112892, - 44.9135838 - ], - [ - -124.0113584, - 44.913579 - ], - [ - -124.0114459, - 44.9135656 - ], - [ - -124.0115405, - 44.9135547 - ], - [ - -124.0116118, - 44.9135525 - ], - [ - -124.0117044, - 44.913531 - ], - [ - -124.0118217, - 44.913514 - ], - [ - -124.0119435, - 44.9134876 - ], - [ - -124.0120196, - 44.9134719 - ], - [ - -124.0121348, - 44.913451 - ], - [ - -124.0122308, - 44.9134324 - ], - [ - -124.0122412, - 44.9134304 - ], - [ - -124.0122499, - 44.9134287 - ], - [ - -124.0123539, - 44.9134094 - ], - [ - -124.0124679, - 44.9133992 - ], - [ - -124.0125825, - 44.9133984 - ], - [ - -124.0126024, - 44.9133961 - ], - [ - -124.0127141, - 44.9133836 - ], - [ - -124.0128181, - 44.9133937 - ], - [ - -124.0128812, - 44.9134118 - ], - [ - -124.0129342, - 44.9133888 - ], - [ - -124.0129851, - 44.9133797 - ], - [ - -124.0129881, - 44.9133791 - ], - [ - -124.0130061, - 44.9133825 - ], - [ - -124.0130623, - 44.9133929 - ], - [ - -124.0131193, - 44.9134045 - ], - [ - -124.0131919, - 44.9133929 - ], - [ - -124.0132852, - 44.9133347 - ], - [ - -124.013357, - 44.9133098 - ], - [ - -124.0134605, - 44.9133132 - ], - [ - -124.0134676, - 44.9133141 - ], - [ - -124.0135363, - 44.9133229 - ], - [ - -124.0135832, - 44.9133215 - ], - [ - -124.0136446, - 44.9132808 - ], - [ - -124.013695, - 44.9132753 - ], - [ - -124.0137622, - 44.9132632 - ], - [ - -124.013812, - 44.9132543 - ], - [ - -124.0139559, - 44.9132652 - ], - [ - -124.0139739, - 44.9132666 - ], - [ - -124.0140538, - 44.9132841 - ], - [ - -124.0141495, - 44.9132865 - ], - [ - -124.0142659, - 44.9132841 - ], - [ - -124.0142755, - 44.913284 - ], - [ - -124.0143625, - 44.9132705 - ], - [ - -124.0144714, - 44.9132685 - ], - [ - -124.0145368, - 44.9132702 - ], - [ - -124.0145899, - 44.9132715 - ], - [ - -124.0146947, - 44.9132643 - ], - [ - -124.0147329, - 44.9132674 - ], - [ - -124.0147886, - 44.913272 - ], - [ - -124.0149072, - 44.9132763 - ], - [ - -124.0149259, - 44.9132757 - ], - [ - -124.0149954, - 44.9132736 - ], - [ - -124.0150846, - 44.9132882 - ], - [ - -124.0151189, - 44.9132921 - ], - [ - -124.0151678, - 44.9132977 - ], - [ - -124.0152618, - 44.9133013 - ], - [ - -124.0153118, - 44.9133129 - ], - [ - -124.0153742, - 44.9133272 - ], - [ - -124.0155011, - 44.9133433 - ], - [ - -124.0155048, - 44.913343 - ], - [ - -124.0155854, - 44.913336 - ], - [ - -124.0155964, - 44.9133351 - ], - [ - -124.0156716, - 44.913334 - ], - [ - -124.0156771, - 44.9133339 - ], - [ - -124.0157397, - 44.9133546 - ], - [ - -124.0158215, - 44.9133708 - ], - [ - -124.0158683, - 44.9133738 - ], - [ - -124.0159045, - 44.9133762 - ], - [ - -124.0159836, - 44.9133791 - ], - [ - -124.0160613, - 44.9133736 - ], - [ - -124.0160846, - 44.913372 - ], - [ - -124.0161516, - 44.9133619 - ], - [ - -124.0162357, - 44.9133539 - ], - [ - -124.0162717, - 44.9133582 - ], - [ - -124.0163167, - 44.9133568 - ], - [ - -124.0163478, - 44.9133438 - ], - [ - -124.016371, - 44.9133538 - ], - [ - -124.016392, - 44.9133598 - ], - [ - -124.0164197, - 44.9133509 - ], - [ - -124.0164391, - 44.9133303 - ], - [ - -124.016448, - 44.9133276 - ], - [ - -124.0165085, - 44.9133094 - ], - [ - -124.0165842, - 44.9133178 - ], - [ - -124.016641, - 44.9133274 - ], - [ - -124.0166772, - 44.9133336 - ], - [ - -124.0167684, - 44.9133495 - ], - [ - -124.0168337, - 44.9133555 - ], - [ - -124.016844, - 44.9133565 - ], - [ - -124.0168913, - 44.9133617 - ], - [ - -124.0169222, - 44.9133754 - ], - [ - -124.0169648, - 44.9133968 - ], - [ - -124.0170504, - 44.9134142 - ], - [ - -124.0171279, - 44.9134212 - ], - [ - -124.0172188, - 44.9134246 - ], - [ - -124.0172215, - 44.9134247 - ], - [ - -124.0172962, - 44.9134478 - ], - [ - -124.0173787, - 44.9134746 - ], - [ - -124.0174109, - 44.913488 - ], - [ - -124.0174326, - 44.913497 - ], - [ - -124.0174913, - 44.9135339 - ], - [ - -124.0175698, - 44.9135582 - ], - [ - -124.0176029, - 44.9135652 - ], - [ - -124.0176307, - 44.913571 - ], - [ - -124.0177426, - 44.9135953 - ], - [ - -124.0177953, - 44.9136073 - ], - [ - -124.0178303, - 44.9136153 - ], - [ - -124.0179095, - 44.9136502 - ], - [ - -124.0179872, - 44.9136871 - ], - [ - -124.0179888, - 44.9136879 - ], - [ - -124.0180473, - 44.9137221 - ], - [ - -124.0180928, - 44.9137744 - ], - [ - -124.0181661, - 44.9138357 - ], - [ - -124.0182869, - 44.9139821 - ], - [ - -124.0182885, - 44.9140033 - ], - [ - -124.0182917, - 44.9140467 - ], - [ - -124.0183095, - 44.9141406 - ], - [ - -124.0183252, - 44.9142267 - ], - [ - -124.0183582, - 44.9142781 - ], - [ - -124.0183969, - 44.9143384 - ], - [ - -124.0183991, - 44.9143469 - ], - [ - -124.0184165, - 44.9144156 - ], - [ - -124.0184297, - 44.9144681 - ], - [ - -124.0184485, - 44.9145091 - ], - [ - -124.0184828, - 44.9145839 - ], - [ - -124.0185026, - 44.914684 - ], - [ - -124.0185019, - 44.9146905 - ], - [ - -124.0184938, - 44.9147692 - ], - [ - -124.0185521, - 44.9148281 - ], - [ - -124.0185568, - 44.9148328 - ], - [ - -124.0185939, - 44.9148703 - ], - [ - -124.0187497, - 44.914966 - ], - [ - -124.0188767, - 44.9150155 - ], - [ - -124.0189261, - 44.915105 - ], - [ - -124.0189275, - 44.9151074 - ], - [ - -124.018964, - 44.9151517 - ], - [ - -124.0190237, - 44.9152674 - ], - [ - -124.0190501, - 44.9153307 - ], - [ - -124.0190436, - 44.9153801 - ], - [ - -124.0190399, - 44.9154086 - ], - [ - -124.0190024, - 44.9154712 - ], - [ - -124.0190804, - 44.9155183 - ], - [ - -124.0190913, - 44.9155741 - ], - [ - -124.0191474, - 44.9156311 - ], - [ - -124.0191628, - 44.9156553 - ], - [ - -124.0191974, - 44.9157097 - ], - [ - -124.0192272, - 44.9157676 - ], - [ - -124.0192409, - 44.915793 - ], - [ - -124.0192823, - 44.9158701 - ], - [ - -124.0192894, - 44.9159233 - ], - [ - -124.0192916, - 44.9159305 - ], - [ - -124.0193127, - 44.9159974 - ], - [ - -124.0193349, - 44.9160528 - ], - [ - -124.0193731, - 44.9160623 - ], - [ - -124.0193845, - 44.9160683 - ], - [ - -124.0194507, - 44.9161027 - ], - [ - -124.0194753, - 44.9161981 - ], - [ - -124.01951, - 44.916316 - ], - [ - -124.0195465, - 44.9164404 - ], - [ - -124.0195661, - 44.9164947 - ], - [ - -124.0195827, - 44.9165408 - ], - [ - -124.0196203, - 44.9166011 - ], - [ - -124.019633, - 44.9166186 - ], - [ - -124.0196695, - 44.916669 - ], - [ - -124.0196574, - 44.916756 - ], - [ - -124.0196565, - 44.9167629 - ], - [ - -124.0196195, - 44.9168335 - ], - [ - -124.0196352, - 44.916893 - ], - [ - -124.0196391, - 44.9169077 - ], - [ - -124.0196689, - 44.9169656 - ], - [ - -124.0196531, - 44.9170142 - ], - [ - -124.0196844, - 44.9171075 - ], - [ - -124.0197676, - 44.917285 - ], - [ - -124.019762, - 44.9173053 - ], - [ - -124.0197242, - 44.917442 - ], - [ - -124.0197115, - 44.917488 - ], - [ - -124.0196624, - 44.9176132 - ], - [ - -124.0194985, - 44.917778 - ], - [ - -124.0185314, - 44.9182089 - ], - [ - -124.0185098, - 44.9182206 - ], - [ - -124.0184869, - 44.918233 - ], - [ - -124.0181702, - 44.9184046 - ], - [ - -124.0181329, - 44.9184248 - ], - [ - -124.0180799, - 44.9184992 - ], - [ - -124.0180464, - 44.9185463 - ], - [ - -124.0179661, - 44.9185872 - ], - [ - -124.0179139, - 44.9186139 - ], - [ - -124.0178875, - 44.9186273 - ], - [ - -124.0177775, - 44.9186805 - ], - [ - -124.0177771, - 44.9186806 - ], - [ - -124.017723, - 44.9187305 - ], - [ - -124.0176543, - 44.9187432 - ], - [ - -124.0176214, - 44.9187493 - ], - [ - -124.0174864, - 44.9187853 - ], - [ - -124.0174602, - 44.9187923 - ], - [ - -124.0173504, - 44.918851 - ], - [ - -124.0173134, - 44.9188708 - ], - [ - -124.0172951, - 44.9188806 - ], - [ - -124.0171883, - 44.9189454 - ], - [ - -124.0171629, - 44.9189608 - ], - [ - -124.0169793, - 44.9190759 - ], - [ - -124.0169356, - 44.9190935 - ], - [ - -124.0167127, - 44.9191834 - ], - [ - -124.0166584, - 44.9192135 - ], - [ - -124.0165445, - 44.9192766 - ], - [ - -124.0164135, - 44.9193231 - ], - [ - -124.0163024, - 44.9193625 - ], - [ - -124.0162654, - 44.9193842 - ], - [ - -124.016144, - 44.9194554 - ], - [ - -124.0161184, - 44.9194704 - ], - [ - -124.0159998, - 44.9195003 - ], - [ - -124.0158402, - 44.9195825 - ], - [ - -124.015828, - 44.9195888 - ], - [ - -124.015778, - 44.919621 - ], - [ - -124.0156575, - 44.9196987 - ], - [ - -124.0156159, - 44.9197172 - ], - [ - -124.0155371, - 44.9197523 - ], - [ - -124.0154403, - 44.9198053 - ], - [ - -124.0153145, - 44.9198741 - ], - [ - -124.0151671, - 44.9199355 - ], - [ - -124.0151378, - 44.9199477 - ], - [ - -124.0149567, - 44.9200334 - ], - [ - -124.0148561, - 44.9200938 - ], - [ - -124.0147742, - 44.9201428 - ], - [ - -124.0147527, - 44.9201572 - ], - [ - -124.0147085, - 44.9201869 - ], - [ - -124.0146338, - 44.920229 - ], - [ - -124.0145441, - 44.9202779 - ], - [ - -124.0144449, - 44.9203542 - ], - [ - -124.0143133, - 44.920466 - ], - [ - -124.014135, - 44.9205986 - ], - [ - -124.0140645, - 44.9206611 - ], - [ - -124.0140216, - 44.9207153 - ], - [ - -124.0139708, - 44.920742 - ], - [ - -124.0139433, - 44.9208091 - ], - [ - -124.0139131, - 44.9208507 - ], - [ - -124.0139098, - 44.9208646 - ], - [ - -124.0139069, - 44.9208767 - ], - [ - -124.0138955, - 44.9209254 - ], - [ - -124.0138926, - 44.920987 - ], - [ - -124.0139148, - 44.9210503 - ], - [ - -124.0139677, - 44.9211182 - ], - [ - -124.014024, - 44.9211885 - ], - [ - -124.0140904, - 44.9212531 - ], - [ - -124.0141325, - 44.9213035 - ], - [ - -124.0142, - 44.921344 - ], - [ - -124.014226, - 44.9213598 - ], - [ - -124.0142811, - 44.9213932 - ], - [ - -124.0143358, - 44.9214378 - ], - [ - -124.0143964, - 44.9214932 - ], - [ - -124.0144722, - 44.9215408 - ], - [ - -124.0145956, - 44.9216506 - ], - [ - -124.0145937, - 44.9217078 - ], - [ - -124.014595, - 44.9217603 - ], - [ - -124.0145955, - 44.9217764 - ], - [ - -124.0146385, - 44.9218416 - ], - [ - -124.0146928, - 44.9219213 - ], - [ - -124.0147384, - 44.9219864 - ], - [ - -124.0148151, - 44.9220506 - ], - [ - -124.0149549, - 44.922124 - ], - [ - -124.0150676, - 44.9222267 - ], - [ - -124.0150444, - 44.9223143 - ], - [ - -124.0150291, - 44.9223497 - ], - [ - -124.0149715, - 44.922483 - ], - [ - -124.0149005, - 44.9226922 - ], - [ - -124.0148862, - 44.9227505 - ], - [ - -124.0148762, - 44.9228469 - ], - [ - -124.0148469, - 44.923015 - ], - [ - -124.0148412, - 44.9230844 - ], - [ - -124.0148234, - 44.9232149 - ], - [ - -124.0148046, - 44.9233299 - ], - [ - -124.0148238, - 44.9234169 - ], - [ - -124.0148376, - 44.9234786 - ], - [ - -124.0148172, - 44.9235675 - ], - [ - -124.0148258, - 44.923611 - ], - [ - -124.01481, - 44.9236764 - ], - [ - -124.0147461, - 44.9237363 - ], - [ - -124.0147483, - 44.923773 - ], - [ - -124.0147389, - 44.9238453 - ], - [ - -124.0147102, - 44.9239282 - ], - [ - -124.0146625, - 44.9241209 - ], - [ - -124.0146451, - 44.9241949 - ], - [ - -124.0146539, - 44.9243373 - ], - [ - -124.0146651, - 44.9244556 - ], - [ - -124.0146915, - 44.9246276 - ], - [ - -124.0147096, - 44.9247956 - ], - [ - -124.0146818, - 44.9249125 - ], - [ - -124.0145473, - 44.9250023 - ], - [ - -124.0144571, - 44.9251156 - ], - [ - -124.0144289, - 44.925227 - ], - [ - -124.014289, - 44.9254623 - ], - [ - -124.0142066, - 44.9254988 - ], - [ - -124.0142062, - 44.9255008 - ], - [ - -124.0142059, - 44.9255028 - ], - [ - -124.0142056, - 44.9255048 - ], - [ - -124.0142053, - 44.9255068 - ], - [ - -124.014205, - 44.9255089 - ], - [ - -124.0142047, - 44.9255109 - ], - [ - -124.0142044, - 44.9255129 - ], - [ - -124.0142041, - 44.9255149 - ], - [ - -124.0142039, - 44.9255169 - ], - [ - -124.0142036, - 44.925519 - ], - [ - -124.0142034, - 44.925521 - ], - [ - -124.0141216, - 44.9261218 - ], - [ - -124.0141936, - 44.9261592 - ], - [ - -124.0142366, - 44.9261905 - ], - [ - -124.0142897, - 44.9262294 - ], - [ - -124.0143217, - 44.9262621 - ], - [ - -124.0143724, - 44.9263134 - ], - [ - -124.014415, - 44.9263639 - ], - [ - -124.014454, - 44.9264065 - ], - [ - -124.0144931, - 44.9264503 - ], - [ - -124.0145386, - 44.9264815 - ], - [ - -124.0145872, - 44.9265257 - ], - [ - -124.0146223, - 44.92656 - ], - [ - -124.0146865, - 44.9266043 - ], - [ - -124.0147843, - 44.9266716 - ], - [ - -124.015019, - 44.9268206 - ], - [ - -124.0151458, - 44.9269076 - ], - [ - -124.0152419, - 44.9269646 - ], - [ - -124.0154122, - 44.9270373 - ], - [ - -124.0154814, - 44.9270668 - ], - [ - -124.0156137, - 44.9271078 - ], - [ - -124.0157222, - 44.9271267 - ], - [ - -124.0158225, - 44.9271242 - ], - [ - -124.0159224, - 44.9271143 - ], - [ - -124.0159824, - 44.9270888 - ], - [ - -124.0160339, - 44.9270539 - ], - [ - -124.0160488, - 44.9270526 - ], - [ - -124.0162357, - 44.9270368 - ], - [ - -124.0162412, - 44.9270376 - ], - [ - -124.0163855, - 44.9270599 - ], - [ - -124.0164364, - 44.9270734 - ], - [ - -124.0165537, - 44.9271059 - ], - [ - -124.0166607, - 44.9271152 - ], - [ - -124.0168884, - 44.9271669 - ], - [ - -124.0170969, - 44.927194 - ], - [ - -124.017677, - 44.9273062 - ], - [ - -124.0181876, - 44.9274416 - ], - [ - -124.0184454, - 44.9275973 - ], - [ - -124.0187513, - 44.9275752 - ], - [ - -124.0187475, - 44.9275124 - ], - [ - -124.0187618, - 44.9273608 - ], - [ - -124.0189362, - 44.9273134 - ], - [ - -124.0191724, - 44.9273103 - ], - [ - -124.0194389, - 44.9273189 - ], - [ - -124.0195071, - 44.9272748 - ], - [ - -124.0195884, - 44.9272513 - ], - [ - -124.0196891, - 44.9272565 - ], - [ - -124.0197443, - 44.927385 - ], - [ - -124.0200146, - 44.9274564 - ], - [ - -124.0202208, - 44.9274458 - ], - [ - -124.0204611, - 44.9274131 - ], - [ - -124.0206133, - 44.927401 - ], - [ - -124.0207282, - 44.9273924 - ], - [ - -124.0210691, - 44.9273514 - ], - [ - -124.0212815, - 44.9273143 - ], - [ - -124.0215149, - 44.9273015 - ], - [ - -124.0215778, - 44.9273124 - ], - [ - -124.0217043, - 44.9273345 - ], - [ - -124.0220632, - 44.9273955 - ], - [ - -124.0224295, - 44.9275117 - ], - [ - -124.0227721, - 44.927626 - ], - [ - -124.0230619, - 44.9277164 - ], - [ - -124.0232639, - 44.9277794 - ], - [ - -124.0235981, - 44.9278828 - ], - [ - -124.0242229, - 44.9281064 - ], - [ - -124.0243809, - 44.9281871 - ], - [ - -124.0247333, - 44.9284086 - ], - [ - -124.0249449, - 44.9285491 - ], - [ - -124.0250872, - 44.9286784 - ], - [ - -124.0251722, - 44.9287556 - ], - [ - -124.0252218, - 44.9289436 - ], - [ - -124.0252341, - 44.9289902 - ], - [ - -124.0253078, - 44.9292655 - ], - [ - -124.0253825, - 44.9295407 - ], - [ - -124.0253857, - 44.9295524 - ], - [ - -124.0253917, - 44.929678 - ], - [ - -124.0254016, - 44.9298837 - ], - [ - -124.0254114, - 44.9300896 - ], - [ - -124.025397, - 44.9302265 - ], - [ - -124.0253725, - 44.9304591 - ], - [ - -124.0253673, - 44.9306326 - ], - [ - -124.0253475, - 44.9308804 - ], - [ - -124.0253554, - 44.9310104 - ], - [ - -124.0253317, - 44.9311945 - ], - [ - -124.0253178, - 44.9313459 - ], - [ - -124.0252935, - 44.9315245 - ], - [ - -124.0252412, - 44.9318814 - ], - [ - -124.0252169, - 44.9321847 - ], - [ - -124.0251831, - 44.9322802 - ], - [ - -124.0251038, - 44.9325047 - ], - [ - -124.024916, - 44.9328752 - ], - [ - -124.0248757, - 44.9329618 - ], - [ - -124.0248261, - 44.9330686 - ], - [ - -124.0248023, - 44.9331278 - ], - [ - -124.0247749, - 44.933196 - ], - [ - -124.0247672, - 44.9332152 - ], - [ - -124.0247332, - 44.9333709 - ], - [ - -124.0247116, - 44.9334702 - ], - [ - -124.0247022, - 44.9335936 - ], - [ - -124.02468, - 44.933839 - ], - [ - -124.0246207, - 44.9340339 - ], - [ - -124.0246076, - 44.9341063 - ], - [ - -124.0245852, - 44.9342304 - ], - [ - -124.0245574, - 44.9343856 - ], - [ - -124.0245287, - 44.934582 - ], - [ - -124.0245206, - 44.9346372 - ], - [ - -124.0245122, - 44.9346948 - ], - [ - -124.0245106, - 44.9347133 - ], - [ - -124.0244982, - 44.9348545 - ], - [ - -124.0244835, - 44.9350021 - ], - [ - -124.0245198, - 44.9352005 - ], - [ - -124.0245794, - 44.9353642 - ], - [ - -124.0245888, - 44.9353997 - ], - [ - -124.0246088, - 44.9354752 - ], - [ - -124.0246663, - 44.9356523 - ], - [ - -124.0247472, - 44.9358004 - ], - [ - -124.0248064, - 44.9359864 - ], - [ - -124.0248745, - 44.9362129 - ], - [ - -124.0249756, - 44.9364583 - ], - [ - -124.0249582, - 44.9365296 - ], - [ - -124.0249573, - 44.9365947 - ], - [ - -124.0249561, - 44.9366797 - ], - [ - -124.0249618, - 44.936757 - ], - [ - -124.0249617, - 44.9368004 - ], - [ - -124.0249617, - 44.9368405 - ], - [ - -124.0250087, - 44.9369 - ], - [ - -124.0250548, - 44.937014 - ], - [ - -124.0250433, - 44.9370908 - ], - [ - -124.0250519, - 44.937122 - ], - [ - -124.0250911, - 44.9371932 - ], - [ - -124.0251425, - 44.9372488 - ], - [ - -124.0251673, - 44.9373048 - ], - [ - -124.0251452, - 44.9373643 - ], - [ - -124.0250994, - 44.9375372 - ], - [ - -124.0250719, - 44.9376104 - ], - [ - -124.0250449, - 44.9377025 - ], - [ - -124.0250561, - 44.9379174 - ], - [ - -124.0250134, - 44.9379589 - ], - [ - -124.0249247, - 44.9380204 - ], - [ - -124.024863, - 44.9381005 - ], - [ - -124.0248659, - 44.9381925 - ], - [ - -124.0248662, - 44.9382795 - ], - [ - -124.0249161, - 44.938368 - ], - [ - -124.0249234, - 44.9384297 - ], - [ - -124.0248276, - 44.9386054 - ], - [ - -124.0247787, - 44.9386888 - ], - [ - -124.0247873, - 44.9387201 - ], - [ - -124.0248302, - 44.9387656 - ], - [ - -124.0248739, - 44.9388065 - ], - [ - -124.024859, - 44.9388619 - ], - [ - -124.0248022, - 44.9389094 - ], - [ - -124.0248502, - 44.9389436 - ], - [ - -124.0248588, - 44.9389748 - ], - [ - -124.0249196, - 44.9390782 - ], - [ - -124.0249039, - 44.9391617 - ], - [ - -124.0248825, - 44.9392165 - ], - [ - -124.0248591, - 44.9392618 - ], - [ - -124.0248969, - 44.939387 - ], - [ - -124.0249317, - 44.9395541 - ], - [ - -124.0249796, - 44.9396777 - ], - [ - -124.0249518, - 44.9397532 - ], - [ - -124.0249585, - 44.9398366 - ], - [ - -124.0249534, - 44.9399983 - ], - [ - -124.0249071, - 44.9402207 - ], - [ - -124.0248592, - 44.9404312 - ], - [ - -124.0248097, - 44.9406744 - ], - [ - -124.0248111, - 44.9407119 - ], - [ - -124.0248151, - 44.9408159 - ], - [ - -124.0248131, - 44.9408384 - ], - [ - -124.0247997, - 44.9409865 - ], - [ - -124.0247435, - 44.9411187 - ], - [ - -124.0247212, - 44.9411493 - ], - [ - -124.0246603, - 44.9412325 - ], - [ - -124.0245591, - 44.9412829 - ], - [ - -124.0245582, - 44.9412833 - ], - [ - -124.0244474, - 44.941315 - ], - [ - -124.0244301, - 44.9413419 - ], - [ - -124.0244194, - 44.9413694 - ], - [ - -124.0244165, - 44.9414115 - ], - [ - -124.0244701, - 44.9414743 - ], - [ - -124.0245113, - 44.9415315 - ], - [ - -124.024526, - 44.9415891 - ], - [ - -124.0245288, - 44.9416239 - ], - [ - -124.0245331, - 44.9416764 - ], - [ - -124.0245037, - 44.9417401 - ], - [ - -124.024492, - 44.941759 - ], - [ - -124.0244688, - 44.9417963 - ], - [ - -124.024489, - 44.9418613 - ], - [ - -124.0244608, - 44.9419392 - ], - [ - -124.0244219, - 44.9419998 - ], - [ - -124.0244089, - 44.9420284 - ], - [ - -124.0243825, - 44.9420862 - ], - [ - -124.0243371, - 44.9421464 - ], - [ - -124.024335, - 44.9421606 - ], - [ - -124.0243309, - 44.9421882 - ], - [ - -124.0243272, - 44.942235 - ], - [ - -124.02431, - 44.9422967 - ], - [ - -124.024306, - 44.942311 - ], - [ - -124.0242645, - 44.9424114 - ], - [ - -124.024236, - 44.9424469 - ], - [ - -124.02424, - 44.9424872 - ], - [ - -124.024233, - 44.9425338 - ], - [ - -124.0242363, - 44.9425787 - ], - [ - -124.0242414, - 44.9426332 - ], - [ - -124.0242125, - 44.942703 - ], - [ - -124.0242103, - 44.9427084 - ], - [ - -124.024201, - 44.9427712 - ], - [ - -124.0241752, - 44.9428328 - ], - [ - -124.0241715, - 44.9428378 - ], - [ - -124.0241255, - 44.9428996 - ], - [ - -124.0241123, - 44.9429433 - ], - [ - -124.0241323, - 44.9429728 - ], - [ - -124.0241341, - 44.9429755 - ], - [ - -124.0241825, - 44.9430733 - ], - [ - -124.0241561, - 44.9431125 - ], - [ - -124.0241357, - 44.9431427 - ], - [ - -124.0240732, - 44.9432062 - ], - [ - -124.0240613, - 44.9432431 - ], - [ - -124.0240547, - 44.9432636 - ], - [ - -124.0240797, - 44.9433825 - ], - [ - -124.0240819, - 44.9433927 - ], - [ - -124.0240724, - 44.9434344 - ], - [ - -124.0240812, - 44.9434868 - ], - [ - -124.0240733, - 44.9435197 - ], - [ - -124.0240723, - 44.9435238 - ], - [ - -124.0240128, - 44.9435899 - ], - [ - -124.0240035, - 44.9436525 - ], - [ - -124.0239979, - 44.9436899 - ], - [ - -124.0240609, - 44.9437948 - ], - [ - -124.0241176, - 44.9438892 - ], - [ - -124.0241572, - 44.9439345 - ], - [ - -124.024147, - 44.9439808 - ], - [ - -124.0241249, - 44.9439997 - ], - [ - -124.0241015, - 44.9440197 - ], - [ - -124.024045, - 44.9440649 - ], - [ - -124.0240187, - 44.9441086 - ], - [ - -124.0240137, - 44.9441169 - ], - [ - -124.0240098, - 44.9441234 - ], - [ - -124.0240102, - 44.944187 - ], - [ - -124.0240399, - 44.9442551 - ], - [ - -124.0240697, - 44.9443444 - ], - [ - -124.0240578, - 44.9444023 - ], - [ - -124.0240201, - 44.9444324 - ], - [ - -124.024031, - 44.9444708 - ], - [ - -124.0240023, - 44.9444852 - ], - [ - -124.0239476, - 44.944534 - ], - [ - -124.023922, - 44.9445568 - ], - [ - -124.023897, - 44.9446137 - ], - [ - -124.0239151, - 44.9446534 - ], - [ - -124.0239204, - 44.94467 - ], - [ - -124.023932, - 44.9447128 - ], - [ - -124.0239335, - 44.9447694 - ], - [ - -124.0239191, - 44.9448096 - ], - [ - -124.0239114, - 44.9448311 - ], - [ - -124.0238666, - 44.9448866 - ], - [ - -124.0238609, - 44.9449251 - ], - [ - -124.0238597, - 44.9449331 - ], - [ - -124.0238559, - 44.9449405 - ], - [ - -124.0238411, - 44.9449693 - ], - [ - -124.0238704, - 44.944995 - ], - [ - -124.0238928, - 44.9450226 - ], - [ - -124.0238944, - 44.945068 - ], - [ - -124.0238947, - 44.9450769 - ], - [ - -124.0239018, - 44.9450854 - ], - [ - -124.0239341, - 44.9451239 - ], - [ - -124.0239491, - 44.9451792 - ], - [ - -124.0239605, - 44.945216 - ], - [ - -124.0239659, - 44.9452335 - ], - [ - -124.0239692, - 44.9452442 - ], - [ - -124.0239497, - 44.9452863 - ], - [ - -124.0239145, - 44.9453224 - ], - [ - -124.0238983, - 44.945353 - ], - [ - -124.0238619, - 44.9453749 - ], - [ - -124.0238612, - 44.9454243 - ], - [ - -124.0238925, - 44.9454702 - ], - [ - -124.0239447, - 44.94552 - ], - [ - -124.0239558, - 44.9455679 - ], - [ - -124.0239507, - 44.9456028 - ], - [ - -124.0239577, - 44.9456221 - ], - [ - -124.0239694, - 44.9456547 - ], - [ - -124.0239575, - 44.9456785 - ], - [ - -124.0239199, - 44.9456968 - ], - [ - -124.0239088, - 44.945716 - ], - [ - -124.0238776, - 44.945736 - ], - [ - -124.0238549, - 44.9457884 - ], - [ - -124.0238541, - 44.9458048 - ], - [ - -124.0238398, - 44.9458343 - ], - [ - -124.0238113, - 44.9458475 - ], - [ - -124.0238076, - 44.9458613 - ], - [ - -124.0238152, - 44.9458772 - ], - [ - -124.0238405, - 44.9459073 - ], - [ - -124.0238689, - 44.9459506 - ], - [ - -124.0238993, - 44.946047 - ], - [ - -124.0239002, - 44.9460855 - ], - [ - -124.023922, - 44.9461177 - ], - [ - -124.023927, - 44.9461393 - ], - [ - -124.0239118, - 44.9461805 - ], - [ - -124.0238956, - 44.9462393 - ], - [ - -124.0238834, - 44.9462878 - ], - [ - -124.0238843, - 44.9463042 - ], - [ - -124.0239122, - 44.9463957 - ], - [ - -124.0239396, - 44.9464455 - ], - [ - -124.023941, - 44.9464479 - ], - [ - -124.0239414, - 44.9464546 - ], - [ - -124.0239424, - 44.9464697 - ], - [ - -124.0239459, - 44.9465227 - ], - [ - -124.0238904, - 44.946627 - ], - [ - -124.0238554, - 44.9466798 - ], - [ - -124.0238849, - 44.9467297 - ], - [ - -124.0238925, - 44.9468233 - ], - [ - -124.0238796, - 44.9469357 - ], - [ - -124.0238497, - 44.9470446 - ], - [ - -124.0238815, - 44.9471477 - ], - [ - -124.0238837, - 44.9471548 - ], - [ - -124.0238747, - 44.9472263 - ], - [ - -124.0238539, - 44.9472638 - ], - [ - -124.0238474, - 44.9473025 - ], - [ - -124.0238491, - 44.9474141 - ], - [ - -124.0238627, - 44.9475988 - ], - [ - -124.0238652, - 44.9478446 - ], - [ - -124.0238913, - 44.9480718 - ], - [ - -124.0238659, - 44.9481192 - ], - [ - -124.0238549, - 44.9481678 - ], - [ - -124.0238128, - 44.9482633 - ], - [ - -124.0238593, - 44.9483333 - ], - [ - -124.0238966, - 44.9484231 - ], - [ - -124.0238621, - 44.9484901 - ], - [ - -124.0238381, - 44.9485644 - ], - [ - -124.02386, - 44.9486076 - ], - [ - -124.0238457, - 44.948658 - ], - [ - -124.0238541, - 44.9487123 - ], - [ - -124.0238839, - 44.9487603 - ], - [ - -124.023872, - 44.9488315 - ], - [ - -124.023864, - 44.9488969 - ], - [ - -124.0238868, - 44.9489174 - ], - [ - -124.023911, - 44.9489462 - ], - [ - -124.0239354, - 44.9489049 - ], - [ - -124.0239649, - 44.9489198 - ], - [ - -124.0240093, - 44.9489504 - ], - [ - -124.0240313, - 44.94901 - ], - [ - -124.0240618, - 44.9490539 - ], - [ - -124.0240778, - 44.94908 - ], - [ - -124.0241002, - 44.9491025 - ], - [ - -124.0240944, - 44.9491371 - ], - [ - -124.0241057, - 44.9491567 - ], - [ - -124.0241376, - 44.9491924 - ], - [ - -124.0241473, - 44.9492386 - ], - [ - -124.0241275, - 44.9492699 - ], - [ - -124.0241175, - 44.9493124 - ], - [ - -124.0241382, - 44.9493451 - ], - [ - -124.0241731, - 44.9494139 - ], - [ - -124.0241921, - 44.9494919 - ], - [ - -124.0242224, - 44.9494676 - ], - [ - -124.024222, - 44.9495047 - ], - [ - -124.0242194, - 44.9495096 - ], - [ - -124.0241966, - 44.9495521 - ], - [ - -124.0241783, - 44.9495918 - ], - [ - -124.024165, - 44.9496196 - ], - [ - -124.0241294, - 44.949645 - ], - [ - -124.0241055, - 44.9496621 - ], - [ - -124.0241146, - 44.9496773 - ], - [ - -124.024149, - 44.9496802 - ], - [ - -124.0241478, - 44.9497049 - ], - [ - -124.0241459, - 44.9497336 - ], - [ - -124.0241245, - 44.9497751 - ], - [ - -124.0241117, - 44.9497472 - ], - [ - -124.0240833, - 44.9497779 - ], - [ - -124.024079, - 44.9497823 - ], - [ - -124.0240481, - 44.9498141 - ], - [ - -124.0240234, - 44.9498574 - ], - [ - -124.0240141, - 44.9498959 - ], - [ - -124.0239962, - 44.9499179 - ], - [ - -124.0239812, - 44.9499364 - ], - [ - -124.0239678, - 44.9499642 - ], - [ - -124.023933, - 44.9499634 - ], - [ - -124.0239131, - 44.9499431 - ], - [ - -124.0238843, - 44.9499592 - ], - [ - -124.0238787, - 44.9499753 - ], - [ - -124.023921, - 44.949983 - ], - [ - -124.0239277, - 44.9500124 - ], - [ - -124.0239137, - 44.9500443 - ], - [ - -124.0238833, - 44.950052 - ], - [ - -124.0238459, - 44.9500324 - ], - [ - -124.0238306, - 44.9500538 - ], - [ - -124.0238259, - 44.9500823 - ], - [ - -124.0238495, - 44.9501152 - ], - [ - -124.0238317, - 44.9501344 - ], - [ - -124.0237988, - 44.9501399 - ], - [ - -124.0238094, - 44.9501635 - ], - [ - -124.0237726, - 44.9501748 - ], - [ - -124.0237642, - 44.9501906 - ], - [ - -124.0237449, - 44.9502014 - ], - [ - -124.0237255, - 44.9501956 - ], - [ - -124.0237015, - 44.9501998 - ], - [ - -124.0236885, - 44.9502255 - ], - [ - -124.0237069, - 44.9502557 - ], - [ - -124.023714, - 44.9502949 - ], - [ - -124.0237145, - 44.9502976 - ], - [ - -124.0237065, - 44.9503279 - ], - [ - -124.0236972, - 44.9503663 - ], - [ - -124.0236792, - 44.950404 - ], - [ - -124.0236603, - 44.9504472 - ], - [ - -124.0236557, - 44.9504578 - ], - [ - -124.0237021, - 44.9504761 - ], - [ - -124.0237371, - 44.9505439 - ], - [ - -124.0237024, - 44.9506423 - ], - [ - -124.0236837, - 44.9506953 - ], - [ - -124.0236571, - 44.9507705 - ], - [ - -124.0235553, - 44.9509485 - ], - [ - -124.0235338, - 44.9510091 - ], - [ - -124.0233705, - 44.9514699 - ], - [ - -124.0232519, - 44.9517085 - ], - [ - -124.0232286, - 44.9519115 - ], - [ - -124.0231744, - 44.9520376 - ], - [ - -124.0231357, - 44.9522078 - ], - [ - -124.023097, - 44.95229 - ], - [ - -124.0230583, - 44.9524382 - ], - [ - -124.022919, - 44.9527674 - ], - [ - -124.0228183, - 44.9529594 - ], - [ - -124.0227735, - 44.9532466 - ], - [ - -124.0227593, - 44.9533831 - ], - [ - -124.0226986, - 44.9536071 - ], - [ - -124.0226904, - 44.9537262 - ], - [ - -124.0226692, - 44.9539225 - ], - [ - -124.0226432, - 44.9541336 - ], - [ - -124.0226436, - 44.9541336 - ], - [ - -124.0226241, - 44.9543763 - ], - [ - -124.0226285, - 44.9544283 - ], - [ - -124.0226052, - 44.9544986 - ], - [ - -124.0225819, - 44.9545854 - ], - [ - -124.0225573, - 44.9546545 - ], - [ - -124.0225418, - 44.9547389 - ], - [ - -124.0225547, - 44.9548184 - ], - [ - -124.0225416, - 44.9548699 - ], - [ - -124.0225263, - 44.9549357 - ], - [ - -124.0225348, - 44.9549606 - ], - [ - -124.0225477, - 44.9550834 - ], - [ - -124.0225135, - 44.9551628 - ], - [ - -124.0225081, - 44.9552355 - ], - [ - -124.0225163, - 44.9553074 - ], - [ - -124.0224911, - 44.9553757 - ], - [ - -124.0224417, - 44.9556093 - ], - [ - -124.0224359, - 44.9556765 - ], - [ - -124.0224065, - 44.9558532 - ], - [ - -124.0223643, - 44.9560552 - ], - [ - -124.022328, - 44.9562159 - ], - [ - -124.022314, - 44.956426 - ], - [ - -124.0222987, - 44.9565666 - ], - [ - -124.0222954, - 44.9566721 - ], - [ - -124.0223136, - 44.9567359 - ], - [ - -124.0223076, - 44.9567704 - ], - [ - -124.022316, - 44.9567947 - ], - [ - -124.0223052, - 44.9568326 - ], - [ - -124.0223058, - 44.9568775 - ], - [ - -124.0223049, - 44.9569141 - ], - [ - -124.0222801, - 44.9569473 - ], - [ - -124.022294, - 44.9569792 - ], - [ - -124.0222751, - 44.9569983 - ], - [ - -124.0222438, - 44.9570141 - ], - [ - -124.0222032, - 44.9570151 - ], - [ - -124.02218, - 44.9570226 - ], - [ - -124.022151, - 44.9570837 - ], - [ - -124.0220899, - 44.9571701 - ], - [ - -124.0220494, - 44.9572512 - ], - [ - -124.0220386, - 44.9572891 - ], - [ - -124.0220088, - 44.95738 - ], - [ - -124.0219716, - 44.9574698 - ], - [ - -124.0219446, - 44.9574972 - ], - [ - -124.021908, - 44.9575314 - ], - [ - -124.0218965, - 44.9575651 - ], - [ - -124.0219443, - 44.9575788 - ], - [ - -124.0219534, - 44.9576073 - ], - [ - -124.0219381, - 44.957646 - ], - [ - -124.021933, - 44.9576587 - ], - [ - -124.0218974, - 44.957723 - ], - [ - -124.0219002, - 44.9577533 - ], - [ - -124.0218702, - 44.9577977 - ], - [ - -124.0218672, - 44.9578353 - ], - [ - -124.0218228, - 44.9578833 - ], - [ - -124.0217766, - 44.9579479 - ], - [ - -124.0217675, - 44.9579681 - ], - [ - -124.0217364, - 44.9580372 - ], - [ - -124.0216556, - 44.9581041 - ], - [ - -124.0216161, - 44.9581368 - ], - [ - -124.0215695, - 44.9582403 - ], - [ - -124.0215641, - 44.9582522 - ], - [ - -124.0215579, - 44.9583204 - ], - [ - -124.0215195, - 44.9583495 - ], - [ - -124.0214814, - 44.9583766 - ], - [ - -124.0214225, - 44.9584184 - ], - [ - -124.0213702, - 44.9585812 - ], - [ - -124.0213697, - 44.9585825 - ], - [ - -124.021302, - 44.9585866 - ], - [ - -124.0212765, - 44.9586438 - ], - [ - -124.0213088, - 44.9587634 - ], - [ - -124.021307, - 44.9587862 - ], - [ - -124.0212993, - 44.9588835 - ], - [ - -124.0213058, - 44.9589234 - ], - [ - -124.0213085, - 44.9589404 - ], - [ - -124.0212649, - 44.9590103 - ], - [ - -124.02121, - 44.9592567 - ], - [ - -124.0211768, - 44.9593237 - ], - [ - -124.0211673, - 44.9593429 - ], - [ - -124.0211653, - 44.9594015 - ], - [ - -124.0211242, - 44.9594372 - ], - [ - -124.02098, - 44.9594505 - ], - [ - -124.0208843, - 44.9594717 - ], - [ - -124.0209298, - 44.9595151 - ], - [ - -124.0210369, - 44.9595598 - ], - [ - -124.0210681, - 44.9596017 - ], - [ - -124.0210748, - 44.9596107 - ], - [ - -124.0210364, - 44.9596824 - ], - [ - -124.0210324, - 44.9597544 - ], - [ - -124.0210126, - 44.9598449 - ], - [ - -124.0209201, - 44.9599855 - ], - [ - -124.0209197, - 44.9601174 - ], - [ - -124.0209227, - 44.960303 - ], - [ - -124.0209048, - 44.960403 - ], - [ - -124.0208706, - 44.9608898 - ], - [ - -124.020812, - 44.9611291 - ], - [ - -124.0207359, - 44.9614668 - ], - [ - -124.0206592, - 44.9616709 - ], - [ - -124.0205121, - 44.9618546 - ], - [ - -124.0204289, - 44.962017 - ], - [ - -124.0203429, - 44.9622404 - ], - [ - -124.0202636, - 44.9624762 - ], - [ - -124.0202443, - 44.9627351 - ], - [ - -124.0202146, - 44.9629194 - ], - [ - -124.0200945, - 44.9631605 - ], - [ - -124.0200317, - 44.9633791 - ], - [ - -124.0199467, - 44.9635234 - ], - [ - -124.019924, - 44.9635849 - ], - [ - -124.0198633, - 44.9637493 - ], - [ - -124.0198261, - 44.9638501 - ], - [ - -124.0198045, - 44.9638863 - ], - [ - -124.0197908, - 44.9639092 - ], - [ - -124.0197226, - 44.9640233 - ], - [ - -124.0197173, - 44.9640321 - ], - [ - -124.0197144, - 44.9640369 - ], - [ - -124.0196665, - 44.9641603 - ], - [ - -124.0196587, - 44.9641803 - ], - [ - -124.0196259, - 44.9644104 - ], - [ - -124.0195694, - 44.9645413 - ], - [ - -124.0194888, - 44.9647563 - ], - [ - -124.0194252, - 44.9648729 - ], - [ - -124.0194102, - 44.9649002 - ], - [ - -124.0193691, - 44.9649756 - ], - [ - -124.0193438, - 44.9650097 - ], - [ - -124.0192628, - 44.9651193 - ], - [ - -124.0191614, - 44.9652563 - ], - [ - -124.0190586, - 44.9654479 - ], - [ - -124.0190423, - 44.9654782 - ], - [ - -124.0189775, - 44.9657776 - ], - [ - -124.0189377, - 44.9660749 - ], - [ - -124.0188707, - 44.9662316 - ], - [ - -124.0188754, - 44.9663606 - ], - [ - -124.0188227, - 44.9665013 - ], - [ - -124.018728, - 44.9666615 - ], - [ - -124.0186921, - 44.9669042 - ], - [ - -124.0186888, - 44.9669269 - ], - [ - -124.0186598, - 44.9670151 - ], - [ - -124.0186163, - 44.9671475 - ], - [ - -124.018563, - 44.9673048 - ], - [ - -124.018536, - 44.9674093 - ], - [ - -124.0184504, - 44.9675501 - ], - [ - -124.0183592, - 44.9676479 - ], - [ - -124.0182856, - 44.9677862 - ], - [ - -124.0182351, - 44.9678547 - ], - [ - -124.0181556, - 44.9679456 - ], - [ - -124.0181003, - 44.9680358 - ], - [ - -124.0179801, - 44.9681065 - ], - [ - -124.0178733, - 44.9681486 - ], - [ - -124.0178218, - 44.9681524 - ], - [ - -124.017742, - 44.9681398 - ], - [ - -124.0176567, - 44.9681359 - ], - [ - -124.0175779, - 44.9681405 - ], - [ - -124.0174893, - 44.9681325 - ], - [ - -124.0174118, - 44.9681068 - ], - [ - -124.0173477, - 44.9681023 - ], - [ - -124.0172959, - 44.9680521 - ], - [ - -124.0172593, - 44.9679993 - ], - [ - -124.0172147, - 44.9679661 - ], - [ - -124.0171739, - 44.9679458 - ], - [ - -124.0171018, - 44.9679091 - ], - [ - -124.0170427, - 44.9678872 - ], - [ - -124.0170112, - 44.9678688 - ], - [ - -124.0169862, - 44.9678587 - ], - [ - -124.0169056, - 44.9678332 - ], - [ - -124.0168467, - 44.9678134 - ], - [ - -124.0168262, - 44.9678046 - ], - [ - -124.0168011, - 44.9678269 - ], - [ - -124.0167516, - 44.967871 - ], - [ - -124.0167792, - 44.9678814 - ], - [ - -124.0168916, - 44.9679046 - ], - [ - -124.0169703, - 44.9679385 - ], - [ - -124.0170504, - 44.9679693 - ], - [ - -124.017107, - 44.968006 - ], - [ - -124.0171464, - 44.9680529 - ], - [ - -124.0172292, - 44.9681281 - ], - [ - -124.0172932, - 44.9681946 - ], - [ - -124.0174107, - 44.968241 - ], - [ - -124.0175058, - 44.9683047 - ], - [ - -124.0176016, - 44.9683369 - ], - [ - -124.0177472, - 44.9684157 - ], - [ - -124.0178152, - 44.9684617 - ], - [ - -124.0178539, - 44.968492 - ], - [ - -124.0179357, - 44.9685561 - ], - [ - -124.01802, - 44.9686598 - ], - [ - -124.0180671, - 44.9687448 - ], - [ - -124.0180429, - 44.969054 - ], - [ - -124.018019, - 44.9692307 - ], - [ - -124.0178899, - 44.9695618 - ], - [ - -124.0178193, - 44.9698668 - ], - [ - -124.0177374, - 44.97007 - ], - [ - -124.0177204, - 44.9703592 - ], - [ - -124.0175731, - 44.9707088 - ], - [ - -124.0175221, - 44.9710096 - ], - [ - -124.0174143, - 44.9713577 - ], - [ - -124.0172638, - 44.9719785 - ], - [ - -124.0171899, - 44.9721497 - ], - [ - -124.0171445, - 44.972299 - ], - [ - -124.0171292, - 44.9724373 - ], - [ - -124.0170781, - 44.9725131 - ], - [ - -124.0170759, - 44.9725185 - ], - [ - -124.017053, - 44.9725755 - ], - [ - -124.0170671, - 44.9726289 - ], - [ - -124.0170581, - 44.9726568 - ], - [ - -124.0170337, - 44.9727327 - ], - [ - -124.017021, - 44.9728799 - ], - [ - -124.0170172, - 44.9729791 - ], - [ - -124.0170109, - 44.9730776 - ], - [ - -124.0169677, - 44.9731588 - ], - [ - -124.0169287, - 44.9731923 - ], - [ - -124.0168994, - 44.9732174 - ], - [ - -124.0168008, - 44.9733021 - ], - [ - -124.0167977, - 44.9733171 - ], - [ - -124.0167813, - 44.9733963 - ], - [ - -124.0167645, - 44.9734778 - ], - [ - -124.0167221, - 44.9736786 - ], - [ - -124.0167474, - 44.973914 - ], - [ - -124.0167621, - 44.9740263 - ], - [ - -124.0167745, - 44.9741211 - ], - [ - -124.0167408, - 44.9742788 - ], - [ - -124.0167378, - 44.9743004 - ], - [ - -124.0167187, - 44.9744376 - ], - [ - -124.0167168, - 44.9744514 - ], - [ - -124.0167157, - 44.9744593 - ], - [ - -124.0166455, - 44.9747384 - ], - [ - -124.0166233, - 44.9748633 - ], - [ - -124.0166025, - 44.9749811 - ], - [ - -124.0165938, - 44.9750006 - ], - [ - -124.016533, - 44.9751381 - ], - [ - -124.0165103, - 44.9751893 - ], - [ - -124.016425, - 44.9752757 - ], - [ - -124.0163978, - 44.9753032 - ], - [ - -124.0163569, - 44.9753398 - ], - [ - -124.0163086, - 44.975383 - ], - [ - -124.0163052, - 44.975443 - ], - [ - -124.0163037, - 44.9754699 - ], - [ - -124.0163034, - 44.9754755 - ], - [ - -124.0163686, - 44.9755352 - ], - [ - -124.0164885, - 44.9756008 - ], - [ - -124.0165445, - 44.9756666 - ], - [ - -124.0165587, - 44.9756833 - ], - [ - -124.0165041, - 44.9757435 - ], - [ - -124.0164072, - 44.9758158 - ], - [ - -124.0163501, - 44.9758959 - ], - [ - -124.016424, - 44.9759549 - ], - [ - -124.016454, - 44.9759998 - ], - [ - -124.0164567, - 44.9760037 - ], - [ - -124.0164832, - 44.9760834 - ], - [ - -124.0165084, - 44.9761861 - ], - [ - -124.016494, - 44.9762649 - ], - [ - -124.0164922, - 44.9762747 - ], - [ - -124.0164687, - 44.9763527 - ], - [ - -124.016463, - 44.9763715 - ], - [ - -124.0164367, - 44.9764259 - ], - [ - -124.0164372, - 44.9764796 - ], - [ - -124.0164402, - 44.9764859 - ], - [ - -124.0164865, - 44.976583 - ], - [ - -124.0164713, - 44.9766429 - ], - [ - -124.0164287, - 44.976742 - ], - [ - -124.0163559, - 44.9768324 - ], - [ - -124.0163139, - 44.976941 - ], - [ - -124.0162836, - 44.9770626 - ], - [ - -124.0162299, - 44.9771563 - ], - [ - -124.0162295, - 44.9771578 - ], - [ - -124.0162283, - 44.9771632 - ], - [ - -124.016222, - 44.9771907 - ], - [ - -124.0162022, - 44.9772779 - ], - [ - -124.0160752, - 44.9774652 - ], - [ - -124.0160128, - 44.9775441 - ], - [ - -124.0160183, - 44.977634 - ], - [ - -124.0159979, - 44.9776978 - ], - [ - -124.0159412, - 44.9777858 - ], - [ - -124.0158845, - 44.9778774 - ], - [ - -124.015865, - 44.9779089 - ], - [ - -124.0157759, - 44.9781332 - ], - [ - -124.01577, - 44.9781522 - ], - [ - -124.0157401, - 44.9782484 - ], - [ - -124.015723, - 44.9783034 - ], - [ - -124.0157217, - 44.9783073 - ], - [ - -124.0156798, - 44.9784159 - ], - [ - -124.0156734, - 44.9784271 - ], - [ - -124.0156456, - 44.9784764 - ], - [ - -124.0156118, - 44.9785647 - ], - [ - -124.0155686, - 44.9786742 - ], - [ - -124.0155494, - 44.978702 - ], - [ - -124.0154942, - 44.9787819 - ], - [ - -124.015486, - 44.9788394 - ], - [ - -124.0154734, - 44.9789282 - ], - [ - -124.0154817, - 44.9789629 - ], - [ - -124.015488, - 44.9789891 - ], - [ - -124.0154894, - 44.9789903 - ], - [ - -124.0155279, - 44.9790243 - ], - [ - -124.0155303, - 44.9790625 - ], - [ - -124.0155053, - 44.9790958 - ], - [ - -124.0154924, - 44.9791498 - ], - [ - -124.0155109, - 44.9791876 - ], - [ - -124.0155334, - 44.9792022 - ], - [ - -124.0155331, - 44.9792405 - ], - [ - -124.0155228, - 44.9792926 - ], - [ - -124.0155071, - 44.9793746 - ], - [ - -124.0154667, - 44.9795366 - ], - [ - -124.0154653, - 44.9795422 - ], - [ - -124.0154774, - 44.9796096 - ], - [ - -124.0154938, - 44.9797011 - ], - [ - -124.0154939, - 44.979702 - ], - [ - -124.0155049, - 44.9797628 - ], - [ - -124.0155579, - 44.9799874 - ], - [ - -124.0155477, - 44.9800149 - ], - [ - -124.0155093, - 44.9802618 - ], - [ - -124.0155077, - 44.9802709 - ], - [ - -124.0154919, - 44.9803622 - ], - [ - -124.0154595, - 44.9805484 - ], - [ - -124.0154584, - 44.9805561 - ], - [ - -124.0154169, - 44.9806837 - ], - [ - -124.0153862, - 44.980778 - ], - [ - -124.0153778, - 44.980819 - ], - [ - -124.01535, - 44.9809542 - ], - [ - -124.0153222, - 44.9810894 - ], - [ - -124.0153141, - 44.9811284 - ], - [ - -124.0152938, - 44.9812247 - ], - [ - -124.0152437, - 44.9814614 - ], - [ - -124.0152346, - 44.9814951 - ], - [ - -124.0152106, - 44.9815836 - ], - [ - -124.0151978, - 44.9816304 - ], - [ - -124.0151729, - 44.9817224 - ], - [ - -124.0151448, - 44.9817658 - ], - [ - -124.0151162, - 44.9818098 - ], - [ - -124.015057, - 44.9819013 - ], - [ - -124.0149824, - 44.9820166 - ], - [ - -124.0149564, - 44.9820369 - ], - [ - -124.0147909, - 44.9821666 - ], - [ - -124.0147874, - 44.9821728 - ], - [ - -124.0147686, - 44.9822331 - ], - [ - -124.0147589, - 44.9823081 - ], - [ - -124.0147485, - 44.9823892 - ], - [ - -124.0148231, - 44.9824703 - ], - [ - -124.0148373, - 44.9824857 - ], - [ - -124.0148654, - 44.9826093 - ], - [ - -124.0148468, - 44.9827798 - ], - [ - -124.0148348, - 44.9828027 - ], - [ - -124.0147934, - 44.9828819 - ], - [ - -124.0147845, - 44.9828988 - ], - [ - -124.0147813, - 44.9830223 - ], - [ - -124.0147806, - 44.9830463 - ], - [ - -124.0147801, - 44.9830657 - ], - [ - -124.0147798, - 44.9830778 - ], - [ - -124.0147707, - 44.9831357 - ], - [ - -124.0147632, - 44.9831836 - ], - [ - -124.0147624, - 44.9831888 - ], - [ - -124.0147579, - 44.9832178 - ], - [ - -124.0147536, - 44.9832447 - ], - [ - -124.0147212, - 44.9833895 - ], - [ - -124.0153253, - 44.9833858 - ], - [ - -124.0153245, - 44.983387 - ], - [ - -124.0152805, - 44.9835258 - ], - [ - -124.0153009, - 44.9836236 - ], - [ - -124.0153015, - 44.9836335 - ], - [ - -124.0153093, - 44.9837707 - ], - [ - -124.0153102, - 44.9837874 - ], - [ - -124.0153735, - 44.9838743 - ], - [ - -124.0153918, - 44.9839602 - ], - [ - -124.0153472, - 44.9840059 - ], - [ - -124.0152708, - 44.9840448 - ], - [ - -124.0152394, - 44.9840607 - ], - [ - -124.0151085, - 44.9841311 - ], - [ - -124.0150846, - 44.9841808 - ], - [ - -124.0150642, - 44.9842233 - ], - [ - -124.015074, - 44.9843179 - ], - [ - -124.0150767, - 44.9843437 - ], - [ - -124.0150791, - 44.9844551 - ], - [ - -124.0150805, - 44.9845157 - ], - [ - -124.015019, - 44.9846849 - ], - [ - -124.0149869, - 44.9847288 - ], - [ - -124.0149607, - 44.9848109 - ], - [ - -124.0149722, - 44.9848643 - ], - [ - -124.0149745, - 44.9848659 - ], - [ - -124.0150418, - 44.9849139 - ], - [ - -124.0150359, - 44.9849978 - ], - [ - -124.0150333, - 44.9850034 - ], - [ - -124.0149125, - 44.9852666 - ], - [ - -124.0149136, - 44.985277 - ], - [ - -124.0149281, - 44.9854142 - ], - [ - -124.0149314, - 44.9854458 - ], - [ - -124.0149166, - 44.9855513 - ], - [ - -124.0149113, - 44.9855896 - ], - [ - -124.0148805, - 44.9856882 - ], - [ - -124.0148303, - 44.9858494 - ], - [ - -124.0148124, - 44.9859621 - ], - [ - -124.0147907, - 44.9860991 - ], - [ - -124.0147684, - 44.9862399 - ], - [ - -124.0146819, - 44.9866545 - ], - [ - -124.0146008, - 44.9868921 - ], - [ - -124.0145784, - 44.9869849 - ], - [ - -124.0145618, - 44.9870534 - ], - [ - -124.0145451, - 44.9871229 - ], - [ - -124.0145082, - 44.9872681 - ], - [ - -124.0144854, - 44.9873274 - ], - [ - -124.0144725, - 44.9873609 - ], - [ - -124.0144643, - 44.9873822 - ], - [ - -124.0144204, - 44.9874964 - ], - [ - -124.0143534, - 44.9876013 - ], - [ - -124.0143199, - 44.9876537 - ], - [ - -124.0141271, - 44.9878748 - ], - [ - -124.0141214, - 44.9878813 - ], - [ - -124.0141026, - 44.9880119 - ], - [ - -124.0140973, - 44.988048 - ], - [ - -124.0140803, - 44.988149 - ], - [ - -124.0140746, - 44.9881829 - ], - [ - -124.0141701, - 44.9882492 - ], - [ - -124.014188, - 44.9882865 - ], - [ - -124.0142096, - 44.9883311 - ], - [ - -124.0141997, - 44.9884237 - ], - [ - -124.0141887, - 44.988527 - ], - [ - -124.014188, - 44.9885607 - ], - [ - -124.0141873, - 44.9885914 - ], - [ - -124.014185, - 44.9886978 - ], - [ - -124.0141826, - 44.9888059 - ], - [ - -124.0141882, - 44.9888349 - ], - [ - -124.0141888, - 44.9888376 - ], - [ - -124.0142089, - 44.988942 - ], - [ - -124.0141244, - 44.9890774 - ], - [ - -124.0140681, - 44.9891191 - ], - [ - -124.013995, - 44.9891391 - ], - [ - -124.0137548, - 44.9890546 - ], - [ - -124.0138342, - 44.9891099 - ], - [ - -124.0138586, - 44.9891269 - ], - [ - -124.0138833, - 44.9891442 - ], - [ - -124.0139717, - 44.9892041 - ], - [ - -124.0140793, - 44.9892714 - ], - [ - -124.0141292, - 44.9893164 - ], - [ - -124.0141385, - 44.9893484 - ], - [ - -124.0141473, - 44.9893791 - ], - [ - -124.0141069, - 44.9894484 - ], - [ - -124.014101, - 44.9894835 - ], - [ - -124.0140938, - 44.9895258 - ], - [ - -124.0141273, - 44.9896189 - ], - [ - -124.0141377, - 44.9897275 - ], - [ - -124.0141369, - 44.9897305 - ], - [ - -124.014116, - 44.9898071 - ], - [ - -124.0141083, - 44.989895 - ], - [ - -124.0141025, - 44.9899602 - ], - [ - -124.0140957, - 44.9900321 - ], - [ - -124.0140947, - 44.9900436 - ], - [ - -124.0140854, - 44.9900981 - ], - [ - -124.014025, - 44.9901964 - ], - [ - -124.0140175, - 44.9902087 - ], - [ - -124.0141088, - 44.9903064 - ], - [ - -124.0141357, - 44.9903352 - ], - [ - -124.014122, - 44.9904162 - ], - [ - -124.0141163, - 44.9904499 - ], - [ - -124.0140695, - 44.9905565 - ], - [ - -124.0140154, - 44.9906316 - ], - [ - -124.0139784, - 44.9906827 - ], - [ - -124.0139225, - 44.990771 - ], - [ - -124.0138864, - 44.9908873 - ], - [ - -124.0137139, - 44.9911399 - ], - [ - -124.0135959, - 44.9913158 - ], - [ - -124.013522, - 44.9916018 - ], - [ - -124.0135529, - 44.9918629 - ], - [ - -124.01362, - 44.9919517 - ], - [ - -124.0136811, - 44.9920956 - ], - [ - -124.0136248, - 44.9922275 - ], - [ - -124.0136281, - 44.9923264 - ], - [ - -124.0136215, - 44.9925411 - ], - [ - -124.0135935, - 44.9927319 - ], - [ - -124.0136002, - 44.9928336 - ], - [ - -124.013562, - 44.9929439 - ], - [ - -124.0136003, - 44.9931772 - ], - [ - -124.0136595, - 44.9933228 - ], - [ - -124.0137, - 44.9933908 - ], - [ - -124.0136967, - 44.9935256 - ], - [ - -124.0136008, - 44.9937396 - ], - [ - -124.0134753, - 44.9938736 - ], - [ - -124.0133923, - 44.9938938 - ], - [ - -124.0132671, - 44.9938994 - ], - [ - -124.0131313, - 44.9939922 - ], - [ - -124.013093, - 44.9940954 - ], - [ - -124.0130093, - 44.9941951 - ], - [ - -124.0129545, - 44.994248 - ], - [ - -124.0129344, - 44.9945423 - ], - [ - -124.0129316, - 44.9945835 - ], - [ - -124.0129009, - 44.9950321 - ], - [ - -124.012914, - 44.9950731 - ], - [ - -124.0125345, - 44.9969579 - ], - [ - -124.0123961, - 44.9976455 - ], - [ - -124.0123816, - 44.9977011 - ], - [ - -124.0123506, - 44.9980946 - ], - [ - -124.0121125, - 44.999708 - ], - [ - -124.0120082, - 45.0001406 - ], - [ - -124.0119461, - 45.0003981 - ], - [ - -124.011902, - 45.0005511 - ], - [ - -124.0118995, - 45.0005596 - ], - [ - -124.0118971, - 45.0005681 - ], - [ - -124.0118946, - 45.0005766 - ], - [ - -124.0118922, - 45.0005851 - ], - [ - -124.0118779, - 45.0006345 - ], - [ - -124.0118636, - 45.000684 - ], - [ - -124.0118494, - 45.0007335 - ], - [ - -124.0118351, - 45.0007829 - ], - [ - -124.011831, - 45.0007972 - ], - [ - -124.0118269, - 45.0008115 - ], - [ - -124.0118228, - 45.0008257 - ], - [ - -124.0118186, - 45.00084 - ], - [ - -124.0117976, - 45.000913 - ], - [ - -124.0117765, - 45.000986 - ], - [ - -124.0117743, - 45.0010532 - ], - [ - -124.0117522, - 45.0011299 - ], - [ - -124.0117327, - 45.0011977 - ], - [ - -124.0117179, - 45.0012488 - ], - [ - -124.0116806, - 45.001378 - ], - [ - -124.0116696, - 45.0014163 - ], - [ - -124.0116585, - 45.0014547 - ], - [ - -124.0116536, - 45.0014718 - ], - [ - -124.0116486, - 45.001489 - ], - [ - -124.011647, - 45.0014948 - ], - [ - -124.0116373, - 45.0015284 - ], - [ - -124.0113365, - 45.0015301 - ], - [ - -124.0113389, - 45.0015356 - ], - [ - -124.0113514, - 45.0015642 - ], - [ - -124.0113552, - 45.001625 - ], - [ - -124.0113491, - 45.0016663 - ], - [ - -124.0113252, - 45.0017311 - ], - [ - -124.0112872, - 45.0017779 - ], - [ - -124.0112595, - 45.0018154 - ], - [ - -124.0112404, - 45.001854 - ], - [ - -124.0112246, - 45.0018774 - ], - [ - -124.0112113, - 45.0019052 - ], - [ - -124.0112146, - 45.0019234 - ], - [ - -124.011224, - 45.0019368 - ], - [ - -124.0112359, - 45.0019562 - ], - [ - -124.0112419, - 45.001985 - ], - [ - -124.0112366, - 45.0020034 - ], - [ - -124.0112166, - 45.0020269 - ], - [ - -124.0111938, - 45.0020398 - ], - [ - -124.0111692, - 45.0020588 - ], - [ - -124.0111592, - 45.0020713 - ], - [ - -124.0111584, - 45.0020927 - ], - [ - -124.0111638, - 45.0021108 - ], - [ - -124.011182, - 45.0021285 - ], - [ - -124.0111962, - 45.0021494 - ], - [ - -124.0111997, - 45.0021721 - ], - [ - -124.0111973, - 45.0022027 - ], - [ - -124.0111892, - 45.0022456 - ], - [ - -124.01117, - 45.0022827 - ], - [ - -124.0111444, - 45.0023201 - ], - [ - -124.0111187, - 45.0023559 - ], - [ - -124.0110972, - 45.0023901 - ], - [ - -124.0110863, - 45.002424 - ], - [ - -124.01107, - 45.0024732 - ], - [ - -124.0110635, - 45.0025069 - ], - [ - -124.0110594, - 45.0025451 - ], - [ - -124.0110482, - 45.0025729 - ], - [ - -124.0110367, - 45.0025946 - ], - [ - -124.0110173, - 45.0026287 - ], - [ - -124.011009, - 45.0026686 - ], - [ - -124.0110015, - 45.0027206 - ], - [ - -124.0110059, - 45.0027585 - ], - [ - -124.011014, - 45.0027842 - ], - [ - -124.011031, - 45.0028172 - ], - [ - -124.0110346, - 45.0028414 - ], - [ - -124.0110276, - 45.002866 - ], - [ - -124.0110272, - 45.0028669 - ], - [ - -124.0110106, - 45.0029046 - ], - [ - -124.0109991, - 45.0029278 - ], - [ - -124.0109937, - 45.0029448 - ], - [ - -124.0109756, - 45.0029636 - ], - [ - -124.0109554, - 45.0029856 - ], - [ - -124.0109437, - 45.0030042 - ], - [ - -124.0109383, - 45.0030211 - ], - [ - -124.0109375, - 45.003044 - ], - [ - -124.0109413, - 45.0030698 - ], - [ - -124.0109326, - 45.0031036 - ], - [ - -124.0109129, - 45.0031316 - ], - [ - -124.0108624, - 45.0031834 - ], - [ - -124.0108402, - 45.003207 - ], - [ - -124.010823, - 45.0032425 - ], - [ - -124.0108057, - 45.003275 - ], - [ - -124.0108014, - 45.0033102 - ], - [ - -124.0108018, - 45.0033513 - ], - [ - -124.0108143, - 45.0033799 - ], - [ - -124.0108424, - 45.0034186 - ], - [ - -124.0108593, - 45.0034486 - ], - [ - -124.0108746, - 45.0034877 - ], - [ - -124.0108829, - 45.0035195 - ], - [ - -124.0108831, - 45.0035575 - ], - [ - -124.0108725, - 45.0035944 - ], - [ - -124.0108464, - 45.0036242 - ], - [ - -124.0108142, - 45.0036587 - ], - [ - -124.0107865, - 45.0036976 - ], - [ - -124.010775, - 45.0037208 - ], - [ - -124.010774, - 45.0037391 - ], - [ - -124.0107777, - 45.0037649 - ], - [ - -124.0107749, - 45.0037879 - ], - [ - -124.0107678, - 45.0038124 - ], - [ - -124.0107463, - 45.0038466 - ], - [ - -124.0107354, - 45.0038805 - ], - [ - -124.0107294, - 45.0039218 - ], - [ - -124.0107314, - 45.0039552 - ], - [ - -124.0107419, - 45.0039854 - ], - [ - -124.0107481, - 45.0040172 - ], - [ - -124.0107571, - 45.004058 - ], - [ - -124.0107741, - 45.004091 - ], - [ - -124.0107906, - 45.0041149 - ], - [ - -124.0108016, - 45.0041542 - ], - [ - -124.0108138, - 45.0042132 - ], - [ - -124.010808, - 45.0042591 - ], - [ - -124.010791, - 45.0042962 - ], - [ - -124.0107653, - 45.004332 - ], - [ - -124.0107212, - 45.0043836 - ], - [ - -124.0106977, - 45.0044209 - ], - [ - -124.0106834, - 45.0044671 - ], - [ - -124.0106814, - 45.0045052 - ], - [ - -124.0106963, - 45.0045383 - ], - [ - -124.0107289, - 45.0045799 - ], - [ - -124.0107599, - 45.0046292 - ], - [ - -124.0107747, - 45.0046608 - ], - [ - -124.0107746, - 45.0046943 - ], - [ - -124.0107655, - 45.004722 - ], - [ - -124.0107518, - 45.0047437 - ], - [ - -124.0107353, - 45.0047899 - ], - [ - -124.0107205, - 45.0048285 - ], - [ - -124.0107194, - 45.0048375 - ], - [ - -124.0107162, - 45.0048621 - ], - [ - -124.0107205, - 45.0048986 - ], - [ - -124.0107421, - 45.0049345 - ], - [ - -124.0107658, - 45.0049718 - ], - [ - -124.0107776, - 45.0050082 - ], - [ - -124.0107807, - 45.0050174 - ], - [ - -124.0107882, - 45.005039 - ], - [ - -124.0107897, - 45.0050638 - ], - [ - -124.010788, - 45.0050866 - ], - [ - -124.0107861, - 45.005112 - ], - [ - -124.0107797, - 45.0051511 - ], - [ - -124.0107643, - 45.0051842 - ], - [ - -124.0107588, - 45.0052008 - ], - [ - -124.010755, - 45.0052124 - ], - [ - -124.0107459, - 45.0052422 - ], - [ - -124.0107432, - 45.0052687 - ], - [ - -124.0107493, - 45.005298 - ], - [ - -124.0107621, - 45.0053286 - ], - [ - -124.0107701, - 45.0053502 - ], - [ - -124.0107689, - 45.0053673 - ], - [ - -124.010766, - 45.0053907 - ], - [ - -124.0107567, - 45.0054173 - ], - [ - -124.010739, - 45.0054505 - ], - [ - -124.010733, - 45.0054666 - ], - [ - -124.0107296, - 45.0054756 - ], - [ - -124.01072, - 45.0054977 - ], - [ - -124.0107124, - 45.0055166 - ], - [ - -124.0107132, - 45.0055305 - ], - [ - -124.0107189, - 45.0055521 - ], - [ - -124.0107423, - 45.0056119 - ], - [ - -124.0107469, - 45.00563 - ], - [ - -124.010751, - 45.0056458 - ], - [ - -124.0107548, - 45.0056721 - ], - [ - -124.0107553, - 45.0057171 - ], - [ - -124.0107544, - 45.0057731 - ], - [ - -124.0107495, - 45.0058012 - ], - [ - -124.0107341, - 45.0058358 - ], - [ - -124.0107311, - 45.0058577 - ], - [ - -124.0107308, - 45.0058784 - ], - [ - -124.0107306, - 45.0058856 - ], - [ - -124.0107272, - 45.005937 - ], - [ - -124.0107222, - 45.005962 - ], - [ - -124.0107046, - 45.0059967 - ], - [ - -124.0106862, - 45.0060168 - ], - [ - -124.0106738, - 45.0060303 - ], - [ - -124.0106553, - 45.0060495 - ], - [ - -124.0106453, - 45.0060653 - ], - [ - -124.0106406, - 45.006095 - ], - [ - -124.0106379, - 45.006123 - ], - [ - -124.0106447, - 45.0061551 - ], - [ - -124.0106503, - 45.0061816 - ], - [ - -124.0106561, - 45.0062063 - ], - [ - -124.0106579, - 45.0062342 - ], - [ - -124.0106576, - 45.0062653 - ], - [ - -124.0106493, - 45.0062922 - ], - [ - -124.0106485, - 45.0062951 - ], - [ - -124.010646, - 45.0063262 - ], - [ - -124.0106416, - 45.006362 - ], - [ - -124.0106504, - 45.0063975 - ], - [ - -124.0106433, - 45.0064257 - ], - [ - -124.0106413, - 45.0064296 - ], - [ - -124.0106296, - 45.0064525 - ], - [ - -124.0106246, - 45.0064775 - ], - [ - -124.0106239, - 45.0065008 - ], - [ - -124.0106274, - 45.0065225 - ], - [ - -124.0106374, - 45.0065439 - ], - [ - -124.0106389, - 45.0065669 - ], - [ - -124.0106391, - 45.0065702 - ], - [ - -124.0106318, - 45.0065953 - ], - [ - -124.0106139, - 45.0066238 - ], - [ - -124.010611, - 45.0066488 - ], - [ - -124.0106102, - 45.0066705 - ], - [ - -124.0106117, - 45.0066953 - ], - [ - -124.0106118, - 45.0067326 - ], - [ - -124.0106176, - 45.0067557 - ], - [ - -124.0106321, - 45.0067786 - ], - [ - -124.0106403, - 45.0068047 - ], - [ - -124.0106395, - 45.006828 - ], - [ - -124.0106358, - 45.0068416 - ], - [ - -124.0106288, - 45.0068672 - ], - [ - -124.0105969, - 45.0069179 - ], - [ - -124.0105745, - 45.0069465 - ], - [ - -124.0105528, - 45.006981 - ], - [ - -124.0105466, - 45.0069909 - ], - [ - -124.0105269, - 45.0070256 - ], - [ - -124.0105221, - 45.0070553 - ], - [ - -124.0105242, - 45.0070894 - ], - [ - -124.010533, - 45.0071187 - ], - [ - -124.0105352, - 45.0071263 - ], - [ - -124.0105528, - 45.0071631 - ], - [ - -124.0105427, - 45.0072131 - ], - [ - -124.0105396, - 45.0072353 - ], - [ - -124.0105382, - 45.0072458 - ], - [ - -124.0105376, - 45.0072559 - ], - [ - -124.0105362, - 45.0072847 - ], - [ - -124.0105379, - 45.0073126 - ], - [ - -124.0105305, - 45.0073346 - ], - [ - -124.0105192, - 45.0073644 - ], - [ - -124.0104907, - 45.0073995 - ], - [ - -124.0104642, - 45.0074314 - ], - [ - -124.0104349, - 45.0074593 - ], - [ - -124.0104104, - 45.0074827 - ], - [ - -124.0103898, - 45.0075002 - ], - [ - -124.0103688, - 45.0075182 - ], - [ - -124.0103271, - 45.0075521 - ], - [ - -124.0102905, - 45.0075982 - ], - [ - -124.0102345, - 45.0076481 - ], - [ - -124.0101947, - 45.0076788 - ], - [ - -124.0101751, - 45.0077152 - ], - [ - -124.0101582, - 45.0077607 - ], - [ - -124.0101553, - 45.0078214 - ], - [ - -124.0101471, - 45.0078651 - ], - [ - -124.0101354, - 45.0079245 - ], - [ - -124.0101318, - 45.0079728 - ], - [ - -124.010122, - 45.0080274 - ], - [ - -124.0101141, - 45.0080774 - ], - [ - -124.0100931, - 45.0081277 - ], - [ - -124.0100795, - 45.0081918 - ], - [ - -124.0100654, - 45.0082466 - ], - [ - -124.010055, - 45.008292 - ], - [ - -124.0100608, - 45.0083508 - ], - [ - -124.010061, - 45.0083896 - ], - [ - -124.0100584, - 45.0084107 - ], - [ - -124.0100528, - 45.0084282 - ], - [ - -124.0100371, - 45.0084939 - ], - [ - -124.0100204, - 45.0085426 - ], - [ - -124.0100174, - 45.0085517 - ], - [ - -124.0100038, - 45.0085943 - ], - [ - -124.0099827, - 45.0086431 - ], - [ - -124.0099532, - 45.0086885 - ], - [ - -124.0099507, - 45.0086922 - ], - [ - -124.0099097, - 45.008737 - ], - [ - -124.0098764, - 45.008766 - ], - [ - -124.0098097, - 45.0087851 - ], - [ - -124.0097588, - 45.0087993 - ], - [ - -124.0097473, - 45.0088026 - ], - [ - -124.0097176, - 45.0088175 - ], - [ - -124.0096925, - 45.0088369 - ], - [ - -124.0096878, - 45.0088553 - ], - [ - -124.0097064, - 45.0088803 - ], - [ - -124.0097305, - 45.0089011 - ], - [ - -124.0097437, - 45.0089112 - ], - [ - -124.0097544, - 45.0089192 - ], - [ - -124.0097674, - 45.0089458 - ], - [ - -124.0097689, - 45.0089713 - ], - [ - -124.0097646, - 45.0090253 - ], - [ - -124.0097606, - 45.0090487 - ], - [ - -124.009759, - 45.0090578 - ], - [ - -124.0097515, - 45.009089 - ], - [ - -124.0097555, - 45.0091239 - ], - [ - -124.0097627, - 45.0091492 - ], - [ - -124.0097699, - 45.0091732 - ], - [ - -124.0097787, - 45.0091863 - ], - [ - -124.0097929, - 45.0092076 - ], - [ - -124.0098042, - 45.0092368 - ], - [ - -124.0098102, - 45.009273 - ], - [ - -124.009807, - 45.0093135 - ], - [ - -124.0098039, - 45.0093239 - ], - [ - -124.0097976, - 45.0093461 - ], - [ - -124.0097786, - 45.0093777 - ], - [ - -124.0097591, - 45.0093998 - ], - [ - -124.0097492, - 45.0094243 - ], - [ - -124.0097499, - 45.0094364 - ], - [ - -124.0097507, - 45.0094485 - ], - [ - -124.0097563, - 45.0094612 - ], - [ - -124.0097595, - 45.0094685 - ], - [ - -124.0097659, - 45.0094804 - ], - [ - -124.0097882, - 45.0095026 - ], - [ - -124.0098061, - 45.0095168 - ], - [ - -124.0098251, - 45.0095486 - ], - [ - -124.0098467, - 45.009591 - ], - [ - -124.0098487, - 45.0095991 - ], - [ - -124.0098543, - 45.0096217 - ], - [ - -124.0098483, - 45.0096475 - ], - [ - -124.0098349, - 45.0096775 - ], - [ - -124.009812, - 45.0097065 - ], - [ - -124.0097923, - 45.009726 - ], - [ - -124.0097774, - 45.0097362 - ], - [ - -124.0097695, - 45.0097417 - ], - [ - -124.0097595, - 45.0097485 - ], - [ - -124.0097193, - 45.0097727 - ], - [ - -124.0096665, - 45.0098106 - ], - [ - -124.0096384, - 45.0098465 - ], - [ - -124.0096206, - 45.0098729 - ], - [ - -124.0096105, - 45.0098878 - ], - [ - -124.0096132, - 45.0099308 - ], - [ - -124.009631, - 45.0099747 - ], - [ - -124.0096559, - 45.0100089 - ], - [ - -124.0096567, - 45.0100106 - ], - [ - -124.0096734, - 45.0100474 - ], - [ - -124.0096769, - 45.0100729 - ], - [ - -124.0096663, - 45.0101162 - ], - [ - -124.0096566, - 45.0101481 - ], - [ - -124.0096489, - 45.0101733 - ], - [ - -124.0096294, - 45.0102265 - ], - [ - -124.0096116, - 45.0102769 - ], - [ - -124.0096075, - 45.0102848 - ], - [ - -124.0095811, - 45.0103371 - ], - [ - -124.0095468, - 45.0103974 - ], - [ - -124.0095358, - 45.0104216 - ], - [ - -124.0095301, - 45.0104342 - ], - [ - -124.0095223, - 45.0104614 - ], - [ - -124.0095238, - 45.010487 - ], - [ - -124.0095407, - 45.0105147 - ], - [ - -124.0095495, - 45.0105346 - ], - [ - -124.0095546, - 45.0105588 - ], - [ - -124.0095549, - 45.0105601 - ], - [ - -124.0095582, - 45.0105842 - ], - [ - -124.0095499, - 45.0106033 - ], - [ - -124.0095264, - 45.0106229 - ], - [ - -124.0095162, - 45.010642 - ], - [ - -124.0095085, - 45.0106706 - ], - [ - -124.0095112, - 45.0106956 - ], - [ - -124.0095128, - 45.0107095 - ], - [ - -124.009524, - 45.0107374 - ], - [ - -124.0095472, - 45.0107757 - ], - [ - -124.009566, - 45.0108048 - ], - [ - -124.0095841, - 45.0108331 - ], - [ - -124.009587, - 45.0108378 - ], - [ - -124.0095967, - 45.0108712 - ], - [ - -124.0095893, - 45.0109064 - ], - [ - -124.0095758, - 45.0109337 - ], - [ - -124.0095415, - 45.0109617 - ], - [ - -124.0095276, - 45.0109699 - ], - [ - -124.0094957, - 45.0109887 - ], - [ - -124.0094547, - 45.0110008 - ], - [ - -124.0094025, - 45.0110172 - ], - [ - -124.0093617, - 45.0110333 - ], - [ - -124.0093247, - 45.0110479 - ], - [ - -124.0093069, - 45.0110673 - ], - [ - -124.0093028, - 45.0110943 - ], - [ - -124.0093067, - 45.0111058 - ], - [ - -124.0093121, - 45.0111223 - ], - [ - -124.0093345, - 45.0111472 - ], - [ - -124.0093593, - 45.0111801 - ], - [ - -124.0093741, - 45.0112039 - ], - [ - -124.0093798, - 45.0112347 - ], - [ - -124.0093796, - 45.0112433 - ], - [ - -124.0093788, - 45.0112818 - ], - [ - -124.0093737, - 45.011321 - ], - [ - -124.0093531, - 45.011358 - ], - [ - -124.0093335, - 45.0113788 - ], - [ - -124.0093319, - 45.0113802 - ], - [ - -124.0092956, - 45.0114096 - ], - [ - -124.0092646, - 45.0114308 - ], - [ - -124.0092521, - 45.0114446 - ], - [ - -124.0092402, - 45.0114665 - ], - [ - -124.0092318, - 45.0114843 - ], - [ - -124.0092369, - 45.0115057 - ], - [ - -124.0092402, - 45.0115168 - ], - [ - -124.0092441, - 45.0115297 - ], - [ - -124.0092556, - 45.011563 - ], - [ - -124.0092563, - 45.0116061 - ], - [ - -124.0092568, - 45.0116451 - ], - [ - -124.0092545, - 45.0116539 - ], - [ - -124.0092476, - 45.0116804 - ], - [ - -124.0092315, - 45.0117087 - ], - [ - -124.0092305, - 45.0117106 - ], - [ - -124.0092094, - 45.0117381 - ], - [ - -124.0091977, - 45.0117641 - ], - [ - -124.0091897, - 45.0117886 - ], - [ - -124.0091876, - 45.0118169 - ], - [ - -124.0091875, - 45.0118181 - ], - [ - -124.0091841, - 45.011852 - ], - [ - -124.0091827, - 45.0118925 - ], - [ - -124.0091691, - 45.0119277 - ], - [ - -124.009168, - 45.0119306 - ], - [ - -124.0091579, - 45.0119821 - ], - [ - -124.0091527, - 45.0120213 - ], - [ - -124.0091586, - 45.0120561 - ], - [ - -124.0091599, - 45.0120647 - ], - [ - -124.0091648, - 45.0120963 - ], - [ - -124.0091598, - 45.0121382 - ], - [ - -124.0091431, - 45.0121751 - ], - [ - -124.0091276, - 45.0122016 - ], - [ - -124.009119, - 45.0122162 - ], - [ - -124.0091003, - 45.0122573 - ], - [ - -124.0090949, - 45.0122858 - ], - [ - -124.0090926, - 45.0123173 - ], - [ - -124.0090926, - 45.0123248 - ], - [ - -124.0090927, - 45.0123386 - ], - [ - -124.0090928, - 45.0123437 - ], - [ - -124.0090976, - 45.012376 - ], - [ - -124.0091074, - 45.0124193 - ], - [ - -124.009112, - 45.0124772 - ], - [ - -124.0091129, - 45.0124875 - ], - [ - -124.0091116, - 45.0125403 - ], - [ - -124.0091122, - 45.0125991 - ], - [ - -124.0091101, - 45.0126143 - ], - [ - -124.0091061, - 45.0126428 - ], - [ - -124.0090977, - 45.0126704 - ], - [ - -124.0090804, - 45.0126922 - ], - [ - -124.0090676, - 45.012719 - ], - [ - -124.0090605, - 45.0127445 - ], - [ - -124.0090609, - 45.0127511 - ], - [ - -124.0090619, - 45.0127678 - ], - [ - -124.0090726, - 45.0127796 - ], - [ - -124.0090898, - 45.0128055 - ], - [ - -124.0091076, - 45.0128425 - ], - [ - -124.0091177, - 45.0128686 - ], - [ - -124.0091189, - 45.0128886 - ], - [ - -124.0091201, - 45.0129101 - ], - [ - -124.0091165, - 45.0129456 - ], - [ - -124.0091002, - 45.0129857 - ], - [ - -124.0090859, - 45.0130094 - ], - [ - -124.009077, - 45.0130254 - ], - [ - -124.0090716, - 45.0130351 - ], - [ - -124.0090521, - 45.0130682 - ], - [ - -124.0090423, - 45.0130968 - ], - [ - -124.0090387, - 45.0131334 - ], - [ - -124.009039, - 45.0131622 - ], - [ - -124.009039, - 45.0131638 - ], - [ - -124.0090372, - 45.0132065 - ], - [ - -124.0090296, - 45.0132482 - ], - [ - -124.0090249, - 45.01329 - ], - [ - -124.0090257, - 45.0132992 - ], - [ - -124.0090291, - 45.0133375 - ], - [ - -124.0090331, - 45.013382 - ], - [ - -124.0090372, - 45.0134031 - ], - [ - -124.0090398, - 45.013409 - ], - [ - -124.009047, - 45.0134252 - ], - [ - -124.0090525, - 45.0134365 - ], - [ - -124.00906, - 45.0134521 - ], - [ - -124.0090746, - 45.0134831 - ], - [ - -124.0090775, - 45.0135074 - ], - [ - -124.0090789, - 45.0135317 - ], - [ - -124.0090731, - 45.0135552 - ], - [ - -124.0090616, - 45.0135788 - ], - [ - -124.0090455, - 45.0135965 - ], - [ - -124.0090324, - 45.0136172 - ], - [ - -124.0090248, - 45.0136346 - ], - [ - -124.0090262, - 45.0136579 - ], - [ - -124.0090329, - 45.013676 - ], - [ - -124.0090481, - 45.0136917 - ], - [ - -124.0090679, - 45.0137095 - ], - [ - -124.0090722, - 45.0137133 - ], - [ - -124.0090969, - 45.0137441 - ], - [ - -124.0091094, - 45.013763 - ], - [ - -124.0091134, - 45.0137821 - ], - [ - -124.0091157, - 45.0137983 - ], - [ - -124.0091188, - 45.0138266 - ], - [ - -124.0091123, - 45.0138426 - ], - [ - -124.0091111, - 45.0138455 - ], - [ - -124.0091078, - 45.0138535 - ], - [ - -124.0091063, - 45.0138573 - ], - [ - -124.0090907, - 45.0138852 - ], - [ - -124.0090736, - 45.01391 - ], - [ - -124.0090592, - 45.0139337 - ], - [ - -124.0090375, - 45.0139536 - ], - [ - -124.0090242, - 45.0139702 - ], - [ - -124.0090198, - 45.0139927 - ], - [ - -124.0090264, - 45.0140087 - ], - [ - -124.0090424, - 45.0140386 - ], - [ - -124.0090595, - 45.0140614 - ], - [ - -124.0090733, - 45.0140773 - ], - [ - -124.0091012, - 45.0140917 - ], - [ - -124.0091464, - 45.0141066 - ], - [ - -124.0091795, - 45.0141159 - ], - [ - -124.0091987, - 45.0141213 - ], - [ - -124.0092351, - 45.0141324 - ], - [ - -124.0092542, - 45.014142 - ], - [ - -124.0092718, - 45.0141749 - ], - [ - -124.0092819, - 45.0142263 - ], - [ - -124.0092811, - 45.0142536 - ], - [ - -124.0092805, - 45.014275 - ], - [ - -124.0092706, - 45.0143027 - ], - [ - -124.0092702, - 45.0143453 - ], - [ - -124.0092651, - 45.0143799 - ], - [ - -124.0092589, - 45.0144216 - ], - [ - -124.0092437, - 45.0144591 - ], - [ - -124.0092427, - 45.0144616 - ], - [ - -124.0092303, - 45.0144954 - ], - [ - -124.0092269, - 45.0145097 - ], - [ - -124.0092236, - 45.0145271 - ], - [ - -124.0092282, - 45.0145584 - ], - [ - -124.0092355, - 45.0145855 - ], - [ - -124.0092356, - 45.0146109 - ], - [ - -124.0092346, - 45.0146433 - ], - [ - -124.0092308, - 45.0146648 - ], - [ - -124.0092271, - 45.0146861 - ], - [ - -124.009216, - 45.0147179 - ], - [ - -124.0092149, - 45.0147473 - ], - [ - -124.0092151, - 45.0147566 - ], - [ - -124.0092161, - 45.0147939 - ], - [ - -124.0092134, - 45.0148214 - ], - [ - -124.0092107, - 45.0148488 - ], - [ - -124.0092158, - 45.0148862 - ], - [ - -124.0092165, - 45.0148937 - ], - [ - -124.0092189, - 45.0149165 - ], - [ - -124.0092285, - 45.0149588 - ], - [ - -124.0092321, - 45.0150035 - ], - [ - -124.0092339, - 45.0150266 - ], - [ - -124.0092322, - 45.0150712 - ], - [ - -124.0092307, - 45.0151199 - ], - [ - -124.0092319, - 45.0151407 - ], - [ - -124.0092333, - 45.0151655 - ], - [ - -124.0092379, - 45.0152201 - ], - [ - -124.009242, - 45.0152666 - ], - [ - -124.0092413, - 45.0152779 - ], - [ - -124.0092398, - 45.0153032 - ], - [ - -124.0092369, - 45.0153266 - ], - [ - -124.0092398, - 45.0153518 - ], - [ - -124.0092441, - 45.015377 - ], - [ - -124.0092485, - 45.0154033 - ], - [ - -124.0092492, - 45.0154151 - ], - [ - -124.0092508, - 45.0154437 - ], - [ - -124.0092479, - 45.0154915 - ], - [ - -124.0092469, - 45.0155483 - ], - [ - -124.0092466, - 45.0155522 - ], - [ - -124.0092428, - 45.0156011 - ], - [ - -124.0092287, - 45.0156542 - ], - [ - -124.0092173, - 45.0156892 - ], - [ - -124.0092153, - 45.0156952 - ], - [ - -124.0091919, - 45.0157354 - ], - [ - -124.0091806, - 45.0157611 - ], - [ - -124.0091659, - 45.0157795 - ], - [ - -124.009144, - 45.0157899 - ], - [ - -124.0091203, - 45.015798 - ], - [ - -124.0090962, - 45.0157999 - ], - [ - -124.0090651, - 45.015802 - ], - [ - -124.0090394, - 45.0158052 - ], - [ - -124.0090121, - 45.0158122 - ], - [ - -124.0089937, - 45.0158225 - ], - [ - -124.0089928, - 45.0158251 - ], - [ - -124.0089907, - 45.0158312 - ], - [ - -124.0089946, - 45.0158397 - ], - [ - -124.0090124, - 45.0158478 - ], - [ - -124.0090441, - 45.0158567 - ], - [ - -124.0090831, - 45.0158739 - ], - [ - -124.0091244, - 45.0158997 - ], - [ - -124.0091499, - 45.0159223 - ], - [ - -124.0091755, - 45.0159461 - ], - [ - -124.0091816, - 45.0159519 - ], - [ - -124.0091938, - 45.0159634 - ], - [ - -124.0091957, - 45.0159651 - ], - [ - -124.0092326, - 45.0160046 - ], - [ - -124.0092649, - 45.0160552 - ], - [ - -124.0092764, - 45.0161023 - ], - [ - -124.0092815, - 45.0161657 - ], - [ - -124.0092823, - 45.0162368 - ], - [ - -124.009282, - 45.0162387 - ], - [ - -124.0092764, - 45.0162849 - ], - [ - -124.0092735, - 45.016323 - ], - [ - -124.0092655, - 45.0163637 - ], - [ - -124.0092609, - 45.0163757 - ], - [ - -124.0092475, - 45.0164109 - ], - [ - -124.0092428, - 45.0164479 - ], - [ - -124.0092425, - 45.0164724 - ], - [ - -124.0092457, - 45.0164969 - ], - [ - -124.0092503, - 45.0165128 - ], - [ - -124.0092565, - 45.0165346 - ], - [ - -124.0092622, - 45.0165713 - ], - [ - -124.0092629, - 45.0165835 - ], - [ - -124.0092632, - 45.0166179 - ], - [ - -124.0092613, - 45.0166449 - ], - [ - -124.0092601, - 45.01665 - ], - [ - -124.0092558, - 45.0166684 - ], - [ - -124.0092359, - 45.0167132 - ], - [ - -124.0092176, - 45.0167554 - ], - [ - -124.0092116, - 45.0167869 - ], - [ - -124.009211, - 45.01679 - ], - [ - -124.009199, - 45.016821 - ], - [ - -124.0091925, - 45.0168568 - ], - [ - -124.0091941, - 45.016885 - ], - [ - -124.0091876, - 45.0169208 - ], - [ - -124.0091875, - 45.016924 - ], - [ - -124.009187, - 45.0169405 - ], - [ - -124.0091848, - 45.0169614 - ], - [ - -124.0091782, - 45.0169972 - ], - [ - -124.0091795, - 45.017018 - ], - [ - -124.0091811, - 45.0170462 - ], - [ - -124.0091774, - 45.0170611 - ], - [ - -124.0091755, - 45.0170684 - ], - [ - -124.0091749, - 45.0170881 - ], - [ - -124.0091745, - 45.0171102 - ], - [ - -124.0091703, - 45.0171275 - ], - [ - -124.0091665, - 45.0171509 - ], - [ - -124.0091642, - 45.0171694 - ], - [ - -124.0091651, - 45.0171853 - ], - [ - -124.0091671, - 45.017198 - ], - [ - -124.0091678, - 45.0172024 - ], - [ - -124.0091726, - 45.0172244 - ], - [ - -124.0091781, - 45.0172586 - ], - [ - -124.0091767, - 45.0172942 - ], - [ - -124.0091717, - 45.0173275 - ], - [ - -124.0091655, - 45.0173391 - ], - [ - -124.0091645, - 45.017341 - ], - [ - -124.0091624, - 45.017345 - ], - [ - -124.0091635, - 45.0173646 - ], - [ - -124.009161, - 45.0173794 - ], - [ - -124.0091533, - 45.0173956 - ], - [ - -124.0091394, - 45.0174254 - ], - [ - -124.0091335, - 45.0174428 - ], - [ - -124.0091278, - 45.0174626 - ], - [ - -124.0091269, - 45.0174773 - ], - [ - -124.0091247, - 45.0174965 - ], - [ - -124.0091246, - 45.017497 - ], - [ - -124.0091215, - 45.0175327 - ], - [ - -124.0091226, - 45.0175793 - ], - [ - -124.0091262, - 45.0176124 - ], - [ - -124.0091209, - 45.0176395 - ], - [ - -124.0091156, - 45.0176667 - ], - [ - -124.0091217, - 45.0176825 - ], - [ - -124.0091296, - 45.0176994 - ], - [ - -124.009129, - 45.0177473 - ], - [ - -124.0091295, - 45.017774 - ], - [ - -124.0091299, - 45.0177927 - ], - [ - -124.0091377, - 45.0178366 - ], - [ - -124.0091447, - 45.0178671 - ], - [ - -124.0091446, - 45.0178941 - ], - [ - -124.0091396, - 45.0179274 - ], - [ - -124.0091346, - 45.0179594 - ], - [ - -124.0091299, - 45.0179797 - ], - [ - -124.0091283, - 45.0179866 - ], - [ - -124.0091249, - 45.0180015 - ], - [ - -124.0091196, - 45.0180286 - ], - [ - -124.009103, - 45.0180696 - ], - [ - -124.0090955, - 45.0180895 - ], - [ - -124.0090915, - 45.0181167 - ], - [ - -124.0090893, - 45.0181314 - ], - [ - -124.0090924, - 45.0181546 - ], - [ - -124.0090894, - 45.0181915 - ], - [ - -124.0090988, - 45.018233 - ], - [ - -124.009102, - 45.0182539 - ], - [ - -124.0091043, - 45.0182684 - ], - [ - -124.0091105, - 45.0183149 - ], - [ - -124.0091122, - 45.018343 - ], - [ - -124.0091038, - 45.0183764 - ], - [ - -124.0090998, - 45.018391 - ], - [ - -124.0090981, - 45.0183975 - ], - [ - -124.0090887, - 45.0184149 - ], - [ - -124.0090745, - 45.0184374 - ], - [ - -124.0090707, - 45.0184621 - ], - [ - -124.0090653, - 45.018488 - ], - [ - -124.0090564, - 45.0185128 - ], - [ - -124.0090565, - 45.018528 - ], - [ - -124.0090566, - 45.0185447 - ], - [ - -124.0090593, - 45.0185913 - ], - [ - -124.0090653, - 45.0186341 - ], - [ - -124.0090737, - 45.0186652 - ], - [ - -124.0090741, - 45.0186669 - ], - [ - -124.0090893, - 45.0186886 - ], - [ - -124.0091003, - 45.0187288 - ], - [ - -124.0091002, - 45.018757 - ], - [ - -124.0091004, - 45.0187901 - ], - [ - -124.0090961, - 45.0188024 - ], - [ - -124.009093, - 45.0188112 - ], - [ - -124.0090845, - 45.0188434 - ], - [ - -124.0090853, - 45.0188568 - ], - [ - -124.0090922, - 45.0188861 - ], - [ - -124.0090863, - 45.0189035 - ], - [ - -124.0090804, - 45.0189196 - ], - [ - -124.0090728, - 45.0189382 - ], - [ - -124.0090725, - 45.0189395 - ], - [ - -124.0090687, - 45.0189567 - ], - [ - -124.0090692, - 45.0189936 - ], - [ - -124.0090815, - 45.0190263 - ], - [ - -124.0090902, - 45.0190493 - ], - [ - -124.0090958, - 45.0190639 - ], - [ - -124.0091137, - 45.0191027 - ], - [ - -124.0091261, - 45.0191379 - ], - [ - -124.0091326, - 45.0191593 - ], - [ - -124.009139, - 45.0191805 - ], - [ - -124.0091461, - 45.0192122 - ], - [ - -124.0091497, - 45.0192452 - ], - [ - -124.0091448, - 45.0192797 - ], - [ - -124.009135, - 45.0192964 - ], - [ - -124.0091338, - 45.0192985 - ], - [ - -124.0091207, - 45.0193111 - ], - [ - -124.0091079, - 45.0193275 - ], - [ - -124.009107, - 45.0193422 - ], - [ - -124.0091096, - 45.0193569 - ], - [ - -124.0091208, - 45.01937 - ], - [ - -124.0091389, - 45.0193842 - ], - [ - -124.0091517, - 45.0193961 - ], - [ - -124.0091777, - 45.019426 - ], - [ - -124.0091791, - 45.0194338 - ], - [ - -124.0091829, - 45.0194553 - ], - [ - -124.0091906, - 45.0194993 - ], - [ - -124.0091936, - 45.0195495 - ], - [ - -124.0091949, - 45.019571 - ], - [ - -124.0091952, - 45.0195765 - ], - [ - -124.0091983, - 45.0195997 - ], - [ - -124.0092067, - 45.0196259 - ], - [ - -124.0092089, - 45.0196325 - ], - [ - -124.0092105, - 45.0196607 - ], - [ - -124.0092086, - 45.0196865 - ], - [ - -124.0091995, - 45.0197089 - ], - [ - -124.0091859, - 45.0197412 - ], - [ - -124.0091782, - 45.0197586 - ], - [ - -124.0091795, - 45.0197807 - ], - [ - -124.0091947, - 45.0198023 - ], - [ - -124.0092062, - 45.0198228 - ], - [ - -124.0092223, - 45.0198604 - ], - [ - -124.0092252, - 45.0198812 - ], - [ - -124.0092353, - 45.01993 - ], - [ - -124.0092371, - 45.0199383 - ], - [ - -124.0092512, - 45.0200067 - ], - [ - -124.0092588, - 45.0200519 - ], - [ - -124.0092551, - 45.0200674 - ], - [ - -124.0092518, - 45.0200815 - ], - [ - -124.0092503, - 45.0201004 - ], - [ - -124.0092492, - 45.0201154 - ], - [ - -124.0092484, - 45.0201822 - ], - [ - -124.0092764, - 45.0202303 - ], - [ - -124.0092924, - 45.0202547 - ], - [ - -124.009297, - 45.0202597 - ], - [ - -124.0092976, - 45.0202604 - ], - [ - -124.0093144, - 45.0202786 - ], - [ - -124.0093296, - 45.0203027 - ], - [ - -124.0093416, - 45.0203331 - ], - [ - -124.009342, - 45.0203723 - ], - [ - -124.009339, - 45.0203944 - ], - [ - -124.0093383, - 45.0203994 - ], - [ - -124.0093214, - 45.0204392 - ], - [ - -124.0093115, - 45.0204656 - ], - [ - -124.0093075, - 45.0205371 - ], - [ - -124.0093077, - 45.0205468 - ], - [ - -124.0093166, - 45.0205718 - ], - [ - -124.0093374, - 45.0206044 - ], - [ - -124.0093459, - 45.0206336 - ], - [ - -124.0093516, - 45.0206752 - ], - [ - -124.0093463, - 45.0207048 - ], - [ - -124.0093359, - 45.0207357 - ], - [ - -124.0093281, - 45.0207838 - ], - [ - -124.0093386, - 45.0208179 - ], - [ - -124.0093504, - 45.0208361 - ], - [ - -124.0093651, - 45.0208589 - ], - [ - -124.0093928, - 45.0208913 - ], - [ - -124.009403, - 45.0209192 - ], - [ - -124.0094014, - 45.0209548 - ], - [ - -124.0093991, - 45.0209757 - ], - [ - -124.0094005, - 45.0210011 - ], - [ - -124.0094019, - 45.0210272 - ], - [ - -124.0094146, - 45.0211005 - ], - [ - -124.0094214, - 45.0211603 - ], - [ - -124.0094289, - 45.0212029 - ], - [ - -124.0094319, - 45.0212207 - ], - [ - -124.0094309, - 45.0212424 - ], - [ - -124.00943, - 45.0212482 - ], - [ - -124.0094231, - 45.0212892 - ], - [ - -124.0094167, - 45.0213299 - ], - [ - -124.0094007, - 45.0213856 - ], - [ - -124.0093859, - 45.0214326 - ], - [ - -124.0093579, - 45.0214898 - ], - [ - -124.0093353, - 45.0215518 - ], - [ - -124.0093274, - 45.0215962 - ], - [ - -124.0093283, - 45.021644 - ], - [ - -124.0093425, - 45.0216829 - ], - [ - -124.0093582, - 45.0217168 - ], - [ - -124.0093734, - 45.0217422 - ], - [ - -124.0093729, - 45.0217718 - ], - [ - -124.0093593, - 45.0218178 - ], - [ - -124.0093316, - 45.0218954 - ], - [ - -124.0093251, - 45.0219153 - ], - [ - -124.0093289, - 45.0219666 - ], - [ - -124.0093364, - 45.022031 - ], - [ - -124.0093211, - 45.0220791 - ], - [ - -124.0093075, - 45.022112 - ], - [ - -124.0092959, - 45.0221371 - ], - [ - -124.0092917, - 45.0221887 - ], - [ - -124.0092978, - 45.0222341 - ], - [ - -124.0093048, - 45.0222928 - ], - [ - -124.0093152, - 45.0223609 - ], - [ - -124.009333, - 45.0224193 - ], - [ - -124.0093401, - 45.0224799 - ], - [ - -124.0093406, - 45.0224861 - ], - [ - -124.0093459, - 45.0225577 - ], - [ - -124.0093458, - 45.0225919 - ], - [ - -124.0093376, - 45.0226265 - ], - [ - -124.0093345, - 45.0226932 - ], - [ - -124.0093435, - 45.0227423 - ], - [ - -124.0093543, - 45.0228161 - ], - [ - -124.0093522, - 45.02286 - ], - [ - -124.0093547, - 45.0228941 - ], - [ - -124.0093707, - 45.0229278 - ], - [ - -124.0093997, - 45.0229571 - ], - [ - -124.0094247, - 45.0230057 - ], - [ - -124.0094271, - 45.0230379 - ], - [ - -124.0094464, - 45.023081 - ], - [ - -124.0094489, - 45.0231151 - ], - [ - -124.0094748, - 45.023175 - ], - [ - -124.0094796, - 45.0232395 - ], - [ - -124.0094783, - 45.0232586 - ], - [ - -124.0094955, - 45.0233093 - ], - [ - -124.0095473, - 45.023393 - ], - [ - -124.009578, - 45.0234452 - ], - [ - -124.0096008, - 45.0234995 - ], - [ - -124.0096159, - 45.0235579 - ], - [ - -124.0096256, - 45.0236165 - ], - [ - -124.0096466, - 45.0236823 - ], - [ - -124.0096863, - 45.0237474 - ], - [ - -124.0097246, - 45.0238297 - ], - [ - -124.0097438, - 45.0239089 - ], - [ - -124.0097527, - 45.0239562 - ], - [ - -124.0097589, - 45.0240035 - ], - [ - -124.0098061, - 45.0240969 - ], - [ - -124.0098427, - 45.0241341 - ], - [ - -124.0098264, - 45.0241296 - ], - [ - -124.0094991, - 45.02404 - ], - [ - -124.0090805, - 45.0239254 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15881_s_16278", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9390428, - 44.6158865 - ], - [ - -123.9393814, - 44.6167227 - ], - [ - -123.9394325, - 44.6168967 - ], - [ - -123.9397214, - 44.618395 - ], - [ - -123.9397435, - 44.618629 - ], - [ - -123.9397776, - 44.6194208 - ], - [ - -123.9397718, - 44.6201508 - ], - [ - -123.9397712, - 44.6202022 - ], - [ - -123.9397624, - 44.6208082 - ], - [ - -123.9397417, - 44.6212733 - ], - [ - -123.9397247, - 44.6215003 - ], - [ - -123.9396737, - 44.6219822 - ], - [ - -123.9396367, - 44.6222512 - ], - [ - -123.9395373, - 44.6228205 - ], - [ - -123.9394534, - 44.6232155 - ], - [ - -123.9394441, - 44.6232584 - ], - [ - -123.9393682, - 44.6236065 - ], - [ - -123.9392779, - 44.623978 - ], - [ - -123.9390601, - 44.6247901 - ], - [ - -123.9390425, - 44.6248546 - ], - [ - -123.9387809, - 44.6257991 - ], - [ - -123.9387435, - 44.626107 - ], - [ - -123.9385119, - 44.6272737 - ], - [ - -123.9383551, - 44.6278408 - ], - [ - -123.9381563, - 44.6284625 - ], - [ - -123.9380034, - 44.6288835 - ], - [ - -123.937958, - 44.6289795 - ], - [ - -123.9379799, - 44.6290499 - ], - [ - -123.9389969, - 44.6301641 - ], - [ - -123.9400786, - 44.6320394 - ], - [ - -123.9406535, - 44.6340256 - ], - [ - -123.9407014, - 44.6360535 - ], - [ - -123.9402206, - 44.6380524 - ], - [ - -123.9392278, - 44.6399527 - ], - [ - -123.9375713, - 44.6423979 - ], - [ - -123.9373998, - 44.6426428 - ], - [ - -123.9367571, - 44.6440973 - ], - [ - -123.9361844, - 44.6454329 - ], - [ - -123.9361318, - 44.6455533 - ], - [ - -123.9354769, - 44.6470196 - ], - [ - -123.9351899, - 44.6477102 - ], - [ - -123.9350024, - 44.6481301 - ], - [ - -123.9347805, - 44.6485941 - ], - [ - -123.9336206, - 44.6504377 - ], - [ - -123.9334246, - 44.6506847 - ], - [ - -123.9325694, - 44.6516423 - ], - [ - -123.9322784, - 44.6519334 - ], - [ - -123.9303153, - 44.6535375 - ], - [ - -123.9279514, - 44.6548373 - ], - [ - -123.9252775, - 44.6557829 - ], - [ - -123.9223964, - 44.656338 - ], - [ - -123.919419, - 44.6564811 - ], - [ - -123.9164597, - 44.6562068 - ], - [ - -123.9136323, - 44.6555256 - ], - [ - -123.9110455, - 44.6544637 - ], - [ - -123.9087988, - 44.653062 - ], - [ - -123.9069784, - 44.6513743 - ], - [ - -123.9056544, - 44.6494655 - ], - [ - -123.9048775, - 44.647409 - ], - [ - -123.9046776, - 44.6452838 - ], - [ - -123.9050623, - 44.6431716 - ], - [ - -123.9060168, - 44.6411536 - ], - [ - -123.9063223, - 44.6407743 - ], - [ - -123.9063408, - 44.6407299 - ], - [ - -123.9064315, - 44.6405198 - ], - [ - -123.907107, - 44.6390089 - ], - [ - -123.9076734, - 44.6376893 - ], - [ - -123.9077121, - 44.6376005 - ], - [ - -123.9085421, - 44.6357241 - ], - [ - -123.9084237, - 44.6352834 - ], - [ - -123.9074236, - 44.6334631 - ], - [ - -123.9073277, - 44.6332261 - ], - [ - -123.9069304, - 44.6319696 - ], - [ - -123.9065438, - 44.6302886 - ], - [ - -123.906378, - 44.6292679 - ], - [ - -123.9063481, - 44.6289549 - ], - [ - -123.9064041, - 44.6270262 - ], - [ - -123.9069369, - 44.6251349 - ], - [ - -123.907052, - 44.6248569 - ], - [ - -123.9087495, - 44.6221679 - ], - [ - -123.9087829, - 44.6221299 - ], - [ - -123.9087952, - 44.6220724 - ], - [ - -123.9089249, - 44.621605 - ], - [ - -123.9081607, - 44.6202825 - ], - [ - -123.9080757, - 44.6200915 - ], - [ - -123.9076173, - 44.6187851 - ], - [ - -123.9075533, - 44.6185391 - ], - [ - -123.907298, - 44.6164986 - ], - [ - -123.9072991, - 44.6163586 - ], - [ - -123.9074811, - 44.6147392 - ], - [ - -123.9079991, - 44.6131572 - ], - [ - -123.9081492, - 44.6128163 - ], - [ - -123.908754, - 44.6116869 - ], - [ - -123.9090463, - 44.610513 - ], - [ - -123.9102257, - 44.6084256 - ], - [ - -123.9119817, - 44.6065565 - ], - [ - -123.9142392, - 44.604986 - ], - [ - -123.916901, - 44.6037815 - ], - [ - -123.9198531, - 44.6029946 - ], - [ - -123.9229687, - 44.6026591 - ], - [ - -123.9234566, - 44.6026431 - ], - [ - -123.923939, - 44.6026327 - ], - [ - -123.924038, - 44.6026317 - ], - [ - -123.9270088, - 44.6028105 - ], - [ - -123.9298739, - 44.6033998 - ], - [ - -123.932523, - 44.604377 - ], - [ - -123.9348545, - 44.6057047 - ], - [ - -123.9367787, - 44.6073317 - ], - [ - -123.9382217, - 44.6091956 - ], - [ - -123.939128, - 44.6112248 - ], - [ - -123.9394628, - 44.6133413 - ], - [ - -123.939213, - 44.6154638 - ], - [ - -123.9390428, - 44.6158865 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15882_s_15881", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9494656, - 44.621848 - ], - [ - -123.9494788, - 44.6224023 - ], - [ - -123.9492174, - 44.6246004 - ], - [ - -123.9483396, - 44.6267154 - ], - [ - -123.9468817, - 44.6286603 - ], - [ - -123.9449036, - 44.6303547 - ], - [ - -123.9424868, - 44.6317289 - ], - [ - -123.9397311, - 44.6327261 - ], - [ - -123.9367501, - 44.6333052 - ], - [ - -123.9336666, - 44.6334424 - ], - [ - -123.9329385, - 44.6334219 - ], - [ - -123.9300205, - 44.6331358 - ], - [ - -123.9272344, - 44.6324536 - ], - [ - -123.9246846, - 44.6314008 - ], - [ - -123.9224668, - 44.6300169 - ], - [ - -123.920664, - 44.6283538 - ], - [ - -123.9204992, - 44.6281192 - ], - [ - -123.9186619, - 44.6265353 - ], - [ - -123.917254, - 44.6246846 - ], - [ - -123.9164257, - 44.6227954 - ], - [ - -123.9161512, - 44.6226977 - ], - [ - -123.9137932, - 44.6213935 - ], - [ - -123.9118369, - 44.6197859 - ], - [ - -123.9103574, - 44.6179365 - ], - [ - -123.9094116, - 44.6159165 - ], - [ - -123.9090357, - 44.6138035 - ], - [ - -123.9092441, - 44.6116787 - ], - [ - -123.9100289, - 44.6096238 - ], - [ - -123.9113597, - 44.6077177 - ], - [ - -123.9131853, - 44.6060337 - ], - [ - -123.9154357, - 44.6046365 - ], - [ - -123.9180243, - 44.6035796 - ], - [ - -123.9208517, - 44.6029038 - ], - [ - -123.9238092, - 44.602635 - ], - [ - -123.9252001, - 44.6026068 - ], - [ - -123.9262168, - 44.6024317 - ], - [ - -123.9264234, - 44.60241 - ], - [ - -123.9286845, - 44.6022953 - ], - [ - -123.9309444, - 44.6024219 - ], - [ - -123.9311366, - 44.602443 - ], - [ - -123.9316108, - 44.6025193 - ], - [ - -123.9343054, - 44.6028424 - ], - [ - -123.9370277, - 44.6035692 - ], - [ - -123.9395068, - 44.6046526 - ], - [ - -123.9416524, - 44.6060531 - ], - [ - -123.9433859, - 44.6077195 - ], - [ - -123.9446442, - 44.6095911 - ], - [ - -123.9453813, - 44.6115994 - ], - [ - -123.9454815, - 44.612699 - ], - [ - -123.9457373, - 44.6133429 - ], - [ - -123.9469744, - 44.6144202 - ], - [ - -123.9483747, - 44.6162879 - ], - [ - -123.949241, - 44.6183142 - ], - [ - -123.9495404, - 44.6204221 - ], - [ - -123.9495441, - 44.6212081 - ], - [ - -123.9494656, - 44.621848 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15882_s_15883", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9191875, - 44.618769 - ], - [ - -123.9191905, - 44.6187059 - ], - [ - -123.9195553, - 44.6166741 - ], - [ - -123.9204476, - 44.6147273 - ], - [ - -123.9218355, - 44.6129347 - ], - [ - -123.9236696, - 44.61136 - ], - [ - -123.9258848, - 44.6100591 - ], - [ - -123.9284024, - 44.6090783 - ], - [ - -123.9311329, - 44.6084525 - ], - [ - -123.9339792, - 44.6082038 - ], - [ - -123.9354661, - 44.6081747 - ], - [ - -123.9355712, - 44.6081729 - ], - [ - -123.9370368, - 44.6081515 - ], - [ - -123.9400783, - 44.6083257 - ], - [ - -123.9430099, - 44.60893 - ], - [ - -123.9457138, - 44.6099401 - ], - [ - -123.9480812, - 44.6113153 - ], - [ - -123.9500168, - 44.6130003 - ], - [ - -123.9514427, - 44.6149274 - ], - [ - -123.9523015, - 44.6170189 - ], - [ - -123.9525586, - 44.6191908 - ], - [ - -123.9525546, - 44.6193682 - ], - [ - -123.9522145, - 44.6214842 - ], - [ - -123.9513028, - 44.6235122 - ], - [ - -123.9498546, - 44.6253742 - ], - [ - -123.9483545, - 44.6266374 - ], - [ - -123.9482483, - 44.626875 - ], - [ - -123.946815, - 44.6287303 - ], - [ - -123.9449045, - 44.6303516 - ], - [ - -123.9425896, - 44.6316772 - ], - [ - -123.9399584, - 44.6326568 - ], - [ - -123.9371109, - 44.633253 - ], - [ - -123.9341554, - 44.6334431 - ], - [ - -123.9334061, - 44.6334389 - ], - [ - -123.9303977, - 44.6332072 - ], - [ - -123.927513, - 44.632555 - ], - [ - -123.9248661, - 44.631508 - ], - [ - -123.9225618, - 44.6301077 - ], - [ - -123.9206913, - 44.6284094 - ], - [ - -123.9193283, - 44.6264804 - ], - [ - -123.9185269, - 44.624397 - ], - [ - -123.9183187, - 44.6222414 - ], - [ - -123.9187117, - 44.6200991 - ], - [ - -123.9188653, - 44.6196304 - ], - [ - -123.9190656, - 44.6192101 - ], - [ - -123.9191875, - 44.618769 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15882_s_16278", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9483498, - 44.6250214 - ], - [ - -123.9481495, - 44.6255724 - ], - [ - -123.9479206, - 44.6261404 - ], - [ - -123.9477936, - 44.6264394 - ], - [ - -123.9477386, - 44.6265624 - ], - [ - -123.946744, - 44.6282701 - ], - [ - -123.946669, - 44.6283731 - ], - [ - -123.9462945, - 44.6288077 - ], - [ - -123.9460999, - 44.6299024 - ], - [ - -123.945998, - 44.6302785 - ], - [ - -123.9454156, - 44.6318141 - ], - [ - -123.9452607, - 44.6321291 - ], - [ - -123.9445865, - 44.6332828 - ], - [ - -123.9443296, - 44.6336599 - ], - [ - -123.943638, - 44.6345633 - ], - [ - -123.943327, - 44.6349273 - ], - [ - -123.9429631, - 44.6353329 - ], - [ - -123.9427031, - 44.6356089 - ], - [ - -123.9425614, - 44.6357567 - ], - [ - -123.9421555, - 44.6361728 - ], - [ - -123.942129, - 44.6361998 - ], - [ - -123.941629, - 44.6367089 - ], - [ - -123.9416041, - 44.6367342 - ], - [ - -123.9410573, - 44.6372876 - ], - [ - -123.9410037, - 44.6373454 - ], - [ - -123.9396265, - 44.6393445 - ], - [ - -123.9395811, - 44.6394121 - ], - [ - -123.939505, - 44.6395295 - ], - [ - -123.9393337, - 44.6397932 - ], - [ - -123.9392278, - 44.6399527 - ], - [ - -123.9375713, - 44.6423979 - ], - [ - -123.9373998, - 44.6426428 - ], - [ - -123.9367571, - 44.6440973 - ], - [ - -123.9361844, - 44.6454329 - ], - [ - -123.9361318, - 44.6455533 - ], - [ - -123.9354769, - 44.6470196 - ], - [ - -123.9351899, - 44.6477102 - ], - [ - -123.9350024, - 44.6481301 - ], - [ - -123.9347805, - 44.6485941 - ], - [ - -123.9336206, - 44.6504377 - ], - [ - -123.9334246, - 44.6506847 - ], - [ - -123.9325694, - 44.6516423 - ], - [ - -123.9322784, - 44.6519334 - ], - [ - -123.9303153, - 44.6535375 - ], - [ - -123.9279514, - 44.6548373 - ], - [ - -123.9252775, - 44.6557829 - ], - [ - -123.9223964, - 44.656338 - ], - [ - -123.919419, - 44.6564811 - ], - [ - -123.9164597, - 44.6562068 - ], - [ - -123.9136323, - 44.6555256 - ], - [ - -123.9110455, - 44.6544637 - ], - [ - -123.9087988, - 44.653062 - ], - [ - -123.9069784, - 44.6513743 - ], - [ - -123.9056544, - 44.6494655 - ], - [ - -123.9048775, - 44.647409 - ], - [ - -123.9046776, - 44.6452838 - ], - [ - -123.9050623, - 44.6431716 - ], - [ - -123.9060168, - 44.6411536 - ], - [ - -123.9063223, - 44.6407743 - ], - [ - -123.9063408, - 44.6407299 - ], - [ - -123.9064315, - 44.6405198 - ], - [ - -123.907107, - 44.6390089 - ], - [ - -123.9076734, - 44.6376893 - ], - [ - -123.9077121, - 44.6376005 - ], - [ - -123.9088197, - 44.6350967 - ], - [ - -123.9102388, - 44.63283 - ], - [ - -123.9102691, - 44.6327936 - ], - [ - -123.9117785, - 44.6305671 - ], - [ - -123.9118914, - 44.6303935 - ], - [ - -123.9120092, - 44.6302119 - ], - [ - -123.9120983, - 44.630077 - ], - [ - -123.9122213, - 44.629894 - ], - [ - -123.9122868, - 44.6297979 - ], - [ - -123.9139232, - 44.6274241 - ], - [ - -123.9141699, - 44.6270817 - ], - [ - -123.9144729, - 44.6266788 - ], - [ - -123.9151946, - 44.6258172 - ], - [ - -123.9158116, - 44.6251523 - ], - [ - -123.9159533, - 44.6250044 - ], - [ - -123.9159626, - 44.6249062 - ], - [ - -123.9161227, - 44.6239023 - ], - [ - -123.9161738, - 44.6236763 - ], - [ - -123.9164905, - 44.6226147 - ], - [ - -123.9165546, - 44.6224427 - ], - [ - -123.9169794, - 44.6214831 - ], - [ - -123.9170484, - 44.6213491 - ], - [ - -123.9174592, - 44.6206318 - ], - [ - -123.9176032, - 44.6204038 - ], - [ - -123.9176509, - 44.620329 - ], - [ - -123.917834, - 44.6200451 - ], - [ - -123.9186973, - 44.6188935 - ], - [ - -123.9188093, - 44.6187635 - ], - [ - -123.9196494, - 44.6178876 - ], - [ - -123.9197269, - 44.6178147 - ], - [ - -123.9198191, - 44.6176201 - ], - [ - -123.9213077, - 44.6157744 - ], - [ - -123.9232717, - 44.6141717 - ], - [ - -123.9256356, - 44.6128733 - ], - [ - -123.9283086, - 44.6119292 - ], - [ - -123.931188, - 44.6113758 - ], - [ - -123.9341632, - 44.6112341 - ], - [ - -123.93712, - 44.6115097 - ], - [ - -123.9399447, - 44.6121919 - ], - [ - -123.9425289, - 44.6132547 - ], - [ - -123.9447734, - 44.6146571 - ], - [ - -123.9465917, - 44.6163453 - ], - [ - -123.9479141, - 44.6182543 - ], - [ - -123.9486897, - 44.620311 - ], - [ - -123.9488887, - 44.6224362 - ], - [ - -123.9485033, - 44.6245484 - ], - [ - -123.9483498, - 44.6250214 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15883_s_16276", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9525632, - 44.6199328 - ], - [ - -123.9525616, - 44.6213643 - ], - [ - -123.9522669, - 44.6234839 - ], - [ - -123.9513989, - 44.6255216 - ], - [ - -123.9499908, - 44.6273993 - ], - [ - -123.9480967, - 44.6290446 - ], - [ - -123.9457893, - 44.6303945 - ], - [ - -123.9431575, - 44.6313969 - ], - [ - -123.9403023, - 44.6320133 - ], - [ - -123.9373334, - 44.63222 - ], - [ - -123.9343652, - 44.6320092 - ], - [ - -123.9315117, - 44.6313888 - ], - [ - -123.9288825, - 44.6303827 - ], - [ - -123.9265789, - 44.6290297 - ], - [ - -123.9246892, - 44.6273817 - ], - [ - -123.9232862, - 44.6255021 - ], - [ - -123.9224237, - 44.6234631 - ], - [ - -123.9221349, - 44.6213432 - ], - [ - -123.9221374, - 44.619793 - ], - [ - -123.9221414, - 44.6195555 - ], - [ - -123.9221612, - 44.618941 - ], - [ - -123.9225217, - 44.6168266 - ], - [ - -123.9234528, - 44.6148031 - ], - [ - -123.9249185, - 44.6129482 - ], - [ - -123.9268627, - 44.6113332 - ], - [ - -123.9292104, - 44.6100201 - ], - [ - -123.9318716, - 44.6090593 - ], - [ - -123.9347439, - 44.6084878 - ], - [ - -123.9377172, - 44.6083275 - ], - [ - -123.9406771, - 44.6085846 - ], - [ - -123.9435099, - 44.6092491 - ], - [ - -123.946107, - 44.6102956 - ], - [ - -123.9483684, - 44.6116839 - ], - [ - -123.9502073, - 44.6133606 - ], - [ - -123.951553, - 44.6152613 - ], - [ - -123.9523539, - 44.6173131 - ], - [ - -123.9525789, - 44.619437 - ], - [ - -123.9525632, - 44.6199328 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15884_s_15882", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9395364, - 44.6320706 - ], - [ - -123.9385331, - 44.6323926 - ], - [ - -123.9356261, - 44.6328701 - ], - [ - -123.9326445, - 44.6329334 - ], - [ - -123.9297029, - 44.63258 - ], - [ - -123.9269144, - 44.6318236 - ], - [ - -123.9243863, - 44.6306932 - ], - [ - -123.9222157, - 44.6292322 - ], - [ - -123.9204861, - 44.627497 - ], - [ - -123.9192638, - 44.6255541 - ], - [ - -123.9185959, - 44.6234782 - ], - [ - -123.9185079, - 44.6213491 - ], - [ - -123.9190031, - 44.6192487 - ], - [ - -123.9190384, - 44.6191558 - ], - [ - -123.9190988, - 44.6189829 - ], - [ - -123.9193932, - 44.618373 - ], - [ - -123.9202511, - 44.61633 - ], - [ - -123.9216622, - 44.6144363 - ], - [ - -123.9235665, - 44.6127776 - ], - [ - -123.9258899, - 44.6114184 - ], - [ - -123.9285417, - 44.6104117 - ], - [ - -123.9314186, - 44.6097967 - ], - [ - -123.9344086, - 44.6095974 - ], - [ - -123.9374297, - 44.6096099 - ], - [ - -123.940418, - 44.6098341 - ], - [ - -123.9432864, - 44.6104736 - ], - [ - -123.9459229, - 44.6115034 - ], - [ - -123.9482247, - 44.6128832 - ], - [ - -123.9501019, - 44.6145593 - ], - [ - -123.9514814, - 44.6164663 - ], - [ - -123.9523091, - 44.6185297 - ], - [ - -123.9525527, - 44.6206691 - ], - [ - -123.952531, - 44.6215441 - ], - [ - -123.9521859, - 44.6236597 - ], - [ - -123.9512696, - 44.6256867 - ], - [ - -123.949817, - 44.627547 - ], - [ - -123.947884, - 44.6291691 - ], - [ - -123.9455449, - 44.6304908 - ], - [ - -123.9428896, - 44.6314611 - ], - [ - -123.9400201, - 44.6320428 - ], - [ - -123.9395364, - 44.6320706 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15885_s_15893", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0372816, - 44.6252941 - ], - [ - -124.0388256, - 44.6249315 - ], - [ - -124.0417862, - 44.6246737 - ], - [ - -124.0447603, - 44.6248332 - ], - [ - -124.0476337, - 44.6254039 - ], - [ - -124.0502961, - 44.6263639 - ], - [ - -124.0526451, - 44.6276764 - ], - [ - -124.0528859, - 44.6278405 - ], - [ - -124.0545956, - 44.6292218 - ], - [ - -124.0548556, - 44.6294718 - ], - [ - -124.0566245, - 44.6316675 - ], - [ - -124.0576335, - 44.6340959 - ], - [ - -124.0577136, - 44.6344259 - ], - [ - -124.0579321, - 44.6365559 - ], - [ - -124.0575629, - 44.6386754 - ], - [ - -124.0566201, - 44.6407023 - ], - [ - -124.05514, - 44.6425583 - ], - [ - -124.0531798, - 44.6441718 - ], - [ - -124.0508154, - 44.6454803 - ], - [ - -124.0481379, - 44.6464332 - ], - [ - -124.045251, - 44.6469938 - ], - [ - -124.0422663, - 44.6471403 - ], - [ - -124.0342948, - 44.6469702 - ], - [ - -124.0338635, - 44.6469567 - ], - [ - -124.0324232, - 44.6468967 - ], - [ - -124.0313211, - 44.6468219 - ], - [ - -124.0304709, - 44.6467419 - ], - [ - -124.0288717, - 44.6465288 - ], - [ - -124.0276015, - 44.6463087 - ], - [ - -124.0262034, - 44.6460153 - ], - [ - -124.0251532, - 44.6457552 - ], - [ - -124.0229115, - 44.6450512 - ], - [ - -124.0211104, - 44.6452416 - ], - [ - -124.0205503, - 44.6452616 - ], - [ - -124.0168448, - 44.6450697 - ], - [ - -124.0161346, - 44.6449697 - ], - [ - -124.0121574, - 44.6439859 - ], - [ - -124.0118985, - 44.6438915 - ], - [ - -124.0108663, - 44.6438188 - ], - [ - -124.0084075, - 44.6437319 - ], - [ - -124.0061329, - 44.643528 - ], - [ - -124.0054428, - 44.643428 - ], - [ - -124.0020326, - 44.6426251 - ], - [ - -124.0014025, - 44.6424151 - ], - [ - -123.9995839, - 44.6415894 - ], - [ - -123.9991493, - 44.6416819 - ], - [ - -123.9973133, - 44.641986 - ], - [ - -123.9963932, - 44.642096 - ], - [ - -123.9944193, - 44.6422384 - ], - [ - -123.9936292, - 44.6422584 - ], - [ - -123.9899108, - 44.6420254 - ], - [ - -123.9887306, - 44.6418454 - ], - [ - -123.9859177, - 44.6412073 - ], - [ - -123.9850676, - 44.6409473 - ], - [ - -123.9825443, - 44.6399645 - ], - [ - -123.9814242, - 44.6394244 - ], - [ - -123.9800815, - 44.6386965 - ], - [ - -123.9776114, - 44.6371963 - ], - [ - -123.9773288, - 44.6370204 - ], - [ - -123.9769604, - 44.6367852 - ], - [ - -123.9763752, - 44.6369438 - ], - [ - -123.9744949, - 44.6373339 - ], - [ - -123.9728514, - 44.6376053 - ], - [ - -123.9717212, - 44.6377453 - ], - [ - -123.9715632, - 44.6377612 - ], - [ - -123.9698311, - 44.6385382 - ], - [ - -123.969171, - 44.6387883 - ], - [ - -123.9668025, - 44.6395094 - ], - [ - -123.9664625, - 44.6395894 - ], - [ - -123.9640655, - 44.6400032 - ], - [ - -123.9631753, - 44.6401032 - ], - [ - -123.9603663, - 44.6402306 - ], - [ - -123.9600505, - 44.6402241 - ], - [ - -123.9583912, - 44.6410684 - ], - [ - -123.9583776, - 44.6410547 - ], - [ - -123.9565318, - 44.6419773 - ], - [ - -123.9536389, - 44.6428596 - ], - [ - -123.9505536, - 44.6432983 - ], - [ - -123.9474079, - 44.6432747 - ], - [ - -123.946867, - 44.6431893 - ], - [ - -123.9463182, - 44.6431657 - ], - [ - -123.9437775, - 44.6429019 - ], - [ - -123.9413352, - 44.642337 - ], - [ - -123.9409352, - 44.642217 - ], - [ - -123.9384061, - 44.6412486 - ], - [ - -123.938185, - 44.6411207 - ], - [ - -123.9377583, - 44.6409773 - ], - [ - -123.9372382, - 44.6407673 - ], - [ - -123.9347265, - 44.6394976 - ], - [ - -123.932624, - 44.637893 - ], - [ - -123.9324641, - 44.6377429 - ], - [ - -123.9309184, - 44.6359595 - ], - [ - -123.9307185, - 44.6356694 - ], - [ - -123.9298695, - 44.6341632 - ], - [ - -123.9293443, - 44.6325835 - ], - [ - -123.9290247, - 44.6311535 - ], - [ - -123.929018, - 44.6310535 - ], - [ - -123.9274354, - 44.6293111 - ], - [ - -123.9263318, - 44.6273323 - ], - [ - -123.9257901, - 44.6252377 - ], - [ - -123.925831, - 44.6231079 - ], - [ - -123.9264528, - 44.6210248 - ], - [ - -123.9276317, - 44.6190683 - ], - [ - -123.9293222, - 44.6173136 - ], - [ - -123.9314595, - 44.6158282 - ], - [ - -123.9339613, - 44.6146691 - ], - [ - -123.9367315, - 44.6138808 - ], - [ - -123.9382655, - 44.6136782 - ], - [ - -123.9400663, - 44.613361 - ], - [ - -123.9416299, - 44.6131467 - ], - [ - -123.9423397, - 44.6130768 - ], - [ - -123.9442153, - 44.6129757 - ], - [ - -123.9452551, - 44.6129657 - ], - [ - -123.947223, - 44.6130379 - ], - [ - -123.947583, - 44.6130679 - ], - [ - -123.9511027, - 44.6136709 - ], - [ - -123.9543235, - 44.6148506 - ], - [ - -123.9545935, - 44.6149806 - ], - [ - -123.9565056, - 44.6160706 - ], - [ - -123.9581484, - 44.6173654 - ], - [ - -123.9582884, - 44.6174954 - ], - [ - -123.9586246, - 44.6178823 - ], - [ - -123.9594509, - 44.6175918 - ], - [ - -123.9622496, - 44.6168417 - ], - [ - -123.9628795, - 44.6167217 - ], - [ - -123.9651572, - 44.6164183 - ], - [ - -123.9666682, - 44.616301 - ], - [ - -123.9686306, - 44.6154685 - ], - [ - -123.9708185, - 44.6147024 - ], - [ - -123.9715284, - 44.6145025 - ], - [ - -123.9735508, - 44.6140463 - ], - [ - -123.9741907, - 44.6139363 - ], - [ - -123.9773892, - 44.6136378 - ], - [ - -123.978569, - 44.6136178 - ], - [ - -123.9805591, - 44.6136772 - ], - [ - -123.980949, - 44.6137072 - ], - [ - -123.9836024, - 44.6140841 - ], - [ - -123.9846523, - 44.6143041 - ], - [ - -123.9877235, - 44.6152184 - ], - [ - -123.9884334, - 44.6154984 - ], - [ - -123.9897319, - 44.616073 - ], - [ - -123.9905419, - 44.6164729 - ], - [ - -123.9915384, - 44.6170094 - ], - [ - -123.9925283, - 44.6175893 - ], - [ - -123.9930185, - 44.6178891 - ], - [ - -123.9955355, - 44.6194957 - ], - [ - -123.9981972, - 44.6189493 - ], - [ - -123.999387, - 44.6188093 - ], - [ - -124.0026782, - 44.6186805 - ], - [ - -124.0031981, - 44.6187005 - ], - [ - -124.0052894, - 44.6188853 - ], - [ - -124.0064392, - 44.6190453 - ], - [ - -124.0089887, - 44.6195682 - ], - [ - -124.0094986, - 44.6197082 - ], - [ - -124.0121285, - 44.6206475 - ], - [ - -124.0127085, - 44.6209075 - ], - [ - -124.0140081, - 44.6215599 - ], - [ - -124.014508, - 44.6218399 - ], - [ - -124.0151723, - 44.6222862 - ], - [ - -124.0177428, - 44.6224673 - ], - [ - -124.020114, - 44.6227711 - ], - [ - -124.0207539, - 44.622891 - ], - [ - -124.0211344, - 44.6229849 - ], - [ - -124.0227244, - 44.6228363 - ], - [ - -124.0236142, - 44.6227963 - ], - [ - -124.0258698, - 44.6228146 - ], - [ - -124.0263597, - 44.6228446 - ], - [ - -124.027487, - 44.622944 - ], - [ - -124.0282669, - 44.623034 - ], - [ - -124.031701, - 44.6237333 - ], - [ - -124.0327408, - 44.6240433 - ], - [ - -124.0350756, - 44.6249157 - ], - [ - -124.0358368, - 44.6252632 - ], - [ - -124.0372816, - 44.6252941 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15887_s_16060", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0682247, - 44.6340993 - ], - [ - -124.0663309, - 44.6362051 - ], - [ - -124.0638125, - 44.6379456 - ], - [ - -124.0625325, - 44.6386457 - ], - [ - -124.062251, - 44.638796 - ], - [ - -124.0601208, - 44.6399062 - ], - [ - -124.0586435, - 44.6405863 - ], - [ - -124.0571333, - 44.6411964 - ], - [ - -124.0564105, - 44.6414704 - ], - [ - -124.0540702, - 44.6423006 - ], - [ - -124.0532308, - 44.6425316 - ], - [ - -124.0529661, - 44.6427779 - ], - [ - -124.050723, - 44.6441822 - ], - [ - -124.0481391, - 44.6452471 - ], - [ - -124.0453139, - 44.6459316 - ], - [ - -124.0423558, - 44.6462093 - ], - [ - -124.0393786, - 44.6460697 - ], - [ - -124.0364969, - 44.645518 - ], - [ - -124.0338214, - 44.6445756 - ], - [ - -124.0314549, - 44.6432785 - ], - [ - -124.0300049, - 44.6423084 - ], - [ - -124.0279376, - 44.6406048 - ], - [ - -124.0264073, - 44.6386333 - ], - [ - -124.0254798, - 44.6364788 - ], - [ - -124.0253998, - 44.6361888 - ], - [ - -124.0253011, - 44.6357917 - ], - [ - -124.0252611, - 44.6356117 - ], - [ - -124.0250921, - 44.6333746 - ], - [ - -124.0251122, - 44.6330846 - ], - [ - -124.0254179, - 44.6315871 - ], - [ - -124.0253788, - 44.6313821 - ], - [ - -124.0255456, - 44.6292962 - ], - [ - -124.0262683, - 44.6272718 - ], - [ - -124.0275202, - 44.6253835 - ], - [ - -124.029255, - 44.6237012 - ], - [ - -124.0314084, - 44.6222871 - ], - [ - -124.0339009, - 44.6211935 - ], - [ - -124.0366403, - 44.6204607 - ], - [ - -124.0395255, - 44.6201158 - ], - [ - -124.0424496, - 44.6201717 - ], - [ - -124.0447845, - 44.6205433 - ], - [ - -124.0450896, - 44.6203095 - ], - [ - -124.0475094, - 44.6190645 - ], - [ - -124.0502226, - 44.6181805 - ], - [ - -124.053125, - 44.6176916 - ], - [ - -124.0561053, - 44.6176163 - ], - [ - -124.0590488, - 44.6179577 - ], - [ - -124.0618426, - 44.6187027 - ], - [ - -124.0643794, - 44.6198225 - ], - [ - -124.0665616, - 44.6212743 - ], - [ - -124.0683054, - 44.6230021 - ], - [ - -124.0695438, - 44.6249398 - ], - [ - -124.0702292, - 44.6270127 - ], - [ - -124.0703351, - 44.6291413 - ], - [ - -124.0698574, - 44.6312437 - ], - [ - -124.0688145, - 44.6332392 - ], - [ - -124.0682247, - 44.6340993 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15888_s_15887", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0720065, - 44.624396 - ], - [ - -124.0723664, - 44.6247975 - ], - [ - -124.0734537, - 44.6267808 - ], - [ - -124.0739782, - 44.6288776 - ], - [ - -124.07392, - 44.6310071 - ], - [ - -124.073281, - 44.6330876 - ], - [ - -124.0720858, - 44.635039 - ], - [ - -124.0703802, - 44.6367865 - ], - [ - -124.0682299, - 44.6382628 - ], - [ - -124.0657175, - 44.6394111 - ], - [ - -124.0629394, - 44.6401874 - ], - [ - -124.0600026, - 44.6405617 - ], - [ - -124.0570199, - 44.6405196 - ], - [ - -124.054106, - 44.6400629 - ], - [ - -124.0516177, - 44.6392855 - ], - [ - -124.051607, - 44.6392998 - ], - [ - -124.0513587, - 44.6392053 - ], - [ - -124.0507558, - 44.6389633 - ], - [ - -124.0506131, - 44.638903 - ], - [ - -124.0500825, - 44.6386405 - ], - [ - -124.0485749, - 44.6382454 - ], - [ - -124.0460288, - 44.6371354 - ], - [ - -124.0438351, - 44.6356921 - ], - [ - -124.042078, - 44.6339709 - ], - [ - -124.040825, - 44.632038 - ], - [ - -124.0401243, - 44.6299677 - ], - [ - -124.0400027, - 44.6278395 - ], - [ - -124.0404648, - 44.6257353 - ], - [ - -124.0414928, - 44.6237359 - ], - [ - -124.0426819, - 44.6219781 - ], - [ - -124.0445586, - 44.6198657 - ], - [ - -124.0470618, - 44.6181159 - ], - [ - -124.047214, - 44.6180317 - ], - [ - -124.0499489, - 44.6168249 - ], - [ - -124.0529776, - 44.6160554 - ], - [ - -124.0561651, - 44.6157576 - ], - [ - -124.0593691, - 44.6159448 - ], - [ - -124.0624465, - 44.6166086 - ], - [ - -124.0629976, - 44.6167747 - ], - [ - -124.0631949, - 44.6168353 - ], - [ - -124.0633591, - 44.6168867 - ], - [ - -124.0659917, - 44.6179452 - ], - [ - -124.0682796, - 44.6193543 - ], - [ - -124.0701326, - 44.6210584 - ], - [ - -124.0714777, - 44.6229905 - ], - [ - -124.0720065, - 44.624396 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15889_s_15888", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.071254, - 44.6373035 - ], - [ - -124.0713394, - 44.6373462 - ], - [ - -124.0712304, - 44.6374572 - ], - [ - -124.0705714, - 44.6380195 - ], - [ - -124.0703578, - 44.6382435 - ], - [ - -124.0702328, - 44.6383436 - ], - [ - -124.0702092, - 44.6383285 - ], - [ - -124.0695639, - 44.6388791 - ], - [ - -124.067583, - 44.6400779 - ], - [ - -124.0668011, - 44.6404744 - ], - [ - -124.0661232, - 44.641253 - ], - [ - -124.0660178, - 44.6413511 - ], - [ - -124.0641374, - 44.6428051 - ], - [ - -124.0619186, - 44.6439914 - ], - [ - -124.0594352, - 44.6448707 - ], - [ - -124.058697, - 44.6450211 - ], - [ - -124.058467, - 44.6451003 - ], - [ - -124.055858, - 44.6456181 - ], - [ - -124.0531617, - 44.6457976 - ], - [ - -124.0508325, - 44.645804 - ], - [ - -124.0477843, - 44.6455924 - ], - [ - -124.0448573, - 44.6449493 - ], - [ - -124.0421699, - 44.6439008 - ], - [ - -124.0398311, - 44.6424893 - ], - [ - -124.0379356, - 44.6407722 - ], - [ - -124.0365601, - 44.6388188 - ], - [ - -124.0357602, - 44.6367084 - ], - [ - -124.0355684, - 44.6345264 - ], - [ - -124.0355744, - 44.6344134 - ], - [ - -124.0358256, - 44.6328186 - ], - [ - -124.0358506, - 44.6327236 - ], - [ - -124.0362179, - 44.6316392 - ], - [ - -124.0362499, - 44.6315622 - ], - [ - -124.0368625, - 44.6303554 - ], - [ - -124.0369005, - 44.6302924 - ], - [ - -124.0380365, - 44.6287595 - ], - [ - -124.0394994, - 44.6273752 - ], - [ - -124.0395504, - 44.6273342 - ], - [ - -124.0396123, - 44.6272848 - ], - [ - -124.0397143, - 44.6272039 - ], - [ - -124.0420605, - 44.6256915 - ], - [ - -124.0425229, - 44.6254506 - ], - [ - -124.0427827, - 44.6253101 - ], - [ - -124.0432883, - 44.6250482 - ], - [ - -124.0436633, - 44.6248622 - ], - [ - -124.0450752, - 44.6242406 - ], - [ - -124.0456211, - 44.6240286 - ], - [ - -124.0460559, - 44.6239025 - ], - [ - -124.0468406, - 44.6230227 - ], - [ - -124.0489029, - 44.6214841 - ], - [ - -124.0513458, - 44.6202624 - ], - [ - -124.0540754, - 44.6194044 - ], - [ - -124.0569868, - 44.6189432 - ], - [ - -124.0599682, - 44.6188964 - ], - [ - -124.0629052, - 44.6192659 - ], - [ - -124.0656848, - 44.6200375 - ], - [ - -124.0665593, - 44.6203538 - ], - [ - -124.0690719, - 44.621496 - ], - [ - -124.0712249, - 44.622966 - ], - [ - -124.0729356, - 44.6247074 - ], - [ - -124.0741385, - 44.6266534 - ], - [ - -124.0747875, - 44.6287296 - ], - [ - -124.0748577, - 44.6308562 - ], - [ - -124.0743461, - 44.6329518 - ], - [ - -124.0732725, - 44.6349361 - ], - [ - -124.0725932, - 44.6358988 - ], - [ - -124.071254, - 44.6373035 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15889_s_15889", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0387495, - 44.634678 - ], - [ - -124.039004, - 44.6325559 - ], - [ - -124.0398335, - 44.6305099 - ], - [ - -124.0412058, - 44.6286188 - ], - [ - -124.0430684, - 44.6269552 - ], - [ - -124.0453495, - 44.625583 - ], - [ - -124.0479615, - 44.624555 - ], - [ - -124.0508042, - 44.6239105 - ], - [ - -124.0537682, - 44.6236744 - ], - [ - -124.0567398, - 44.6238557 - ], - [ - -124.0596048, - 44.6244475 - ], - [ - -124.0622532, - 44.6254271 - ], - [ - -124.0645832, - 44.6267567 - ], - [ - -124.0665053, - 44.6283854 - ], - [ - -124.0679456, - 44.6302505 - ], - [ - -124.0688488, - 44.6322804 - ], - [ - -124.0691801, - 44.6343972 - ], - [ - -124.0689266, - 44.6365194 - ], - [ - -124.0680981, - 44.6385655 - ], - [ - -124.0667264, - 44.6404569 - ], - [ - -124.0648641, - 44.6421209 - ], - [ - -124.0625828, - 44.6434935 - ], - [ - -124.0599702, - 44.6445219 - ], - [ - -124.0571267, - 44.6451666 - ], - [ - -124.0541616, - 44.6454028 - ], - [ - -124.0511889, - 44.6452214 - ], - [ - -124.0483229, - 44.6446294 - ], - [ - -124.0456739, - 44.6436496 - ], - [ - -124.0433437, - 44.6423196 - ], - [ - -124.0414217, - 44.6406905 - ], - [ - -124.039982, - 44.638825 - ], - [ - -124.0390797, - 44.6367949 - ], - [ - -124.0387495, - 44.634678 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15889_s_16039", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.048504, - 44.623268 - ], - [ - -124.0496195, - 44.6227953 - ], - [ - -124.0523893, - 44.6220912 - ], - [ - -124.0552968, - 44.6217807 - ], - [ - -124.0582338, - 44.6218753 - ], - [ - -124.0610904, - 44.6223715 - ], - [ - -124.0637602, - 44.6232508 - ], - [ - -124.0661433, - 44.6244803 - ], - [ - -124.068151, - 44.6260142 - ], - [ - -124.0687512, - 44.6265723 - ], - [ - -124.0689915, - 44.626802 - ], - [ - -124.0695462, - 44.627347 - ], - [ - -124.0710492, - 44.6291755 - ], - [ - -124.0720264, - 44.6311776 - ], - [ - -124.0724406, - 44.633277 - ], - [ - -124.0722758, - 44.635394 - ], - [ - -124.0715383, - 44.6374477 - ], - [ - -124.0702562, - 44.6393602 - ], - [ - -124.0684783, - 44.6410583 - ], - [ - -124.067895, - 44.6414336 - ], - [ - -124.0667429, - 44.6424334 - ], - [ - -124.0644344, - 44.6437826 - ], - [ - -124.0618015, - 44.6447844 - ], - [ - -124.0589454, - 44.6454001 - ], - [ - -124.0559759, - 44.6456061 - ], - [ - -124.0559089, - 44.645606 - ], - [ - -124.0558793, - 44.6456121 - ], - [ - -124.0529846, - 44.6457963 - ], - [ - -124.0529084, - 44.6457959 - ], - [ - -124.0525099, - 44.6458016 - ], - [ - -124.0522204, - 44.6458037 - ], - [ - -124.0508205, - 44.6458044 - ], - [ - -124.0477963, - 44.6455894 - ], - [ - -124.0448923, - 44.6449495 - ], - [ - -124.0422244, - 44.6439105 - ], - [ - -124.0398989, - 44.6425136 - ], - [ - -124.0380087, - 44.6408147 - ], - [ - -124.0366291, - 44.6388815 - ], - [ - -124.035815, - 44.6367912 - ], - [ - -124.0355989, - 44.634627 - ], - [ - -124.0356039, - 44.6345033 - ], - [ - -124.0360556, - 44.6321711 - ], - [ - -124.0361053, - 44.6320298 - ], - [ - -124.0372642, - 44.6298013 - ], - [ - -124.0373387, - 44.6296953 - ], - [ - -124.0380754, - 44.6287644 - ], - [ - -124.0381598, - 44.6286691 - ], - [ - -124.0398805, - 44.627074 - ], - [ - -124.0419837, - 44.625733 - ], - [ - -124.0429239, - 44.6252372 - ], - [ - -124.0439206, - 44.6247539 - ], - [ - -124.0445596, - 44.6244698 - ], - [ - -124.0458106, - 44.6239703 - ], - [ - -124.0460648, - 44.6238798 - ], - [ - -124.048504, - 44.623268 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15889_s_16045", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0758408, - 44.6328256 - ], - [ - -124.0755496, - 44.6334549 - ], - [ - -124.0754386, - 44.6336719 - ], - [ - -124.0752849, - 44.6339598 - ], - [ - -124.075158, - 44.6341878 - ], - [ - -124.0745123, - 44.6351947 - ], - [ - -124.0743203, - 44.6354578 - ], - [ - -124.0738727, - 44.6360285 - ], - [ - -124.0736507, - 44.6362926 - ], - [ - -124.0734936, - 44.6364753 - ], - [ - -124.0733556, - 44.6366323 - ], - [ - -124.0728832, - 44.637138 - ], - [ - -124.0727542, - 44.637268 - ], - [ - -124.0724368, - 44.6375763 - ], - [ - -124.0722648, - 44.6377373 - ], - [ - -124.071337, - 44.6385255 - ], - [ - -124.071166, - 44.6386575 - ], - [ - -124.0711025, - 44.6387062 - ], - [ - -124.0708625, - 44.6388892 - ], - [ - -124.0700309, - 44.6394764 - ], - [ - -124.0697219, - 44.6396785 - ], - [ - -124.0693207, - 44.6399316 - ], - [ - -124.0689857, - 44.6401357 - ], - [ - -124.0684189, - 44.6404644 - ], - [ - -124.0671888, - 44.6411435 - ], - [ - -124.0669745, - 44.6412597 - ], - [ - -124.0657755, - 44.6418978 - ], - [ - -124.0648593, - 44.6422926 - ], - [ - -124.0648057, - 44.6423318 - ], - [ - -124.0624848, - 44.6437215 - ], - [ - -124.0598243, - 44.6447554 - ], - [ - -124.0588521, - 44.6449695 - ], - [ - -124.058534, - 44.6450808 - ], - [ - -124.0559001, - 44.6456127 - ], - [ - -124.0531753, - 44.6457991 - ], - [ - -124.05089, - 44.645808 - ], - [ - -124.0478418, - 44.6455999 - ], - [ - -124.0449137, - 44.6449603 - ], - [ - -124.0422243, - 44.6439151 - ], - [ - -124.0398825, - 44.6425068 - ], - [ - -124.0379831, - 44.6407922 - ], - [ - -124.036603, - 44.6388409 - ], - [ - -124.0357979, - 44.6367318 - ], - [ - -124.0356005, - 44.6345503 - ], - [ - -124.0356066, - 44.6344313 - ], - [ - -124.0360334, - 44.6322403 - ], - [ - -124.0360832, - 44.6320953 - ], - [ - -124.0367423, - 44.6306312 - ], - [ - -124.0368019, - 44.6305252 - ], - [ - -124.0378299, - 44.6290371 - ], - [ - -124.0391631, - 44.6276782 - ], - [ - -124.0392525, - 44.6276005 - ], - [ - -124.041472, - 44.6260311 - ], - [ - -124.0417303, - 44.6258827 - ], - [ - -124.0421329, - 44.6256591 - ], - [ - -124.0427986, - 44.6253021 - ], - [ - -124.0435364, - 44.6249303 - ], - [ - -124.0440091, - 44.6247069 - ], - [ - -124.0452317, - 44.6241859 - ], - [ - -124.0457036, - 44.6240056 - ], - [ - -124.0477497, - 44.6233573 - ], - [ - -124.0483171, - 44.6232451 - ], - [ - -124.0496341, - 44.6218803 - ], - [ - -124.0501699, - 44.6212277 - ], - [ - -124.0521512, - 44.6196358 - ], - [ - -124.0545292, - 44.6183505 - ], - [ - -124.0572125, - 44.6174212 - ], - [ - -124.060098, - 44.6168835 - ], - [ - -124.0630749, - 44.6167582 - ], - [ - -124.0660288, - 44.61705 - ], - [ - -124.0688463, - 44.6177478 - ], - [ - -124.0714192, - 44.6188246 - ], - [ - -124.0736486, - 44.6202393 - ], - [ - -124.0754489, - 44.6219373 - ], - [ - -124.0767508, - 44.6238536 - ], - [ - -124.0775043, - 44.6259144 - ], - [ - -124.0776804, - 44.6280406 - ], - [ - -124.0772722, - 44.6301505 - ], - [ - -124.0762954, - 44.632163 - ], - [ - -124.076284, - 44.6321807 - ], - [ - -124.0760709, - 44.6324974 - ], - [ - -124.0758408, - 44.6328256 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15889_s_16200", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0680035, - 44.638872 - ], - [ - -124.0678617, - 44.6395617 - ], - [ - -124.0669257, - 44.6414886 - ], - [ - -124.0655018, - 44.6432566 - ], - [ - -124.0636401, - 44.6448035 - ], - [ - -124.0614061, - 44.6460747 - ], - [ - -124.0588787, - 44.6470254 - ], - [ - -124.0588388, - 44.6470342 - ], - [ - -124.0579644, - 44.6473679 - ], - [ - -124.0551093, - 44.6479863 - ], - [ - -124.05214, - 44.6481951 - ], - [ - -124.0491707, - 44.6479863 - ], - [ - -124.0463156, - 44.6473679 - ], - [ - -124.0436844, - 44.6463637 - ], - [ - -124.0413783, - 44.6450123 - ], - [ - -124.039486, - 44.6433656 - ], - [ - -124.03808, - 44.641487 - ], - [ - -124.0372146, - 44.6394487 - ], - [ - -124.0369227, - 44.637329 - ], - [ - -124.0369228, - 44.636989 - ], - [ - -124.0372102, - 44.6348892 - ], - [ - -124.0380605, - 44.6328686 - ], - [ - -124.0394416, - 44.6310035 - ], - [ - -124.0395236, - 44.6309313 - ], - [ - -124.0396951, - 44.6306554 - ], - [ - -124.0414084, - 44.6285653 - ], - [ - -124.0418464, - 44.6281462 - ], - [ - -124.0438562, - 44.6265725 - ], - [ - -124.0462573, - 44.6253089 - ], - [ - -124.0489572, - 44.6244041 - ], - [ - -124.0518524, - 44.6238927 - ], - [ - -124.0548317, - 44.6237945 - ], - [ - -124.0577805, - 44.6241132 - ], - [ - -124.0605857, - 44.6248365 - ], - [ - -124.0631395, - 44.6259367 - ], - [ - -124.0653438, - 44.6273716 - ], - [ - -124.0671138, - 44.6290859 - ], - [ - -124.0683816, - 44.6310138 - ], - [ - -124.0690984, - 44.6330814 - ], - [ - -124.0692365, - 44.635209 - ], - [ - -124.0687906, - 44.637315 - ], - [ - -124.0680035, - 44.638872 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15889_s_2456760", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0676983, - 44.6320106 - ], - [ - -124.0682181, - 44.6331739 - ], - [ - -124.0685563, - 44.6352624 - ], - [ - -124.0683247, - 44.6373582 - ], - [ - -124.0683151, - 44.6373828 - ], - [ - -124.0683122, - 44.637723 - ], - [ - -124.0683104, - 44.6381042 - ], - [ - -124.0683102, - 44.6381355 - ], - [ - -124.0683085, - 44.6383202 - ], - [ - -124.0683085, - 44.638352 - ], - [ - -124.0683083, - 44.6384109 - ], - [ - -124.0683045, - 44.6389342 - ], - [ - -124.0682997, - 44.6396826 - ], - [ - -124.068296, - 44.6401893 - ], - [ - -124.0682961, - 44.640386 - ], - [ - -124.0682959, - 44.640438 - ], - [ - -124.0682911, - 44.641183 - ], - [ - -124.0682863, - 44.6418964 - ], - [ - -124.0682815, - 44.6426644 - ], - [ - -124.0682814, - 44.6426784 - ], - [ - -124.0682796, - 44.6429015 - ], - [ - -124.0682787, - 44.6431537 - ], - [ - -124.0682786, - 44.6431792 - ], - [ - -124.0682776, - 44.6433222 - ], - [ - -124.0682775, - 44.6433385 - ], - [ - -124.0682758, - 44.643537 - ], - [ - -124.0682749, - 44.6437966 - ], - [ - -124.0682747, - 44.6438359 - ], - [ - -124.0682728, - 44.64406 - ], - [ - -124.068269, - 44.6446543 - ], - [ - -124.0682681, - 44.6448365 - ], - [ - -124.0682642, - 44.6454705 - ], - [ - -124.0682633, - 44.6456164 - ], - [ - -124.0682517, - 44.6474517 - ], - [ - -124.0682463, - 44.6483062 - ], - [ - -124.0682488, - 44.6484308 - ], - [ - -124.0682469, - 44.6486498 - ], - [ - -124.0682467, - 44.6486736 - ], - [ - -124.0682427, - 44.6490016 - ], - [ - -124.0682419, - 44.6490709 - ], - [ - -124.0682423, - 44.6491136 - ], - [ - -124.0682465, - 44.6499656 - ], - [ - -124.0682463, - 44.6500688 - ], - [ - -124.0682453, - 44.6501848 - ], - [ - -124.0679352, - 44.6523032 - ], - [ - -124.0670519, - 44.6543377 - ], - [ - -124.0656295, - 44.6562101 - ], - [ - -124.0637226, - 44.6578484 - ], - [ - -124.0614044, - 44.6591896 - ], - [ - -124.058764, - 44.6601822 - ], - [ - -124.055903, - 44.6607881 - ], - [ - -124.0529313, - 44.6609838 - ], - [ - -124.0499633, - 44.660762 - ], - [ - -124.0471129, - 44.6601311 - ], - [ - -124.0444898, - 44.6591153 - ], - [ - -124.0421949, - 44.6577538 - ], - [ - -124.0403164, - 44.6560989 - ], - [ - -124.0389264, - 44.6542142 - ], - [ - -124.0380783, - 44.6521721 - ], - [ - -124.0378047, - 44.6500511 - ], - [ - -124.0378052, - 44.6499893 - ], - [ - -124.0378007, - 44.6491085 - ], - [ - -124.0378013, - 44.64897 - ], - [ - -124.0378033, - 44.6488112 - ], - [ - -124.0378066, - 44.6485456 - ], - [ - -124.0378059, - 44.6483278 - ], - [ - -124.037806, - 44.6482482 - ], - [ - -124.0378122, - 44.6473498 - ], - [ - -124.0378247, - 44.6455133 - ], - [ - -124.0378257, - 44.6453723 - ], - [ - -124.0378299, - 44.6446598 - ], - [ - -124.0378302, - 44.6446213 - ], - [ - -124.0378311, - 44.6445416 - ], - [ - -124.0378351, - 44.6439499 - ], - [ - -124.0378353, - 44.6439341 - ], - [ - -124.0378371, - 44.6437217 - ], - [ - -124.0378381, - 44.6434604 - ], - [ - -124.0378384, - 44.6434175 - ], - [ - -124.0378404, - 44.6432056 - ], - [ - -124.0378413, - 44.6430835 - ], - [ - -124.0378423, - 44.6428263 - ], - [ - -124.0378425, - 44.6427906 - ], - [ - -124.0378445, - 44.6425588 - ], - [ - -124.0378486, - 44.641894 - ], - [ - -124.0378489, - 44.6418592 - ], - [ - -124.0378498, - 44.6417764 - ], - [ - -124.0378549, - 44.6410778 - ], - [ - -124.0378599, - 44.64036 - ], - [ - -124.03786, - 44.64016 - ], - [ - -124.0378602, - 44.6401013 - ], - [ - -124.0378643, - 44.6395759 - ], - [ - -124.0378695, - 44.6388274 - ], - [ - -124.0378736, - 44.6382327 - ], - [ - -124.0378738, - 44.6382145 - ], - [ - -124.0378757, - 44.6380101 - ], - [ - -124.0378777, - 44.6376298 - ], - [ - -124.0378778, - 44.6376189 - ], - [ - -124.0378819, - 44.6369999 - ], - [ - -124.0378865, - 44.6367826 - ], - [ - -124.0378872, - 44.6367603 - ], - [ - -124.0378914, - 44.6365981 - ], - [ - -124.0378924, - 44.6365598 - ], - [ - -124.0378991, - 44.636342 - ], - [ - -124.0379043, - 44.6360562 - ], - [ - -124.037922, - 44.6358575 - ], - [ - -124.037937, - 44.633833 - ], - [ - -124.0385344, - 44.6317462 - ], - [ - -124.0396904, - 44.6297828 - ], - [ - -124.0413605, - 44.628018 - ], - [ - -124.0434806, - 44.6265199 - ], - [ - -124.045969, - 44.6253458 - ], - [ - -124.0487304, - 44.6245409 - ], - [ - -124.0516584, - 44.6241361 - ], - [ - -124.0546408, - 44.624147 - ], - [ - -124.057563, - 44.6245731 - ], - [ - -124.0603126, - 44.6253981 - ], - [ - -124.0627842, - 44.6265902 - ], - [ - -124.0648827, - 44.6281038 - ], - [ - -124.0665275, - 44.6298806 - ], - [ - -124.0670994, - 44.6308806 - ], - [ - -124.0673231, - 44.6311711 - ], - [ - -124.0675284, - 44.6316305 - ], - [ - -124.0676553, - 44.6318524 - ], - [ - -124.0676983, - 44.6320106 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15890_s_2438932", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0673642, - 44.6506772 - ], - [ - -124.0673192, - 44.651069 - ], - [ - -124.0674025, - 44.6515695 - ], - [ - -124.0671579, - 44.6537228 - ], - [ - -124.0663212, - 44.655799 - ], - [ - -124.065407, - 44.6570545 - ], - [ - -124.0653956, - 44.6572839 - ], - [ - -124.0649603, - 44.6585835 - ], - [ - -124.0649521, - 44.6586172 - ], - [ - -124.0649439, - 44.6586326 - ], - [ - -124.0646916, - 44.6593857 - ], - [ - -124.0634186, - 44.6613464 - ], - [ - -124.0616269, - 44.6630885 - ], - [ - -124.0593875, - 44.664543 - ], - [ - -124.056789, - 44.6656524 - ], - [ - -124.0567321, - 44.6656715 - ], - [ - -124.0537583, - 44.6664123 - ], - [ - -124.0506346, - 44.6667005 - ], - [ - -124.0474946, - 44.6665237 - ], - [ - -124.0444729, - 44.6658896 - ], - [ - -124.0416987, - 44.6648252 - ], - [ - -124.0392909, - 44.6633761 - ], - [ - -124.0392543, - 44.663349 - ], - [ - -124.0372531, - 44.661505 - ], - [ - -124.0358495, - 44.6593986 - ], - [ - -124.0351083, - 44.6571269 - ], - [ - -124.0350991, - 44.6570728 - ], - [ - -124.0351, - 44.6561544 - ], - [ - -124.0347894, - 44.6554854 - ], - [ - -124.0347765, - 44.6554444 - ], - [ - -124.03441, - 44.6534094 - ], - [ - -124.0345861, - 44.6513615 - ], - [ - -124.0352983, - 44.6493738 - ], - [ - -124.0365213, - 44.647517 - ], - [ - -124.0382113, - 44.6458575 - ], - [ - -124.0390341, - 44.6453069 - ], - [ - -124.0392425, - 44.6450076 - ], - [ - -124.0410667, - 44.6433222 - ], - [ - -124.0433163, - 44.6419232 - ], - [ - -124.0459049, - 44.6408644 - ], - [ - -124.048733, - 44.6401864 - ], - [ - -124.051692, - 44.6399152 - ], - [ - -124.0546682, - 44.6400614 - ], - [ - -124.0575473, - 44.6406191 - ], - [ - -124.0602188, - 44.6415672 - ], - [ - -124.06258, - 44.642869 - ], - [ - -124.0645402, - 44.6444747 - ], - [ - -124.066024, - 44.6463225 - ], - [ - -124.0669745, - 44.6483415 - ], - [ - -124.0673549, - 44.650454 - ], - [ - -124.0673642, - 44.6506772 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15892_s_15884", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9503246, - 44.6158124 - ], - [ - -123.951517, - 44.6164829 - ], - [ - -123.9534554, - 44.6181015 - ], - [ - -123.9549144, - 44.6199592 - ], - [ - -123.9558382, - 44.6219844 - ], - [ - -123.956191, - 44.6240994 - ], - [ - -123.9559592, - 44.6262229 - ], - [ - -123.9551518, - 44.6282734 - ], - [ - -123.9537996, - 44.6301719 - ], - [ - -123.9519547, - 44.6318455 - ], - [ - -123.9496878, - 44.63323 - ], - [ - -123.9470861, - 44.634272 - ], - [ - -123.9442497, - 44.6349314 - ], - [ - -123.9412875, - 44.6351831 - ], - [ - -123.9409663, - 44.6351877 - ], - [ - -123.937805, - 44.6349971 - ], - [ - -123.9373395, - 44.6349336 - ], - [ - -123.9347925, - 44.6344189 - ], - [ - -123.9343814, - 44.6343075 - ], - [ - -123.9308979, - 44.6329703 - ], - [ - -123.930443, - 44.6327366 - ], - [ - -123.928062, - 44.6311716 - ], - [ - -123.9277275, - 44.6310139 - ], - [ - -123.9256409, - 44.6295511 - ], - [ - -123.9239848, - 44.6278303 - ], - [ - -123.9228203, - 44.625915 - ], - [ - -123.9221904, - 44.623876 - ], - [ - -123.9221182, - 44.6217886 - ], - [ - -123.9221186, - 44.6217869 - ], - [ - -123.9221159, - 44.6217302 - ], - [ - -123.9223044, - 44.6196045 - ], - [ - -123.92307, - 44.6175459 - ], - [ - -123.924383, - 44.6156335 - ], - [ - -123.9261931, - 44.6139408 - ], - [ - -123.9284306, - 44.6125328 - ], - [ - -123.9310096, - 44.6114636 - ], - [ - -123.9338309, - 44.6107743 - ], - [ - -123.9367863, - 44.6104914 - ], - [ - -123.9397622, - 44.6106256 - ], - [ - -123.9426442, - 44.6111719 - ], - [ - -123.9453218, - 44.6121093 - ], - [ - -123.947692, - 44.6134018 - ], - [ - -123.9496638, - 44.6149996 - ], - [ - -123.9503246, - 44.6158124 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15893_s_16048", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.075939, - 44.6325665 - ], - [ - -124.075948, - 44.6325684 - ], - [ - -124.075845, - 44.6328164 - ], - [ - -124.0755496, - 44.6334549 - ], - [ - -124.0754386, - 44.6336719 - ], - [ - -124.0752849, - 44.6339598 - ], - [ - -124.075158, - 44.6341878 - ], - [ - -124.0745123, - 44.6351947 - ], - [ - -124.0743203, - 44.6354578 - ], - [ - -124.0738727, - 44.6360285 - ], - [ - -124.0736507, - 44.6362926 - ], - [ - -124.0734936, - 44.6364753 - ], - [ - -124.0733556, - 44.6366323 - ], - [ - -124.0728832, - 44.637138 - ], - [ - -124.0727542, - 44.637268 - ], - [ - -124.0724368, - 44.6375763 - ], - [ - -124.0722648, - 44.6377373 - ], - [ - -124.071337, - 44.6385255 - ], - [ - -124.071166, - 44.6386575 - ], - [ - -124.0711025, - 44.6387062 - ], - [ - -124.0708625, - 44.6388892 - ], - [ - -124.0700309, - 44.6394764 - ], - [ - -124.0697219, - 44.6396785 - ], - [ - -124.0693207, - 44.6399316 - ], - [ - -124.0689857, - 44.6401357 - ], - [ - -124.0684189, - 44.6404644 - ], - [ - -124.0671888, - 44.6411435 - ], - [ - -124.0669745, - 44.6412597 - ], - [ - -124.0666014, - 44.6414583 - ], - [ - -124.0658555, - 44.6424708 - ], - [ - -124.0640699, - 44.6440709 - ], - [ - -124.0618956, - 44.6454036 - ], - [ - -124.0594099, - 44.6464217 - ], - [ - -124.0567008, - 44.647089 - ], - [ - -124.0538644, - 44.6473819 - ], - [ - -124.0510015, - 44.6472899 - ], - [ - -124.0503193, - 44.647174 - ], - [ - -124.0495263, - 44.6471769 - ], - [ - -124.0494633, - 44.6471771 - ], - [ - -124.048054, - 44.6471781 - ], - [ - -124.0480086, - 44.6471781 - ], - [ - -124.04666, - 44.6471761 - ], - [ - -124.0453424, - 44.64718 - ], - [ - -124.0449954, - 44.6471782 - ], - [ - -124.0440222, - 44.6471652 - ], - [ - -124.0436498, - 44.6471601 - ], - [ - -124.0435988, - 44.6471593 - ], - [ - -124.0423536, - 44.6471393 - ], - [ - -124.0392725, - 44.6468636 - ], - [ - -124.0363339, - 44.6461471 - ], - [ - -124.0336604, - 44.6450197 - ], - [ - -124.0313631, - 44.6435283 - ], - [ - -124.0295377, - 44.6417351 - ], - [ - -124.0292571, - 44.6412913 - ], - [ - -124.0283126, - 44.6401927 - ], - [ - -124.027278, - 44.638195 - ], - [ - -124.0268092, - 44.6360915 - ], - [ - -124.0269242, - 44.6339631 - ], - [ - -124.0276184, - 44.6318917 - ], - [ - -124.0288652, - 44.6299567 - ], - [ - -124.0306165, - 44.6282326 - ], - [ - -124.0328052, - 44.6267856 - ], - [ - -124.0353469, - 44.6256712 - ], - [ - -124.0381442, - 44.6249323 - ], - [ - -124.0397008, - 44.6247553 - ], - [ - -124.0395863, - 44.6246408 - ], - [ - -124.0393913, - 44.6244348 - ], - [ - -124.039149, - 44.6241706 - ], - [ - -124.0389421, - 44.6239375 - ], - [ - -124.0386247, - 44.6235638 - ], - [ - -124.0384097, - 44.6232988 - ], - [ - -124.0380085, - 44.6227709 - ], - [ - -124.0378215, - 44.6225079 - ], - [ - -124.037763, - 44.6224247 - ], - [ - -124.037486, - 44.6220266 - ], - [ - -124.0370026, - 44.6212583 - ], - [ - -124.0368272, - 44.6209481 - ], - [ - -124.036626, - 44.6205959 - ], - [ - -124.0362979, - 44.6199663 - ], - [ - -124.0361589, - 44.6196723 - ], - [ - -124.0358421, - 44.6189109 - ], - [ - -124.0357301, - 44.6186009 - ], - [ - -124.0355901, - 44.6181782 - ], - [ - -124.0355061, - 44.6179002 - ], - [ - -124.0354282, - 44.6176249 - ], - [ - -124.0352914, - 44.6171069 - ], - [ - -124.0351708, - 44.61658 - ], - [ - -124.0351436, - 44.6164391 - ], - [ - -124.0340298, - 44.6156982 - ], - [ - -124.0339288, - 44.6156182 - ], - [ - -124.0325986, - 44.6144005 - ], - [ - -124.0325196, - 44.6143164 - ], - [ - -124.0314436, - 44.6129746 - ], - [ - -124.0313876, - 44.6128916 - ], - [ - -124.0306443, - 44.6115762 - ], - [ - -124.0306023, - 44.6114852 - ], - [ - -124.0303956, - 44.6109991 - ], - [ - -124.0303566, - 44.610899 - ], - [ - -124.030045, - 44.6097083 - ], - [ - -124.0300433, - 44.6097062 - ], - [ - -124.0293793, - 44.6087634 - ], - [ - -124.0293153, - 44.6086604 - ], - [ - -124.0282997, - 44.6063705 - ], - [ - -124.0282677, - 44.6062555 - ], - [ - -124.028057, - 44.6052568 - ], - [ - -124.0280381, - 44.6051258 - ], - [ - -124.0279648, - 44.6043483 - ], - [ - -124.0279469, - 44.6039403 - ], - [ - -124.0281577, - 44.6017659 - ], - [ - -124.0289717, - 44.5996654 - ], - [ - -124.0303559, - 44.5977232 - ], - [ - -124.0322548, - 44.5960174 - ], - [ - -124.0345919, - 44.5946167 - ], - [ - -124.0372731, - 44.5935774 - ], - [ - -124.0401905, - 44.5929413 - ], - [ - -124.0410691, - 44.5928813 - ], - [ - -124.0423175, - 44.5925365 - ], - [ - -124.0452541, - 44.5921709 - ], - [ - -124.048234, - 44.5922215 - ], - [ - -124.0511429, - 44.5926866 - ], - [ - -124.053869, - 44.5935481 - ], - [ - -124.0563076, - 44.5947731 - ], - [ - -124.058365, - 44.5963144 - ], - [ - -124.0593246, - 44.5973949 - ], - [ - -124.0591123, - 44.5970598 - ], - [ - -124.0594553, - 44.5975421 - ], - [ - -124.0599622, - 44.5981128 - ], - [ - -124.0602843, - 44.5987079 - ], - [ - -124.0606953, - 44.5992859 - ], - [ - -124.0607094, - 44.5993129 - ], - [ - -124.060986, - 44.6000039 - ], - [ - -124.0610376, - 44.6000993 - ], - [ - -124.0610011, - 44.6000416 - ], - [ - -124.061199, - 44.6005361 - ], - [ - -124.0634051, - 44.6019526 - ], - [ - -124.0651855, - 44.6036495 - ], - [ - -124.0664707, - 44.6055611 - ], - [ - -124.0672117, - 44.6076147 - ], - [ - -124.0673802, - 44.609732 - ], - [ - -124.0669697, - 44.6118324 - ], - [ - -124.0660954, - 44.6136308 - ], - [ - -124.0665464, - 44.6140447 - ], - [ - -124.0672283, - 44.6146565 - ], - [ - -124.0692152, - 44.6163322 - ], - [ - -124.0697817, - 44.6168052 - ], - [ - -124.0700538, - 44.617026 - ], - [ - -124.0704556, - 44.6173337 - ], - [ - -124.0705579, - 44.6174128 - ], - [ - -124.0706859, - 44.6175128 - ], - [ - -124.071036, - 44.6178 - ], - [ - -124.0710361, - 44.6178 - ], - [ - -124.0713941, - 44.6180929 - ], - [ - -124.0717, - 44.6183513 - ], - [ - -124.071895, - 44.6185212 - ], - [ - -124.0725703, - 44.619156 - ], - [ - -124.0728944, - 44.619485 - ], - [ - -124.0730262, - 44.6196211 - ], - [ - -124.0731282, - 44.619728 - ], - [ - -124.0733403, - 44.6200014 - ], - [ - -124.0733662, - 44.6199895 - ], - [ - -124.0736043, - 44.6202545 - ], - [ - -124.0741761, - 44.6209459 - ], - [ - -124.0742891, - 44.6210949 - ], - [ - -124.0748306, - 44.6218833 - ], - [ - -124.0749277, - 44.6220402 - ], - [ - -124.0750188, - 44.6221879 - ], - [ - -124.0751064, - 44.622329 - ], - [ - -124.0754431, - 44.6229167 - ], - [ - -124.0755571, - 44.6231337 - ], - [ - -124.075838, - 44.623718 - ], - [ - -124.075975, - 44.624032 - ], - [ - -124.0765163, - 44.6257525 - ], - [ - -124.0765523, - 44.6259355 - ], - [ - -124.076571, - 44.6260333 - ], - [ - -124.0766119, - 44.6262558 - ], - [ - -124.0766438, - 44.6264263 - ], - [ - -124.0767299, - 44.6270036 - ], - [ - -124.0767499, - 44.6271836 - ], - [ - -124.0767953, - 44.627849 - ], - [ - -124.0768044, - 44.628209 - ], - [ - -124.0768014, - 44.6286975 - ], - [ - -124.0767954, - 44.6288555 - ], - [ - -124.0767504, - 44.6294484 - ], - [ - -124.0767364, - 44.6295704 - ], - [ - -124.0766994, - 44.6298491 - ], - [ - -124.0766864, - 44.6299351 - ], - [ - -124.0766546, - 44.6301451 - ], - [ - -124.0764976, - 44.6309188 - ], - [ - -124.0764456, - 44.6311228 - ], - [ - -124.0763043, - 44.6316134 - ], - [ - -124.0762463, - 44.6317934 - ], - [ - -124.075939, - 44.6325665 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15893_s_16279", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0537133, - 44.6423988 - ], - [ - -124.053403, - 44.6427011 - ], - [ - -124.0512038, - 44.6441404 - ], - [ - -124.0486535, - 44.6452458 - ], - [ - -124.0458501, - 44.6459746 - ], - [ - -124.0429013, - 44.6462989 - ], - [ - -124.0399206, - 44.6462062 - ], - [ - -124.0370225, - 44.6457001 - ], - [ - -124.0343184, - 44.6448 - ], - [ - -124.0319124, - 44.6435405 - ], - [ - -124.0302514, - 44.6424774 - ], - [ - -124.0280467, - 44.6407227 - ], - [ - -124.026424, - 44.6386699 - ], - [ - -124.0256338, - 44.6368225 - ], - [ - -124.0255933, - 44.6368297 - ], - [ - -124.0255423, - 44.6366827 - ], - [ - -124.0254885, - 44.6364828 - ], - [ - -124.0254597, - 44.6364154 - ], - [ - -124.0254147, - 44.6362464 - ], - [ - -124.0254245, - 44.6362451 - ], - [ - -124.0252394, - 44.6355574 - ], - [ - -124.0252154, - 44.6354334 - ], - [ - -124.0250726, - 44.633946 - ], - [ - -124.0250726, - 44.633634 - ], - [ - -124.0254483, - 44.631475 - ], - [ - -124.0255819, - 44.6293819 - ], - [ - -124.0263546, - 44.6272266 - ], - [ - -124.0277258, - 44.6252289 - ], - [ - -124.0296379, - 44.6234725 - ], - [ - -124.0320108, - 44.622031 - ], - [ - -124.0347449, - 44.6209649 - ], - [ - -124.0377257, - 44.6203188 - ], - [ - -124.0408283, - 44.6201198 - ], - [ - -124.0439226, - 44.6203762 - ], - [ - -124.0445165, - 44.6204702 - ], - [ - -124.0447767, - 44.6205339 - ], - [ - -124.0451383, - 44.6202577 - ], - [ - -124.0475609, - 44.6190156 - ], - [ - -124.0502761, - 44.6181348 - ], - [ - -124.0531797, - 44.6176492 - ], - [ - -124.0561601, - 44.6175775 - ], - [ - -124.0591029, - 44.6179223 - ], - [ - -124.061895, - 44.6186705 - ], - [ - -124.0644291, - 44.6197933 - ], - [ - -124.066608, - 44.6212476 - ], - [ - -124.0683479, - 44.6229775 - ], - [ - -124.0695818, - 44.6249166 - ], - [ - -124.0702624, - 44.6269903 - ], - [ - -124.0703635, - 44.629119 - ], - [ - -124.069881, - 44.6312209 - ], - [ - -124.0688335, - 44.6332152 - ], - [ - -124.0682137, - 44.6341152 - ], - [ - -124.0662536, - 44.636272 - ], - [ - -124.0636384, - 44.6380395 - ], - [ - -124.0602282, - 44.6398497 - ], - [ - -124.0586435, - 44.6405863 - ], - [ - -124.0571333, - 44.6411964 - ], - [ - -124.0564105, - 44.6414704 - ], - [ - -124.0540702, - 44.6423006 - ], - [ - -124.0537133, - 44.6423988 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15894_s_15882", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9473352, - 44.6268676 - ], - [ - -123.9472768, - 44.6269758 - ], - [ - -123.9456823, - 44.6287758 - ], - [ - -123.9436266, - 44.6303191 - ], - [ - -123.9411886, - 44.6315463 - ], - [ - -123.9384621, - 44.6324103 - ], - [ - -123.9355519, - 44.6328777 - ], - [ - -123.9325699, - 44.6329307 - ], - [ - -123.9296307, - 44.6325671 - ], - [ - -123.9268474, - 44.6318011 - ], - [ - -123.924327, - 44.630662 - ], - [ - -123.9221663, - 44.6291936 - ], - [ - -123.9219541, - 44.6289785 - ], - [ - -123.9207737, - 44.628314 - ], - [ - -123.9189035, - 44.6267776 - ], - [ - -123.9174675, - 44.6250189 - ], - [ - -123.9165162, - 44.6230998 - ], - [ - -123.9164634, - 44.6228546 - ], - [ - -123.9156715, - 44.6225547 - ], - [ - -123.9133597, - 44.621209 - ], - [ - -123.9114602, - 44.6195669 - ], - [ - -123.9100457, - 44.6176918 - ], - [ - -123.9091707, - 44.6156555 - ], - [ - -123.9088687, - 44.6135365 - ], - [ - -123.9091513, - 44.6114161 - ], - [ - -123.9100075, - 44.6093758 - ], - [ - -123.9114044, - 44.6074941 - ], - [ - -123.9132883, - 44.6058431 - ], - [ - -123.9155867, - 44.6044864 - ], - [ - -123.9182114, - 44.603476 - ], - [ - -123.9210615, - 44.6028508 - ], - [ - -123.9240275, - 44.6026347 - ], - [ - -123.9241657, - 44.6026344 - ], - [ - -123.9242545, - 44.6026212 - ], - [ - -123.9249586, - 44.6026119 - ], - [ - -123.927011, - 44.6023557 - ], - [ - -123.927199, - 44.6023427 - ], - [ - -123.9295847, - 44.6023127 - ], - [ - -123.9319476, - 44.6025495 - ], - [ - -123.9322176, - 44.6025922 - ], - [ - -123.9338373, - 44.6027473 - ], - [ - -123.9366508, - 44.6034333 - ], - [ - -123.9392237, - 44.6044972 - ], - [ - -123.9414579, - 44.6058984 - ], - [ - -123.943268, - 44.6075832 - ], - [ - -123.9445848, - 44.6094873 - ], - [ - -123.945358, - 44.611538 - ], - [ - -123.9454663, - 44.6126851 - ], - [ - -123.9457436, - 44.6133495 - ], - [ - -123.9470478, - 44.6145025 - ], - [ - -123.9484306, - 44.6163818 - ], - [ - -123.9492754, - 44.6184174 - ], - [ - -123.9495499, - 44.6205314 - ], - [ - -123.9495441, - 44.6212954 - ], - [ - -123.949288, - 44.623223 - ], - [ - -123.9485567, - 44.6250876 - ], - [ - -123.9473736, - 44.6268299 - ], - [ - -123.9473352, - 44.6268676 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15942_s_16048", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0648827, - 44.6155322 - ], - [ - -124.0636582, - 44.6171826 - ], - [ - -124.0617746, - 44.6188339 - ], - [ - -124.0594761, - 44.620191 - ], - [ - -124.0568509, - 44.6212016 - ], - [ - -124.0540001, - 44.621827 - ], - [ - -124.0510332, - 44.6220431 - ], - [ - -124.0480642, - 44.6218415 - ], - [ - -124.0452074, - 44.6212301 - ], - [ - -124.0425726, - 44.6202324 - ], - [ - -124.0402611, - 44.6188866 - ], - [ - -124.0401146, - 44.61876 - ], - [ - -124.0395893, - 44.618596 - ], - [ - -124.0393663, - 44.618518 - ], - [ - -124.0392434, - 44.6184745 - ], - [ - -124.0390253, - 44.6183965 - ], - [ - -124.0375264, - 44.6177817 - ], - [ - -124.0373204, - 44.6176857 - ], - [ - -124.0366794, - 44.61737 - ], - [ - -124.0365044, - 44.6172789 - ], - [ - -124.0361006, - 44.6170615 - ], - [ - -124.0359696, - 44.6169885 - ], - [ - -124.0340298, - 44.6156982 - ], - [ - -124.0339288, - 44.6156182 - ], - [ - -124.0325986, - 44.6144005 - ], - [ - -124.0325196, - 44.6143164 - ], - [ - -124.0314436, - 44.6129746 - ], - [ - -124.0313876, - 44.6128916 - ], - [ - -124.0306443, - 44.6115762 - ], - [ - -124.0306023, - 44.6114852 - ], - [ - -124.0303956, - 44.6109991 - ], - [ - -124.0303566, - 44.610899 - ], - [ - -124.030045, - 44.6097083 - ], - [ - -124.0300433, - 44.6097062 - ], - [ - -124.0293793, - 44.6087634 - ], - [ - -124.0293153, - 44.6086604 - ], - [ - -124.0282997, - 44.6063705 - ], - [ - -124.0282677, - 44.6062555 - ], - [ - -124.028057, - 44.6052568 - ], - [ - -124.0280381, - 44.6051258 - ], - [ - -124.0279648, - 44.6043483 - ], - [ - -124.0279469, - 44.6039403 - ], - [ - -124.0281577, - 44.6017659 - ], - [ - -124.0289717, - 44.5996654 - ], - [ - -124.0303559, - 44.5977232 - ], - [ - -124.0322548, - 44.5960174 - ], - [ - -124.0345919, - 44.5946167 - ], - [ - -124.0372731, - 44.5935774 - ], - [ - -124.0401905, - 44.5929413 - ], - [ - -124.0422165, - 44.592803 - ], - [ - -124.0444252, - 44.5924446 - ], - [ - -124.047405, - 44.5923871 - ], - [ - -124.0503431, - 44.5927461 - ], - [ - -124.0531269, - 44.5935077 - ], - [ - -124.0556494, - 44.5946427 - ], - [ - -124.0578136, - 44.5961074 - ], - [ - -124.0595364, - 44.5978456 - ], - [ - -124.0596211, - 44.5979198 - ], - [ - -124.0613451, - 44.6006299 - ], - [ - -124.0634051, - 44.6019526 - ], - [ - -124.0651855, - 44.6036495 - ], - [ - -124.0664707, - 44.6055611 - ], - [ - -124.0672117, - 44.6076147 - ], - [ - -124.0673802, - 44.609732 - ], - [ - -124.0669697, - 44.6118324 - ], - [ - -124.0659957, - 44.6138357 - ], - [ - -124.0656689, - 44.614342 - ], - [ - -124.0654233, - 44.614723 - ], - [ - -124.0653, - 44.6149178 - ], - [ - -124.0651709, - 44.6151229 - ], - [ - -124.0651614, - 44.6151379 - ], - [ - -124.0649989, - 44.615395 - ], - [ - -124.0649074, - 44.6155401 - ], - [ - -124.0648827, - 44.6155322 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15942_s_781974", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0894525, - 44.5230958 - ], - [ - -124.0896839, - 44.5236439 - ], - [ - -124.0897656, - 44.5239289 - ], - [ - -124.0898604, - 44.5242588 - ], - [ - -124.0900682, - 44.5251821 - ], - [ - -124.0901193, - 44.5254941 - ], - [ - -124.0902021, - 44.5261969 - ], - [ - -124.0902282, - 44.5265579 - ], - [ - -124.0902431, - 44.5274093 - ], - [ - -124.0902172, - 44.5281003 - ], - [ - -124.0902092, - 44.5282681 - ], - [ - -124.090023, - 44.5314241 - ], - [ - -124.0900073, - 44.5316393 - ], - [ - -124.0897451, - 44.5346603 - ], - [ - -124.0897263, - 44.53485 - ], - [ - -124.0896355, - 44.535665 - ], - [ - -124.0896248, - 44.5357563 - ], - [ - -124.0894931, - 44.5368245 - ], - [ - -124.0891762, - 44.5396377 - ], - [ - -124.089068, - 44.5409357 - ], - [ - -124.0890065, - 44.5414596 - ], - [ - -124.0885272, - 44.5446225 - ], - [ - -124.0882739, - 44.5464594 - ], - [ - -124.0882501, - 44.5466194 - ], - [ - -124.0879696, - 44.5483854 - ], - [ - -124.0879455, - 44.5485286 - ], - [ - -124.0877036, - 44.54989 - ], - [ - -124.0870701, - 44.554425 - ], - [ - -124.0870406, - 44.5546182 - ], - [ - -124.0867411, - 44.5564333 - ], - [ - -124.086681, - 44.5567557 - ], - [ - -124.0865761, - 44.5572607 - ], - [ - -124.0865633, - 44.5573215 - ], - [ - -124.0864474, - 44.5578585 - ], - [ - -124.0864185, - 44.5579874 - ], - [ - -124.0863246, - 44.5583904 - ], - [ - -124.0862913, - 44.5585279 - ], - [ - -124.0852283, - 44.562754 - ], - [ - -124.0851836, - 44.5629242 - ], - [ - -124.0849212, - 44.5638797 - ], - [ - -124.0844739, - 44.5657686 - ], - [ - -124.084447, - 44.5658787 - ], - [ - -124.0841503, - 44.5670578 - ], - [ - -124.0841328, - 44.567126 - ], - [ - -124.0839907, - 44.5676704 - ], - [ - -124.0835472, - 44.5695316 - ], - [ - -124.0835026, - 44.5697098 - ], - [ - -124.0833727, - 44.5702048 - ], - [ - -124.0833436, - 44.5703128 - ], - [ - -124.0831481, - 44.5710186 - ], - [ - -124.0829914, - 44.5715884 - ], - [ - -124.0829552, - 44.5717162 - ], - [ - -124.0828764, - 44.5719858 - ], - [ - -124.0825871, - 44.5731336 - ], - [ - -124.0825753, - 44.57318 - ], - [ - -124.0823275, - 44.574139 - ], - [ - -124.0820139, - 44.575104 - ], - [ - -124.0817011, - 44.5759 - ], - [ - -124.0816763, - 44.5759625 - ], - [ - -124.0813638, - 44.5767399 - ], - [ - -124.0810984, - 44.5774076 - ], - [ - -124.0810847, - 44.5780074 - ], - [ - -124.0810746, - 44.5782628 - ], - [ - -124.0810488, - 44.5787268 - ], - [ - -124.0810255, - 44.5790341 - ], - [ - -124.0810006, - 44.5792951 - ], - [ - -124.0808945, - 44.5800335 - ], - [ - -124.0808386, - 44.5803245 - ], - [ - -124.0807815, - 44.5805958 - ], - [ - -124.0807016, - 44.5809458 - ], - [ - -124.0806101, - 44.5813079 - ], - [ - -124.0805522, - 44.5815169 - ], - [ - -124.0804505, - 44.5818553 - ], - [ - -124.0803445, - 44.5821823 - ], - [ - -124.0802193, - 44.582541 - ], - [ - -124.0799606, - 44.5832318 - ], - [ - -124.0799467, - 44.5833027 - ], - [ - -124.0799305, - 44.5833997 - ], - [ - -124.0798505, - 44.5840329 - ], - [ - -124.0798487, - 44.5840468 - ], - [ - -124.0795004, - 44.5867649 - ], - [ - -124.0794802, - 44.5869114 - ], - [ - -124.0793836, - 44.5875672 - ], - [ - -124.0794755, - 44.5879759 - ], - [ - -124.0795025, - 44.5881209 - ], - [ - -124.0795896, - 44.5887102 - ], - [ - -124.0796127, - 44.5889212 - ], - [ - -124.0796548, - 44.5895178 - ], - [ - -124.0796599, - 44.5896748 - ], - [ - -124.0796638, - 44.5899522 - ], - [ - -124.0796629, - 44.5902092 - ], - [ - -124.0795813, - 44.5913051 - ], - [ - -124.0795534, - 44.5914972 - ], - [ - -124.0794128, - 44.5922235 - ], - [ - -124.0793589, - 44.5924466 - ], - [ - -124.0791939, - 44.5930322 - ], - [ - -124.0790969, - 44.5933332 - ], - [ - -124.0782524, - 44.5951807 - ], - [ - -124.0780794, - 44.5954688 - ], - [ - -124.0776477, - 44.5961262 - ], - [ - -124.0771937, - 44.5967614 - ], - [ - -124.0770955, - 44.596917 - ], - [ - -124.0769871, - 44.5970849 - ], - [ - -124.0767482, - 44.597447 - ], - [ - -124.0763005, - 44.598125 - ], - [ - -124.0759442, - 44.5986865 - ], - [ - -124.0756524, - 44.5991468 - ], - [ - -124.0755558, - 44.5992962 - ], - [ - -124.0745061, - 44.6008873 - ], - [ - -124.074499, - 44.6008981 - ], - [ - -124.0734317, - 44.6025112 - ], - [ - -124.0730392, - 44.6031229 - ], - [ - -124.0729967, - 44.6031886 - ], - [ - -124.0723565, - 44.6041691 - ], - [ - -124.0720542, - 44.6046393 - ], - [ - -124.0718074, - 44.6050232 - ], - [ - -124.0717683, - 44.6050835 - ], - [ - -124.0716513, - 44.6052625 - ], - [ - -124.0715013, - 44.605492 - ], - [ - -124.0711655, - 44.6060064 - ], - [ - -124.0711408, - 44.6060441 - ], - [ - -124.0706389, - 44.6068051 - ], - [ - -124.0678217, - 44.6110735 - ], - [ - -124.0677922, - 44.6111179 - ], - [ - -124.0675607, - 44.6114647 - ], - [ - -124.0673163, - 44.6118569 - ], - [ - -124.0671853, - 44.6120614 - ], - [ - -124.0668403, - 44.6125855 - ], - [ - -124.0667793, - 44.6126772 - ], - [ - -124.0659421, - 44.6139188 - ], - [ - -124.0656689, - 44.614342 - ], - [ - -124.0654233, - 44.614723 - ], - [ - -124.0653, - 44.6149178 - ], - [ - -124.0651709, - 44.6151229 - ], - [ - -124.0651614, - 44.6151379 - ], - [ - -124.0649989, - 44.615395 - ], - [ - -124.0649074, - 44.6155401 - ], - [ - -124.0648827, - 44.6155322 - ], - [ - -124.0636582, - 44.6171826 - ], - [ - -124.0617746, - 44.6188339 - ], - [ - -124.0594761, - 44.620191 - ], - [ - -124.0568509, - 44.6212016 - ], - [ - -124.0540001, - 44.621827 - ], - [ - -124.0510332, - 44.6220431 - ], - [ - -124.0480642, - 44.6218415 - ], - [ - -124.0452074, - 44.6212301 - ], - [ - -124.0425726, - 44.6202324 - ], - [ - -124.0402611, - 44.6188866 - ], - [ - -124.0383617, - 44.6172446 - ], - [ - -124.0369474, - 44.6153694 - ], - [ - -124.0360725, - 44.6133332 - ], - [ - -124.0357706, - 44.6112142 - ], - [ - -124.0360532, - 44.6090939 - ], - [ - -124.0369095, - 44.6070536 - ], - [ - -124.0369675, - 44.6069526 - ], - [ - -124.0371727, - 44.6066121 - ], - [ - -124.0372667, - 44.6064632 - ], - [ - -124.0374319, - 44.6062019 - ], - [ - -124.0375632, - 44.6059934 - ], - [ - -124.037577, - 44.6059716 - ], - [ - -124.0377291, - 44.6057317 - ], - [ - -124.037773, - 44.605663 - ], - [ - -124.0380421, - 44.605246 - ], - [ - -124.0383724, - 44.6047346 - ], - [ - -124.0384817, - 44.604569 - ], - [ - -124.0393441, - 44.6032909 - ], - [ - -124.0395919, - 44.6029147 - ], - [ - -124.0398539, - 44.6024944 - ], - [ - -124.0400219, - 44.6022344 - ], - [ - -124.0403251, - 44.6017806 - ], - [ - -124.0431262, - 44.5975396 - ], - [ - -124.0436149, - 44.5967991 - ], - [ - -124.0439397, - 44.596302 - ], - [ - -124.0440929, - 44.5960677 - ], - [ - -124.0441902, - 44.5959189 - ], - [ - -124.0444178, - 44.5955652 - ], - [ - -124.0447392, - 44.5950658 - ], - [ - -124.0447762, - 44.5950087 - ], - [ - -124.045414, - 44.5940325 - ], - [ - -124.045823, - 44.5933954 - ], - [ - -124.0458989, - 44.5932791 - ], - [ - -124.0470016, - 44.5916136 - ], - [ - -124.0479992, - 44.5901026 - ], - [ - -124.0482448, - 44.5897156 - ], - [ - -124.0486521, - 44.589074 - ], - [ - -124.0487487, - 44.5889251 - ], - [ - -124.0488878, - 44.5887144 - ], - [ - -124.0488702, - 44.5883396 - ], - [ - -124.0488663, - 44.5881486 - ], - [ - -124.0489163, - 44.5870931 - ], - [ - -124.0489614, - 44.5867031 - ], - [ - -124.0489684, - 44.5866445 - ], - [ - -124.0490846, - 44.5857016 - ], - [ - -124.0491101, - 44.5855136 - ], - [ - -124.0492295, - 44.5847058 - ], - [ - -124.0495689, - 44.5820681 - ], - [ - -124.0496682, - 44.5812851 - ], - [ - -124.0497143, - 44.5809719 - ], - [ - -124.0497754, - 44.5806079 - ], - [ - -124.0498157, - 44.580387 - ], - [ - -124.0498888, - 44.580016 - ], - [ - -124.0499289, - 44.5798248 - ], - [ - -124.049991, - 44.5795458 - ], - [ - -124.0501048, - 44.5790954 - ], - [ - -124.0501819, - 44.5788234 - ], - [ - -124.0502489, - 44.5785992 - ], - [ - -124.0503299, - 44.5783412 - ], - [ - -124.0504788, - 44.577909 - ], - [ - -124.0506926, - 44.5773389 - ], - [ - -124.0507113, - 44.5765417 - ], - [ - -124.050719, - 44.5761259 - ], - [ - -124.0507981, - 44.5751548 - ], - [ - -124.0508582, - 44.5747388 - ], - [ - -124.0510542, - 44.5737922 - ], - [ - -124.0511744, - 44.5733482 - ], - [ - -124.0514266, - 44.5725702 - ], - [ - -124.0516188, - 44.5720632 - ], - [ - -124.0516702, - 44.5719309 - ], - [ - -124.0521274, - 44.5707819 - ], - [ - -124.05214, - 44.5707505 - ], - [ - -124.0524466, - 44.5699888 - ], - [ - -124.0525597, - 44.5697014 - ], - [ - -124.0526757, - 44.5692532 - ], - [ - -124.0529972, - 44.5679805 - ], - [ - -124.0530778, - 44.5676848 - ], - [ - -124.0531812, - 44.5673316 - ], - [ - -124.0533227, - 44.5668176 - ], - [ - -124.0533273, - 44.5668013 - ], - [ - -124.0535105, - 44.5661412 - ], - [ - -124.053603, - 44.5657892 - ], - [ - -124.0540462, - 44.5639335 - ], - [ - -124.0540881, - 44.563766 - ], - [ - -124.0542433, - 44.5631721 - ], - [ - -124.0545181, - 44.5620823 - ], - [ - -124.0549865, - 44.5601085 - ], - [ - -124.0550582, - 44.5598288 - ], - [ - -124.0553361, - 44.5588188 - ], - [ - -124.0563624, - 44.5547468 - ], - [ - -124.0564254, - 44.554477 - ], - [ - -124.056521, - 44.5540349 - ], - [ - -124.0565863, - 44.5537212 - ], - [ - -124.056844, - 44.5521643 - ], - [ - -124.0574867, - 44.5475811 - ], - [ - -124.0575328, - 44.5472914 - ], - [ - -124.0577884, - 44.5458569 - ], - [ - -124.0580457, - 44.5442425 - ], - [ - -124.0582961, - 44.5424336 - ], - [ - -124.0583113, - 44.5423294 - ], - [ - -124.0587603, - 44.5393758 - ], - [ - -124.0588567, - 44.5382273 - ], - [ - -124.0588789, - 44.5380014 - ], - [ - -124.0592147, - 44.5350344 - ], - [ - -124.0592244, - 44.5349527 - ], - [ - -124.059356, - 44.5338893 - ], - [ - -124.0594315, - 44.5332148 - ], - [ - -124.0596776, - 44.5303962 - ], - [ - -124.0596961, - 44.5300862 - ], - [ - -124.0589069, - 44.5295149 - ], - [ - -124.058563, - 44.5292088 - ], - [ - -124.0570017, - 44.5275182 - ], - [ - -124.0567278, - 44.5271512 - ], - [ - -124.0556706, - 44.5253684 - ], - [ - -124.0555327, - 44.5250623 - ], - [ - -124.0548329, - 44.5224437 - ], - [ - -124.0548069, - 44.5221627 - ], - [ - -124.054778, - 44.521197 - ], - [ - -124.054787, - 44.520915 - ], - [ - -124.0548799, - 44.5199397 - ], - [ - -124.0549149, - 44.5197187 - ], - [ - -124.0553286, - 44.5181505 - ], - [ - -124.0553966, - 44.5179675 - ], - [ - -124.055817, - 44.5170154 - ], - [ - -124.055955, - 44.5167464 - ], - [ - -124.0567807, - 44.5154195 - ], - [ - -124.0569437, - 44.5151985 - ], - [ - -124.0582468, - 44.5137304 - ], - [ - -124.0585038, - 44.5134864 - ], - [ - -124.0603019, - 44.5120613 - ], - [ - -124.0606709, - 44.5118164 - ], - [ - -124.062938, - 44.5105734 - ], - [ - -124.0634019, - 44.5103654 - ], - [ - -124.0634432, - 44.5103494 - ], - [ - -124.0644614, - 44.5081867 - ], - [ - -124.0645924, - 44.5078705 - ], - [ - -124.0647557, - 44.5074774 - ], - [ - -124.0649311, - 44.507055 - ], - [ - -124.0649701, - 44.5069007 - ], - [ - -124.0650798, - 44.5064079 - ], - [ - -124.0654595, - 44.5046763 - ], - [ - -124.0655716, - 44.5040637 - ], - [ - -124.0656078, - 44.5038779 - ], - [ - -124.0659452, - 44.5022519 - ], - [ - -124.066513, - 44.499533 - ], - [ - -124.0665275, - 44.4994652 - ], - [ - -124.0666736, - 44.4987942 - ], - [ - -124.0667167, - 44.4986072 - ], - [ - -124.0668729, - 44.4979642 - ], - [ - -124.0669941, - 44.4975201 - ], - [ - -124.0671342, - 44.4970581 - ], - [ - -124.0672038, - 44.4968397 - ], - [ - -124.0673032, - 44.4965416 - ], - [ - -124.0677028, - 44.4953416 - ], - [ - -124.0686732, - 44.4933281 - ], - [ - -124.0701737, - 44.4914887 - ], - [ - -124.0721465, - 44.4898942 - ], - [ - -124.0745159, - 44.4886058 - ], - [ - -124.0771909, - 44.4876729 - ], - [ - -124.0800686, - 44.4871315 - ], - [ - -124.0830386, - 44.4870023 - ], - [ - -124.0859867, - 44.4872903 - ], - [ - -124.0887997, - 44.4879844 - ], - [ - -124.0913696, - 44.4890579 - ], - [ - -124.0935977, - 44.4904697 - ], - [ - -124.0953982, - 44.4921655 - ], - [ - -124.0967021, - 44.4940801 - ], - [ - -124.0974592, - 44.49614 - ], - [ - -124.0976403, - 44.498266 - ], - [ - -124.0972384, - 44.5003764 - ], - [ - -124.0968387, - 44.5015785 - ], - [ - -124.0967738, - 44.5017734 - ], - [ - -124.096734, - 44.5019048 - ], - [ - -124.0966548, - 44.5022315 - ], - [ - -124.0965367, - 44.5027749 - ], - [ - -124.0959805, - 44.5054451 - ], - [ - -124.0956642, - 44.5069733 - ], - [ - -124.0955443, - 44.5076303 - ], - [ - -124.0954893, - 44.5079045 - ], - [ - -124.0950778, - 44.5097855 - ], - [ - -124.0950723, - 44.5098107 - ], - [ - -124.0949354, - 44.5104267 - ], - [ - -124.0948831, - 44.5106475 - ], - [ - -124.0946983, - 44.5113816 - ], - [ - -124.0944073, - 44.5123047 - ], - [ - -124.0941934, - 44.5128678 - ], - [ - -124.0940971, - 44.5131102 - ], - [ - -124.0938675, - 44.5136635 - ], - [ - -124.093708, - 44.5140482 - ], - [ - -124.0934992, - 44.5145526 - ], - [ - -124.0933315, - 44.514932 - ], - [ - -124.0918854, - 44.5180068 - ], - [ - -124.0907986, - 44.5205046 - ], - [ - -124.0905625, - 44.5210831 - ], - [ - -124.0902697, - 44.5217256 - ], - [ - -124.0901597, - 44.5219436 - ], - [ - -124.0897849, - 44.5226159 - ], - [ - -124.0896489, - 44.5228379 - ], - [ - -124.0894525, - 44.5230958 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15944_s_15958", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0711838, - 44.4367472 - ], - [ - -124.0711779, - 44.4367511 - ], - [ - -124.070164, - 44.4374258 - ], - [ - -124.0699401, - 44.4375718 - ], - [ - -124.0694764, - 44.4378683 - ], - [ - -124.0693746, - 44.4379376 - ], - [ - -124.0682167, - 44.4386505 - ], - [ - -124.0675397, - 44.4390265 - ], - [ - -124.0661779, - 44.439701 - ], - [ - -124.0657318, - 44.439897 - ], - [ - -124.0647535, - 44.440292 - ], - [ - -124.0647274, - 44.4403017 - ], - [ - -124.0647213, - 44.4403041 - ], - [ - -124.0645593, - 44.440368 - ], - [ - -124.0641553, - 44.440525 - ], - [ - -124.0635425, - 44.4407504 - ], - [ - -124.0630475, - 44.4409224 - ], - [ - -124.0615644, - 44.4413697 - ], - [ - -124.0609553, - 44.4415268 - ], - [ - -124.0578726, - 44.4420686 - ], - [ - -124.0574125, - 44.4421136 - ], - [ - -124.054895, - 44.4422083 - ], - [ - -124.0523903, - 44.442003 - ], - [ - -124.0518592, - 44.4419269 - ], - [ - -124.0493792, - 44.4413828 - ], - [ - -124.0492809, - 44.4413793 - ], - [ - -124.0462449, - 44.4410491 - ], - [ - -124.0459088, - 44.4409871 - ], - [ - -124.0437857, - 44.4404728 - ], - [ - -124.0417917, - 44.4397399 - ], - [ - -124.0411146, - 44.4394439 - ], - [ - -124.0380488, - 44.4376744 - ], - [ - -124.0376968, - 44.4374104 - ], - [ - -124.036392, - 44.4362897 - ], - [ - -124.0361691, - 44.4360697 - ], - [ - -124.0345755, - 44.4340872 - ], - [ - -124.0343825, - 44.4337752 - ], - [ - -124.0339758, - 44.4330476 - ], - [ - -124.0336709, - 44.4324396 - ], - [ - -124.0335501, - 44.4321891 - ], - [ - -124.0334421, - 44.4319561 - ], - [ - -124.0327131, - 44.4303775 - ], - [ - -124.0324011, - 44.4296078 - ], - [ - -124.0322982, - 44.4293138 - ], - [ - -124.0320333, - 44.4283884 - ], - [ - -124.032004, - 44.4282575 - ], - [ - -124.0319832, - 44.4281658 - ], - [ - -124.0319127, - 44.427875 - ], - [ - -124.0317825, - 44.4271637 - ], - [ - -124.0316151, - 44.427032 - ], - [ - -124.0315913, - 44.4270133 - ], - [ - -124.0315825, - 44.4270064 - ], - [ - -124.0315649, - 44.4269935 - ], - [ - -124.0313149, - 44.4268518 - ], - [ - -124.0311561, - 44.4267606 - ], - [ - -124.0309724, - 44.4266536 - ], - [ - -124.0305965, - 44.4264354 - ], - [ - -124.0304614, - 44.4263573 - ], - [ - -124.0302918, - 44.4262601 - ], - [ - -124.0300689, - 44.4261329 - ], - [ - -124.0300666, - 44.4261316 - ], - [ - -124.029174, - 44.425764 - ], - [ - -124.0290672, - 44.4257093 - ], - [ - -124.0268133, - 44.4242963 - ], - [ - -124.024991, - 44.4225934 - ], - [ - -124.0236714, - 44.420667 - ], - [ - -124.0229059, - 44.4185923 - ], - [ - -124.0227243, - 44.4164502 - ], - [ - -124.0231337, - 44.4143243 - ], - [ - -124.024118, - 44.4122976 - ], - [ - -124.0256387, - 44.410449 - ], - [ - -124.0257334, - 44.4103562 - ], - [ - -124.0277009, - 44.4087778 - ], - [ - -124.0300579, - 44.4075028 - ], - [ - -124.0327149, - 44.4065795 - ], - [ - -124.0355711, - 44.4060429 - ], - [ - -124.0385183, - 44.4059134 - ], - [ - -124.0414446, - 44.4061959 - ], - [ - -124.044239, - 44.4068796 - ], - [ - -124.0467956, - 44.4079387 - ], - [ - -124.0469985, - 44.4080429 - ], - [ - -124.0475072, - 44.4083158 - ], - [ - -124.0484101, - 44.4088217 - ], - [ - -124.0485024, - 44.4088738 - ], - [ - -124.0486394, - 44.4089518 - ], - [ - -124.04867, - 44.4089693 - ], - [ - -124.0489662, - 44.4091388 - ], - [ - -124.0491914, - 44.4092673 - ], - [ - -124.0492116, - 44.4092789 - ], - [ - -124.0494176, - 44.4093969 - ], - [ - -124.04947, - 44.409427 - ], - [ - -124.049643, - 44.409527 - ], - [ - -124.0496651, - 44.4095398 - ], - [ - -124.050151, - 44.4098217 - ], - [ - -124.0501971, - 44.4098486 - ], - [ - -124.0502123, - 44.4098575 - ], - [ - -124.0505704, - 44.4100604 - ], - [ - -124.050755, - 44.4101666 - ], - [ - -124.051184, - 44.4104176 - ], - [ - -124.0520048, - 44.4109342 - ], - [ - -124.0525028, - 44.4112712 - ], - [ - -124.0528931, - 44.4115449 - ], - [ - -124.0533991, - 44.4119129 - ], - [ - -124.0538289, - 44.4122386 - ], - [ - -124.054036, - 44.4124022 - ], - [ - -124.0544172, - 44.4127019 - ], - [ - -124.0546415, - 44.4128822 - ], - [ - -124.0554686, - 44.4135622 - ], - [ - -124.0554996, - 44.4135878 - ], - [ - -124.0557132, - 44.4137645 - ], - [ - -124.0558343, - 44.4138641 - ], - [ - -124.0559823, - 44.413982 - ], - [ - -124.056144, - 44.4141129 - ], - [ - -124.0564721, - 44.4143828 - ], - [ - -124.0565335, - 44.414432 - ], - [ - -124.0568482, - 44.4146711 - ], - [ - -124.0571334, - 44.414894 - ], - [ - -124.0571806, - 44.4149319 - ], - [ - -124.0572767, - 44.4150057 - ], - [ - -124.0575738, - 44.4152404 - ], - [ - -124.0578208, - 44.4154413 - ], - [ - -124.0590498, - 44.4166503 - ], - [ - -124.0593515, - 44.416578 - ], - [ - -124.0620362, - 44.4161251 - ], - [ - -124.0647909, - 44.4160281 - ], - [ - -124.0653218, - 44.4160441 - ], - [ - -124.0654324, - 44.4160477 - ], - [ - -124.0656678, - 44.4160561 - ], - [ - -124.0686074, - 44.416369 - ], - [ - -124.0714053, - 44.417087 - ], - [ - -124.0739542, - 44.4181823 - ], - [ - -124.0761561, - 44.4196129 - ], - [ - -124.0779263, - 44.4213238 - ], - [ - -124.0791969, - 44.4232494 - ], - [ - -124.0799189, - 44.4253155 - ], - [ - -124.0800646, - 44.427443 - ], - [ - -124.0796283, - 44.4295499 - ], - [ - -124.0786267, - 44.4315554 - ], - [ - -124.0770983, - 44.4333822 - ], - [ - -124.0751017, - 44.4349603 - ], - [ - -124.0727137, - 44.436229 - ], - [ - -124.0711838, - 44.4367472 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15946_s_22289", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0822808, - 44.4280552 - ], - [ - -124.0822928, - 44.4280567 - ], - [ - -124.0822885, - 44.4280754 - ], - [ - -124.0822824, - 44.4281175 - ], - [ - -124.0822521, - 44.4282257 - ], - [ - -124.0822509, - 44.4282304 - ], - [ - -124.0822507, - 44.4282304 - ], - [ - -124.0817157, - 44.4301369 - ], - [ - -124.0806274, - 44.4320434 - ], - [ - -124.0790563, - 44.4337684 - ], - [ - -124.0770591, - 44.43525 - ], - [ - -124.0747074, - 44.4364348 - ], - [ - -124.0720858, - 44.4372802 - ], - [ - -124.0692886, - 44.437756 - ], - [ - -124.0664163, - 44.4378449 - ], - [ - -124.0656352, - 44.4378159 - ], - [ - -124.0655397, - 44.4378121 - ], - [ - -124.0654495, - 44.4378084 - ], - [ - -124.0652733, - 44.4378015 - ], - [ - -124.0651553, - 44.4377966 - ], - [ - -124.0650726, - 44.4377929 - ], - [ - -124.0649198, - 44.4377863 - ], - [ - -124.0619845, - 44.4374486 - ], - [ - -124.0591976, - 44.4367071 - ], - [ - -124.0566662, - 44.4355903 - ], - [ - -124.0544876, - 44.434141 - ], - [ - -124.0527456, - 44.432415 - ], - [ - -124.0515072, - 44.4304787 - ], - [ - -124.0508198, - 44.4284064 - ], - [ - -124.0507098, - 44.4262779 - ], - [ - -124.0511814, - 44.4241748 - ], - [ - -124.0522164, - 44.4221781 - ], - [ - -124.0537749, - 44.4203645 - ], - [ - -124.0557971, - 44.4188036 - ], - [ - -124.0582053, - 44.4175554 - ], - [ - -124.0583573, - 44.4175054 - ], - [ - -124.0587182, - 44.4172858 - ], - [ - -124.0613155, - 44.4162507 - ], - [ - -124.0641446, - 44.4155985 - ], - [ - -124.0670969, - 44.4153544 - ], - [ - -124.0700588, - 44.4155277 - ], - [ - -124.0729167, - 44.4161118 - ], - [ - -124.0755608, - 44.4170841 - ], - [ - -124.0778895, - 44.4184075 - ], - [ - -124.0798134, - 44.420031 - ], - [ - -124.0812584, - 44.4218923 - ], - [ - -124.0821691, - 44.4239199 - ], - [ - -124.0825103, - 44.4260358 - ], - [ - -124.0822808, - 44.4280552 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15947_s_15946", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0705935, - 44.4372412 - ], - [ - -124.0693709, - 44.4380816 - ], - [ - -124.0668653, - 44.4392281 - ], - [ - -124.0640957, - 44.4400023 - ], - [ - -124.0611683, - 44.4403744 - ], - [ - -124.0581959, - 44.4403302 - ], - [ - -124.0552927, - 44.4398712 - ], - [ - -124.0525703, - 44.4390152 - ], - [ - -124.0501334, - 44.4377952 - ], - [ - -124.0480756, - 44.4362578 - ], - [ - -124.0479623, - 44.4361546 - ], - [ - -124.0464286, - 44.4344508 - ], - [ - -124.0453634, - 44.4325726 - ], - [ - -124.0448037, - 44.4305852 - ], - [ - -124.0447691, - 44.428558 - ], - [ - -124.0452607, - 44.4265614 - ], - [ - -124.0462612, - 44.424665 - ], - [ - -124.0477359, - 44.4229348 - ], - [ - -124.0496334, - 44.4214311 - ], - [ - -124.0501491, - 44.4210921 - ], - [ - -124.0504702, - 44.4208753 - ], - [ - -124.050567, - 44.4208106 - ], - [ - -124.0514996, - 44.4201919 - ], - [ - -124.0517402, - 44.4200322 - ], - [ - -124.0522953, - 44.4196532 - ], - [ - -124.0526643, - 44.4194094 - ], - [ - -124.0529663, - 44.4192164 - ], - [ - -124.0530248, - 44.4191793 - ], - [ - -124.0532254, - 44.4190524 - ], - [ - -124.0533173, - 44.4189936 - ], - [ - -124.0566469, - 44.4173756 - ], - [ - -124.0569629, - 44.4172626 - ], - [ - -124.0589296, - 44.416679 - ], - [ - -124.0593515, - 44.416578 - ], - [ - -124.0620362, - 44.4161251 - ], - [ - -124.0647909, - 44.4160281 - ], - [ - -124.0653218, - 44.4160441 - ], - [ - -124.0658879, - 44.4160615 - ], - [ - -124.0660654, - 44.4160678 - ], - [ - -124.0663204, - 44.4160778 - ], - [ - -124.0666841, - 44.4160922 - ], - [ - -124.0696209, - 44.4164181 - ], - [ - -124.0724127, - 44.4171483 - ], - [ - -124.0749522, - 44.4182547 - ], - [ - -124.0771418, - 44.419695 - ], - [ - -124.0788974, - 44.4214136 - ], - [ - -124.0801515, - 44.4233447 - ], - [ - -124.0808559, - 44.4254141 - ], - [ - -124.0809834, - 44.4275421 - ], - [ - -124.0805291, - 44.4296471 - ], - [ - -124.0795104, - 44.4316481 - ], - [ - -124.0779664, - 44.4334682 - ], - [ - -124.0759563, - 44.4350375 - ], - [ - -124.0735575, - 44.4362956 - ], - [ - -124.0708622, - 44.4371942 - ], - [ - -124.0705935, - 44.4372412 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15947_s_2456758", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0712339, - 44.4367815 - ], - [ - -124.0693672, - 44.4380722 - ], - [ - -124.0668663, - 44.4392239 - ], - [ - -124.0640997, - 44.4400038 - ], - [ - -124.0611739, - 44.440382 - ], - [ - -124.0582013, - 44.4403439 - ], - [ - -124.0552963, - 44.439891 - ], - [ - -124.0525704, - 44.4390407 - ], - [ - -124.0501286, - 44.4378256 - ], - [ - -124.0480647, - 44.4362926 - ], - [ - -124.047957, - 44.4361951 - ], - [ - -124.0464076, - 44.4344825 - ], - [ - -124.0453326, - 44.4325925 - ], - [ - -124.0447699, - 44.4305918 - ], - [ - -124.0447392, - 44.428551 - ], - [ - -124.0452417, - 44.4265422 - ], - [ - -124.0462595, - 44.424636 - ], - [ - -124.0477566, - 44.4228999 - ], - [ - -124.0496803, - 44.421395 - ], - [ - -124.0500523, - 44.4211539 - ], - [ - -124.0505337, - 44.4208327 - ], - [ - -124.050567, - 44.4208106 - ], - [ - -124.0514996, - 44.4201919 - ], - [ - -124.0517402, - 44.4200322 - ], - [ - -124.0522953, - 44.4196532 - ], - [ - -124.0526643, - 44.4194094 - ], - [ - -124.0529663, - 44.4192164 - ], - [ - -124.0530248, - 44.4191793 - ], - [ - -124.0532254, - 44.4190524 - ], - [ - -124.0533173, - 44.4189936 - ], - [ - -124.0566469, - 44.4173756 - ], - [ - -124.0569629, - 44.4172626 - ], - [ - -124.0589296, - 44.416679 - ], - [ - -124.0593515, - 44.416578 - ], - [ - -124.0620362, - 44.4161251 - ], - [ - -124.0647909, - 44.4160281 - ], - [ - -124.065316, - 44.4160439 - ], - [ - -124.065682, - 44.4160548 - ], - [ - -124.068625, - 44.4163507 - ], - [ - -124.071431, - 44.4170524 - ], - [ - -124.0739921, - 44.4181329 - ], - [ - -124.07621, - 44.4195507 - ], - [ - -124.0779995, - 44.4212513 - ], - [ - -124.0792918, - 44.4231695 - ], - [ - -124.0800371, - 44.4252314 - ], - [ - -124.0802068, - 44.4273579 - ], - [ - -124.0797942, - 44.4294673 - ], - [ - -124.0788153, - 44.4314785 - ], - [ - -124.0773075, - 44.4333142 - ], - [ - -124.0753288, - 44.4349038 - ], - [ - -124.0729552, - 44.4361862 - ], - [ - -124.0712339, - 44.4367815 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15950_s_2456756", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.1230281, - 44.3122493 - ], - [ - -124.1231881, - 44.3129865 - ], - [ - -124.1232257, - 44.3133657 - ], - [ - -124.1231885, - 44.3152196 - ], - [ - -124.123135, - 44.3156027 - ], - [ - -124.122573, - 44.3176398 - ], - [ - -124.1214815, - 44.3195628 - ], - [ - -124.1199002, - 44.3213017 - ], - [ - -124.1178869, - 44.3227928 - ], - [ - -124.117437, - 44.3230183 - ], - [ - -124.1170405, - 44.3240554 - ], - [ - -124.1170213, - 44.3241054 - ], - [ - -124.1168324, - 44.3245904 - ], - [ - -124.1168315, - 44.3245902 - ], - [ - -124.1166258, - 44.3251278 - ], - [ - -124.1166226, - 44.3251349 - ], - [ - -124.1165565, - 44.325299 - ], - [ - -124.1161512, - 44.3263089 - ], - [ - -124.1161142, - 44.3264008 - ], - [ - -124.1161032, - 44.3264281 - ], - [ - -124.1160336, - 44.3265994 - ], - [ - -124.1159812, - 44.3267369 - ], - [ - -124.1158146, - 44.3271913 - ], - [ - -124.115707, - 44.3274697 - ], - [ - -124.1156584, - 44.3275892 - ], - [ - -124.1156242, - 44.3276809 - ], - [ - -124.115579, - 44.3277994 - ], - [ - -124.1149614, - 44.3293835 - ], - [ - -124.1149497, - 44.3294133 - ], - [ - -124.1146229, - 44.3302423 - ], - [ - -124.1145852, - 44.3303364 - ], - [ - -124.1142376, - 44.3311887 - ], - [ - -124.1142183, - 44.3312536 - ], - [ - -124.1140519, - 44.3316548 - ], - [ - -124.1139359, - 44.3320262 - ], - [ - -124.1136812, - 44.3327306 - ], - [ - -124.1136202, - 44.3328786 - ], - [ - -124.1136061, - 44.3329127 - ], - [ - -124.1132592, - 44.3337448 - ], - [ - -124.1131027, - 44.3341318 - ], - [ - -124.1131003, - 44.3341377 - ], - [ - -124.1130349, - 44.3343737 - ], - [ - -124.1129535, - 44.3347607 - ], - [ - -124.1128695, - 44.3351191 - ], - [ - -124.1127381, - 44.3356275 - ], - [ - -124.1125761, - 44.3363051 - ], - [ - -124.1117773, - 44.3399456 - ], - [ - -124.1115533, - 44.341014 - ], - [ - -124.1115449, - 44.3410533 - ], - [ - -124.1112364, - 44.3424887 - ], - [ - -124.1110386, - 44.3434099 - ], - [ - -124.1107896, - 44.3446237 - ], - [ - -124.1106784, - 44.3451988 - ], - [ - -124.1106179, - 44.3454838 - ], - [ - -124.1101728, - 44.3474097 - ], - [ - -124.109914, - 44.3486355 - ], - [ - -124.1098628, - 44.3488619 - ], - [ - -124.1097769, - 44.3492179 - ], - [ - -124.1097462, - 44.349341 - ], - [ - -124.10969, - 44.3495587 - ], - [ - -124.1093814, - 44.3510941 - ], - [ - -124.1093533, - 44.3512279 - ], - [ - -124.1092372, - 44.3517588 - ], - [ - -124.1090343, - 44.3527567 - ], - [ - -124.1089937, - 44.3529446 - ], - [ - -124.1089857, - 44.3529796 - ], - [ - -124.1082209, - 44.3550377 - ], - [ - -124.1069112, - 44.3569492 - ], - [ - -124.1051067, - 44.3586406 - ], - [ - -124.1028769, - 44.3600469 - ], - [ - -124.1003073, - 44.3611141 - ], - [ - -124.0974969, - 44.361801 - ], - [ - -124.0945537, - 44.3620813 - ], - [ - -124.0915908, - 44.3619443 - ], - [ - -124.0887221, - 44.3613951 - ], - [ - -124.0860579, - 44.3604549 - ], - [ - -124.0837008, - 44.3591598 - ], - [ - -124.0817412, - 44.3575597 - ], - [ - -124.0802544, - 44.355716 - ], - [ - -124.0792977, - 44.3536996 - ], - [ - -124.0789076, - 44.3515881 - ], - [ - -124.0790852, - 44.3496173 - ], - [ - -124.0790665, - 44.3496153 - ], - [ - -124.0792818, - 44.3485594 - ], - [ - -124.0793064, - 44.3484431 - ], - [ - -124.0794208, - 44.347921 - ], - [ - -124.0797598, - 44.346239 - ], - [ - -124.0798577, - 44.345813 - ], - [ - -124.0799529, - 44.3454445 - ], - [ - -124.0799968, - 44.3452632 - ], - [ - -124.0802481, - 44.3440756 - ], - [ - -124.0802814, - 44.3439252 - ], - [ - -124.080712, - 44.3420664 - ], - [ - -124.0808045, - 44.3415892 - ], - [ - -124.0808224, - 44.3414995 - ], - [ - -124.0810887, - 44.3402045 - ], - [ - -124.081104, - 44.3401319 - ], - [ - -124.0813103, - 44.3391739 - ], - [ - -124.0816156, - 44.3377564 - ], - [ - -124.0818438, - 44.3366711 - ], - [ - -124.0818595, - 44.3365978 - ], - [ - -124.0826845, - 44.3328469 - ], - [ - -124.0827184, - 44.3326992 - ], - [ - -124.0829156, - 44.3318762 - ], - [ - -124.0829513, - 44.331733 - ], - [ - -124.0830441, - 44.3313746 - ], - [ - -124.083048, - 44.3313147 - ], - [ - -124.0831861, - 44.3307187 - ], - [ - -124.0832725, - 44.3303793 - ], - [ - -124.0834787, - 44.3296363 - ], - [ - -124.0835526, - 44.3293855 - ], - [ - -124.0836387, - 44.3291095 - ], - [ - -124.0838764, - 44.3284462 - ], - [ - -124.0840296, - 44.3280683 - ], - [ - -124.0842029, - 44.3276404 - ], - [ - -124.0842382, - 44.3275544 - ], - [ - -124.0845096, - 44.3269043 - ], - [ - -124.0845454, - 44.3267899 - ], - [ - -124.0846939, - 44.3264385 - ], - [ - -124.0847499, - 44.3262505 - ], - [ - -124.085026, - 44.3254677 - ], - [ - -124.0855131, - 44.3242747 - ], - [ - -124.0858158, - 44.3235078 - ], - [ - -124.0864053, - 44.3219979 - ], - [ - -124.0864612, - 44.3218482 - ], - [ - -124.0865524, - 44.3216144 - ], - [ - -124.086592, - 44.3215171 - ], - [ - -124.0867269, - 44.3211499 - ], - [ - -124.0867662, - 44.3210448 - ], - [ - -124.0868713, - 44.3207698 - ], - [ - -124.0869382, - 44.3206 - ], - [ - -124.0870358, - 44.3203599 - ], - [ - -124.0874727, - 44.3192729 - ], - [ - -124.0874774, - 44.3192611 - ], - [ - -124.0875985, - 44.3189611 - ], - [ - -124.0876107, - 44.3189322 - ], - [ - -124.087681, - 44.3187357 - ], - [ - -124.0878604, - 44.3182757 - ], - [ - -124.0883151, - 44.3170877 - ], - [ - -124.088368, - 44.3169531 - ], - [ - -124.088454, - 44.3167391 - ], - [ - -124.0884714, - 44.3166961 - ], - [ - -124.0886619, - 44.3162298 - ], - [ - -124.0888899, - 44.3156388 - ], - [ - -124.0889037, - 44.3156033 - ], - [ - -124.0891684, - 44.3149264 - ], - [ - -124.0896742, - 44.313619 - ], - [ - -124.0896777, - 44.3135851 - ], - [ - -124.0901765, - 44.311502 - ], - [ - -124.0903406, - 44.3111938 - ], - [ - -124.0903305, - 44.3109574 - ], - [ - -124.0908205, - 44.3088566 - ], - [ - -124.0918717, - 44.3068648 - ], - [ - -124.0934438, - 44.3050586 - ], - [ - -124.0954763, - 44.3035072 - ], - [ - -124.0978911, - 44.3022703 - ], - [ - -124.1005955, - 44.3013955 - ], - [ - -124.1034855, - 44.3009163 - ], - [ - -124.1064501, - 44.3008511 - ], - [ - -124.1073662, - 44.3008956 - ], - [ - -124.1102258, - 44.3012343 - ], - [ - -124.112943, - 44.3019583 - ], - [ - -124.1147594, - 44.3027528 - ], - [ - -124.1148198, - 44.3027697 - ], - [ - -124.1152793, - 44.3029802 - ], - [ - -124.1154182, - 44.3030409 - ], - [ - -124.1154329, - 44.3030505 - ], - [ - -124.1173208, - 44.3039154 - ], - [ - -124.1194625, - 44.3053894 - ], - [ - -124.1211626, - 44.3071352 - ], - [ - -124.1223558, - 44.3090855 - ], - [ - -124.1229962, - 44.3111656 - ], - [ - -124.1230281, - 44.3122493 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15954_s_2456757", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.1014271, - 44.3940125 - ], - [ - -124.1014089, - 44.3942373 - ], - [ - -124.1014003, - 44.3944832 - ], - [ - -124.1013789, - 44.3948491 - ], - [ - -124.1013089, - 44.3957025 - ], - [ - -124.1012445, - 44.3969531 - ], - [ - -124.1012128, - 44.397577 - ], - [ - -124.1012048, - 44.3977337 - ], - [ - -124.1011816, - 44.3981843 - ], - [ - -124.1011777, - 44.3982543 - ], - [ - -124.1011687, - 44.3984023 - ], - [ - -124.1010808, - 44.3998386 - ], - [ - -124.1010489, - 44.400212 - ], - [ - -124.1010049, - 44.4006145 - ], - [ - -124.100913, - 44.4019318 - ], - [ - -124.1008827, - 44.4022636 - ], - [ - -124.1008302, - 44.4027301 - ], - [ - -124.1008293, - 44.4027386 - ], - [ - -124.1008113, - 44.4028948 - ], - [ - -124.1007514, - 44.4033728 - ], - [ - -124.1007195, - 44.4036008 - ], - [ - -124.1005997, - 44.4043738 - ], - [ - -124.1005802, - 44.4044932 - ], - [ - -124.1004454, - 44.4052832 - ], - [ - -124.100416, - 44.4054454 - ], - [ - -124.1000664, - 44.4072665 - ], - [ - -124.0999824, - 44.4077445 - ], - [ - -124.0999488, - 44.4079237 - ], - [ - -124.0997923, - 44.4087088 - ], - [ - -124.099659, - 44.4095065 - ], - [ - -124.0996447, - 44.4095895 - ], - [ - -124.0995299, - 44.4102345 - ], - [ - -124.0994855, - 44.4104643 - ], - [ - -124.099051, - 44.412549 - ], - [ - -124.0990105, - 44.4128302 - ], - [ - -124.0987502, - 44.4140044 - ], - [ - -124.0985054, - 44.4148184 - ], - [ - -124.0979547, - 44.4161993 - ], - [ - -124.0977028, - 44.4167023 - ], - [ - -124.0972438, - 44.4175143 - ], - [ - -124.0971003, - 44.4177414 - ], - [ - -124.0969707, - 44.4179796 - ], - [ - -124.0967263, - 44.4184024 - ], - [ - -124.0966233, - 44.4185704 - ], - [ - -124.0950782, - 44.4205175 - ], - [ - -124.0947254, - 44.4208713 - ], - [ - -124.0943527, - 44.4212461 - ], - [ - -124.0940281, - 44.4215603 - ], - [ - -124.0935992, - 44.4219603 - ], - [ - -124.0934046, - 44.4221416 - ], - [ - -124.0933622, - 44.4221182 - ], - [ - -124.0923424, - 44.4230696 - ], - [ - -124.0901059, - 44.4244735 - ], - [ - -124.0875299, - 44.4255375 - ], - [ - -124.0847136, - 44.4262208 - ], - [ - -124.0836607, - 44.4263194 - ], - [ - -124.0816584, - 44.4267022 - ], - [ - -124.0785191, - 44.4268214 - ], - [ - -124.0783637, - 44.4268157 - ], - [ - -124.0770918, - 44.4269718 - ], - [ - -124.0741204, - 44.4269147 - ], - [ - -124.0712218, - 44.4264433 - ], - [ - -124.0685072, - 44.4255757 - ], - [ - -124.0660811, - 44.4243452 - ], - [ - -124.0640368, - 44.4227991 - ], - [ - -124.0624527, - 44.4209968 - ], - [ - -124.0613897, - 44.4190077 - ], - [ - -124.0608887, - 44.4169082 - ], - [ - -124.0609688, - 44.4147789 - ], - [ - -124.0616269, - 44.4127018 - ], - [ - -124.0628376, - 44.4107566 - ], - [ - -124.0645544, - 44.4090181 - ], - [ - -124.0667113, - 44.407553 - ], - [ - -124.0674542, - 44.4072175 - ], - [ - -124.0676466, - 44.4071181 - ], - [ - -124.0678293, - 44.4070481 - ], - [ - -124.0692253, - 44.4064176 - ], - [ - -124.0696636, - 44.4062973 - ], - [ - -124.0697138, - 44.4059975 - ], - [ - -124.0697587, - 44.4057533 - ], - [ - -124.0699221, - 44.4049358 - ], - [ - -124.0700014, - 44.4044855 - ], - [ - -124.0700242, - 44.4043616 - ], - [ - -124.0703711, - 44.4025596 - ], - [ - -124.0704822, - 44.4019105 - ], - [ - -124.0705745, - 44.4013168 - ], - [ - -124.0706184, - 44.4009635 - ], - [ - -124.070651, - 44.4006762 - ], - [ - -124.0707427, - 44.3993712 - ], - [ - -124.0707703, - 44.399064 - ], - [ - -124.0708109, - 44.3986957 - ], - [ - -124.0708907, - 44.3973967 - ], - [ - -124.0708927, - 44.3973655 - ], - [ - -124.0708953, - 44.3973256 - ], - [ - -124.0709155, - 44.396937 - ], - [ - -124.0709234, - 44.3967833 - ], - [ - -124.0709556, - 44.3961557 - ], - [ - -124.0710272, - 44.3947781 - ], - [ - -124.0710432, - 44.3945409 - ], - [ - -124.0711083, - 44.3937517 - ], - [ - -124.0711169, - 44.3935088 - ], - [ - -124.071138, - 44.3931489 - ], - [ - -124.0711607, - 44.3928716 - ], - [ - -124.0711805, - 44.3924404 - ], - [ - -124.071246, - 44.3917265 - ], - [ - -124.0712891, - 44.3914145 - ], - [ - -124.0715879, - 44.3900906 - ], - [ - -124.071673, - 44.3898206 - ], - [ - -124.0719737, - 44.3890123 - ], - [ - -124.0722498, - 44.3883704 - ], - [ - -124.0733993, - 44.3864063 - ], - [ - -124.0750609, - 44.3846408 - ], - [ - -124.0771709, - 44.3831416 - ], - [ - -124.079648, - 44.3819664 - ], - [ - -124.0823971, - 44.3811602 - ], - [ - -124.0853127, - 44.3807541 - ], - [ - -124.0882827, - 44.3807637 - ], - [ - -124.0911931, - 44.3811885 - ], - [ - -124.093932, - 44.3820124 - ], - [ - -124.0963943, - 44.3832035 - ], - [ - -124.0984854, - 44.3847162 - ], - [ - -124.1001248, - 44.3864923 - ], - [ - -124.1012497, - 44.3884637 - ], - [ - -124.1018166, - 44.3905545 - ], - [ - -124.1018038, - 44.3926845 - ], - [ - -124.1014271, - 44.3940125 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15958_s_15947", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0606105, - 44.4186654 - ], - [ - -124.0631002, - 44.4188587 - ], - [ - -124.0659357, - 44.4194968 - ], - [ - -124.0685431, - 44.420519 - ], - [ - -124.0708223, - 44.4218861 - ], - [ - -124.0726856, - 44.4235455 - ], - [ - -124.0740615, - 44.4254336 - ], - [ - -124.074897, - 44.4274777 - ], - [ - -124.07516, - 44.4295994 - ], - [ - -124.0751545, - 44.4300048 - ], - [ - -124.075162, - 44.4303315 - ], - [ - -124.0749118, - 44.4324839 - ], - [ - -124.0740722, - 44.4345583 - ], - [ - -124.0726766, - 44.4364727 - ], - [ - -124.0707799, - 44.4381514 - ], - [ - -124.0684571, - 44.4395282 - ], - [ - -124.0658, - 44.4405485 - ], - [ - -124.0629136, - 44.4411721 - ], - [ - -124.0620201, - 44.4412323 - ], - [ - -124.0615644, - 44.4413697 - ], - [ - -124.0609553, - 44.4415268 - ], - [ - -124.0578726, - 44.4420686 - ], - [ - -124.0574125, - 44.4421136 - ], - [ - -124.054895, - 44.4422083 - ], - [ - -124.0523903, - 44.442003 - ], - [ - -124.0518592, - 44.4419269 - ], - [ - -124.0493792, - 44.4413828 - ], - [ - -124.0492809, - 44.4413793 - ], - [ - -124.0462449, - 44.4410491 - ], - [ - -124.0459088, - 44.4409871 - ], - [ - -124.0437857, - 44.4404728 - ], - [ - -124.0417917, - 44.4397399 - ], - [ - -124.0411146, - 44.4394439 - ], - [ - -124.0380488, - 44.4376744 - ], - [ - -124.0376968, - 44.4374104 - ], - [ - -124.036392, - 44.4362897 - ], - [ - -124.0361691, - 44.4360697 - ], - [ - -124.0345755, - 44.4340872 - ], - [ - -124.0343825, - 44.4337752 - ], - [ - -124.0339758, - 44.4330476 - ], - [ - -124.0336709, - 44.4324396 - ], - [ - -124.0335501, - 44.4321891 - ], - [ - -124.0334421, - 44.4319561 - ], - [ - -124.0327131, - 44.4303775 - ], - [ - -124.0324011, - 44.4296078 - ], - [ - -124.0322982, - 44.4293138 - ], - [ - -124.0320333, - 44.4283884 - ], - [ - -124.032004, - 44.4282575 - ], - [ - -124.0319832, - 44.4281658 - ], - [ - -124.0319127, - 44.427875 - ], - [ - -124.0317825, - 44.4271637 - ], - [ - -124.0316151, - 44.427032 - ], - [ - -124.0315913, - 44.4270133 - ], - [ - -124.0315825, - 44.4270064 - ], - [ - -124.0315649, - 44.4269935 - ], - [ - -124.0313149, - 44.4268518 - ], - [ - -124.0311561, - 44.4267606 - ], - [ - -124.0309724, - 44.4266536 - ], - [ - -124.0305965, - 44.4264354 - ], - [ - -124.0304614, - 44.4263573 - ], - [ - -124.0303534, - 44.4262954 - ], - [ - -124.0301985, - 44.4262274 - ], - [ - -124.028093, - 44.4251123 - ], - [ - -124.0279882, - 44.4250461 - ], - [ - -124.0259628, - 44.4234872 - ], - [ - -124.0244008, - 44.421675 - ], - [ - -124.0233622, - 44.4196793 - ], - [ - -124.0228869, - 44.4175767 - ], - [ - -124.022993, - 44.415448 - ], - [ - -124.0236765, - 44.4133751 - ], - [ - -124.024911, - 44.4114376 - ], - [ - -124.0266491, - 44.4097099 - ], - [ - -124.0288238, - 44.4082584 - ], - [ - -124.0313517, - 44.4071389 - ], - [ - -124.0341357, - 44.4063943 - ], - [ - -124.0360829, - 44.406168 - ], - [ - -124.0364467, - 44.4061108 - ], - [ - -124.0365917, - 44.4061088 - ], - [ - -124.0370687, - 44.4060534 - ], - [ - -124.0383098, - 44.406085 - ], - [ - -124.0394182, - 44.4060696 - ], - [ - -124.0398426, - 44.4061241 - ], - [ - -124.0400382, - 44.4061291 - ], - [ - -124.0405281, - 44.406212 - ], - [ - -124.0423438, - 44.4064448 - ], - [ - -124.0451111, - 44.407222 - ], - [ - -124.0476138, - 44.4083712 - ], - [ - -124.0484635, - 44.4088517 - ], - [ - -124.0485024, - 44.4088738 - ], - [ - -124.0486394, - 44.4089518 - ], - [ - -124.04867, - 44.4089693 - ], - [ - -124.0489662, - 44.4091388 - ], - [ - -124.0491914, - 44.4092673 - ], - [ - -124.0492116, - 44.4092789 - ], - [ - -124.0494176, - 44.4093969 - ], - [ - -124.04947, - 44.409427 - ], - [ - -124.049643, - 44.409527 - ], - [ - -124.0496666, - 44.4095407 - ], - [ - -124.0500198, - 44.4097457 - ], - [ - -124.0506187, - 44.4100879 - ], - [ - -124.050755, - 44.4101666 - ], - [ - -124.051184, - 44.4104176 - ], - [ - -124.0520048, - 44.4109342 - ], - [ - -124.0525028, - 44.4112712 - ], - [ - -124.0528931, - 44.4115449 - ], - [ - -124.0533991, - 44.4119129 - ], - [ - -124.0538289, - 44.4122386 - ], - [ - -124.054036, - 44.4124022 - ], - [ - -124.0544172, - 44.4127019 - ], - [ - -124.0546415, - 44.4128822 - ], - [ - -124.0554686, - 44.4135622 - ], - [ - -124.0554996, - 44.4135878 - ], - [ - -124.0557132, - 44.4137645 - ], - [ - -124.0558343, - 44.4138641 - ], - [ - -124.0559823, - 44.413982 - ], - [ - -124.056144, - 44.4141129 - ], - [ - -124.0564721, - 44.4143828 - ], - [ - -124.0565335, - 44.414432 - ], - [ - -124.0568482, - 44.4146711 - ], - [ - -124.0571334, - 44.414894 - ], - [ - -124.0571806, - 44.4149319 - ], - [ - -124.0572767, - 44.4150057 - ], - [ - -124.0575738, - 44.4152404 - ], - [ - -124.0578208, - 44.4154413 - ], - [ - -124.05947, - 44.4170636 - ], - [ - -124.059745, - 44.4173946 - ], - [ - -124.0606105, - 44.4186654 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15962_s_15944", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0900701, - 44.4396804 - ], - [ - -124.0903058, - 44.4409235 - ], - [ - -124.0901236, - 44.4430495 - ], - [ - -124.0900778, - 44.4432537 - ], - [ - -124.0893347, - 44.445285 - ], - [ - -124.08806, - 44.447176 - ], - [ - -124.0863013, - 44.448856 - ], - [ - -124.0841241, - 44.4502622 - ], - [ - -124.0816099, - 44.4513421 - ], - [ - -124.0788525, - 44.4520554 - ], - [ - -124.075955, - 44.4523753 - ], - [ - -124.075483, - 44.4523943 - ], - [ - -124.0726059, - 44.452314 - ], - [ - -124.0698019, - 44.4518458 - ], - [ - -124.0671719, - 44.4510063 - ], - [ - -124.0648109, - 44.449826 - ], - [ - -124.0628039, - 44.4483474 - ], - [ - -124.0612231, - 44.4466237 - ], - [ - -124.0601256, - 44.4447171 - ], - [ - -124.0595507, - 44.4426962 - ], - [ - -124.0595193, - 44.440634 - ], - [ - -124.0596399, - 44.4396093 - ], - [ - -124.0591992, - 44.4392017 - ], - [ - -124.0564695, - 44.4366748 - ], - [ - -124.0558935, - 44.4361043 - ], - [ - -124.0555496, - 44.4357393 - ], - [ - -124.0550749, - 44.4352023 - ], - [ - -124.054892, - 44.4349813 - ], - [ - -124.0537143, - 44.4342173 - ], - [ - -124.0519422, - 44.4325072 - ], - [ - -124.0506699, - 44.4305821 - ], - [ - -124.0499462, - 44.4285162 - ], - [ - -124.0497988, - 44.4263888 - ], - [ - -124.0502335, - 44.4242817 - ], - [ - -124.0512334, - 44.4222759 - ], - [ - -124.0527601, - 44.4204483 - ], - [ - -124.0547548, - 44.4188693 - ], - [ - -124.0571409, - 44.4175995 - ], - [ - -124.0598267, - 44.4166877 - ], - [ - -124.062709, - 44.4161688 - ], - [ - -124.0656771, - 44.4160629 - ], - [ - -124.0679342, - 44.4161412 - ], - [ - -124.070823, - 44.4164431 - ], - [ - -124.0735775, - 44.4171362 - ], - [ - -124.0760956, - 44.4181948 - ], - [ - -124.0782841, - 44.4195797 - ], - [ - -124.0800618, - 44.4212394 - ], - [ - -124.0813626, - 44.4231126 - ], - [ - -124.082022, - 44.4248268 - ], - [ - -124.083174, - 44.4258929 - ], - [ - -124.0857592, - 44.4282828 - ], - [ - -124.0859265, - 44.4284403 - ], - [ - -124.0860568, - 44.4285654 - ], - [ - -124.0861265, - 44.4286302 - ], - [ - -124.0866223, - 44.4291185 - ], - [ - -124.0868453, - 44.4293514 - ], - [ - -124.0878954, - 44.4306267 - ], - [ - -124.0881354, - 44.4309697 - ], - [ - -124.0887532, - 44.4319764 - ], - [ - -124.0889683, - 44.4323814 - ], - [ - -124.0894122, - 44.4333521 - ], - [ - -124.0895653, - 44.4337491 - ], - [ - -124.0899409, - 44.4350108 - ], - [ - -124.0900451, - 44.4355018 - ], - [ - -124.0902171, - 44.437132 - ], - [ - -124.0902173, - 44.437641 - ], - [ - -124.0902103, - 44.4379733 - ], - [ - -124.0901934, - 44.4383713 - ], - [ - -124.0901673, - 44.4387582 - ], - [ - -124.0901623, - 44.4388122 - ], - [ - -124.090157, - 44.4388674 - ], - [ - -124.0901191, - 44.4392484 - ], - [ - -124.0901055, - 44.4393746 - ], - [ - -124.0900701, - 44.4396804 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15962_s_15969", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0902634, - 44.4419205 - ], - [ - -124.0902525, - 44.4420662 - ], - [ - -124.0902429, - 44.4421805 - ], - [ - -124.0897294, - 44.4444037 - ], - [ - -124.0894389, - 44.4449375 - ], - [ - -124.0894163, - 44.4451205 - ], - [ - -124.0893058, - 44.4462297 - ], - [ - -124.0893011, - 44.446275 - ], - [ - -124.0890848, - 44.4483249 - ], - [ - -124.0889914, - 44.4493578 - ], - [ - -124.0889494, - 44.4497249 - ], - [ - -124.0887231, - 44.4513631 - ], - [ - -124.0887249, - 44.4513774 - ], - [ - -124.0887388, - 44.4514853 - ], - [ - -124.0894656, - 44.4534288 - ], - [ - -124.0895035, - 44.4535323 - ], - [ - -124.0897282, - 44.4541578 - ], - [ - -124.0899217, - 44.4546423 - ], - [ - -124.0899574, - 44.4547333 - ], - [ - -124.0902486, - 44.4554872 - ], - [ - -124.0903112, - 44.4556547 - ], - [ - -124.0908616, - 44.4571736 - ], - [ - -124.090869, - 44.4571942 - ], - [ - -124.0912097, - 44.458142 - ], - [ - -124.091875, - 44.4599471 - ], - [ - -124.0924331, - 44.4614051 - ], - [ - -124.0929344, - 44.4635046 - ], - [ - -124.0928543, - 44.4656338 - ], - [ - -124.0921955, - 44.4677109 - ], - [ - -124.0909835, - 44.4696561 - ], - [ - -124.0892648, - 44.4713945 - ], - [ - -124.0871053, - 44.4728594 - ], - [ - -124.0845881, - 44.4739944 - ], - [ - -124.08181, - 44.4747559 - ], - [ - -124.0788777, - 44.4751147 - ], - [ - -124.075904, - 44.4750569 - ], - [ - -124.0730032, - 44.4745847 - ], - [ - -124.0702868, - 44.4737163 - ], - [ - -124.0678594, - 44.4724852 - ], - [ - -124.0658142, - 44.4709385 - ], - [ - -124.0642297, - 44.4691358 - ], - [ - -124.0631669, - 44.4671465 - ], - [ - -124.0625905, - 44.4656387 - ], - [ - -124.0625533, - 44.4655393 - ], - [ - -124.0618587, - 44.4636522 - ], - [ - -124.0618354, - 44.463588 - ], - [ - -124.0614873, - 44.4626182 - ], - [ - -124.0609717, - 44.4611934 - ], - [ - -124.0607307, - 44.4605684 - ], - [ - -124.0605, - 44.4599898 - ], - [ - -124.0603939, - 44.4597099 - ], - [ - -124.0601377, - 44.4589957 - ], - [ - -124.0593425, - 44.4568662 - ], - [ - -124.0592022, - 44.4564593 - ], - [ - -124.0590394, - 44.4559443 - ], - [ - -124.0589089, - 44.4554864 - ], - [ - -124.0587801, - 44.4549784 - ], - [ - -124.0585995, - 44.4540317 - ], - [ - -124.0585137, - 44.4533637 - ], - [ - -124.0585114, - 44.4533455 - ], - [ - -124.0584425, - 44.4527995 - ], - [ - -124.0583818, - 44.4519355 - ], - [ - -124.058374, - 44.4513965 - ], - [ - -124.0583853, - 44.450849 - ], - [ - -124.0584194, - 44.450237 - ], - [ - -124.0584816, - 44.4495971 - ], - [ - -124.0587357, - 44.4477644 - ], - [ - -124.0588182, - 44.4468572 - ], - [ - -124.0588297, - 44.4467409 - ], - [ - -124.0590508, - 44.4446556 - ], - [ - -124.0591689, - 44.4434773 - ], - [ - -124.0591894, - 44.4432938 - ], - [ - -124.0595251, - 44.4405858 - ], - [ - -124.0601091, - 44.4384157 - ], - [ - -124.0612938, - 44.4363752 - ], - [ - -124.0630302, - 44.4345486 - ], - [ - -124.0652464, - 44.4330115 - ], - [ - -124.0662883, - 44.4325378 - ], - [ - -124.0672956, - 44.432 - ], - [ - -124.0699801, - 44.4310852 - ], - [ - -124.072862, - 44.4305631 - ], - [ - -124.0758306, - 44.4304539 - ], - [ - -124.078772, - 44.4307616 - ], - [ - -124.0815731, - 44.4314746 - ], - [ - -124.0841264, - 44.4325654 - ], - [ - -124.0863337, - 44.433992 - ], - [ - -124.0881103, - 44.4356998 - ], - [ - -124.0893878, - 44.4376231 - ], - [ - -124.0901172, - 44.439688 - ], - [ - -124.0902702, - 44.4418152 - ], - [ - -124.0902634, - 44.4419205 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15965_s_16047", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0870704, - 44.5544226 - ], - [ - -124.0870406, - 44.5546182 - ], - [ - -124.0867411, - 44.5564333 - ], - [ - -124.086681, - 44.5567557 - ], - [ - -124.0865761, - 44.5572607 - ], - [ - -124.0865633, - 44.5573215 - ], - [ - -124.0864474, - 44.5578585 - ], - [ - -124.0864185, - 44.5579874 - ], - [ - -124.0863246, - 44.5583904 - ], - [ - -124.0862913, - 44.5585279 - ], - [ - -124.0852283, - 44.562754 - ], - [ - -124.0851836, - 44.5629242 - ], - [ - -124.0849212, - 44.5638797 - ], - [ - -124.0844739, - 44.5657686 - ], - [ - -124.084447, - 44.5658787 - ], - [ - -124.0841503, - 44.5670578 - ], - [ - -124.0841328, - 44.567126 - ], - [ - -124.0839907, - 44.5676704 - ], - [ - -124.0835472, - 44.5695316 - ], - [ - -124.0835026, - 44.5697098 - ], - [ - -124.0833727, - 44.5702048 - ], - [ - -124.0833436, - 44.5703128 - ], - [ - -124.0831481, - 44.5710186 - ], - [ - -124.0829914, - 44.5715884 - ], - [ - -124.0829552, - 44.5717162 - ], - [ - -124.0828764, - 44.5719858 - ], - [ - -124.0825871, - 44.5731336 - ], - [ - -124.0825753, - 44.57318 - ], - [ - -124.0823275, - 44.574139 - ], - [ - -124.0820139, - 44.575104 - ], - [ - -124.0817011, - 44.5759 - ], - [ - -124.0816763, - 44.5759625 - ], - [ - -124.0813638, - 44.5767399 - ], - [ - -124.0810984, - 44.5774076 - ], - [ - -124.0810847, - 44.5780074 - ], - [ - -124.0810746, - 44.5782628 - ], - [ - -124.0810488, - 44.5787268 - ], - [ - -124.0810255, - 44.5790341 - ], - [ - -124.0810006, - 44.5792951 - ], - [ - -124.0808945, - 44.5800335 - ], - [ - -124.0808386, - 44.5803245 - ], - [ - -124.0807815, - 44.5805958 - ], - [ - -124.0807016, - 44.5809458 - ], - [ - -124.0806101, - 44.5813079 - ], - [ - -124.0805522, - 44.5815169 - ], - [ - -124.0804505, - 44.5818553 - ], - [ - -124.0803445, - 44.5821823 - ], - [ - -124.0802193, - 44.582541 - ], - [ - -124.0799606, - 44.5832318 - ], - [ - -124.0799467, - 44.5833027 - ], - [ - -124.0799305, - 44.5833997 - ], - [ - -124.0798505, - 44.5840329 - ], - [ - -124.0798487, - 44.5840468 - ], - [ - -124.0795004, - 44.5867649 - ], - [ - -124.0794802, - 44.5869114 - ], - [ - -124.0793836, - 44.5875672 - ], - [ - -124.0794755, - 44.5879759 - ], - [ - -124.0795025, - 44.5881209 - ], - [ - -124.0795896, - 44.5887102 - ], - [ - -124.0796127, - 44.5889212 - ], - [ - -124.0796548, - 44.5895178 - ], - [ - -124.0796599, - 44.5896748 - ], - [ - -124.0796638, - 44.5899522 - ], - [ - -124.0796629, - 44.5902092 - ], - [ - -124.0795813, - 44.5913051 - ], - [ - -124.0795534, - 44.5914972 - ], - [ - -124.0794128, - 44.5922235 - ], - [ - -124.0793589, - 44.5924466 - ], - [ - -124.0791563, - 44.5931461 - ], - [ - -124.0790863, - 44.5933531 - ], - [ - -124.0790564, - 44.5933479 - ], - [ - -124.0782524, - 44.5951807 - ], - [ - -124.0780794, - 44.5954688 - ], - [ - -124.0776477, - 44.5961262 - ], - [ - -124.0771937, - 44.5967614 - ], - [ - -124.0770955, - 44.596917 - ], - [ - -124.0769871, - 44.5970849 - ], - [ - -124.0767482, - 44.597447 - ], - [ - -124.0763005, - 44.598125 - ], - [ - -124.0759442, - 44.5986865 - ], - [ - -124.0756524, - 44.5991468 - ], - [ - -124.0755558, - 44.5992962 - ], - [ - -124.0745061, - 44.6008873 - ], - [ - -124.074499, - 44.6008981 - ], - [ - -124.0734317, - 44.6025112 - ], - [ - -124.0730392, - 44.6031229 - ], - [ - -124.0729967, - 44.6031886 - ], - [ - -124.0723565, - 44.6041691 - ], - [ - -124.0720542, - 44.6046393 - ], - [ - -124.0718074, - 44.6050232 - ], - [ - -124.0717683, - 44.6050835 - ], - [ - -124.0716513, - 44.6052625 - ], - [ - -124.0715013, - 44.605492 - ], - [ - -124.0711655, - 44.6060064 - ], - [ - -124.0711408, - 44.6060441 - ], - [ - -124.0706389, - 44.6068051 - ], - [ - -124.0699634, - 44.6078288 - ], - [ - -124.0684337, - 44.6096571 - ], - [ - -124.0664341, - 44.6112371 - ], - [ - -124.0640412, - 44.6125079 - ], - [ - -124.0613472, - 44.6134209 - ], - [ - -124.0584555, - 44.6139408 - ], - [ - -124.0554773, - 44.6140476 - ], - [ - -124.0525272, - 44.6137374 - ], - [ - -124.0497186, - 44.6130219 - ], - [ - -124.0471594, - 44.6119287 - ], - [ - -124.0449481, - 44.6104999 - ], - [ - -124.0431697, - 44.6087903 - ], - [ - -124.0418924, - 44.6068657 - ], - [ - -124.0411653, - 44.6048 - ], - [ - -124.0410163, - 44.6026728 - ], - [ - -124.041451, - 44.6005656 - ], - [ - -124.0424528, - 44.5985595 - ], - [ - -124.0431261, - 44.5975399 - ], - [ - -124.0436149, - 44.5967991 - ], - [ - -124.0439397, - 44.596302 - ], - [ - -124.0440929, - 44.5960677 - ], - [ - -124.0441902, - 44.5959189 - ], - [ - -124.0444178, - 44.5955652 - ], - [ - -124.0447392, - 44.5950658 - ], - [ - -124.0447762, - 44.5950087 - ], - [ - -124.045414, - 44.5940325 - ], - [ - -124.045823, - 44.5933954 - ], - [ - -124.0458989, - 44.5932791 - ], - [ - -124.0470016, - 44.5916136 - ], - [ - -124.0479992, - 44.5901026 - ], - [ - -124.0482448, - 44.5897156 - ], - [ - -124.0486521, - 44.589074 - ], - [ - -124.0487487, - 44.5889251 - ], - [ - -124.0488878, - 44.5887144 - ], - [ - -124.0488702, - 44.5883396 - ], - [ - -124.0488663, - 44.5881486 - ], - [ - -124.0489163, - 44.5870931 - ], - [ - -124.0489614, - 44.5867031 - ], - [ - -124.0489684, - 44.5866445 - ], - [ - -124.0490846, - 44.5857016 - ], - [ - -124.0491101, - 44.5855136 - ], - [ - -124.0492295, - 44.5847058 - ], - [ - -124.0495689, - 44.5820681 - ], - [ - -124.0496682, - 44.5812851 - ], - [ - -124.0497143, - 44.5809719 - ], - [ - -124.0497754, - 44.5806079 - ], - [ - -124.0498157, - 44.580387 - ], - [ - -124.0498888, - 44.580016 - ], - [ - -124.0499289, - 44.5798248 - ], - [ - -124.049991, - 44.5795458 - ], - [ - -124.0501048, - 44.5790954 - ], - [ - -124.0501819, - 44.5788234 - ], - [ - -124.0502489, - 44.5785992 - ], - [ - -124.0503299, - 44.5783412 - ], - [ - -124.0504788, - 44.577909 - ], - [ - -124.0506926, - 44.5773389 - ], - [ - -124.0507113, - 44.5765417 - ], - [ - -124.050719, - 44.5761259 - ], - [ - -124.0507981, - 44.5751548 - ], - [ - -124.0508582, - 44.5747388 - ], - [ - -124.0510542, - 44.5737922 - ], - [ - -124.0511744, - 44.5733482 - ], - [ - -124.0514266, - 44.5725702 - ], - [ - -124.0516188, - 44.5720632 - ], - [ - -124.0516702, - 44.5719309 - ], - [ - -124.0521274, - 44.5707819 - ], - [ - -124.05214, - 44.5707505 - ], - [ - -124.0524466, - 44.5699888 - ], - [ - -124.0525597, - 44.5697014 - ], - [ - -124.0526757, - 44.5692532 - ], - [ - -124.0529972, - 44.5679805 - ], - [ - -124.0530778, - 44.5676848 - ], - [ - -124.0531812, - 44.5673316 - ], - [ - -124.0533227, - 44.5668176 - ], - [ - -124.0533273, - 44.5668013 - ], - [ - -124.0535105, - 44.5661412 - ], - [ - -124.053603, - 44.5657892 - ], - [ - -124.0540462, - 44.5639335 - ], - [ - -124.0540881, - 44.563766 - ], - [ - -124.0542433, - 44.5631721 - ], - [ - -124.0545181, - 44.5620823 - ], - [ - -124.0549865, - 44.5601085 - ], - [ - -124.0550582, - 44.5598288 - ], - [ - -124.0553361, - 44.5588188 - ], - [ - -124.0563624, - 44.5547468 - ], - [ - -124.0564254, - 44.554477 - ], - [ - -124.056521, - 44.5540349 - ], - [ - -124.0565863, - 44.5537212 - ], - [ - -124.0568438, - 44.5521655 - ], - [ - -124.057471, - 44.5476823 - ], - [ - -124.0580566, - 44.5455939 - ], - [ - -124.0592005, - 44.5436273 - ], - [ - -124.0608589, - 44.5418581 - ], - [ - -124.0629679, - 44.5403542 - ], - [ - -124.0654465, - 44.5391734 - ], - [ - -124.0681995, - 44.5383611 - ], - [ - -124.0711211, - 44.5379485 - ], - [ - -124.0740991, - 44.5379513 - ], - [ - -124.0770192, - 44.5383696 - ], - [ - -124.0797691, - 44.5391872 - ], - [ - -124.0822432, - 44.5403728 - ], - [ - -124.0843465, - 44.5418807 - ], - [ - -124.0859982, - 44.5436531 - ], - [ - -124.0871347, - 44.5456219 - ], - [ - -124.0877124, - 44.5477114 - ], - [ - -124.0877089, - 44.5498413 - ], - [ - -124.0870704, - 44.5544226 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15967_s_15889", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.071036, - 44.6178 - ], - [ - -124.0710361, - 44.6178 - ], - [ - -124.0713941, - 44.6180929 - ], - [ - -124.0717, - 44.6183513 - ], - [ - -124.071895, - 44.6185212 - ], - [ - -124.0725703, - 44.619156 - ], - [ - -124.0728944, - 44.619485 - ], - [ - -124.0730262, - 44.6196211 - ], - [ - -124.0731282, - 44.619728 - ], - [ - -124.0734131, - 44.6200381 - ], - [ - -124.0736592, - 44.6203161 - ], - [ - -124.0741761, - 44.6209459 - ], - [ - -124.0742891, - 44.6210949 - ], - [ - -124.0748306, - 44.6218833 - ], - [ - -124.0749277, - 44.6220402 - ], - [ - -124.0750188, - 44.6221879 - ], - [ - -124.0751064, - 44.622329 - ], - [ - -124.0754431, - 44.6229167 - ], - [ - -124.0755571, - 44.6231337 - ], - [ - -124.075838, - 44.623718 - ], - [ - -124.075975, - 44.624032 - ], - [ - -124.0765163, - 44.6257525 - ], - [ - -124.0765523, - 44.6259355 - ], - [ - -124.0766651, - 44.6281914 - ], - [ - -124.0761226, - 44.6304153 - ], - [ - -124.0749483, - 44.6325111 - ], - [ - -124.0745476, - 44.6330545 - ], - [ - -124.0742402, - 44.6335058 - ], - [ - -124.0739801, - 44.633894 - ], - [ - -124.0739291, - 44.6339695 - ], - [ - -124.0731532, - 44.6351051 - ], - [ - -124.0731238, - 44.6351478 - ], - [ - -124.0726083, - 44.6358939 - ], - [ - -124.0706598, - 44.6380356 - ], - [ - -124.0682448, - 44.6396714 - ], - [ - -124.0670089, - 44.640915 - ], - [ - -124.0648823, - 44.6423596 - ], - [ - -124.0644343, - 44.6426099 - ], - [ - -124.0643141, - 44.6426779 - ], - [ - -124.0642343, - 44.6427228 - ], - [ - -124.0639652, - 44.642873 - ], - [ - -124.0638777, - 44.6429242 - ], - [ - -124.0638479, - 44.6428982 - ], - [ - -124.0622737, - 44.6437852 - ], - [ - -124.0596161, - 44.6447531 - ], - [ - -124.056745, - 44.6453323 - ], - [ - -124.0537708, - 44.6455003 - ], - [ - -124.0508078, - 44.6452509 - ], - [ - -124.04797, - 44.6445934 - ], - [ - -124.0453664, - 44.6435534 - ], - [ - -124.0430972, - 44.6421706 - ], - [ - -124.0412496, - 44.6404983 - ], - [ - -124.0398945, - 44.6386008 - ], - [ - -124.039084, - 44.6365509 - ], - [ - -124.0388492, - 44.6344276 - ], - [ - -124.0391991, - 44.6323124 - ], - [ - -124.0401201, - 44.6302865 - ], - [ - -124.0404955, - 44.6298076 - ], - [ - -124.040592, - 44.6295353 - ], - [ - -124.0418794, - 44.6276069 - ], - [ - -124.042316, - 44.6271896 - ], - [ - -124.0417161, - 44.626639 - ], - [ - -124.0404163, - 44.6254485 - ], - [ - -124.04027, - 44.6253123 - ], - [ - -124.040047, - 44.6251013 - ], - [ - -124.0395863, - 44.6246408 - ], - [ - -124.0393913, - 44.6244348 - ], - [ - -124.039149, - 44.6241706 - ], - [ - -124.0389421, - 44.6239375 - ], - [ - -124.0386247, - 44.6235638 - ], - [ - -124.0384097, - 44.6232988 - ], - [ - -124.0380085, - 44.6227709 - ], - [ - -124.0378215, - 44.6225079 - ], - [ - -124.037763, - 44.6224247 - ], - [ - -124.037486, - 44.6220266 - ], - [ - -124.0370026, - 44.6212583 - ], - [ - -124.0368272, - 44.6209481 - ], - [ - -124.036626, - 44.6205959 - ], - [ - -124.0362979, - 44.6199663 - ], - [ - -124.0361589, - 44.6196723 - ], - [ - -124.0358421, - 44.6189109 - ], - [ - -124.0357301, - 44.6186009 - ], - [ - -124.0355901, - 44.6181782 - ], - [ - -124.0355061, - 44.6179002 - ], - [ - -124.0354282, - 44.6176249 - ], - [ - -124.0352914, - 44.6171069 - ], - [ - -124.0351708, - 44.61658 - ], - [ - -124.0351019, - 44.616224 - ], - [ - -124.035084, - 44.6161312 - ], - [ - -124.034944, - 44.6148416 - ], - [ - -124.0349413, - 44.6147336 - ], - [ - -124.0349327, - 44.6144235 - ], - [ - -124.03493, - 44.6141416 - ], - [ - -124.0349321, - 44.6139006 - ], - [ - -124.0349322, - 44.6138881 - ], - [ - -124.0349332, - 44.6137871 - ], - [ - -124.034942, - 44.6134892 - ], - [ - -124.034955, - 44.6132202 - ], - [ - -124.0349953, - 44.6127216 - ], - [ - -124.0350164, - 44.6125356 - ], - [ - -124.03503, - 44.6124223 - ], - [ - -124.0350541, - 44.6122343 - ], - [ - -124.0351578, - 44.6116183 - ], - [ - -124.0351768, - 44.6115273 - ], - [ - -124.0359041, - 44.6094617 - ], - [ - -124.0371815, - 44.6075371 - ], - [ - -124.0389599, - 44.6058275 - ], - [ - -124.0411708, - 44.6043986 - ], - [ - -124.0437294, - 44.6033052 - ], - [ - -124.0465373, - 44.6025893 - ], - [ - -124.0494867, - 44.6022785 - ], - [ - -124.0524643, - 44.6023847 - ], - [ - -124.0553558, - 44.6029038 - ], - [ - -124.05805, - 44.6038158 - ], - [ - -124.0604435, - 44.6050857 - ], - [ - -124.0624443, - 44.6066649 - ], - [ - -124.0639755, - 44.6084924 - ], - [ - -124.0649783, - 44.6104983 - ], - [ - -124.0654141, - 44.6126054 - ], - [ - -124.0653878, - 44.6129823 - ], - [ - -124.065712, - 44.6132791 - ], - [ - -124.0657222, - 44.6132884 - ], - [ - -124.0665464, - 44.6140447 - ], - [ - -124.0672283, - 44.6146565 - ], - [ - -124.0692152, - 44.6163322 - ], - [ - -124.0697817, - 44.6168052 - ], - [ - -124.0700538, - 44.617026 - ], - [ - -124.0704556, - 44.6173337 - ], - [ - -124.0705579, - 44.6174128 - ], - [ - -124.0706859, - 44.6175128 - ], - [ - -124.071036, - 44.6178 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15969_s_15972", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0947114, - 44.4762259 - ], - [ - -124.0946583, - 44.4772197 - ], - [ - -124.0946553, - 44.4772662 - ], - [ - -124.0947129, - 44.4774188 - ], - [ - -124.0947323, - 44.4774708 - ], - [ - -124.095735, - 44.4801806 - ], - [ - -124.0957503, - 44.4802225 - ], - [ - -124.0959315, - 44.4807203 - ], - [ - -124.0960051, - 44.4809215 - ], - [ - -124.0974504, - 44.4848368 - ], - [ - -124.0976706, - 44.4855226 - ], - [ - -124.0978938, - 44.4863375 - ], - [ - -124.0979742, - 44.486656 - ], - [ - -124.0981294, - 44.487328 - ], - [ - -124.0982128, - 44.4877377 - ], - [ - -124.098329, - 44.4883957 - ], - [ - -124.0984371, - 44.4893316 - ], - [ - -124.0984722, - 44.4899726 - ], - [ - -124.0984814, - 44.490597 - ], - [ - -124.0984299, - 44.492619 - ], - [ - -124.098421, - 44.4928433 - ], - [ - -124.0982886, - 44.4952793 - ], - [ - -124.0982491, - 44.4957463 - ], - [ - -124.0981803, - 44.4963463 - ], - [ - -124.0981157, - 44.4967952 - ], - [ - -124.0979958, - 44.4974862 - ], - [ - -124.097921, - 44.4978634 - ], - [ - -124.0976943, - 44.4988784 - ], - [ - -124.097441, - 44.4997706 - ], - [ - -124.0974017, - 44.4998845 - ], - [ - -124.0970269, - 44.5010134 - ], - [ - -124.0960585, - 44.5030274 - ], - [ - -124.0945596, - 44.5048675 - ], - [ - -124.0925877, - 44.506463 - ], - [ - -124.0902187, - 44.5077524 - ], - [ - -124.0875435, - 44.5086863 - ], - [ - -124.0846651, - 44.5092287 - ], - [ - -124.0816941, - 44.5093588 - ], - [ - -124.0787447, - 44.5090716 - ], - [ - -124.0759304, - 44.508378 - ], - [ - -124.0733594, - 44.5073048 - ], - [ - -124.0711304, - 44.5058933 - ], - [ - -124.0693292, - 44.5041976 - ], - [ - -124.0680249, - 44.5022831 - ], - [ - -124.0672676, - 44.5002232 - ], - [ - -124.0670865, - 44.4980972 - ], - [ - -124.0674883, - 44.4959867 - ], - [ - -124.0678088, - 44.4950226 - ], - [ - -124.0678997, - 44.4946168 - ], - [ - -124.067948, - 44.4943387 - ], - [ - -124.0679644, - 44.4941969 - ], - [ - -124.0680791, - 44.4921068 - ], - [ - -124.068118, - 44.4906088 - ], - [ - -124.0680596, - 44.4903557 - ], - [ - -124.0679747, - 44.490045 - ], - [ - -124.0666521, - 44.4864572 - ], - [ - -124.0666429, - 44.4864321 - ], - [ - -124.0665629, - 44.4862131 - ], - [ - -124.0663839, - 44.4857206 - ], - [ - -124.0653998, - 44.4830574 - ], - [ - -124.0649449, - 44.4818503 - ], - [ - -124.0648329, - 44.4815343 - ], - [ - -124.0647, - 44.4811343 - ], - [ - -124.0643932, - 44.4798965 - ], - [ - -124.0643462, - 44.4796125 - ], - [ - -124.0642474, - 44.4786479 - ], - [ - -124.0642345, - 44.4783259 - ], - [ - -124.0642499, - 44.4774342 - ], - [ - -124.0643342, - 44.4763042 - ], - [ - -124.0643841, - 44.4753793 - ], - [ - -124.0643947, - 44.4751879 - ], - [ - -124.0644237, - 44.4748203 - ], - [ - -124.0645297, - 44.4737881 - ], - [ - -124.0645647, - 44.4730723 - ], - [ - -124.0645736, - 44.4729215 - ], - [ - -124.0646168, - 44.4722905 - ], - [ - -124.0646516, - 44.4719147 - ], - [ - -124.0646609, - 44.4718354 - ], - [ - -124.0646581, - 44.471695 - ], - [ - -124.0646391, - 44.4713498 - ], - [ - -124.0645628, - 44.4709713 - ], - [ - -124.0638711, - 44.4690977 - ], - [ - -124.0638364, - 44.4690019 - ], - [ - -124.0634995, - 44.4680543 - ], - [ - -124.0633031, - 44.4675092 - ], - [ - -124.0631567, - 44.4671226 - ], - [ - -124.0626631, - 44.4650221 - ], - [ - -124.0627512, - 44.4628931 - ], - [ - -124.0634176, - 44.4608172 - ], - [ - -124.0646366, - 44.4588744 - ], - [ - -124.0663614, - 44.4571392 - ], - [ - -124.0685255, - 44.4556782 - ], - [ - -124.0710459, - 44.4545477 - ], - [ - -124.0738256, - 44.4537911 - ], - [ - -124.0767581, - 44.4534373 - ], - [ - -124.0797305, - 44.4535 - ], - [ - -124.0826288, - 44.4539768 - ], - [ - -124.0853415, - 44.4548494 - ], - [ - -124.0877646, - 44.4560842 - ], - [ - -124.0898049, - 44.4576338 - ], - [ - -124.091384, - 44.4594388 - ], - [ - -124.0924412, - 44.4614296 - ], - [ - -124.0926127, - 44.4618816 - ], - [ - -124.0926611, - 44.4620125 - ], - [ - -124.0928872, - 44.4626394 - ], - [ - -124.092899, - 44.4626723 - ], - [ - -124.0932252, - 44.4635883 - ], - [ - -124.094126, - 44.4660253 - ], - [ - -124.0944777, - 44.4672637 - ], - [ - -124.0945943, - 44.4678462 - ], - [ - -124.094695, - 44.4683437 - ], - [ - -124.0947243, - 44.4684963 - ], - [ - -124.0948204, - 44.4690242 - ], - [ - -124.0949357, - 44.4699969 - ], - [ - -124.09499, - 44.4709729 - ], - [ - -124.0950004, - 44.4712493 - ], - [ - -124.0950106, - 44.4717552 - ], - [ - -124.0950102, - 44.4720858 - ], - [ - -124.0950003, - 44.4725258 - ], - [ - -124.0949497, - 44.4732543 - ], - [ - -124.0949167, - 44.4735376 - ], - [ - -124.0948918, - 44.4739051 - ], - [ - -124.0948507, - 44.4747536 - ], - [ - -124.0948193, - 44.4751696 - ], - [ - -124.0947114, - 44.4762259 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15970_s_15944", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0823439, - 44.4277449 - ], - [ - -124.0823578, - 44.4277462 - ], - [ - -124.0822252, - 44.428449 - ], - [ - -124.0815902, - 44.4304158 - ], - [ - -124.0804582, - 44.4322644 - ], - [ - -124.0788685, - 44.4339311 - ], - [ - -124.0768758, - 44.4353583 - ], - [ - -124.0745489, - 44.4364967 - ], - [ - -124.0719682, - 44.4373069 - ], - [ - -124.0692227, - 44.437761 - ], - [ - -124.0664074, - 44.4378434 - ], - [ - -124.0641343, - 44.4377582 - ], - [ - -124.061195, - 44.4374389 - ], - [ - -124.0583992, - 44.4367148 - ], - [ - -124.0558543, - 44.4356138 - ], - [ - -124.0536582, - 44.4341782 - ], - [ - -124.0518953, - 44.4324631 - ], - [ - -124.0506334, - 44.4305346 - ], - [ - -124.0499208, - 44.4284667 - ], - [ - -124.0497849, - 44.4263389 - ], - [ - -124.050231, - 44.424233 - ], - [ - -124.0512417, - 44.4222299 - ], - [ - -124.0527781, - 44.4204066 - ], - [ - -124.0547813, - 44.4188332 - ], - [ - -124.0571742, - 44.4175699 - ], - [ - -124.0587166, - 44.4170515 - ], - [ - -124.0593726, - 44.4166859 - ], - [ - -124.0620293, - 44.4157313 - ], - [ - -124.0648948, - 44.4151666 - ], - [ - -124.0678588, - 44.4150132 - ], - [ - -124.0708077, - 44.4152772 - ], - [ - -124.0736281, - 44.4159484 - ], - [ - -124.0762117, - 44.4170011 - ], - [ - -124.0784592, - 44.4183947 - ], - [ - -124.0802843, - 44.4200757 - ], - [ - -124.0816169, - 44.4219796 - ], - [ - -124.0824056, - 44.4240332 - ], - [ - -124.0826202, - 44.4261577 - ], - [ - -124.0823439, - 44.4277449 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_15972_s_15965", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0967738, - 44.5017734 - ], - [ - -124.096734, - 44.5019048 - ], - [ - -124.0966548, - 44.5022315 - ], - [ - -124.0965367, - 44.5027749 - ], - [ - -124.0959805, - 44.5054451 - ], - [ - -124.0956642, - 44.5069733 - ], - [ - -124.0955443, - 44.5076303 - ], - [ - -124.0954893, - 44.5079045 - ], - [ - -124.0950778, - 44.5097855 - ], - [ - -124.0950723, - 44.5098107 - ], - [ - -124.0949354, - 44.5104267 - ], - [ - -124.0948831, - 44.5106475 - ], - [ - -124.0946983, - 44.5113816 - ], - [ - -124.0944073, - 44.5123047 - ], - [ - -124.0941934, - 44.5128678 - ], - [ - -124.0940971, - 44.5131102 - ], - [ - -124.0938675, - 44.5136635 - ], - [ - -124.093708, - 44.5140482 - ], - [ - -124.0934992, - 44.5145526 - ], - [ - -124.0933315, - 44.514932 - ], - [ - -124.0918854, - 44.5180068 - ], - [ - -124.0907986, - 44.5205046 - ], - [ - -124.0905625, - 44.5210831 - ], - [ - -124.0902697, - 44.5217256 - ], - [ - -124.0901597, - 44.5219436 - ], - [ - -124.0897849, - 44.5226159 - ], - [ - -124.0896489, - 44.5228379 - ], - [ - -124.0894525, - 44.5230958 - ], - [ - -124.0896839, - 44.5236439 - ], - [ - -124.0897656, - 44.5239289 - ], - [ - -124.0898604, - 44.5242588 - ], - [ - -124.0900682, - 44.5251821 - ], - [ - -124.0901193, - 44.5254941 - ], - [ - -124.0902021, - 44.5261969 - ], - [ - -124.0902282, - 44.5265579 - ], - [ - -124.0902431, - 44.5274093 - ], - [ - -124.0902172, - 44.5281003 - ], - [ - -124.0902092, - 44.5282681 - ], - [ - -124.090023, - 44.5314241 - ], - [ - -124.0900073, - 44.5316393 - ], - [ - -124.0897451, - 44.5346603 - ], - [ - -124.0897263, - 44.53485 - ], - [ - -124.0896355, - 44.535665 - ], - [ - -124.0896248, - 44.5357563 - ], - [ - -124.0894931, - 44.5368245 - ], - [ - -124.0891762, - 44.5396377 - ], - [ - -124.089068, - 44.5409357 - ], - [ - -124.0890065, - 44.5414596 - ], - [ - -124.0885272, - 44.5446225 - ], - [ - -124.0882739, - 44.5464594 - ], - [ - -124.0882501, - 44.5466194 - ], - [ - -124.0879696, - 44.5483854 - ], - [ - -124.087945, - 44.5485314 - ], - [ - -124.0876638, - 44.5501104 - ], - [ - -124.0869998, - 44.5521868 - ], - [ - -124.0857819, - 44.5541306 - ], - [ - -124.084057, - 44.5558671 - ], - [ - -124.0818913, - 44.5573296 - ], - [ - -124.079368, - 44.5584619 - ], - [ - -124.0765843, - 44.5592204 - ], - [ - -124.073647, - 44.559576 - ], - [ - -124.0706691, - 44.5595149 - ], - [ - -124.0677651, - 44.5590396 - ], - [ - -124.0650467, - 44.5581683 - ], - [ - -124.0626183, - 44.5569345 - ], - [ - -124.0605734, - 44.5553856 - ], - [ - -124.0589905, - 44.5535813 - ], - [ - -124.0579304, - 44.5515908 - ], - [ - -124.0574338, - 44.5494906 - ], - [ - -124.0575197, - 44.5473616 - ], - [ - -124.0577886, - 44.5458555 - ], - [ - -124.0580457, - 44.5442425 - ], - [ - -124.0582961, - 44.5424336 - ], - [ - -124.0583113, - 44.5423294 - ], - [ - -124.0587603, - 44.5393758 - ], - [ - -124.0588567, - 44.5382273 - ], - [ - -124.0588789, - 44.5380014 - ], - [ - -124.0592147, - 44.5350344 - ], - [ - -124.0592244, - 44.5349527 - ], - [ - -124.059356, - 44.5338893 - ], - [ - -124.0594315, - 44.5332148 - ], - [ - -124.0596776, - 44.5303962 - ], - [ - -124.0596961, - 44.5300862 - ], - [ - -124.0589069, - 44.5295149 - ], - [ - -124.058563, - 44.5292088 - ], - [ - -124.0570017, - 44.5275182 - ], - [ - -124.0567278, - 44.5271512 - ], - [ - -124.0556706, - 44.5253684 - ], - [ - -124.0555327, - 44.5250623 - ], - [ - -124.0548329, - 44.5224437 - ], - [ - -124.0548069, - 44.5221627 - ], - [ - -124.054778, - 44.521197 - ], - [ - -124.054787, - 44.520915 - ], - [ - -124.0548799, - 44.5199397 - ], - [ - -124.0549149, - 44.5197187 - ], - [ - -124.0553286, - 44.5181505 - ], - [ - -124.0553966, - 44.5179675 - ], - [ - -124.055817, - 44.5170154 - ], - [ - -124.055955, - 44.5167464 - ], - [ - -124.0567807, - 44.5154195 - ], - [ - -124.0569437, - 44.5151985 - ], - [ - -124.0582468, - 44.5137304 - ], - [ - -124.0585038, - 44.5134864 - ], - [ - -124.0603019, - 44.5120613 - ], - [ - -124.0606709, - 44.5118164 - ], - [ - -124.062938, - 44.5105734 - ], - [ - -124.0634019, - 44.5103654 - ], - [ - -124.0634432, - 44.5103494 - ], - [ - -124.0644614, - 44.5081867 - ], - [ - -124.0645924, - 44.5078705 - ], - [ - -124.0647557, - 44.5074774 - ], - [ - -124.0649311, - 44.507055 - ], - [ - -124.0649701, - 44.5069007 - ], - [ - -124.0650798, - 44.5064079 - ], - [ - -124.0654595, - 44.5046763 - ], - [ - -124.0655716, - 44.5040637 - ], - [ - -124.0656078, - 44.5038779 - ], - [ - -124.0659452, - 44.5022519 - ], - [ - -124.066513, - 44.499533 - ], - [ - -124.0665275, - 44.4994652 - ], - [ - -124.0666736, - 44.4987942 - ], - [ - -124.0667167, - 44.4986072 - ], - [ - -124.0668729, - 44.4979642 - ], - [ - -124.0669941, - 44.4975201 - ], - [ - -124.0671342, - 44.4970581 - ], - [ - -124.0672038, - 44.4968397 - ], - [ - -124.067491, - 44.4959787 - ], - [ - -124.0684624, - 44.4939654 - ], - [ - -124.0699639, - 44.4921264 - ], - [ - -124.0719376, - 44.4905324 - ], - [ - -124.0743077, - 44.4892446 - ], - [ - -124.0769832, - 44.4883125 - ], - [ - -124.0798612, - 44.4877719 - ], - [ - -124.0828312, - 44.4876435 - ], - [ - -124.0857792, - 44.4879322 - ], - [ - -124.0885919, - 44.4886271 - ], - [ - -124.0911613, - 44.4897013 - ], - [ - -124.0933886, - 44.4911137 - ], - [ - -124.0951884, - 44.4928099 - ], - [ - -124.0964913, - 44.4947249 - ], - [ - -124.0972473, - 44.496785 - ], - [ - -124.0974273, - 44.498911 - ], - [ - -124.0970243, - 44.5010214 - ], - [ - -124.0967738, - 44.5017734 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16024_s_16025", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0482127, - 44.6849192 - ], - [ - -124.0481127, - 44.684273 - ], - [ - -124.0480776, - 44.6821432 - ], - [ - -124.0486255, - 44.6800495 - ], - [ - -124.0497354, - 44.6780723 - ], - [ - -124.0513645, - 44.6762875 - ], - [ - -124.0534502, - 44.6747637 - ], - [ - -124.0559123, - 44.6735595 - ], - [ - -124.0586563, - 44.6727212 - ], - [ - -124.0615767, - 44.6722808 - ], - [ - -124.0645614, - 44.6722554 - ], - [ - -124.0674957, - 44.6726459 - ], - [ - -124.070267, - 44.6734373 - ], - [ - -124.0727687, - 44.6745992 - ], - [ - -124.0749047, - 44.6760869 - ], - [ - -124.0765931, - 44.6778435 - ], - [ - -124.0777688, - 44.6798012 - ], - [ - -124.0783867, - 44.681885 - ], - [ - -124.0788074, - 44.6845949 - ], - [ - -124.0788986, - 44.6856493 - ], - [ - -124.0789189, - 44.6867593 - ], - [ - -124.0789168, - 44.6871303 - ], - [ - -124.0788772, - 44.6884703 - ], - [ - -124.0788439, - 44.6889944 - ], - [ - -124.0786744, - 44.6907344 - ], - [ - -124.0786235, - 44.6911441 - ], - [ - -124.0785171, - 44.6918487 - ], - [ - -124.0779604, - 44.6938122 - ], - [ - -124.0769077, - 44.6956693 - ], - [ - -124.0753948, - 44.6973571 - ], - [ - -124.0734731, - 44.698818 - ], - [ - -124.0712079, - 44.7000024 - ], - [ - -124.0686763, - 44.70087 - ], - [ - -124.0659643, - 44.7013913 - ], - [ - -124.0631642, - 44.7015486 - ], - [ - -124.0609093, - 44.7015265 - ], - [ - -124.0579516, - 44.70129 - ], - [ - -124.0551149, - 44.7006479 - ], - [ - -124.0525075, - 44.6996246 - ], - [ - -124.0502289, - 44.6982592 - ], - [ - -124.0483661, - 44.6966039 - ], - [ - -124.0469902, - 44.6947218 - ], - [ - -124.0461536, - 44.6926848 - ], - [ - -124.0458883, - 44.6905707 - ], - [ - -124.0458888, - 44.6905277 - ], - [ - -124.0462068, - 44.6884099 - ], - [ - -124.0470979, - 44.6863771 - ], - [ - -124.0482127, - 44.6849192 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16025_s_16026", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0483429, - 44.6850789 - ], - [ - -124.0483242, - 44.6850819 - ], - [ - -124.0474428, - 44.6822944 - ], - [ - -124.0468179, - 44.6808121 - ], - [ - -124.0465969, - 44.6803698 - ], - [ - -124.0463133, - 44.6797429 - ], - [ - -124.0455137, - 44.6777728 - ], - [ - -124.0449685, - 44.6756787 - ], - [ - -124.0450064, - 44.673549 - ], - [ - -124.0456258, - 44.6714654 - ], - [ - -124.0468029, - 44.6695081 - ], - [ - -124.0484924, - 44.6677523 - ], - [ - -124.0506293, - 44.6662653 - ], - [ - -124.0531316, - 44.6651044 - ], - [ - -124.0559031, - 44.6643141 - ], - [ - -124.0588373, - 44.6639248 - ], - [ - -124.0618215, - 44.6639514 - ], - [ - -124.0647411, - 44.664393 - ], - [ - -124.0674841, - 44.6652324 - ], - [ - -124.0699449, - 44.6664376 - ], - [ - -124.0720291, - 44.6679622 - ], - [ - -124.0736566, - 44.6697476 - ], - [ - -124.0747647, - 44.6717253 - ], - [ - -124.0754366, - 44.6733787 - ], - [ - -124.0756315, - 44.6737683 - ], - [ - -124.0758709, - 44.674288 - ], - [ - -124.0767614, - 44.6763979 - ], - [ - -124.0770338, - 44.6771363 - ], - [ - -124.0780346, - 44.6802961 - ], - [ - -124.0782854, - 44.681309 - ], - [ - -124.0783555, - 44.681699 - ], - [ - -124.0784432, - 44.683828 - ], - [ - -124.077947, - 44.6859282 - ], - [ - -124.0768859, - 44.6879191 - ], - [ - -124.0753006, - 44.689724 - ], - [ - -124.0732521, - 44.6912736 - ], - [ - -124.0708191, - 44.6925083 - ], - [ - -124.0680951, - 44.6933806 - ], - [ - -124.0651847, - 44.693857 - ], - [ - -124.0622, - 44.6939191 - ], - [ - -124.0592556, - 44.6935647 - ], - [ - -124.0564648, - 44.6928072 - ], - [ - -124.0539349, - 44.6916759 - ], - [ - -124.0517632, - 44.6902142 - ], - [ - -124.050033, - 44.6884784 - ], - [ - -124.0488109, - 44.6865351 - ], - [ - -124.0483429, - 44.6850789 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16025_s_2455449", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.076956, - 44.67697 - ], - [ - -124.0769892, - 44.6770561 - ], - [ - -124.0770612, - 44.6772497 - ], - [ - -124.0773814, - 44.6781436 - ], - [ - -124.07754, - 44.6786333 - ], - [ - -124.0776351, - 44.6789613 - ], - [ - -124.0776509, - 44.6790166 - ], - [ - -124.0776664, - 44.6790715 - ], - [ - -124.0777518, - 44.6793673 - ], - [ - -124.0777742, - 44.6794465 - ], - [ - -124.0779153, - 44.6799545 - ], - [ - -124.0779829, - 44.6802142 - ], - [ - -124.078109, - 44.6807342 - ], - [ - -124.0781202, - 44.6807811 - ], - [ - -124.0781775, - 44.6810233 - ], - [ - -124.0782357, - 44.6812675 - ], - [ - -124.0784453, - 44.6833921 - ], - [ - -124.0780699, - 44.6855051 - ], - [ - -124.0771238, - 44.6875253 - ], - [ - -124.0756433, - 44.6893749 - ], - [ - -124.0736854, - 44.690983 - ], - [ - -124.0713252, - 44.6922876 - ], - [ - -124.0686535, - 44.6932386 - ], - [ - -124.0657729, - 44.6937995 - ], - [ - -124.0627942, - 44.6939487 - ], - [ - -124.059832, - 44.6936804 - ], - [ - -124.0570001, - 44.693005 - ], - [ - -124.0544074, - 44.6919485 - ], - [ - -124.0521537, - 44.6905514 - ], - [ - -124.0503254, - 44.6888674 - ], - [ - -124.0489929, - 44.6869614 - ], - [ - -124.0482074, - 44.6849065 - ], - [ - -124.0481474, - 44.6846545 - ], - [ - -124.0481437, - 44.684639 - ], - [ - -124.0480903, - 44.6844124 - ], - [ - -124.0480016, - 44.684046 - ], - [ - -124.0479077, - 44.6837072 - ], - [ - -124.0478272, - 44.6834277 - ], - [ - -124.0477822, - 44.6832717 - ], - [ - -124.0475861, - 44.6827235 - ], - [ - -124.0475324, - 44.682584 - ], - [ - -124.0474308, - 44.682306 - ], - [ - -124.0473891, - 44.6821854 - ], - [ - -124.0473724, - 44.6821413 - ], - [ - -124.0470242, - 44.6813348 - ], - [ - -124.0467826, - 44.6808066 - ], - [ - -124.0467373, - 44.680706 - ], - [ - -124.0464174, - 44.6799829 - ], - [ - -124.0463173, - 44.6797472 - ], - [ - -124.0461006, - 44.6792156 - ], - [ - -124.0458961, - 44.6787143 - ], - [ - -124.045827, - 44.6785503 - ], - [ - -124.0458192, - 44.6785316 - ], - [ - -124.0457961, - 44.6784765 - ], - [ - -124.0457817, - 44.6784433 - ], - [ - -124.0457579, - 44.6783878 - ], - [ - -124.0453381, - 44.6774007 - ], - [ - -124.0453016, - 44.6773136 - ], - [ - -124.0450851, - 44.6767888 - ], - [ - -124.044822, - 44.6761816 - ], - [ - -124.044744, - 44.6759959 - ], - [ - -124.04451, - 44.6754196 - ], - [ - -124.044493, - 44.6753783 - ], - [ - -124.0444852, - 44.6753594 - ], - [ - -124.0440144, - 44.6742103 - ], - [ - -124.0439972, - 44.6741679 - ], - [ - -124.0439042, - 44.6739375 - ], - [ - -124.0438165, - 44.6737337 - ], - [ - -124.0437644, - 44.6736099 - ], - [ - -124.0435629, - 44.6731209 - ], - [ - -124.0434269, - 44.6728217 - ], - [ - -124.04333, - 44.6726005 - ], - [ - -124.0432145, - 44.6723266 - ], - [ - -124.0431802, - 44.6722467 - ], - [ - -124.0431516, - 44.6721794 - ], - [ - -124.0431096, - 44.6720794 - ], - [ - -124.0430719, - 44.6719881 - ], - [ - -124.0429741, - 44.6717475 - ], - [ - -124.0428534, - 44.6714796 - ], - [ - -124.0426661, - 44.671031 - ], - [ - -124.0425379, - 44.6706979 - ], - [ - -124.0424729, - 44.670529 - ], - [ - -124.0423488, - 44.6702526 - ], - [ - -124.0422856, - 44.6701084 - ], - [ - -124.0422086, - 44.6699284 - ], - [ - -124.0421844, - 44.6698711 - ], - [ - -124.0418856, - 44.6691581 - ], - [ - -124.0418358, - 44.6690367 - ], - [ - -124.0418032, - 44.6689556 - ], - [ - -124.0415209, - 44.6683269 - ], - [ - -124.0414538, - 44.6681737 - ], - [ - -124.0407362, - 44.6664906 - ], - [ - -124.0406895, - 44.6663789 - ], - [ - -124.0403479, - 44.6655457 - ], - [ - -124.0401735, - 44.665134 - ], - [ - -124.0395795, - 44.6637336 - ], - [ - -124.0394039, - 44.6632852 - ], - [ - -124.0392876, - 44.6629616 - ], - [ - -124.0390094, - 44.6622483 - ], - [ - -124.0386748, - 44.6611871 - ], - [ - -124.038444, - 44.6602351 - ], - [ - -124.0384238, - 44.6601497 - ], - [ - -124.0383319, - 44.6597517 - ], - [ - -124.0382685, - 44.6594511 - ], - [ - -124.0381916, - 44.6590481 - ], - [ - -124.0381281, - 44.6586644 - ], - [ - -124.0379475, - 44.6573763 - ], - [ - -124.0379176, - 44.657137 - ], - [ - -124.0378578, - 44.656588 - ], - [ - -124.0378233, - 44.6561654 - ], - [ - -124.0377944, - 44.6556334 - ], - [ - -124.0377831, - 44.6552438 - ], - [ - -124.0377803, - 44.6545348 - ], - [ - -124.0380758, - 44.6523732 - ], - [ - -124.0389677, - 44.6502967 - ], - [ - -124.0404202, - 44.6483884 - ], - [ - -124.0423754, - 44.6467243 - ], - [ - -124.0447549, - 44.6453711 - ], - [ - -124.0474639, - 44.6443827 - ], - [ - -124.050394, - 44.6437986 - ], - [ - -124.0534283, - 44.6436422 - ], - [ - -124.0538782, - 44.6436512 - ], - [ - -124.0547795, - 44.6436883 - ], - [ - -124.0549235, - 44.6436973 - ], - [ - -124.0578558, - 44.6440901 - ], - [ - -124.0606244, - 44.6448837 - ], - [ - -124.0631231, - 44.6460476 - ], - [ - -124.0652559, - 44.6475371 - ], - [ - -124.0669407, - 44.6492949 - ], - [ - -124.0681128, - 44.6512536 - ], - [ - -124.0687271, - 44.6533379 - ], - [ - -124.06876, - 44.6554677 - ], - [ - -124.0684616, - 44.6566036 - ], - [ - -124.0685439, - 44.6569424 - ], - [ - -124.0686593, - 44.6572378 - ], - [ - -124.0687396, - 44.6574519 - ], - [ - -124.0688135, - 44.6576573 - ], - [ - -124.0693142, - 44.6588364 - ], - [ - -124.0695108, - 44.6592998 - ], - [ - -124.0695498, - 44.6593933 - ], - [ - -124.069888, - 44.6602173 - ], - [ - -124.0705498, - 44.6617677 - ], - [ - -124.0708706, - 44.6624812 - ], - [ - -124.0710086, - 44.6628054 - ], - [ - -124.0710823, - 44.6629886 - ], - [ - -124.071344, - 44.6636124 - ], - [ - -124.0713779, - 44.6636915 - ], - [ - -124.0715666, - 44.6641115 - ], - [ - -124.0717478, - 44.6645454 - ], - [ - -124.0718979, - 44.6649344 - ], - [ - -124.0719414, - 44.6650474 - ], - [ - -124.072029, - 44.6652415 - ], - [ - -124.0721498, - 44.6655224 - ], - [ - -124.0723222, - 44.6659433 - ], - [ - -124.0723382, - 44.6659805 - ], - [ - -124.0723613, - 44.6660347 - ], - [ - -124.0724415, - 44.6662246 - ], - [ - -124.0725624, - 44.6664902 - ], - [ - -124.0725931, - 44.6665578 - ], - [ - -124.0727169, - 44.6668433 - ], - [ - -124.0729524, - 44.6674143 - ], - [ - -124.0730529, - 44.6676475 - ], - [ - -124.0731292, - 44.6678303 - ], - [ - -124.0732505, - 44.6681305 - ], - [ - -124.0737389, - 44.6693208 - ], - [ - -124.0737493, - 44.6693463 - ], - [ - -124.0739531, - 44.6698475 - ], - [ - -124.0741843, - 44.6703791 - ], - [ - -124.074227, - 44.670479 - ], - [ - -124.074248, - 44.670529 - ], - [ - -124.0742687, - 44.6705785 - ], - [ - -124.0744959, - 44.6711288 - ], - [ - -124.0749327, - 44.6721531 - ], - [ - -124.0749532, - 44.6722016 - ], - [ - -124.0749933, - 44.6722972 - ], - [ - -124.0750784, - 44.6724988 - ], - [ - -124.0751175, - 44.6725931 - ], - [ - -124.0753417, - 44.6731421 - ], - [ - -124.0755109, - 44.6735567 - ], - [ - -124.0757567, - 44.6741118 - ], - [ - -124.0760149, - 44.6746755 - ], - [ - -124.0760914, - 44.6748476 - ], - [ - -124.0765557, - 44.6759215 - ], - [ - -124.0767035, - 44.6762859 - ], - [ - -124.0768336, - 44.6766289 - ], - [ - -124.0769087, - 44.6768349 - ], - [ - -124.076956, - 44.67697 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16026_s_15893", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0378178, - 44.646528 - ], - [ - -124.0370021, - 44.6463536 - ], - [ - -124.0344633, - 44.6454119 - ], - [ - -124.0322164, - 44.6441475 - ], - [ - -124.0303407, - 44.6426052 - ], - [ - -124.0295919, - 44.6416859 - ], - [ - -124.0293088, - 44.6414373 - ], - [ - -124.0279146, - 44.6395542 - ], - [ - -124.0270619, - 44.6375131 - ], - [ - -124.0267833, - 44.6353925 - ], - [ - -124.0270895, - 44.6332738 - ], - [ - -124.0279686, - 44.6312385 - ], - [ - -124.0293868, - 44.6293647 - ], - [ - -124.0312896, - 44.6277245 - ], - [ - -124.0336038, - 44.6263808 - ], - [ - -124.0362406, - 44.6253853 - ], - [ - -124.0390985, - 44.6247763 - ], - [ - -124.0420679, - 44.624577 - ], - [ - -124.0450347, - 44.6247952 - ], - [ - -124.0478849, - 44.6254224 - ], - [ - -124.0479566, - 44.6254501 - ], - [ - -124.0479631, - 44.6254501 - ], - [ - -124.0516905, - 44.6254064 - ], - [ - -124.0541175, - 44.6255166 - ], - [ - -124.0546794, - 44.6255746 - ], - [ - -124.0577798, - 44.6261372 - ], - [ - -124.0583857, - 44.6262972 - ], - [ - -124.0611823, - 44.6272784 - ], - [ - -124.0636404, - 44.6286458 - ], - [ - -124.0656569, - 44.6303421 - ], - [ - -124.0671474, - 44.6322962 - ], - [ - -124.0680492, - 44.634426 - ], - [ - -124.0683245, - 44.6366424 - ], - [ - -124.0682791, - 44.6389412 - ], - [ - -124.0682986, - 44.642828 - ], - [ - -124.0682969, - 44.6430364 - ], - [ - -124.0682445, - 44.6454363 - ], - [ - -124.0682795, - 44.6481893 - ], - [ - -124.0682798, - 44.6483581 - ], - [ - -124.0682247, - 44.6544566 - ], - [ - -124.0682391, - 44.6550031 - ], - [ - -124.0683584, - 44.6560271 - ], - [ - -124.0685415, - 44.6567891 - ], - [ - -124.0689393, - 44.6579451 - ], - [ - -124.0697657, - 44.6598177 - ], - [ - -124.0698336, - 44.6599758 - ], - [ - -124.0746962, - 44.6716061 - ], - [ - -124.0752653, - 44.673697 - ], - [ - -124.0752518, - 44.6758268 - ], - [ - -124.0746562, - 44.6779139 - ], - [ - -124.0735013, - 44.679878 - ], - [ - -124.0718315, - 44.6816435 - ], - [ - -124.0697108, - 44.6831427 - ], - [ - -124.0672209, - 44.6843178 - ], - [ - -124.0644573, - 44.6851238 - ], - [ - -124.0615264, - 44.6855296 - ], - [ - -124.0585409, - 44.6855195 - ], - [ - -124.0556155, - 44.6850941 - ], - [ - -124.0528627, - 44.6842696 - ], - [ - -124.0503884, - 44.6830778 - ], - [ - -124.0482876, - 44.6815645 - ], - [ - -124.0466411, - 44.6797878 - ], - [ - -124.0455122, - 44.677816 - ], - [ - -124.0406879, - 44.6662636 - ], - [ - -124.0397502, - 44.6641364 - ], - [ - -124.0394866, - 44.6634637 - ], - [ - -124.0388441, - 44.6615936 - ], - [ - -124.0386242, - 44.6608388 - ], - [ - -124.0382386, - 44.6592308 - ], - [ - -124.0380723, - 44.6582939 - ], - [ - -124.0378588, - 44.6564519 - ], - [ - -124.0378095, - 44.6557569 - ], - [ - -124.0377828, - 44.6547248 - ], - [ - -124.0377806, - 44.6544499 - ], - [ - -124.0378394, - 44.6482983 - ], - [ - -124.0378178, - 44.646528 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16026_s_2483495", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0690529, - 44.6557879 - ], - [ - -124.0691216, - 44.6564753 - ], - [ - -124.0688841, - 44.6578235 - ], - [ - -124.0693142, - 44.6588364 - ], - [ - -124.0695108, - 44.6592998 - ], - [ - -124.0695498, - 44.6593933 - ], - [ - -124.069888, - 44.6602173 - ], - [ - -124.0705498, - 44.6617677 - ], - [ - -124.0708706, - 44.6624812 - ], - [ - -124.0710086, - 44.6628054 - ], - [ - -124.0710823, - 44.6629886 - ], - [ - -124.071344, - 44.6636124 - ], - [ - -124.0713779, - 44.6636915 - ], - [ - -124.0715666, - 44.6641115 - ], - [ - -124.0717478, - 44.6645454 - ], - [ - -124.0718979, - 44.6649344 - ], - [ - -124.0719414, - 44.6650474 - ], - [ - -124.072029, - 44.6652415 - ], - [ - -124.0721498, - 44.6655224 - ], - [ - -124.0723222, - 44.6659433 - ], - [ - -124.0723382, - 44.6659805 - ], - [ - -124.0723613, - 44.6660347 - ], - [ - -124.0724415, - 44.6662246 - ], - [ - -124.0725624, - 44.6664902 - ], - [ - -124.0725931, - 44.6665578 - ], - [ - -124.0727169, - 44.6668433 - ], - [ - -124.0729524, - 44.6674143 - ], - [ - -124.0730529, - 44.6676475 - ], - [ - -124.0731292, - 44.6678303 - ], - [ - -124.0732505, - 44.6681305 - ], - [ - -124.0737389, - 44.6693208 - ], - [ - -124.0737493, - 44.6693463 - ], - [ - -124.0739531, - 44.6698475 - ], - [ - -124.0741843, - 44.6703791 - ], - [ - -124.0742104, - 44.6704398 - ], - [ - -124.0747006, - 44.6715903 - ], - [ - -124.0752847, - 44.6736791 - ], - [ - -124.0752865, - 44.675809 - ], - [ - -124.0747059, - 44.6778982 - ], - [ - -124.0735651, - 44.6798665 - ], - [ - -124.071908, - 44.6816381 - ], - [ - -124.0697982, - 44.683145 - ], - [ - -124.0673167, - 44.6843292 - ], - [ - -124.064559, - 44.6851453 - ], - [ - -124.0616311, - 44.6855618 - ], - [ - -124.0586455, - 44.6855627 - ], - [ - -124.0557171, - 44.685148 - ], - [ - -124.0529584, - 44.6843336 - ], - [ - -124.0504755, - 44.6831508 - ], - [ - -124.0483639, - 44.6816452 - ], - [ - -124.0467047, - 44.6798746 - ], - [ - -124.0455616, - 44.677907 - ], - [ - -124.0450849, - 44.6767867 - ], - [ - -124.0448252, - 44.676189 - ], - [ - -124.044744, - 44.6759959 - ], - [ - -124.04451, - 44.6754196 - ], - [ - -124.044493, - 44.6753783 - ], - [ - -124.0444852, - 44.6753594 - ], - [ - -124.0440144, - 44.6742103 - ], - [ - -124.0439972, - 44.6741679 - ], - [ - -124.0439042, - 44.6739375 - ], - [ - -124.0438165, - 44.6737337 - ], - [ - -124.0437644, - 44.6736099 - ], - [ - -124.0435629, - 44.6731209 - ], - [ - -124.0434269, - 44.6728217 - ], - [ - -124.04333, - 44.6726005 - ], - [ - -124.0432145, - 44.6723266 - ], - [ - -124.0431802, - 44.6722467 - ], - [ - -124.0431516, - 44.6721794 - ], - [ - -124.0431096, - 44.6720794 - ], - [ - -124.0430719, - 44.6719881 - ], - [ - -124.0429741, - 44.6717475 - ], - [ - -124.0428534, - 44.6714796 - ], - [ - -124.0426661, - 44.671031 - ], - [ - -124.0425379, - 44.6706979 - ], - [ - -124.0424729, - 44.670529 - ], - [ - -124.0423488, - 44.6702526 - ], - [ - -124.0422856, - 44.6701084 - ], - [ - -124.0422086, - 44.6699284 - ], - [ - -124.0421844, - 44.6698711 - ], - [ - -124.0418856, - 44.6691581 - ], - [ - -124.0418358, - 44.6690367 - ], - [ - -124.0418032, - 44.6689556 - ], - [ - -124.0415209, - 44.6683269 - ], - [ - -124.0414538, - 44.6681737 - ], - [ - -124.0407362, - 44.6664906 - ], - [ - -124.0406895, - 44.6663789 - ], - [ - -124.0403479, - 44.6655457 - ], - [ - -124.0401735, - 44.665134 - ], - [ - -124.0395795, - 44.6637336 - ], - [ - -124.0394039, - 44.6632852 - ], - [ - -124.0392876, - 44.6629616 - ], - [ - -124.0390094, - 44.6622483 - ], - [ - -124.0386748, - 44.6611871 - ], - [ - -124.038444, - 44.6602351 - ], - [ - -124.0384238, - 44.6601497 - ], - [ - -124.0383319, - 44.6597517 - ], - [ - -124.0382685, - 44.6594511 - ], - [ - -124.0381916, - 44.6590481 - ], - [ - -124.0381281, - 44.6586644 - ], - [ - -124.0379475, - 44.6573763 - ], - [ - -124.0379176, - 44.657137 - ], - [ - -124.0378578, - 44.656588 - ], - [ - -124.0378233, - 44.6561654 - ], - [ - -124.0377944, - 44.6556334 - ], - [ - -124.0377831, - 44.6552438 - ], - [ - -124.0377803, - 44.6545348 - ], - [ - -124.0380847, - 44.6523416 - ], - [ - -124.0390028, - 44.6502375 - ], - [ - -124.0404968, - 44.6483088 - ], - [ - -124.0425052, - 44.646635 - ], - [ - -124.0449453, - 44.6452849 - ], - [ - -124.0477167, - 44.644314 - ], - [ - -124.0507054, - 44.6437623 - ], - [ - -124.0537886, - 44.6436525 - ], - [ - -124.0545465, - 44.6436805 - ], - [ - -124.0573334, - 44.6439696 - ], - [ - -124.0575654, - 44.6440096 - ], - [ - -124.0603999, - 44.6447157 - ], - [ - -124.0629851, - 44.6458053 - ], - [ - -124.0652206, - 44.6472359 - ], - [ - -124.0670194, - 44.6489519 - ], - [ - -124.0683113, - 44.6508865 - ], - [ - -124.0690463, - 44.6529645 - ], - [ - -124.0691954, - 44.6551051 - ], - [ - -124.0690529, - 44.6557879 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16030_s_16033", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0758507, - 44.6386749 - ], - [ - -124.0757093, - 44.6402352 - ], - [ - -124.0749395, - 44.642293 - ], - [ - -124.0736221, - 44.644204 - ], - [ - -124.0718077, - 44.6458948 - ], - [ - -124.069566, - 44.6473003 - ], - [ - -124.0669832, - 44.6483666 - ], - [ - -124.0641585, - 44.6490526 - ], - [ - -124.0612005, - 44.649332 - ], - [ - -124.0582231, - 44.649194 - ], - [ - -124.0553406, - 44.648644 - ], - [ - -124.0526639, - 44.647703 - ], - [ - -124.0502959, - 44.6464072 - ], - [ - -124.0483277, - 44.6448065 - ], - [ - -124.0468347, - 44.6429625 - ], - [ - -124.0458745, - 44.6409459 - ], - [ - -124.0454838, - 44.6388343 - ], - [ - -124.0454788, - 44.6387273 - ], - [ - -124.0454777, - 44.6383703 - ], - [ - -124.0452352, - 44.6365033 - ], - [ - -124.0455444, - 44.6343848 - ], - [ - -124.0464265, - 44.6323502 - ], - [ - -124.0478474, - 44.6304774 - ], - [ - -124.0497526, - 44.6288386 - ], - [ - -124.0520688, - 44.6274967 - ], - [ - -124.054707, - 44.6265031 - ], - [ - -124.0575659, - 44.6258962 - ], - [ - -124.0605356, - 44.6256991 - ], - [ - -124.0607906, - 44.6257001 - ], - [ - -124.0637587, - 44.6259207 - ], - [ - -124.0666096, - 44.6265508 - ], - [ - -124.0692334, - 44.627566 - ], - [ - -124.0715294, - 44.6289275 - ], - [ - -124.0734091, - 44.6305828 - ], - [ - -124.0748004, - 44.6324682 - ], - [ - -124.0756495, - 44.6345113 - ], - [ - -124.0759238, - 44.6366334 - ], - [ - -124.0759203, - 44.637028 - ], - [ - -124.0759222, - 44.6374146 - ], - [ - -124.0759223, - 44.6374333 - ], - [ - -124.0759234, - 44.6378993 - ], - [ - -124.0759172, - 44.6382268 - ], - [ - -124.0758994, - 44.6386759 - ], - [ - -124.0758507, - 44.6386749 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16031_s_16030", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0454681, - 44.6405538 - ], - [ - -124.045468, - 44.6401723 - ], - [ - -124.0454699, - 44.6399973 - ], - [ - -124.0454893, - 44.6391243 - ], - [ - -124.045491, - 44.6389938 - ], - [ - -124.0454834, - 44.6388262 - ], - [ - -124.0456794, - 44.6367009 - ], - [ - -124.0464524, - 44.6346437 - ], - [ - -124.0477724, - 44.6327337 - ], - [ - -124.0495889, - 44.6310442 - ], - [ - -124.0518319, - 44.6296403 - ], - [ - -124.0544153, - 44.6285757 - ], - [ - -124.0572399, - 44.6278914 - ], - [ - -124.060197, - 44.6276137 - ], - [ - -124.0631732, - 44.6277532 - ], - [ - -124.0660541, - 44.6283046 - ], - [ - -124.0687292, - 44.6292468 - ], - [ - -124.0710955, - 44.6305434 - ], - [ - -124.0730622, - 44.6321447 - ], - [ - -124.0745538, - 44.6339892 - ], - [ - -124.0755128, - 44.6360061 - ], - [ - -124.0759024, - 44.6381178 - ], - [ - -124.0759205, - 44.6385118 - ], - [ - -124.075928, - 44.6389647 - ], - [ - -124.0759231, - 44.6393577 - ], - [ - -124.0759219, - 44.6394296 - ], - [ - -124.0759041, - 44.6402512 - ], - [ - -124.0759055, - 44.6419697 - ], - [ - -124.0756095, - 44.6441085 - ], - [ - -124.0747295, - 44.6461638 - ], - [ - -124.0733, - 44.6480553 - ], - [ - -124.0713768, - 44.6497088 - ], - [ - -124.0690352, - 44.6510597 - ], - [ - -124.0663667, - 44.6520551 - ], - [ - -124.0634759, - 44.6526561 - ], - [ - -124.060476, - 44.652839 - ], - [ - -124.0602739, - 44.652837 - ], - [ - -124.0573088, - 44.6525988 - ], - [ - -124.0544657, - 44.6519522 - ], - [ - -124.0518541, - 44.6509221 - ], - [ - -124.0495743, - 44.649548 - ], - [ - -124.047714, - 44.6478827 - ], - [ - -124.0463446, - 44.6459904 - ], - [ - -124.0455187, - 44.6439437 - ], - [ - -124.045268, - 44.6418213 - ], - [ - -124.0454681, - 44.6405538 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16032_s_2438933", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0659313, - 44.6340192 - ], - [ - -124.0678692, - 44.634758 - ], - [ - -124.070176, - 44.6361084 - ], - [ - -124.0720697, - 44.6377541 - ], - [ - -124.0734774, - 44.639632 - ], - [ - -124.0743451, - 44.6416698 - ], - [ - -124.0746392, - 44.6437894 - ], - [ - -124.0743485, - 44.6459091 - ], - [ - -124.073484, - 44.6479477 - ], - [ - -124.072079, - 44.6498267 - ], - [ - -124.0701874, - 44.6514739 - ], - [ - -124.0678818, - 44.6528259 - ], - [ - -124.0652509, - 44.6538309 - ], - [ - -124.0623958, - 44.6544501 - ], - [ - -124.0594263, - 44.6546597 - ], - [ - -124.0588426, - 44.6546599 - ], - [ - -124.0586126, - 44.6546587 - ], - [ - -124.0565752, - 44.6546373 - ], - [ - -124.0556672, - 44.6546398 - ], - [ - -124.0527025, - 44.6544402 - ], - [ - -124.049849, - 44.6538323 - ], - [ - -124.0472161, - 44.6528394 - ], - [ - -124.0449044, - 44.6514996 - ], - [ - -124.0430025, - 44.6498641 - ], - [ - -124.0427563, - 44.64954 - ], - [ - -124.042733, - 44.649526 - ], - [ - -124.0408701, - 44.6478622 - ], - [ - -124.0394977, - 44.645971 - ], - [ - -124.0386687, - 44.6439249 - ], - [ - -124.0384147, - 44.6418027 - ], - [ - -124.0387456, - 44.6396859 - ], - [ - -124.0396484, - 44.6376559 - ], - [ - -124.0410885, - 44.6357906 - ], - [ - -124.0430105, - 44.6341617 - ], - [ - -124.0453405, - 44.6328318 - ], - [ - -124.047989, - 44.631852 - ], - [ - -124.0508543, - 44.6312599 - ], - [ - -124.0538262, - 44.6310782 - ], - [ - -124.0558346, - 44.6310965 - ], - [ - -124.058838, - 44.6313382 - ], - [ - -124.0617153, - 44.6319989 - ], - [ - -124.064353, - 44.6330526 - ], - [ - -124.0659313, - 44.6340192 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16033_s_16034", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.059929, - 44.6474268 - ], - [ - -124.0599046, - 44.6474267 - ], - [ - -124.0597465, - 44.6474258 - ], - [ - -124.0589193, - 44.6474218 - ], - [ - -124.0588853, - 44.6474216 - ], - [ - -124.0587506, - 44.6474208 - ], - [ - -124.0580709, - 44.6474179 - ], - [ - -124.0572279, - 44.6474139 - ], - [ - -124.0562531, - 44.6474099 - ], - [ - -124.0562143, - 44.6474097 - ], - [ - -124.0556397, - 44.6474063 - ], - [ - -124.054692, - 44.6474099 - ], - [ - -124.0517213, - 44.6472124 - ], - [ - -124.0488616, - 44.6466049 - ], - [ - -124.046223, - 44.6456107 - ], - [ - -124.0439069, - 44.6442681 - ], - [ - -124.0420023, - 44.6426286 - ], - [ - -124.0405824, - 44.6407554 - ], - [ - -124.0397018, - 44.6387204 - ], - [ - -124.0393941, - 44.6366018 - ], - [ - -124.0396712, - 44.6344811 - ], - [ - -124.0405224, - 44.6324397 - ], - [ - -124.0419149, - 44.6305561 - ], - [ - -124.0437952, - 44.6289027 - ], - [ - -124.0460909, - 44.6275429 - ], - [ - -124.0487139, - 44.6265291 - ], - [ - -124.0515635, - 44.6259001 - ], - [ - -124.05453, - 44.6256801 - ], - [ - -124.0555808, - 44.6256761 - ], - [ - -124.0557878, - 44.6256763 - ], - [ - -124.0564463, - 44.6256802 - ], - [ - -124.0574087, - 44.6256841 - ], - [ - -124.0582583, - 44.6256881 - ], - [ - -124.058955, - 44.6256911 - ], - [ - -124.0589997, - 44.6256913 - ], - [ - -124.0591397, - 44.6256922 - ], - [ - -124.0599615, - 44.6256962 - ], - [ - -124.0599854, - 44.6256963 - ], - [ - -124.0601432, - 44.6256972 - ], - [ - -124.060553, - 44.6256992 - ], - [ - -124.0635191, - 44.6259219 - ], - [ - -124.0663675, - 44.6265536 - ], - [ - -124.0689886, - 44.62757 - ], - [ - -124.0712818, - 44.6289319 - ], - [ - -124.073159, - 44.6305871 - ], - [ - -124.0745481, - 44.6324719 - ], - [ - -124.0753955, - 44.6345141 - ], - [ - -124.0756687, - 44.6366351 - ], - [ - -124.0753572, - 44.6387533 - ], - [ - -124.0744728, - 44.6407875 - ], - [ - -124.0730495, - 44.6426594 - ], - [ - -124.0711419, - 44.6442971 - ], - [ - -124.0688233, - 44.6456375 - ], - [ - -124.0661829, - 44.6466292 - ], - [ - -124.0633222, - 44.6472341 - ], - [ - -124.060351, - 44.6474288 - ], - [ - -124.059929, - 44.6474268 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16034_s_15889", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0695159, - 44.6344483 - ], - [ - -124.069586, - 44.6346247 - ], - [ - -124.0698246, - 44.6367478 - ], - [ - -124.0694784, - 44.6388634 - ], - [ - -124.0685608, - 44.64089 - ], - [ - -124.067107, - 44.6427499 - ], - [ - -124.0651728, - 44.6443716 - ], - [ - -124.0628325, - 44.6456926 - ], - [ - -124.060176, - 44.6466623 - ], - [ - -124.0573056, - 44.6472433 - ], - [ - -124.0543315, - 44.6474133 - ], - [ - -124.0528814, - 44.6473943 - ], - [ - -124.0502878, - 44.6472008 - ], - [ - -124.0496773, - 44.6470776 - ], - [ - -124.047722, - 44.6469283 - ], - [ - -124.0448952, - 44.6463012 - ], - [ - -124.042292, - 44.6452952 - ], - [ - -124.040011, - 44.6439484 - ], - [ - -124.0381383, - 44.6423119 - ], - [ - -124.0367449, - 44.6404475 - ], - [ - -124.0358834, - 44.6384258 - ], - [ - -124.0355864, - 44.6363233 - ], - [ - -124.0355806, - 44.634986 - ], - [ - -124.035699, - 44.6335986 - ], - [ - -124.0357362, - 44.6333871 - ], - [ - -124.0364971, - 44.6311004 - ], - [ - -124.0365611, - 44.6309717 - ], - [ - -124.0384026, - 44.6284114 - ], - [ - -124.0385043, - 44.6283069 - ], - [ - -124.0399154, - 44.6270633 - ], - [ - -124.0415669, - 44.6259813 - ], - [ - -124.042301, - 44.6255672 - ], - [ - -124.0432931, - 44.6250524 - ], - [ - -124.0437653, - 44.6248275 - ], - [ - -124.0444862, - 44.6245047 - ], - [ - -124.0449834, - 44.6242956 - ], - [ - -124.0460925, - 44.6238723 - ], - [ - -124.04633, - 44.6237905 - ], - [ - -124.0486522, - 44.6231518 - ], - [ - -124.0510891, - 44.622792 - ], - [ - -124.0513339, - 44.6227706 - ], - [ - -124.0540622, - 44.6227078 - ], - [ - -124.0567624, - 44.6229942 - ], - [ - -124.0593474, - 44.6236205 - ], - [ - -124.0596186, - 44.6237063 - ], - [ - -124.0620519, - 44.624675 - ], - [ - -124.0641972, - 44.6259443 - ], - [ - -124.0643629, - 44.6260622 - ], - [ - -124.065565, - 44.6270257 - ], - [ - -124.0660166, - 44.6274341 - ], - [ - -124.0666257, - 44.6280249 - ], - [ - -124.0668976, - 44.6283081 - ], - [ - -124.06827, - 44.6300682 - ], - [ - -124.0691639, - 44.631979 - ], - [ - -124.0695484, - 44.6339747 - ], - [ - -124.0695159, - 44.6344483 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16039_s_16040", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0606432, - 44.6238951 - ], - [ - -124.0636095, - 44.6241168 - ], - [ - -124.0664582, - 44.6247475 - ], - [ - -124.0690799, - 44.6257629 - ], - [ - -124.0713741, - 44.6271239 - ], - [ - -124.0732524, - 44.6287785 - ], - [ - -124.0746427, - 44.6306628 - ], - [ - -124.0754916, - 44.6327047 - ], - [ - -124.0757663, - 44.6348256 - ], - [ - -124.0754563, - 44.636944 - ], - [ - -124.0745734, - 44.6389784 - ], - [ - -124.0731514, - 44.6408509 - ], - [ - -124.071245, - 44.6424892 - ], - [ - -124.0689275, - 44.6438305 - ], - [ - -124.0662879, - 44.6448232 - ], - [ - -124.0634276, - 44.645429 - ], - [ - -124.0604568, - 44.6456249 - ], - [ - -124.0559059, - 44.6456049 - ], - [ - -124.0529386, - 44.645383 - ], - [ - -124.050089, - 44.644752 - ], - [ - -124.0474667, - 44.6437362 - ], - [ - -124.0451725, - 44.6423746 - ], - [ - -124.0432945, - 44.6407196 - ], - [ - -124.041905, - 44.6388349 - ], - [ - -124.0410572, - 44.6367928 - ], - [ - -124.0407837, - 44.6346718 - ], - [ - -124.041095, - 44.6325535 - ], - [ - -124.041979, - 44.6305192 - ], - [ - -124.0434017, - 44.6286472 - ], - [ - -124.0453084, - 44.6270093 - ], - [ - -124.0476258, - 44.6256685 - ], - [ - -124.0502649, - 44.6246763 - ], - [ - -124.0531243, - 44.6240707 - ], - [ - -124.0560941, - 44.6238751 - ], - [ - -124.0606432, - 44.6238951 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16040_s_16042", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0577656, - 44.6240877 - ], - [ - -124.0581005, - 44.6239737 - ], - [ - -124.0609913, - 44.6234498 - ], - [ - -124.0639696, - 44.6233387 - ], - [ - -124.0669211, - 44.6236446 - ], - [ - -124.0697324, - 44.6243557 - ], - [ - -124.0722954, - 44.6254449 - ], - [ - -124.0745118, - 44.6268701 - ], - [ - -124.0762964, - 44.6285767 - ], - [ - -124.0775805, - 44.6304991 - ], - [ - -124.0783148, - 44.6325635 - ], - [ - -124.078471, - 44.6346905 - ], - [ - -124.0784343, - 44.6352635 - ], - [ - -124.0780271, - 44.6373107 - ], - [ - -124.077084, - 44.6392658 - ], - [ - -124.0756391, - 44.6410579 - ], - [ - -124.0737447, - 44.642622 - ], - [ - -124.0714695, - 44.6439016 - ], - [ - -124.0688959, - 44.6448502 - ], - [ - -124.066117, - 44.6454335 - ], - [ - -124.0632337, - 44.6456303 - ], - [ - -124.0628791, - 44.6456303 - ], - [ - -124.0628312, - 44.6456303 - ], - [ - -124.0605017, - 44.645625 - ], - [ - -124.0575335, - 44.6454095 - ], - [ - -124.0546812, - 44.6447846 - ], - [ - -124.0520547, - 44.6437745 - ], - [ - -124.0497547, - 44.6424178 - ], - [ - -124.0478698, - 44.6407669 - ], - [ - -124.0464723, - 44.6388851 - ], - [ - -124.0456159, - 44.6368448 - ], - [ - -124.0453335, - 44.6347245 - ], - [ - -124.0456358, - 44.6326055 - ], - [ - -124.0465113, - 44.6305694 - ], - [ - -124.0479261, - 44.6286943 - ], - [ - -124.0498259, - 44.6270523 - ], - [ - -124.0521377, - 44.6257066 - ], - [ - -124.0547726, - 44.6247087 - ], - [ - -124.0576294, - 44.624097 - ], - [ - -124.0577656, - 44.6240877 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16042_s_16043", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0481237, - 44.6320902 - ], - [ - -124.0484959, - 44.6299769 - ], - [ - -124.0494383, - 44.6279561 - ], - [ - -124.0509146, - 44.6261053 - ], - [ - -124.052868, - 44.6244958 - ], - [ - -124.0552235, - 44.6231894 - ], - [ - -124.0578905, - 44.6222361 - ], - [ - -124.0607666, - 44.6216727 - ], - [ - -124.0637413, - 44.6215208 - ], - [ - -124.0667003, - 44.6217861 - ], - [ - -124.0695301, - 44.6224586 - ], - [ - -124.0721219, - 44.6235124 - ], - [ - -124.0743761, - 44.624907 - ], - [ - -124.0762061, - 44.6265888 - ], - [ - -124.0775417, - 44.6284933 - ], - [ - -124.0783313, - 44.6305472 - ], - [ - -124.0785447, - 44.6326717 - ], - [ - -124.0784772, - 44.6344852 - ], - [ - -124.078106, - 44.6365985 - ], - [ - -124.0771645, - 44.6386196 - ], - [ - -124.0756887, - 44.6404706 - ], - [ - -124.0737354, - 44.6420805 - ], - [ - -124.0713796, - 44.6433874 - ], - [ - -124.0687119, - 44.644341 - ], - [ - -124.0658347, - 44.6449046 - ], - [ - -124.0628589, - 44.6450566 - ], - [ - -124.0598986, - 44.6447911 - ], - [ - -124.0570679, - 44.6441184 - ], - [ - -124.0544754, - 44.6430643 - ], - [ - -124.052221, - 44.6416693 - ], - [ - -124.0503911, - 44.6399871 - ], - [ - -124.0490562, - 44.6380823 - ], - [ - -124.0482675, - 44.6360282 - ], - [ - -124.0480552, - 44.6339036 - ], - [ - -124.0481237, - 44.6320902 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16043_s_16044", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0481668, - 44.6308284 - ], - [ - -124.048168, - 44.6307956 - ], - [ - -124.0482447, - 44.6288403 - ], - [ - -124.0486201, - 44.6267273 - ], - [ - -124.0495654, - 44.6247072 - ], - [ - -124.0510444, - 44.6228576 - ], - [ - -124.053, - 44.6212495 - ], - [ - -124.0553573, - 44.6199448 - ], - [ - -124.0580256, - 44.6189936 - ], - [ - -124.0609023, - 44.6184323 - ], - [ - -124.0638771, - 44.6182826 - ], - [ - -124.0668356, - 44.6185503 - ], - [ - -124.0696642, - 44.6192249 - ], - [ - -124.0722543, - 44.6202806 - ], - [ - -124.0745063, - 44.6216769 - ], - [ - -124.0763338, - 44.6233601 - ], - [ - -124.0776664, - 44.6252656 - ], - [ - -124.078453, - 44.6273201 - ], - [ - -124.0786632, - 44.6294448 - ], - [ - -124.0785881, - 44.6313837 - ], - [ - -124.0785447, - 44.6326418 - ], - [ - -124.0781794, - 44.6347557 - ], - [ - -124.0772434, - 44.6367781 - ], - [ - -124.0757728, - 44.6386312 - ], - [ - -124.073824, - 44.6402438 - ], - [ - -124.0714718, - 44.641554 - ], - [ - -124.0688068, - 44.6425113 - ], - [ - -124.0659313, - 44.6430789 - ], - [ - -124.0629559, - 44.6432351 - ], - [ - -124.0599951, - 44.6429738 - ], - [ - -124.0571626, - 44.642305 - ], - [ - -124.0545673, - 44.6412545 - ], - [ - -124.0523091, - 44.6398627 - ], - [ - -124.0504747, - 44.638183 - ], - [ - -124.0491346, - 44.6362801 - ], - [ - -124.0483403, - 44.6342271 - ], - [ - -124.0481222, - 44.6321028 - ], - [ - -124.0481668, - 44.6308284 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16044_s_16045", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0491891, - 44.6328754 - ], - [ - -124.0480949, - 44.6311714 - ], - [ - -124.0474046, - 44.6290992 - ], - [ - -124.0472937, - 44.6269708 - ], - [ - -124.0477664, - 44.6248678 - ], - [ - -124.0488044, - 44.622871 - ], - [ - -124.0503679, - 44.6210572 - ], - [ - -124.0523966, - 44.6194961 - ], - [ - -124.0548128, - 44.6182476 - ], - [ - -124.0575234, - 44.6173597 - ], - [ - -124.0604244, - 44.6168665 - ], - [ - -124.0634044, - 44.6167869 - ], - [ - -124.0663488, - 44.617124 - ], - [ - -124.0691447, - 44.6178648 - ], - [ - -124.0701641, - 44.6182196 - ], - [ - -124.0726332, - 44.6192975 - ], - [ - -124.0747719, - 44.6206898 - ], - [ - -124.0765029, - 44.6223462 - ], - [ - -124.0777634, - 44.6242066 - ], - [ - -124.078508, - 44.6262039 - ], - [ - -124.0787095, - 44.6282657 - ], - [ - -124.0786678, - 44.6294269 - ], - [ - -124.0782996, - 44.6315405 - ], - [ - -124.077361, - 44.6335623 - ], - [ - -124.075888, - 44.6354144 - ], - [ - -124.0739371, - 44.6370257 - ], - [ - -124.0715833, - 44.6383342 - ], - [ - -124.0689171, - 44.6392897 - ], - [ - -124.066041, - 44.6398553 - ], - [ - -124.0630656, - 44.6400094 - ], - [ - -124.0601053, - 44.6397461 - ], - [ - -124.0572738, - 44.6390754 - ], - [ - -124.0546802, - 44.6380231 - ], - [ - -124.052424, - 44.6366297 - ], - [ - -124.0505919, - 44.6349488 - ], - [ - -124.0492545, - 44.633045 - ], - [ - -124.0491891, - 44.6328754 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16045_s_15942", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0736143, - 44.6202666 - ], - [ - -124.0739567, - 44.6204973 - ], - [ - -124.0756854, - 44.6222329 - ], - [ - -124.0769069, - 44.624176 - ], - [ - -124.0775742, - 44.6262519 - ], - [ - -124.0776615, - 44.6283809 - ], - [ - -124.0771655, - 44.6304812 - ], - [ - -124.0761052, - 44.632472 - ], - [ - -124.0745213, - 44.6342768 - ], - [ - -124.0724746, - 44.6358263 - ], - [ - -124.0700437, - 44.6370608 - ], - [ - -124.0673222, - 44.637933 - ], - [ - -124.0644146, - 44.6384092 - ], - [ - -124.0614327, - 44.6384712 - ], - [ - -124.0584912, - 44.6381166 - ], - [ - -124.0557031, - 44.637359 - ], - [ - -124.0546701, - 44.6369919 - ], - [ - -124.052078, - 44.6358244 - ], - [ - -124.0498662, - 44.6343097 - ], - [ - -124.0481244, - 44.6325093 - ], - [ - -124.0476683, - 44.6317448 - ], - [ - -124.0476505, - 44.6317312 - ], - [ - -124.0473568, - 44.6314996 - ], - [ - -124.0468688, - 44.6311036 - ], - [ - -124.0467273, - 44.6309871 - ], - [ - -124.0460663, - 44.630435 - ], - [ - -124.0460178, - 44.6303942 - ], - [ - -124.0438579, - 44.628572 - ], - [ - -124.0435653, - 44.6283174 - ], - [ - -124.0426883, - 44.6275303 - ], - [ - -124.042586, - 44.6274375 - ], - [ - -124.0417161, - 44.626639 - ], - [ - -124.0404163, - 44.6254485 - ], - [ - -124.04027, - 44.6253123 - ], - [ - -124.040047, - 44.6251013 - ], - [ - -124.0395863, - 44.6246408 - ], - [ - -124.0393913, - 44.6244348 - ], - [ - -124.039149, - 44.6241706 - ], - [ - -124.0389421, - 44.6239375 - ], - [ - -124.0386247, - 44.6235638 - ], - [ - -124.0384097, - 44.6232988 - ], - [ - -124.0380085, - 44.6227709 - ], - [ - -124.0378215, - 44.6225079 - ], - [ - -124.037763, - 44.6224247 - ], - [ - -124.037486, - 44.6220266 - ], - [ - -124.0370026, - 44.6212583 - ], - [ - -124.0368272, - 44.6209481 - ], - [ - -124.036626, - 44.6205959 - ], - [ - -124.0362979, - 44.6199663 - ], - [ - -124.0361589, - 44.6196723 - ], - [ - -124.0358421, - 44.6189109 - ], - [ - -124.0357301, - 44.6186009 - ], - [ - -124.0355901, - 44.6181782 - ], - [ - -124.0355061, - 44.6179002 - ], - [ - -124.0354282, - 44.6176249 - ], - [ - -124.0352914, - 44.6171069 - ], - [ - -124.0351708, - 44.61658 - ], - [ - -124.0351019, - 44.616224 - ], - [ - -124.035084, - 44.6161312 - ], - [ - -124.034944, - 44.6148416 - ], - [ - -124.0349413, - 44.6147336 - ], - [ - -124.0349327, - 44.6144235 - ], - [ - -124.03493, - 44.6141416 - ], - [ - -124.0349321, - 44.6139006 - ], - [ - -124.0349322, - 44.6138881 - ], - [ - -124.0349332, - 44.6137871 - ], - [ - -124.034942, - 44.6134892 - ], - [ - -124.034955, - 44.6132202 - ], - [ - -124.0349953, - 44.6127216 - ], - [ - -124.0350164, - 44.6125356 - ], - [ - -124.03503, - 44.6124223 - ], - [ - -124.0350541, - 44.6122343 - ], - [ - -124.0351627, - 44.6115948 - ], - [ - -124.0351828, - 44.6115004 - ], - [ - -124.0351966, - 44.6114301 - ], - [ - -124.0352321, - 44.6112599 - ], - [ - -124.0352411, - 44.6112189 - ], - [ - -124.0352776, - 44.6110607 - ], - [ - -124.0352906, - 44.6110067 - ], - [ - -124.0353199, - 44.6108889 - ], - [ - -124.035378, - 44.6106629 - ], - [ - -124.0355388, - 44.6101162 - ], - [ - -124.035685, - 44.6096762 - ], - [ - -124.0358904, - 44.609123 - ], - [ - -124.0360124, - 44.608826 - ], - [ - -124.0360291, - 44.6087856 - ], - [ - -124.0360441, - 44.6087496 - ], - [ - -124.0363141, - 44.6081635 - ], - [ - -124.0365242, - 44.6077475 - ], - [ - -124.036788, - 44.607262 - ], - [ - -124.036937, - 44.607006 - ], - [ - -124.0383464, - 44.6051291 - ], - [ - -124.0402412, - 44.6034846 - ], - [ - -124.0425485, - 44.6021357 - ], - [ - -124.0451797, - 44.6011343 - ], - [ - -124.0480338, - 44.6005188 - ], - [ - -124.051001, - 44.6003129 - ], - [ - -124.0539675, - 44.6005244 - ], - [ - -124.0568193, - 44.6011452 - ], - [ - -124.0594468, - 44.6021516 - ], - [ - -124.0617491, - 44.6035048 - ], - [ - -124.0636378, - 44.6051528 - ], - [ - -124.0650403, - 44.6070324 - ], - [ - -124.0659025, - 44.6090714 - ], - [ - -124.0661914, - 44.6111913 - ], - [ - -124.0658958, - 44.6133107 - ], - [ - -124.0658538, - 44.6134092 - ], - [ - -124.0665464, - 44.6140447 - ], - [ - -124.0672283, - 44.6146565 - ], - [ - -124.0692152, - 44.6163322 - ], - [ - -124.0697817, - 44.6168052 - ], - [ - -124.0700538, - 44.617026 - ], - [ - -124.0704556, - 44.6173337 - ], - [ - -124.0705579, - 44.6174128 - ], - [ - -124.0706859, - 44.6175128 - ], - [ - -124.071036, - 44.6178 - ], - [ - -124.0710361, - 44.6178 - ], - [ - -124.0713941, - 44.6180929 - ], - [ - -124.0717, - 44.6183513 - ], - [ - -124.071895, - 44.6185212 - ], - [ - -124.0725703, - 44.619156 - ], - [ - -124.0728944, - 44.619485 - ], - [ - -124.0730262, - 44.6196211 - ], - [ - -124.0731282, - 44.619728 - ], - [ - -124.0733403, - 44.6200014 - ], - [ - -124.0733662, - 44.6199895 - ], - [ - -124.0736043, - 44.6202545 - ], - [ - -124.0736143, - 44.6202666 - ] - ], - [ - [ - -124.0652084, - 44.6149227 - ], - [ - -124.0651462, - 44.6150686 - ], - [ - -124.0651514, - 44.6150699 - ], - [ - -124.0651939, - 44.6149664 - ], - [ - -124.0652084, - 44.6149227 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16047_s_15967", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0678216, - 44.6110737 - ], - [ - -124.0677922, - 44.6111179 - ], - [ - -124.0675607, - 44.6114647 - ], - [ - -124.0673163, - 44.6118569 - ], - [ - -124.0671853, - 44.6120614 - ], - [ - -124.0668403, - 44.6125855 - ], - [ - -124.0667793, - 44.6126772 - ], - [ - -124.0659421, - 44.6139188 - ], - [ - -124.0656689, - 44.614342 - ], - [ - -124.0654233, - 44.614723 - ], - [ - -124.0653, - 44.6149178 - ], - [ - -124.0651709, - 44.6151229 - ], - [ - -124.0651614, - 44.6151379 - ], - [ - -124.0650859, - 44.6152574 - ], - [ - -124.0645112, - 44.6168547 - ], - [ - -124.0632197, - 44.6187745 - ], - [ - -124.0614286, - 44.6204775 - ], - [ - -124.0592066, - 44.6218981 - ], - [ - -124.0566391, - 44.6229818 - ], - [ - -124.0538248, - 44.6236868 - ], - [ - -124.050872, - 44.6239862 - ], - [ - -124.0478942, - 44.6238683 - ], - [ - -124.0450058, - 44.6233377 - ], - [ - -124.0423179, - 44.6224148 - ], - [ - -124.0399339, - 44.6211351 - ], - [ - -124.0379454, - 44.6195477 - ], - [ - -124.0364288, - 44.6177138 - ], - [ - -124.0354423, - 44.6157038 - ], - [ - -124.0350238, - 44.6135949 - ], - [ - -124.0351824, - 44.6115582 - ], - [ - -124.0351716, - 44.6115571 - ], - [ - -124.0351966, - 44.6114301 - ], - [ - -124.0352321, - 44.6112599 - ], - [ - -124.0352411, - 44.6112189 - ], - [ - -124.0352776, - 44.6110607 - ], - [ - -124.0352906, - 44.6110067 - ], - [ - -124.0353199, - 44.6108889 - ], - [ - -124.035378, - 44.6106629 - ], - [ - -124.0355388, - 44.6101162 - ], - [ - -124.035685, - 44.6096762 - ], - [ - -124.0358904, - 44.609123 - ], - [ - -124.0360124, - 44.608826 - ], - [ - -124.0360291, - 44.6087856 - ], - [ - -124.0360441, - 44.6087496 - ], - [ - -124.0363141, - 44.6081635 - ], - [ - -124.0365242, - 44.6077475 - ], - [ - -124.0367802, - 44.6072754 - ], - [ - -124.0369872, - 44.6069185 - ], - [ - -124.0371727, - 44.6066121 - ], - [ - -124.0372667, - 44.6064632 - ], - [ - -124.0374319, - 44.6062019 - ], - [ - -124.0375632, - 44.6059934 - ], - [ - -124.037577, - 44.6059716 - ], - [ - -124.0377291, - 44.6057317 - ], - [ - -124.037773, - 44.605663 - ], - [ - -124.0380421, - 44.605246 - ], - [ - -124.0383724, - 44.6047346 - ], - [ - -124.0384817, - 44.604569 - ], - [ - -124.0393441, - 44.6032909 - ], - [ - -124.0395919, - 44.6029147 - ], - [ - -124.0398539, - 44.6024944 - ], - [ - -124.0400219, - 44.6022344 - ], - [ - -124.0403252, - 44.6017805 - ], - [ - -124.0424532, - 44.5985589 - ], - [ - -124.0439835, - 44.596731 - ], - [ - -124.0459835, - 44.5951515 - ], - [ - -124.0483761, - 44.5938812 - ], - [ - -124.0510696, - 44.5929686 - ], - [ - -124.0539603, - 44.5924491 - ], - [ - -124.0569374, - 44.5923424 - ], - [ - -124.0598864, - 44.5926527 - ], - [ - -124.0626941, - 44.593368 - ], - [ - -124.0652526, - 44.594461 - ], - [ - -124.0674637, - 44.5958895 - ], - [ - -124.0692423, - 44.5975988 - ], - [ - -124.0705201, - 44.5995232 - ], - [ - -124.071248, - 44.6015886 - ], - [ - -124.0713979, - 44.6037159 - ], - [ - -124.070964, - 44.6058231 - ], - [ - -124.069963, - 44.6078294 - ], - [ - -124.0678216, - 44.6110737 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16048_s_16051", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0649951, - 44.6193512 - ], - [ - -124.0649018, - 44.6208676 - ], - [ - -124.0641589, - 44.6229868 - ], - [ - -124.0628374, - 44.6249571 - ], - [ - -124.061665, - 44.6260626 - ], - [ - -124.0611702, - 44.6278726 - ], - [ - -124.061134, - 44.6279604 - ], - [ - -124.0600778, - 44.6298465 - ], - [ - -124.0585483, - 44.6315592 - ], - [ - -124.0565991, - 44.6330386 - ], - [ - -124.0542982, - 44.6342331 - ], - [ - -124.051726, - 44.6351008 - ], - [ - -124.0515664, - 44.6351421 - ], - [ - -124.0485703, - 44.6356794 - ], - [ - -124.045484, - 44.6357734 - ], - [ - -124.0424347, - 44.6354204 - ], - [ - -124.0395482, - 44.6346349 - ], - [ - -124.0369434, - 44.6334492 - ], - [ - -124.0347277, - 44.6319123 - ], - [ - -124.0346496, - 44.6318459 - ], - [ - -124.0327941, - 44.6298585 - ], - [ - -124.0315916, - 44.6276297 - ], - [ - -124.0311002, - 44.6252671 - ], - [ - -124.0313435, - 44.6228849 - ], - [ - -124.0313696, - 44.6227842 - ], - [ - -124.0313715, - 44.6227799 - ], - [ - -124.0313365, - 44.6222308 - ], - [ - -124.0320418, - 44.6196769 - ], - [ - -124.0320865, - 44.6195789 - ], - [ - -124.0325994, - 44.618772 - ], - [ - -124.0323029, - 44.6179234 - ], - [ - -124.0322839, - 44.6178454 - ], - [ - -124.0320606, - 44.616128 - ], - [ - -124.0320586, - 44.616021 - ], - [ - -124.0322423, - 44.6141887 - ], - [ - -124.03228, - 44.6140176 - ], - [ - -124.0314436, - 44.6129746 - ], - [ - -124.0313876, - 44.6128916 - ], - [ - -124.0306443, - 44.6115762 - ], - [ - -124.0306023, - 44.6114852 - ], - [ - -124.0303956, - 44.6109991 - ], - [ - -124.0303566, - 44.610899 - ], - [ - -124.030045, - 44.6097083 - ], - [ - -124.0300433, - 44.6097062 - ], - [ - -124.0293793, - 44.6087634 - ], - [ - -124.0293153, - 44.6086604 - ], - [ - -124.0282997, - 44.6063705 - ], - [ - -124.0282677, - 44.6062555 - ], - [ - -124.028057, - 44.6052568 - ], - [ - -124.0280381, - 44.6051258 - ], - [ - -124.0279648, - 44.6043483 - ], - [ - -124.0279469, - 44.6039403 - ], - [ - -124.0281577, - 44.6017659 - ], - [ - -124.0289717, - 44.5996654 - ], - [ - -124.0303559, - 44.5977232 - ], - [ - -124.0322548, - 44.5960174 - ], - [ - -124.0345919, - 44.5946167 - ], - [ - -124.0372731, - 44.5935774 - ], - [ - -124.0401905, - 44.5929413 - ], - [ - -124.0404309, - 44.5929249 - ], - [ - -124.0410033, - 44.5927277 - ], - [ - -124.0438508, - 44.5921964 - ], - [ - -124.046788, - 44.5920669 - ], - [ - -124.0497052, - 44.5923441 - ], - [ - -124.0497645, - 44.592354 - ], - [ - -124.0523026, - 44.5929491 - ], - [ - -124.0546559, - 44.5938523 - ], - [ - -124.0567518, - 44.5950358 - ], - [ - -124.0585256, - 44.5964631 - ], - [ - -124.058599, - 44.5965339 - ], - [ - -124.0601318, - 44.5983608 - ], - [ - -124.0611363, - 44.6003662 - ], - [ - -124.0614463, - 44.6018586 - ], - [ - -124.0631783, - 44.6034787 - ], - [ - -124.0644691, - 44.6053335 - ], - [ - -124.0652437, - 44.6073296 - ], - [ - -124.065474, - 44.6093945 - ], - [ - -124.0654473, - 44.6105885 - ], - [ - -124.0654407, - 44.6107795 - ], - [ - -124.0654379, - 44.6108379 - ], - [ - -124.0654642, - 44.6112186 - ], - [ - -124.0653452, - 44.6132103 - ], - [ - -124.0647187, - 44.6151529 - ], - [ - -124.0647095, - 44.615168 - ], - [ - -124.064936, - 44.6159318 - ], - [ - -124.0649601, - 44.6160738 - ], - [ - -124.0650562, - 44.6169139 - ], - [ - -124.0650652, - 44.6170649 - ], - [ - -124.0650778, - 44.6176703 - ], - [ - -124.0650728, - 44.6179433 - ], - [ - -124.0650729, - 44.6179503 - ], - [ - -124.0650724, - 44.6181337 - ], - [ - -124.0650547, - 44.6193517 - ], - [ - -124.0649951, - 44.6193512 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16048_s_2438934", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0613255, - 44.6017734 - ], - [ - -124.0614184, - 44.6018325 - ], - [ - -124.0631783, - 44.6034787 - ], - [ - -124.0644691, - 44.6053335 - ], - [ - -124.0652437, - 44.6073296 - ], - [ - -124.065474, - 44.6093945 - ], - [ - -124.0654473, - 44.6105885 - ], - [ - -124.0654407, - 44.6107795 - ], - [ - -124.065438, - 44.6108357 - ], - [ - -124.0654643, - 44.611214 - ], - [ - -124.0653357, - 44.6132613 - ], - [ - -124.0646712, - 44.615255 - ], - [ - -124.0634943, - 44.617124 - ], - [ - -124.0618468, - 44.6188019 - ], - [ - -124.0617959, - 44.6188446 - ], - [ - -124.0596479, - 44.620322 - ], - [ - -124.0571374, - 44.6214718 - ], - [ - -124.0543611, - 44.6222495 - ], - [ - -124.0514255, - 44.6226255 - ], - [ - -124.0484437, - 44.6225851 - ], - [ - -124.0455302, - 44.62213 - ], - [ - -124.0427972, - 44.6212776 - ], - [ - -124.0403495, - 44.6200607 - ], - [ - -124.0382814, - 44.6185262 - ], - [ - -124.0376641, - 44.6178381 - ], - [ - -124.0375264, - 44.6177817 - ], - [ - -124.0373204, - 44.6176857 - ], - [ - -124.0366794, - 44.61737 - ], - [ - -124.0365044, - 44.6172789 - ], - [ - -124.0361006, - 44.6170615 - ], - [ - -124.0359696, - 44.6169885 - ], - [ - -124.0340298, - 44.6156982 - ], - [ - -124.0339288, - 44.6156182 - ], - [ - -124.0325986, - 44.6144005 - ], - [ - -124.0325196, - 44.6143164 - ], - [ - -124.0314436, - 44.6129746 - ], - [ - -124.0313876, - 44.6128916 - ], - [ - -124.0306443, - 44.6115762 - ], - [ - -124.0306023, - 44.6114852 - ], - [ - -124.0303956, - 44.6109991 - ], - [ - -124.0303566, - 44.610899 - ], - [ - -124.030045, - 44.6097083 - ], - [ - -124.0300433, - 44.6097062 - ], - [ - -124.0293793, - 44.6087634 - ], - [ - -124.0293153, - 44.6086604 - ], - [ - -124.0282997, - 44.6063705 - ], - [ - -124.0282677, - 44.6062555 - ], - [ - -124.028057, - 44.6052568 - ], - [ - -124.0280381, - 44.6051258 - ], - [ - -124.0279648, - 44.6043483 - ], - [ - -124.0279469, - 44.6039403 - ], - [ - -124.0281577, - 44.6017659 - ], - [ - -124.0289717, - 44.5996654 - ], - [ - -124.0303559, - 44.5977232 - ], - [ - -124.0322548, - 44.5960174 - ], - [ - -124.0345919, - 44.5946167 - ], - [ - -124.0372731, - 44.5935774 - ], - [ - -124.0401905, - 44.5929413 - ], - [ - -124.041924, - 44.5928229 - ], - [ - -124.0442617, - 44.5924353 - ], - [ - -124.0470883, - 44.5923509 - ], - [ - -124.0498878, - 44.5926421 - ], - [ - -124.0525635, - 44.5932987 - ], - [ - -124.0550227, - 44.5942981 - ], - [ - -124.0571803, - 44.5956056 - ], - [ - -124.0589617, - 44.5971761 - ], - [ - -124.0603052, - 44.5989551 - ], - [ - -124.0603202, - 44.5989804 - ], - [ - -124.0612111, - 44.601013 - ], - [ - -124.0613255, - 44.6017734 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16049_s_16050", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0618887, - 44.6126296 - ], - [ - -124.0626157, - 44.6136329 - ], - [ - -124.0634308, - 44.6155846 - ], - [ - -124.0634808, - 44.6157646 - ], - [ - -124.0637722, - 44.6178843 - ], - [ - -124.063479, - 44.620004 - ], - [ - -124.0626124, - 44.622042 - ], - [ - -124.0612056, - 44.6239201 - ], - [ - -124.0593128, - 44.6255661 - ], - [ - -124.0570065, - 44.6269167 - ], - [ - -124.0543755, - 44.62792 - ], - [ - -124.051521, - 44.6285374 - ], - [ - -124.0485525, - 44.6287451 - ], - [ - -124.0455844, - 44.6285353 - ], - [ - -124.0427306, - 44.6279159 - ], - [ - -124.040101, - 44.6269107 - ], - [ - -124.0377966, - 44.6255585 - ], - [ - -124.035906, - 44.6239112 - ], - [ - -124.0357345, - 44.6236817 - ], - [ - -124.0351013, - 44.623156 - ], - [ - -124.0349613, - 44.623006 - ], - [ - -124.0335675, - 44.6211415 - ], - [ - -124.0333876, - 44.6208314 - ], - [ - -124.0324389, - 44.6184734 - ], - [ - -124.0324118, - 44.6181126 - ], - [ - -124.0322507, - 44.6176988 - ], - [ - -124.0321136, - 44.6151825 - ], - [ - -124.0321537, - 44.6148125 - ], - [ - -124.0326741, - 44.6127152 - ], - [ - -124.0337573, - 44.6107308 - ], - [ - -124.0353615, - 44.6089354 - ], - [ - -124.0374252, - 44.6073981 - ], - [ - -124.0398689, - 44.6061778 - ], - [ - -124.0425989, - 44.6053215 - ], - [ - -124.0455101, - 44.604862 - ], - [ - -124.0484909, - 44.6048171 - ], - [ - -124.0514267, - 44.6051884 - ], - [ - -124.0542048, - 44.6059616 - ], - [ - -124.0567184, - 44.6071071 - ], - [ - -124.058871, - 44.6085809 - ], - [ - -124.0605799, - 44.6103263 - ], - [ - -124.0617793, - 44.6122763 - ], - [ - -124.0618887, - 44.6126296 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16050_s_16051", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0636848, - 44.6190985 - ], - [ - -124.0634928, - 44.6197839 - ], - [ - -124.0634454, - 44.6209776 - ], - [ - -124.0628093, - 44.6230076 - ], - [ - -124.0621645, - 44.6240617 - ], - [ - -124.0618979, - 44.6248912 - ], - [ - -124.0618643, - 44.6248857 - ], - [ - -124.0617623, - 44.6251826 - ], - [ - -124.0617607, - 44.6251918 - ], - [ - -124.0617135, - 44.6255895 - ], - [ - -124.061691, - 44.6256767 - ], - [ - -124.0615259, - 44.6269558 - ], - [ - -124.0605143, - 44.6292095 - ], - [ - -124.0604569, - 44.6293014 - ], - [ - -124.058809, - 44.6313228 - ], - [ - -124.0565934, - 44.6330455 - ], - [ - -124.0539126, - 44.6343896 - ], - [ - -124.0537966, - 44.6344353 - ], - [ - -124.0508452, - 44.6353235 - ], - [ - -124.0476988, - 44.6357508 - ], - [ - -124.0444967, - 44.6356983 - ], - [ - -124.041381, - 44.6351683 - ], - [ - -124.0384898, - 44.6341844 - ], - [ - -124.0383654, - 44.6341299 - ], - [ - -124.0359471, - 44.6328165 - ], - [ - -124.0339425, - 44.6311862 - ], - [ - -124.0324317, - 44.6293039 - ], - [ - -124.0314747, - 44.6272448 - ], - [ - -124.0311097, - 44.625091 - ], - [ - -124.0313088, - 44.6233079 - ], - [ - -124.0312924, - 44.6231946 - ], - [ - -124.0315146, - 44.6212155 - ], - [ - -124.0315399, - 44.6211111 - ], - [ - -124.0323104, - 44.6191029 - ], - [ - -124.0326776, - 44.6185727 - ], - [ - -124.0330317, - 44.6168168 - ], - [ - -124.0332619, - 44.6161669 - ], - [ - -124.0340013, - 44.6145948 - ], - [ - -124.0344224, - 44.6140127 - ], - [ - -124.0350115, - 44.6129402 - ], - [ - -124.0366211, - 44.6111472 - ], - [ - -124.0386894, - 44.609613 - ], - [ - -124.0411369, - 44.6083965 - ], - [ - -124.0438695, - 44.6075443 - ], - [ - -124.0467822, - 44.6070893 - ], - [ - -124.0497632, - 44.6070489 - ], - [ - -124.052698, - 44.6074246 - ], - [ - -124.0554739, - 44.6082021 - ], - [ - -124.0579842, - 44.6093514 - ], - [ - -124.0601325, - 44.6108285 - ], - [ - -124.0618362, - 44.6125765 - ], - [ - -124.0630299, - 44.6145283 - ], - [ - -124.0636676, - 44.616609 - ], - [ - -124.0637247, - 44.6187385 - ], - [ - -124.0636848, - 44.6190985 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16051_s_16052", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0619783, - 44.6247775 - ], - [ - -124.0617201, - 44.6258578 - ], - [ - -124.0608473, - 44.627615 - ], - [ - -124.0608436, - 44.6276198 - ], - [ - -124.0606802, - 44.6279771 - ], - [ - -124.0592192, - 44.629834 - ], - [ - -124.0572789, - 44.6314517 - ], - [ - -124.0549338, - 44.6327679 - ], - [ - -124.0522741, - 44.6337321 - ], - [ - -124.0494019, - 44.6343072 - ], - [ - -124.0464278, - 44.6344711 - ], - [ - -124.0434661, - 44.6342174 - ], - [ - -124.0406306, - 44.633556 - ], - [ - -124.0380304, - 44.6325122 - ], - [ - -124.0357655, - 44.6311262 - ], - [ - -124.0339228, - 44.6294513 - ], - [ - -124.0325733, - 44.6275519 - ], - [ - -124.0317686, - 44.6255009 - ], - [ - -124.0315398, - 44.6233773 - ], - [ - -124.031543, - 44.6232678 - ], - [ - -124.0318236, - 44.6214103 - ], - [ - -124.0318375, - 44.6213596 - ], - [ - -124.0320685, - 44.6206943 - ], - [ - -124.0322689, - 44.6200604 - ], - [ - -124.0322574, - 44.6200586 - ], - [ - -124.0326955, - 44.6186204 - ], - [ - -124.0335559, - 44.6166869 - ], - [ - -124.0349045, - 44.6149014 - ], - [ - -124.0366942, - 44.613326 - ], - [ - -124.0388627, - 44.6120158 - ], - [ - -124.0413343, - 44.6110163 - ], - [ - -124.0440228, - 44.6103623 - ], - [ - -124.0468346, - 44.6100768 - ], - [ - -124.0496718, - 44.6101695 - ], - [ - -124.0498857, - 44.6101909 - ], - [ - -124.0527838, - 44.6106918 - ], - [ - -124.0554895, - 44.6115868 - ], - [ - -124.0578989, - 44.6128417 - ], - [ - -124.0599194, - 44.6144081 - ], - [ - -124.0614733, - 44.616226 - ], - [ - -124.0625009, - 44.6182255 - ], - [ - -124.0629627, - 44.6203298 - ], - [ - -124.0628408, - 44.6224579 - ], - [ - -124.0621399, - 44.6245282 - ], - [ - -124.0619783, - 44.6247775 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16052_s_16053", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0608657, - 44.6275684 - ], - [ - -124.0599291, - 44.6284534 - ], - [ - -124.0576069, - 44.6299083 - ], - [ - -124.0549209, - 44.6309982 - ], - [ - -124.0519819, - 44.6316782 - ], - [ - -124.0489111, - 44.6319201 - ], - [ - -124.0458352, - 44.6317141 - ], - [ - -124.0452487, - 44.6316312 - ], - [ - -124.0448395, - 44.6316044 - ], - [ - -124.0419795, - 44.6309996 - ], - [ - -124.0393398, - 44.6300078 - ], - [ - -124.0370218, - 44.6286674 - ], - [ - -124.0351148, - 44.6270297 - ], - [ - -124.0336918, - 44.6251578 - ], - [ - -124.0328076, - 44.6231236 - ], - [ - -124.0324962, - 44.6210053 - ], - [ - -124.0327694, - 44.6188843 - ], - [ - -124.0336166, - 44.6168422 - ], - [ - -124.0350053, - 44.6149573 - ], - [ - -124.035904, - 44.6141646 - ], - [ - -124.0364907, - 44.6134699 - ], - [ - -124.0372937, - 44.6128693 - ], - [ - -124.0380092, - 44.6121879 - ], - [ - -124.0404627, - 44.6106708 - ], - [ - -124.0413423, - 44.6103277 - ], - [ - -124.0414181, - 44.6102829 - ], - [ - -124.0433004, - 44.6095639 - ], - [ - -124.0433108, - 44.6095599 - ], - [ - -124.0433113, - 44.6095598 - ], - [ - -124.0440933, - 44.6092611 - ], - [ - -124.0469991, - 44.6086387 - ], - [ - -124.0500199, - 44.6084406 - ], - [ - -124.0512086, - 44.6084476 - ], - [ - -124.0541733, - 44.6086739 - ], - [ - -124.0570193, - 44.609309 - ], - [ - -124.0596373, - 44.6103284 - ], - [ - -124.0619267, - 44.6116931 - ], - [ - -124.0637995, - 44.6133505 - ], - [ - -124.0651837, - 44.615237 - ], - [ - -124.0660262, - 44.6172802 - ], - [ - -124.0662944, - 44.6194015 - ], - [ - -124.065978, - 44.6215194 - ], - [ - -124.0650891, - 44.6235526 - ], - [ - -124.0636619, - 44.6254228 - ], - [ - -124.061751, - 44.6270581 - ], - [ - -124.0608657, - 44.6275684 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16053_s_833259", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0731476, - 44.6200518 - ], - [ - -124.0740771, - 44.6214954 - ], - [ - -124.0741072, - 44.6215554 - ], - [ - -124.0748871, - 44.6239249 - ], - [ - -124.0748971, - 44.6239849 - ], - [ - -124.0748978, - 44.6265531 - ], - [ - -124.0748878, - 44.6266131 - ], - [ - -124.0743782, - 44.6283911 - ], - [ - -124.0734612, - 44.6300837 - ], - [ - -124.0721624, - 44.6316437 - ], - [ - -124.0720924, - 44.6317137 - ], - [ - -124.0700374, - 44.6333789 - ], - [ - -124.0675513, - 44.6347111 - ], - [ - -124.0672214, - 44.6348218 - ], - [ - -124.0661644, - 44.6354868 - ], - [ - -124.0635845, - 44.636556 - ], - [ - -124.060762, - 44.6372452 - ], - [ - -124.0578052, - 44.637528 - ], - [ - -124.0548281, - 44.6373934 - ], - [ - -124.051945, - 44.6368466 - ], - [ - -124.0492667, - 44.6359087 - ], - [ - -124.0468963, - 44.6346156 - ], - [ - -124.0449249, - 44.6330172 - ], - [ - -124.0434281, - 44.6311748 - ], - [ - -124.0424636, - 44.6291593 - ], - [ - -124.0422718, - 44.6281355 - ], - [ - -124.0403216, - 44.6269923 - ], - [ - -124.0384298, - 44.6253456 - ], - [ - -124.0370244, - 44.623467 - ], - [ - -124.0361592, - 44.6214286 - ], - [ - -124.0359469, - 44.6198862 - ], - [ - -124.0356342, - 44.6187833 - ], - [ - -124.0356242, - 44.6187233 - ], - [ - -124.035614, - 44.6162218 - ], - [ - -124.0364049, - 44.6137849 - ], - [ - -124.0364449, - 44.6137049 - ], - [ - -124.0378185, - 44.6116617 - ], - [ - -124.0397555, - 44.6098665 - ], - [ - -124.0398355, - 44.6098065 - ], - [ - -124.0430986, - 44.6079515 - ], - [ - -124.0433585, - 44.6078415 - ], - [ - -124.0461883, - 44.6069093 - ], - [ - -124.0492246, - 44.6064086 - ], - [ - -124.05234, - 44.6063604 - ], - [ - -124.0554038, - 44.6067667 - ], - [ - -124.0582874, - 44.6076105 - ], - [ - -124.0608699, - 44.6088563 - ], - [ - -124.0630428, - 44.610452 - ], - [ - -124.0647151, - 44.6123304 - ], - [ - -124.0647906, - 44.6124383 - ], - [ - -124.0656775, - 44.6132438 - ], - [ - -124.065789, - 44.6133463 - ], - [ - -124.0665486, - 44.6140534 - ], - [ - -124.0671961, - 44.6146272 - ], - [ - -124.0692341, - 44.6163441 - ], - [ - -124.0692681, - 44.6163728 - ], - [ - -124.069773, - 44.6168012 - ], - [ - -124.0699975, - 44.6169799 - ], - [ - -124.0704404, - 44.6173181 - ], - [ - -124.0704783, - 44.617347 - ], - [ - -124.0706083, - 44.617447 - ], - [ - -124.0714225, - 44.6181275 - ], - [ - -124.0715325, - 44.6182275 - ], - [ - -124.0723991, - 44.619184 - ], - [ - -124.0729609, - 44.6197619 - ], - [ - -124.0730661, - 44.6199252 - ], - [ - -124.0731565, - 44.6200485 - ], - [ - -124.0731476, - 44.6200518 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16055_s_16057", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0662313, - 44.6220995 - ], - [ - -124.0662611, - 44.6221097 - ], - [ - -124.0686484, - 44.6233862 - ], - [ - -124.0706413, - 44.6249709 - ], - [ - -124.072163, - 44.6268027 - ], - [ - -124.0731552, - 44.6288113 - ], - [ - -124.0735796, - 44.6309196 - ], - [ - -124.0734198, - 44.6330465 - ], - [ - -124.072682, - 44.6351102 - ], - [ - -124.0713945, - 44.6370315 - ], - [ - -124.0696066, - 44.6387365 - ], - [ - -124.0673871, - 44.6401597 - ], - [ - -124.0663427, - 44.6407075 - ], - [ - -124.0651604, - 44.6413362 - ], - [ - -124.0625777, - 44.642444 - ], - [ - -124.0597398, - 44.6431667 - ], - [ - -124.056758, - 44.6434761 - ], - [ - -124.0537493, - 44.6433599 - ], - [ - -124.0508317, - 44.6428228 - ], - [ - -124.0481196, - 44.6418857 - ], - [ - -124.0457193, - 44.6405855 - ], - [ - -124.0437249, - 44.6389732 - ], - [ - -124.0432108, - 44.6384636 - ], - [ - -124.0415931, - 44.636429 - ], - [ - -124.0415026, - 44.6362798 - ], - [ - -124.0407008, - 44.634587 - ], - [ - -124.0406605, - 44.6344714 - ], - [ - -124.0406015, - 44.6342234 - ], - [ - -124.0402818, - 44.6338128 - ], - [ - -124.039369, - 44.631785 - ], - [ - -124.0390278, - 44.6296691 - ], - [ - -124.0392712, - 44.6275462 - ], - [ - -124.0400899, - 44.6254981 - ], - [ - -124.0414522, - 44.6236033 - ], - [ - -124.0433059, - 44.6219348 - ], - [ - -124.0455796, - 44.6205565 - ], - [ - -124.0458526, - 44.6204216 - ], - [ - -124.0482684, - 44.6194467 - ], - [ - -124.0508918, - 44.6188014 - ], - [ - -124.0536357, - 44.6185071 - ], - [ - -124.0564087, - 44.6185736 - ], - [ - -124.0591188, - 44.6189986 - ], - [ - -124.0616758, - 44.6197681 - ], - [ - -124.0626156, - 44.6201262 - ], - [ - -124.0649121, - 44.6212018 - ], - [ - -124.0662313, - 44.6220995 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16057_s_16058", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0613496, - 44.6392548 - ], - [ - -124.058789, - 44.6403477 - ], - [ - -124.0559789, - 44.6410628 - ], - [ - -124.0530273, - 44.6413727 - ], - [ - -124.0500478, - 44.6412654 - ], - [ - -124.0471549, - 44.6407452 - ], - [ - -124.0444598, - 44.6398319 - ], - [ - -124.0420661, - 44.6385607 - ], - [ - -124.0400659, - 44.6369805 - ], - [ - -124.038536, - 44.6351521 - ], - [ - -124.0375351, - 44.6331456 - ], - [ - -124.0371017, - 44.6310383 - ], - [ - -124.0372524, - 44.628911 - ], - [ - -124.0379814, - 44.6268457 - ], - [ - -124.0392605, - 44.6249216 - ], - [ - -124.0410405, - 44.6232126 - ], - [ - -124.0432531, - 44.6217844 - ], - [ - -124.045203, - 44.6207546 - ], - [ - -124.047763, - 44.6196621 - ], - [ - -124.0505722, - 44.6189471 - ], - [ - -124.0535226, - 44.6186373 - ], - [ - -124.056501, - 44.6187445 - ], - [ - -124.0593929, - 44.6192645 - ], - [ - -124.0620873, - 44.6201774 - ], - [ - -124.0644806, - 44.6214482 - ], - [ - -124.066481, - 44.623028 - ], - [ - -124.0680114, - 44.6248561 - ], - [ - -124.0690132, - 44.6268623 - ], - [ - -124.0694477, - 44.6289695 - ], - [ - -124.0692981, - 44.6310967 - ], - [ - -124.0685703, - 44.6331622 - ], - [ - -124.067292, - 44.6350867 - ], - [ - -124.0655123, - 44.6367961 - ], - [ - -124.0632998, - 44.6382247 - ], - [ - -124.0613496, - 44.6392548 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16058_s_16059", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0602245, - 44.6398517 - ], - [ - -124.0586435, - 44.6405863 - ], - [ - -124.0571333, - 44.6411964 - ], - [ - -124.0565657, - 44.6414146 - ], - [ - -124.0544554, - 44.6421847 - ], - [ - -124.0509893, - 44.6430906 - ], - [ - -124.0505092, - 44.6431707 - ], - [ - -124.0481688, - 44.6434257 - ], - [ - -124.0477887, - 44.6434457 - ], - [ - -124.0451544, - 44.6434211 - ], - [ - -124.0425654, - 44.6430724 - ], - [ - -124.0415153, - 44.6428624 - ], - [ - -124.0402213, - 44.6425584 - ], - [ - -124.038191, - 44.6420083 - ], - [ - -124.0373768, - 44.6417682 - ], - [ - -124.0354665, - 44.6411581 - ], - [ - -124.0328758, - 44.6401019 - ], - [ - -124.0306237, - 44.6387051 - ], - [ - -124.0287965, - 44.6370214 - ], - [ - -124.0274647, - 44.6351156 - ], - [ - -124.0266792, - 44.6330608 - ], - [ - -124.0264703, - 44.6309361 - ], - [ - -124.0268458, - 44.6288231 - ], - [ - -124.0277914, - 44.626803 - ], - [ - -124.0292705, - 44.6249535 - ], - [ - -124.0312264, - 44.6233455 - ], - [ - -124.0335839, - 44.6220409 - ], - [ - -124.0362523, - 44.6210898 - ], - [ - -124.0391293, - 44.6205287 - ], - [ - -124.0421041, - 44.6203791 - ], - [ - -124.0450627, - 44.6206468 - ], - [ - -124.0456087, - 44.6207771 - ], - [ - -124.0457851, - 44.6207014 - ], - [ - -124.0485923, - 44.6199825 - ], - [ - -124.051542, - 44.6196684 - ], - [ - -124.0545207, - 44.6197713 - ], - [ - -124.0574141, - 44.6202871 - ], - [ - -124.0601111, - 44.6211962 - ], - [ - -124.0625081, - 44.6224635 - ], - [ - -124.0645129, - 44.6240404 - ], - [ - -124.0660486, - 44.6258662 - ], - [ - -124.067056, - 44.627871 - ], - [ - -124.0674964, - 44.6299776 - ], - [ - -124.0673529, - 44.632105 - ], - [ - -124.0666309, - 44.6341716 - ], - [ - -124.065358, - 44.6360979 - ], - [ - -124.0635832, - 44.6378098 - ], - [ - -124.0613746, - 44.6392416 - ], - [ - -124.0602245, - 44.6398517 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16059_s_16060", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0567008, - 44.6330008 - ], - [ - -124.0570686, - 44.6349951 - ], - [ - -124.0568736, - 44.6371204 - ], - [ - -124.0561016, - 44.6391778 - ], - [ - -124.0547822, - 44.6410881 - ], - [ - -124.0529661, - 44.6427779 - ], - [ - -124.050723, - 44.6441822 - ], - [ - -124.0481391, - 44.6452471 - ], - [ - -124.0453139, - 44.6459316 - ], - [ - -124.0423558, - 44.6462093 - ], - [ - -124.0393786, - 44.6460697 - ], - [ - -124.0364969, - 44.645518 - ], - [ - -124.0338214, - 44.6445756 - ], - [ - -124.0314549, - 44.6432785 - ], - [ - -124.0300049, - 44.6423084 - ], - [ - -124.0279376, - 44.6406048 - ], - [ - -124.0264073, - 44.6386333 - ], - [ - -124.0254798, - 44.6364788 - ], - [ - -124.0253998, - 44.6361888 - ], - [ - -124.0253011, - 44.6357917 - ], - [ - -124.0252611, - 44.6356117 - ], - [ - -124.0250921, - 44.6333746 - ], - [ - -124.0251122, - 44.6330846 - ], - [ - -124.0254313, - 44.6315217 - ], - [ - -124.0253755, - 44.6311834 - ], - [ - -124.0255935, - 44.6291057 - ], - [ - -124.0263627, - 44.627096 - ], - [ - -124.027655, - 44.6252281 - ], - [ - -124.0294226, - 44.6235706 - ], - [ - -124.0316007, - 44.6221845 - ], - [ - -124.034109, - 44.6211207 - ], - [ - -124.0368555, - 44.6204184 - ], - [ - -124.0397391, - 44.6201034 - ], - [ - -124.0426539, - 44.6201871 - ], - [ - -124.0454927, - 44.6206666 - ], - [ - -124.0459935, - 44.6207884 - ], - [ - -124.0465827, - 44.6209414 - ], - [ - -124.0471943, - 44.6211106 - ], - [ - -124.0498565, - 44.6220706 - ], - [ - -124.0522054, - 44.6233831 - ], - [ - -124.0541508, - 44.6249975 - ], - [ - -124.0556178, - 44.626852 - ], - [ - -124.0565501, - 44.6288752 - ], - [ - -124.0569118, - 44.6309894 - ], - [ - -124.0567008, - 44.6330008 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16060_s_15892", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.053444, - 44.6282726 - ], - [ - -124.0552692, - 44.6299046 - ], - [ - -124.0566236, - 44.6317557 - ], - [ - -124.0567213, - 44.6319278 - ], - [ - -124.0573253, - 44.6332185 - ], - [ - -124.0574262, - 44.6334894 - ], - [ - -124.0579155, - 44.6357038 - ], - [ - -124.057758, - 44.6379427 - ], - [ - -124.0569602, - 44.6401109 - ], - [ - -124.0555561, - 44.6421161 - ], - [ - -124.0536053, - 44.6438728 - ], - [ - -124.051191, - 44.6453063 - ], - [ - -124.0484159, - 44.6463554 - ], - [ - -124.0453981, - 44.6469755 - ], - [ - -124.0422663, - 44.6471403 - ], - [ - -124.0342948, - 44.6469702 - ], - [ - -124.0338635, - 44.6469567 - ], - [ - -124.0324232, - 44.6468967 - ], - [ - -124.0313211, - 44.6468219 - ], - [ - -124.0304709, - 44.6467419 - ], - [ - -124.0288717, - 44.6465288 - ], - [ - -124.0276015, - 44.6463087 - ], - [ - -124.0262034, - 44.6460153 - ], - [ - -124.0251532, - 44.6457552 - ], - [ - -124.0229115, - 44.6450512 - ], - [ - -124.0211104, - 44.6452416 - ], - [ - -124.0205503, - 44.6452616 - ], - [ - -124.0168448, - 44.6450697 - ], - [ - -124.0161346, - 44.6449697 - ], - [ - -124.0121574, - 44.6439859 - ], - [ - -124.0118985, - 44.6438915 - ], - [ - -124.0108663, - 44.6438188 - ], - [ - -124.0084075, - 44.6437319 - ], - [ - -124.0061329, - 44.643528 - ], - [ - -124.0054428, - 44.643428 - ], - [ - -124.0020326, - 44.6426251 - ], - [ - -124.0014025, - 44.6424151 - ], - [ - -123.9995839, - 44.6415894 - ], - [ - -123.9991493, - 44.6416819 - ], - [ - -123.9973133, - 44.641986 - ], - [ - -123.9963932, - 44.642096 - ], - [ - -123.9932923, - 44.6422371 - ], - [ - -123.9924912, - 44.642215 - ], - [ - -123.9901206, - 44.6420158 - ], - [ - -123.9890359, - 44.6418623 - ], - [ - -123.9867607, - 44.6414067 - ], - [ - -123.985826, - 44.6411623 - ], - [ - -123.9825443, - 44.6399645 - ], - [ - -123.9814242, - 44.6394244 - ], - [ - -123.9800815, - 44.6386965 - ], - [ - -123.9776114, - 44.6371963 - ], - [ - -123.9773288, - 44.6370204 - ], - [ - -123.9769604, - 44.6367852 - ], - [ - -123.9763752, - 44.6369438 - ], - [ - -123.9744949, - 44.6373339 - ], - [ - -123.9728514, - 44.6376053 - ], - [ - -123.9717212, - 44.6377453 - ], - [ - -123.9715632, - 44.6377612 - ], - [ - -123.9698311, - 44.6385382 - ], - [ - -123.969171, - 44.6387883 - ], - [ - -123.9668025, - 44.6395094 - ], - [ - -123.9664625, - 44.6395894 - ], - [ - -123.9640655, - 44.6400032 - ], - [ - -123.9631753, - 44.6401032 - ], - [ - -123.9603663, - 44.6402306 - ], - [ - -123.9600505, - 44.6402241 - ], - [ - -123.9583912, - 44.6410684 - ], - [ - -123.9555851, - 44.6421974 - ], - [ - -123.9525089, - 44.6428793 - ], - [ - -123.9517287, - 44.6429893 - ], - [ - -123.9492813, - 44.6431894 - ], - [ - -123.9484312, - 44.6432094 - ], - [ - -123.9470183, - 44.6431957 - ], - [ - -123.9463182, - 44.6431657 - ], - [ - -123.9437775, - 44.6429019 - ], - [ - -123.9413352, - 44.642337 - ], - [ - -123.9409352, - 44.642217 - ], - [ - -123.9384061, - 44.6412486 - ], - [ - -123.938185, - 44.6411207 - ], - [ - -123.9377583, - 44.6409773 - ], - [ - -123.9372382, - 44.6407673 - ], - [ - -123.9347265, - 44.6394976 - ], - [ - -123.932624, - 44.637893 - ], - [ - -123.9324641, - 44.6377429 - ], - [ - -123.9309184, - 44.6359595 - ], - [ - -123.9307185, - 44.6356694 - ], - [ - -123.9294794, - 44.6331054 - ], - [ - -123.9292345, - 44.6322733 - ], - [ - -123.9289695, - 44.631005 - ], - [ - -123.9289631, - 44.6309536 - ], - [ - -123.9274936, - 44.6293497 - ], - [ - -123.9263789, - 44.6273741 - ], - [ - -123.9258254, - 44.6252811 - ], - [ - -123.9258543, - 44.6231513 - ], - [ - -123.9264644, - 44.6210663 - ], - [ - -123.9276323, - 44.6191065 - ], - [ - -123.929313, - 44.617347 - ], - [ - -123.9314419, - 44.6158554 - ], - [ - -123.9339372, - 44.6146892 - ], - [ - -123.936703, - 44.6138929 - ], - [ - -123.9381741, - 44.6136943 - ], - [ - -123.9400663, - 44.613361 - ], - [ - -123.9416299, - 44.6131467 - ], - [ - -123.9423397, - 44.6130768 - ], - [ - -123.9445852, - 44.6129753 - ], - [ - -123.945875, - 44.6129853 - ], - [ - -123.9501397, - 44.6134555 - ], - [ - -123.9503696, - 44.6135055 - ], - [ - -123.9531943, - 44.6143496 - ], - [ - -123.9557251, - 44.6155806 - ], - [ - -123.9558751, - 44.6156706 - ], - [ - -123.9581484, - 44.6173654 - ], - [ - -123.9582884, - 44.6174954 - ], - [ - -123.9586139, - 44.6178861 - ], - [ - -123.9594509, - 44.6175918 - ], - [ - -123.9622496, - 44.6168417 - ], - [ - -123.9628795, - 44.6167217 - ], - [ - -123.9651572, - 44.6164183 - ], - [ - -123.9666682, - 44.616301 - ], - [ - -123.9686306, - 44.6154685 - ], - [ - -123.9708185, - 44.6147024 - ], - [ - -123.9715284, - 44.6145025 - ], - [ - -123.9735508, - 44.6140463 - ], - [ - -123.9741907, - 44.6139363 - ], - [ - -123.9773892, - 44.6136378 - ], - [ - -123.978569, - 44.6136178 - ], - [ - -123.9805591, - 44.6136772 - ], - [ - -123.980949, - 44.6137072 - ], - [ - -123.9836024, - 44.6140841 - ], - [ - -123.9846523, - 44.6143041 - ], - [ - -123.9877235, - 44.6152184 - ], - [ - -123.9884334, - 44.6154984 - ], - [ - -123.9897319, - 44.616073 - ], - [ - -123.9905419, - 44.6164729 - ], - [ - -123.9915384, - 44.6170094 - ], - [ - -123.9925283, - 44.6175893 - ], - [ - -123.9930185, - 44.6178891 - ], - [ - -123.9955648, - 44.6195144 - ], - [ - -123.997245, - 44.6191481 - ], - [ - -123.9982935, - 44.6189676 - ], - [ - -124.0026782, - 44.6186805 - ], - [ - -124.0031981, - 44.6187005 - ], - [ - -124.0052894, - 44.6188853 - ], - [ - -124.0064392, - 44.6190453 - ], - [ - -124.0089887, - 44.6195682 - ], - [ - -124.0094986, - 44.6197082 - ], - [ - -124.0121285, - 44.6206475 - ], - [ - -124.0127085, - 44.6209075 - ], - [ - -124.0140081, - 44.6215599 - ], - [ - -124.014508, - 44.6218399 - ], - [ - -124.0151723, - 44.6222862 - ], - [ - -124.0177428, - 44.6224673 - ], - [ - -124.020114, - 44.6227711 - ], - [ - -124.0207539, - 44.622891 - ], - [ - -124.0211344, - 44.6229849 - ], - [ - -124.0227244, - 44.6228363 - ], - [ - -124.0236142, - 44.6227963 - ], - [ - -124.0258698, - 44.6228146 - ], - [ - -124.0263597, - 44.6228446 - ], - [ - -124.027487, - 44.622944 - ], - [ - -124.0282669, - 44.623034 - ], - [ - -124.031701, - 44.6237333 - ], - [ - -124.0327408, - 44.6240433 - ], - [ - -124.0350756, - 44.6249157 - ], - [ - -124.0358368, - 44.6252632 - ], - [ - -124.0361952, - 44.6252709 - ], - [ - -124.0362543, - 44.6252491 - ], - [ - -124.0391213, - 44.6246623 - ], - [ - -124.0420936, - 44.6244862 - ], - [ - -124.0450568, - 44.6247274 - ], - [ - -124.0478973, - 44.6253768 - ], - [ - -124.0505059, - 44.6264094 - ], - [ - -124.0527824, - 44.6277855 - ], - [ - -124.053444, - 44.6282726 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16060_s_16061", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0619296, - 44.6289448 - ], - [ - -124.0623722, - 44.6291966 - ], - [ - -124.0642979, - 44.6308232 - ], - [ - -124.0657422, - 44.6326867 - ], - [ - -124.0666498, - 44.6347157 - ], - [ - -124.0669855, - 44.6368321 - ], - [ - -124.0667366, - 44.6389546 - ], - [ - -124.0659125, - 44.6410016 - ], - [ - -124.0645447, - 44.6428945 - ], - [ - -124.0626859, - 44.6445605 - ], - [ - -124.0604074, - 44.6459355 - ], - [ - -124.0577969, - 44.6469668 - ], - [ - -124.0549546, - 44.6476145 - ], - [ - -124.0519898, - 44.6478539 - ], - [ - -124.0510197, - 44.6478639 - ], - [ - -124.0480195, - 44.6476822 - ], - [ - -124.0455362, - 44.647167 - ], - [ - -124.0425587, - 44.6471445 - ], - [ - -124.0395622, - 44.6469086 - ], - [ - -124.0366896, - 44.6462557 - ], - [ - -124.0340538, - 44.6452113 - ], - [ - -124.0317581, - 44.6438165 - ], - [ - -124.0298927, - 44.6421259 - ], - [ - -124.0296433, - 44.6417744 - ], - [ - -124.0292816, - 44.6414653 - ], - [ - -124.0278525, - 44.6395957 - ], - [ - -124.0269619, - 44.6375629 - ], - [ - -124.0266438, - 44.6354451 - ], - [ - -124.0269104, - 44.6333237 - ], - [ - -124.0277515, - 44.6312802 - ], - [ - -124.0291347, - 44.6293931 - ], - [ - -124.0310068, - 44.6277349 - ], - [ - -124.0332958, - 44.6263694 - ], - [ - -124.0359137, - 44.6253489 - ], - [ - -124.0387601, - 44.6247128 - ], - [ - -124.0417255, - 44.6244853 - ], - [ - -124.044696, - 44.6246753 - ], - [ - -124.0475577, - 44.6252754 - ], - [ - -124.0480363, - 44.6254542 - ], - [ - -124.0506465, - 44.6254355 - ], - [ - -124.0536363, - 44.6256253 - ], - [ - -124.0565157, - 44.6262306 - ], - [ - -124.0591728, - 44.6272278 - ], - [ - -124.0615042, - 44.6285781 - ], - [ - -124.0619296, - 44.6289448 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16061_s_16062", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0529172, - 44.6261155 - ], - [ - -124.0559157, - 44.6263053 - ], - [ - -124.0588033, - 44.6269128 - ], - [ - -124.0614669, - 44.6279144 - ], - [ - -124.0638024, - 44.6292708 - ], - [ - -124.0657182, - 44.630929 - ], - [ - -124.0671395, - 44.6328241 - ], - [ - -124.0680105, - 44.6348819 - ], - [ - -124.0682971, - 44.6370218 - ], - [ - -124.068278, - 44.6406418 - ], - [ - -124.0679744, - 44.6427607 - ], - [ - -124.0670976, - 44.6447966 - ], - [ - -124.0656813, - 44.6466712 - ], - [ - -124.0637797, - 44.6483125 - ], - [ - -124.0614661, - 44.6496574 - ], - [ - -124.0588292, - 44.6506542 - ], - [ - -124.0559706, - 44.6512645 - ], - [ - -124.053, - 44.651465 - ], - [ - -124.0500317, - 44.6512478 - ], - [ - -124.0471799, - 44.6506214 - ], - [ - -124.0445541, - 44.6496098 - ], - [ - -124.0422554, - 44.6482519 - ], - [ - -124.040372, - 44.6465999 - ], - [ - -124.0389764, - 44.6447174 - ], - [ - -124.0381221, - 44.6426767 - ], - [ - -124.0379677, - 44.6415074 - ], - [ - -124.0377731, - 44.641254 - ], - [ - -124.0368772, - 44.6392224 - ], - [ - -124.0365536, - 44.6371051 - ], - [ - -124.0368148, - 44.6349833 - ], - [ - -124.0376507, - 44.6329387 - ], - [ - -124.0390291, - 44.6310498 - ], - [ - -124.0408969, - 44.6293892 - ], - [ - -124.0431824, - 44.6280207 - ], - [ - -124.0457978, - 44.6269968 - ], - [ - -124.0486426, - 44.6263569 - ], - [ - -124.0516075, - 44.6261255 - ], - [ - -124.0529172, - 44.6261155 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16062_s_16063", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0682986, - 44.6431904 - ], - [ - -124.0682973, - 44.6434041 - ], - [ - -124.068248, - 44.6459041 - ], - [ - -124.0679137, - 44.6480206 - ], - [ - -124.0670074, - 44.6500499 - ], - [ - -124.0655639, - 44.651914 - ], - [ - -124.0636385, - 44.6535412 - ], - [ - -124.0613053, - 44.6548689 - ], - [ - -124.0586539, - 44.6558462 - ], - [ - -124.0557863, - 44.6564354 - ], - [ - -124.0528127, - 44.656614 - ], - [ - -124.0498475, - 44.6563749 - ], - [ - -124.0470046, - 44.6557275 - ], - [ - -124.0443934, - 44.6546966 - ], - [ - -124.0421142, - 44.6533218 - ], - [ - -124.0402547, - 44.651656 - ], - [ - -124.0388863, - 44.6497633 - ], - [ - -124.0380616, - 44.6477163 - ], - [ - -124.0378121, - 44.6455939 - ], - [ - -124.0378606, - 44.6432007 - ], - [ - -124.0378421, - 44.6406575 - ], - [ - -124.038119, - 44.6385368 - ], - [ - -124.0389701, - 44.6364954 - ], - [ - -124.0403625, - 44.6346117 - ], - [ - -124.0422428, - 44.6329582 - ], - [ - -124.0445385, - 44.6315983 - ], - [ - -124.0471616, - 44.6305844 - ], - [ - -124.0500113, - 44.6299552 - ], - [ - -124.052978, - 44.6297351 - ], - [ - -124.0559479, - 44.6299324 - ], - [ - -124.0588069, - 44.6305396 - ], - [ - -124.0614451, - 44.6315333 - ], - [ - -124.0637613, - 44.6328755 - ], - [ - -124.0656664, - 44.6345144 - ], - [ - -124.0670871, - 44.6363872 - ], - [ - -124.0679689, - 44.638422 - ], - [ - -124.0682779, - 44.6405404 - ], - [ - -124.0682986, - 44.6431904 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16063_s_15890", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0682796, - 44.6481974 - ], - [ - -124.0682783, - 44.6484599 - ], - [ - -124.0682305, - 44.6506531 - ], - [ - -124.0678998, - 44.6527431 - ], - [ - -124.067011, - 44.6547485 - ], - [ - -124.0655975, - 44.656594 - ], - [ - -124.0637122, - 44.6582105 - ], - [ - -124.0614258, - 44.6595375 - ], - [ - -124.0588238, - 44.6605251 - ], - [ - -124.0584946, - 44.6605964 - ], - [ - -124.0577261, - 44.660878 - ], - [ - -124.0548562, - 44.6614622 - ], - [ - -124.0518817, - 44.6616356 - ], - [ - -124.0489171, - 44.6613913 - ], - [ - -124.0460762, - 44.6607389 - ], - [ - -124.0434683, - 44.6597035 - ], - [ - -124.0411937, - 44.6583247 - ], - [ - -124.0393397, - 44.6566557 - ], - [ - -124.0379777, - 44.6547606 - ], - [ - -124.0371599, - 44.6527122 - ], - [ - -124.0369176, - 44.6505893 - ], - [ - -124.0369246, - 44.6502968 - ], - [ - -124.0372663, - 44.6481837 - ], - [ - -124.0378238, - 44.6469459 - ], - [ - -124.037811, - 44.6458406 - ], - [ - -124.038079, - 44.6437193 - ], - [ - -124.0389214, - 44.641676 - ], - [ - -124.0403059, - 44.6397893 - ], - [ - -124.0421793, - 44.6381317 - ], - [ - -124.0444694, - 44.6367669 - ], - [ - -124.0470885, - 44.6357472 - ], - [ - -124.0499357, - 44.6351119 - ], - [ - -124.0529017, - 44.6348853 - ], - [ - -124.0558727, - 44.6350762 - ], - [ - -124.0587345, - 44.6356771 - ], - [ - -124.0613772, - 44.6366652 - ], - [ - -124.0636993, - 44.6380022 - ], - [ - -124.0656115, - 44.6396371 - ], - [ - -124.0670403, - 44.6415068 - ], - [ - -124.0679309, - 44.6435396 - ], - [ - -124.0682489, - 44.6456574 - ], - [ - -124.0682796, - 44.6481974 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16065_s_2483495", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0690459, - 44.6557927 - ], - [ - -124.0691126, - 44.6563891 - ], - [ - -124.0687652, - 44.6585045 - ], - [ - -124.0678462, - 44.6605309 - ], - [ - -124.0663908, - 44.6623904 - ], - [ - -124.0644551, - 44.6640115 - ], - [ - -124.0621132, - 44.6653319 - ], - [ - -124.0594554, - 44.6663008 - ], - [ - -124.0565836, - 44.666881 - ], - [ - -124.0536084, - 44.6670501 - ], - [ - -124.0533586, - 44.6670468 - ], - [ - -124.0502322, - 44.6667725 - ], - [ - -124.0472519, - 44.6660448 - ], - [ - -124.0445453, - 44.664895 - ], - [ - -124.0422283, - 44.6633722 - ], - [ - -124.0404001, - 44.6615418 - ], - [ - -124.0391389, - 44.659482 - ], - [ - -124.038844, - 44.6584681 - ], - [ - -124.0380548, - 44.6565583 - ], - [ - -124.0378676, - 44.6551358 - ], - [ - -124.0373832, - 44.6535503 - ], - [ - -124.0373283, - 44.6514207 - ], - [ - -124.0378566, - 44.6493244 - ], - [ - -124.0389475, - 44.647342 - ], - [ - -124.0405591, - 44.6455495 - ], - [ - -124.0426295, - 44.6440159 - ], - [ - -124.0450791, - 44.6428001 - ], - [ - -124.0478138, - 44.6419488 - ], - [ - -124.0507286, - 44.6414946 - ], - [ - -124.0537114, - 44.6414551 - ], - [ - -124.0566477, - 44.6418317 - ], - [ - -124.0594247, - 44.64261 - ], - [ - -124.0606622, - 44.6431768 - ], - [ - -124.0613342, - 44.6434272 - ], - [ - -124.0618278, - 44.6437106 - ], - [ - -124.0619359, - 44.6437601 - ], - [ - -124.0620461, - 44.6438359 - ], - [ - -124.0636557, - 44.6447598 - ], - [ - -124.0655692, - 44.6463896 - ], - [ - -124.0670015, - 44.6482543 - ], - [ - -124.0678499, - 44.6501742 - ], - [ - -124.0682042, - 44.6506808 - ], - [ - -124.0689873, - 44.6527046 - ], - [ - -124.0692105, - 44.6547981 - ], - [ - -124.0690459, - 44.6557927 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16066_s_16068", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.076575, - 44.6761547 - ], - [ - -124.0770193, - 44.6771048 - ], - [ - -124.0776037, - 44.6788368 - ], - [ - -124.0780146, - 44.6809464 - ], - [ - -124.0778408, - 44.6830727 - ], - [ - -124.0770889, - 44.6851339 - ], - [ - -124.0757876, - 44.6870509 - ], - [ - -124.0739871, - 44.6887499 - ], - [ - -124.0717563, - 44.6901656 - ], - [ - -124.0691812, - 44.6912436 - ], - [ - -124.0663606, - 44.6919425 - ], - [ - -124.0634031, - 44.6922354 - ], - [ - -124.0604223, - 44.692111 - ], - [ - -124.0575328, - 44.6915741 - ], - [ - -124.0548458, - 44.6906453 - ], - [ - -124.0524645, - 44.6893604 - ], - [ - -124.0504805, - 44.6877687 - ], - [ - -124.04897, - 44.6859315 - ], - [ - -124.047991, - 44.6839193 - ], - [ - -124.0476026, - 44.6827665 - ], - [ - -124.0474674, - 44.6825574 - ], - [ - -124.0466309, - 44.6805193 - ], - [ - -124.0465855, - 44.6803245 - ], - [ - -124.0457004, - 44.6782888 - ], - [ - -124.0455767, - 44.677989 - ], - [ - -124.0450369, - 44.676608 - ], - [ - -124.0433833, - 44.6727029 - ], - [ - -124.0414076, - 44.6716798 - ], - [ - -124.0393022, - 44.6700241 - ], - [ - -124.0377165, - 44.6680959 - ], - [ - -124.0367175, - 44.6659769 - ], - [ - -124.0363474, - 44.6637568 - ], - [ - -124.0366219, - 44.6615296 - ], - [ - -124.0366546, - 44.6614088 - ], - [ - -124.0374109, - 44.659536 - ], - [ - -124.0386238, - 44.6577898 - ], - [ - -124.0402542, - 44.6562263 - ], - [ - -124.0411959, - 44.6555984 - ], - [ - -124.0424844, - 44.6546802 - ], - [ - -124.04501, - 44.6534856 - ], - [ - -124.047817, - 44.6526716 - ], - [ - -124.0486113, - 44.6525646 - ], - [ - -124.0488319, - 44.6524955 - ], - [ - -124.0515425, - 44.6518558 - ], - [ - -124.0543727, - 44.6515886 - ], - [ - -124.0572231, - 44.6517033 - ], - [ - -124.0599933, - 44.6521958 - ], - [ - -124.0625861, - 44.6530489 - ], - [ - -124.0649101, - 44.6542325 - ], - [ - -124.0668838, - 44.655705 - ], - [ - -124.0684376, - 44.6574147 - ], - [ - -124.0695168, - 44.6593013 - ], - [ - -124.0742343, - 44.6704307 - ], - [ - -124.0743255, - 44.6706542 - ], - [ - -124.0748509, - 44.6719966 - ], - [ - -124.0757804, - 44.6741322 - ], - [ - -124.0758487, - 44.6744107 - ], - [ - -124.0758575, - 44.6744089 - ], - [ - -124.076575, - 44.6761547 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16068_s_16069", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.078048, - 44.6804964 - ], - [ - -124.0782397, - 44.6813144 - ], - [ - -124.0786232, - 44.6834503 - ], - [ - -124.0786686, - 44.6837322 - ], - [ - -124.0787658, - 44.6844142 - ], - [ - -124.0788252, - 44.6849761 - ], - [ - -124.0789206, - 44.6863511 - ], - [ - -124.0789312, - 44.68724 - ], - [ - -124.0789054, - 44.687809 - ], - [ - -124.0784792, - 44.6900326 - ], - [ - -124.0774217, - 44.6921462 - ], - [ - -124.0757779, - 44.6940598 - ], - [ - -124.0736445, - 44.6956714 - ], - [ - -124.0728112, - 44.6963248 - ], - [ - -124.0705937, - 44.6975261 - ], - [ - -124.0698276, - 44.6978672 - ], - [ - -124.067299, - 44.698772 - ], - [ - -124.0645794, - 44.6993276 - ], - [ - -124.0643484, - 44.6993586 - ], - [ - -124.0625038, - 44.6994759 - ], - [ - -124.0621866, - 44.6995176 - ], - [ - -124.0617883, - 44.6995443 - ], - [ - -124.0609742, - 44.6997598 - ], - [ - -124.0586904, - 44.7000376 - ], - [ - -124.0575006, - 44.700241 - ], - [ - -124.0545165, - 44.7003239 - ], - [ - -124.0515671, - 44.6999898 - ], - [ - -124.0487658, - 44.6992518 - ], - [ - -124.0462204, - 44.698138 - ], - [ - -124.0440285, - 44.6966915 - ], - [ - -124.0438505, - 44.6965485 - ], - [ - -124.0420971, - 44.6948252 - ], - [ - -124.0408486, - 44.6928912 - ], - [ - -124.0401529, - 44.6908205 - ], - [ - -124.0400368, - 44.6886929 - ], - [ - -124.0405046, - 44.68659 - ], - [ - -124.0415382, - 44.6845925 - ], - [ - -124.043098, - 44.6827771 - ], - [ - -124.045124, - 44.6812137 - ], - [ - -124.0475384, - 44.6799621 - ], - [ - -124.0477182, - 44.6798869 - ], - [ - -124.0477913, - 44.6793164 - ], - [ - -124.0486377, - 44.6772739 - ], - [ - -124.0500262, - 44.6753885 - ], - [ - -124.0519035, - 44.6737325 - ], - [ - -124.0541974, - 44.6723696 - ], - [ - -124.0568197, - 44.6713522 - ], - [ - -124.0596697, - 44.6707193 - ], - [ - -124.062638, - 44.6704953 - ], - [ - -124.0656105, - 44.6706887 - ], - [ - -124.068473, - 44.6712921 - ], - [ - -124.0711156, - 44.6722824 - ], - [ - -124.0734369, - 44.6736215 - ], - [ - -124.0753475, - 44.6752579 - ], - [ - -124.076774, - 44.6771289 - ], - [ - -124.0776617, - 44.6791624 - ], - [ - -124.078048, - 44.6804964 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16068_s_16201", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0780435, - 44.6803247 - ], - [ - -124.0783129, - 44.6814716 - ], - [ - -124.0788037, - 44.6845715 - ], - [ - -124.0788997, - 44.6858523 - ], - [ - -124.0788803, - 44.6883023 - ], - [ - -124.0788439, - 44.6889944 - ], - [ - -124.0786744, - 44.6907344 - ], - [ - -124.0786057, - 44.6912564 - ], - [ - -124.0782063, - 44.6936665 - ], - [ - -124.0781489, - 44.6939752 - ], - [ - -124.0776369, - 44.6964529 - ], - [ - -124.0772103, - 44.6989402 - ], - [ - -124.0771751, - 44.6991317 - ], - [ - -124.0758295, - 44.7059658 - ], - [ - -124.0755117, - 44.7080439 - ], - [ - -124.0754236, - 44.7090077 - ], - [ - -124.0750729, - 44.7107216 - ], - [ - -124.074903, - 44.7112517 - ], - [ - -124.0744768, - 44.7123246 - ], - [ - -124.0738969, - 44.7135422 - ], - [ - -124.0736385, - 44.7141968 - ], - [ - -124.0734965, - 44.7149002 - ], - [ - -124.0734925, - 44.714951 - ], - [ - -124.0735151, - 44.7163315 - ], - [ - -124.073681, - 44.7199789 - ], - [ - -124.0736888, - 44.7203783 - ], - [ - -124.0736793, - 44.7219483 - ], - [ - -124.0736413, - 44.7226688 - ], - [ - -124.073372, - 44.7253788 - ], - [ - -124.0732642, - 44.7261111 - ], - [ - -124.0729845, - 44.7275411 - ], - [ - -124.0722839, - 44.7296116 - ], - [ - -124.0710301, - 44.7315449 - ], - [ - -124.0692712, - 44.7332666 - ], - [ - -124.0670747, - 44.7347106 - ], - [ - -124.0645251, - 44.7358214 - ], - [ - -124.0617204, - 44.7365562 - ], - [ - -124.0587684, - 44.7368868 - ], - [ - -124.0557826, - 44.7368006 - ], - [ - -124.0528779, - 44.7363007 - ], - [ - -124.0501658, - 44.7354064 - ], - [ - -124.0477508, - 44.7341521 - ], - [ - -124.0457256, - 44.7325861 - ], - [ - -124.0441679, - 44.7307685 - ], - [ - -124.0431378, - 44.7287692 - ], - [ - -124.0426746, - 44.726665 - ], - [ - -124.0427962, - 44.7245369 - ], - [ - -124.0430051, - 44.7234718 - ], - [ - -124.0432031, - 44.721489 - ], - [ - -124.0432098, - 44.7204794 - ], - [ - -124.0430498, - 44.716919 - ], - [ - -124.0430429, - 44.7166939 - ], - [ - -124.0430134, - 44.7148339 - ], - [ - -124.0430365, - 44.7141006 - ], - [ - -124.0431067, - 44.7132106 - ], - [ - -124.0432389, - 44.712269 - ], - [ - -124.0436194, - 44.7103891 - ], - [ - -124.0440348, - 44.7089929 - ], - [ - -124.0446752, - 44.707373 - ], - [ - -124.0449146, - 44.7068234 - ], - [ - -124.0451291, - 44.7063734 - ], - [ - -124.0451849, - 44.7059188 - ], - [ - -124.0455656, - 44.7034388 - ], - [ - -124.0456239, - 44.7031061 - ], - [ - -124.0469868, - 44.6962019 - ], - [ - -124.047421, - 44.6936779 - ], - [ - -124.0474713, - 44.6934127 - ], - [ - -124.04798, - 44.6909569 - ], - [ - -124.0483116, - 44.688962 - ], - [ - -124.0484226, - 44.6878292 - ], - [ - -124.0484349, - 44.6863681 - ], - [ - -124.0481377, - 44.684485 - ], - [ - -124.0478656, - 44.6836133 - ], - [ - -124.0475052, - 44.681499 - ], - [ - -124.0477299, - 44.6793751 - ], - [ - -124.048531, - 44.6773233 - ], - [ - -124.0498777, - 44.6754225 - ], - [ - -124.0517182, - 44.6737455 - ], - [ - -124.0539816, - 44.672357 - ], - [ - -124.0565811, - 44.6713102 - ], - [ - -124.0594168, - 44.6706453 - ], - [ - -124.0623797, - 44.6703879 - ], - [ - -124.0653561, - 44.6705478 - ], - [ - -124.0682316, - 44.6711189 - ], - [ - -124.0708958, - 44.6720793 - ], - [ - -124.0732463, - 44.6733921 - ], - [ - -124.0751929, - 44.6750068 - ], - [ - -124.0766607, - 44.6768614 - ], - [ - -124.0775932, - 44.6788848 - ], - [ - -124.0780435, - 44.6803247 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16069_s_16024", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0762694, - 44.6912306 - ], - [ - -124.0761899, - 44.6918308 - ], - [ - -124.0761737, - 44.6918988 - ], - [ - -124.0760706, - 44.6926872 - ], - [ - -124.0752183, - 44.6947285 - ], - [ - -124.0738241, - 44.696612 - ], - [ - -124.0719414, - 44.6982653 - ], - [ - -124.0696426, - 44.6996248 - ], - [ - -124.067016, - 44.7006382 - ], - [ - -124.0641625, - 44.7012666 - ], - [ - -124.061192, - 44.7014858 - ], - [ - -124.0582186, - 44.7012875 - ], - [ - -124.0553566, - 44.7006791 - ], - [ - -124.0541996, - 44.7002431 - ], - [ - -124.052521, - 44.7001255 - ], - [ - -124.0496631, - 44.6995076 - ], - [ - -124.0470292, - 44.6985038 - ], - [ - -124.0467816, - 44.6983858 - ], - [ - -124.0444993, - 44.6970535 - ], - [ - -124.0426198, - 44.6954324 - ], - [ - -124.0412136, - 44.6935833 - ], - [ - -124.0403334, - 44.6915756 - ], - [ - -124.0400121, - 44.6894846 - ], - [ - -124.0402617, - 44.6873886 - ], - [ - -124.0410728, - 44.6853661 - ], - [ - -124.0424148, - 44.6834931 - ], - [ - -124.0442376, - 44.6818396 - ], - [ - -124.0443525, - 44.6817539 - ], - [ - -124.046842, - 44.6802569 - ], - [ - -124.0497205, - 44.6791716 - ], - [ - -124.0528564, - 44.6785476 - ], - [ - -124.0531548, - 44.6785122 - ], - [ - -124.0543732, - 44.6782041 - ], - [ - -124.0546031, - 44.6781641 - ], - [ - -124.05821, - 44.677855 - ], - [ - -124.05852, - 44.677855 - ], - [ - -124.0587573, - 44.6778693 - ], - [ - -124.0603265, - 44.6777221 - ], - [ - -124.062597, - 44.6777521 - ], - [ - -124.0627469, - 44.6777621 - ], - [ - -124.0653316, - 44.6780968 - ], - [ - -124.0677972, - 44.6787433 - ], - [ - -124.0700705, - 44.6796825 - ], - [ - -124.0702705, - 44.6797825 - ], - [ - -124.0724365, - 44.6810966 - ], - [ - -124.0742224, - 44.682675 - ], - [ - -124.075566, - 44.6844628 - ], - [ - -124.0764205, - 44.6863975 - ], - [ - -124.076756, - 44.6884119 - ], - [ - -124.0765608, - 44.6904356 - ], - [ - -124.0762694, - 44.6912306 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16069_s_16069", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0402646, - 44.6896106 - ], - [ - -124.0405193, - 44.6874884 - ], - [ - -124.0413494, - 44.6854425 - ], - [ - -124.042723, - 44.6835514 - ], - [ - -124.0445872, - 44.6818878 - ], - [ - -124.0468704, - 44.6805155 - ], - [ - -124.0494849, - 44.6794874 - ], - [ - -124.0523302, - 44.6788429 - ], - [ - -124.055297, - 44.6786067 - ], - [ - -124.0582714, - 44.678788 - ], - [ - -124.0611392, - 44.6793797 - ], - [ - -124.0637901, - 44.6803592 - ], - [ - -124.0661223, - 44.6816887 - ], - [ - -124.0680463, - 44.6833174 - ], - [ - -124.0694881, - 44.6851824 - ], - [ - -124.0703922, - 44.6872123 - ], - [ - -124.0707239, - 44.6893291 - ], - [ - -124.0704703, - 44.6914513 - ], - [ - -124.0696411, - 44.6934974 - ], - [ - -124.0682682, - 44.6953888 - ], - [ - -124.0664042, - 44.6970528 - ], - [ - -124.0641208, - 44.6984254 - ], - [ - -124.0615058, - 44.6994539 - ], - [ - -124.0586596, - 44.7000986 - ], - [ - -124.0556917, - 44.7003349 - ], - [ - -124.0527162, - 44.7001536 - ], - [ - -124.0498475, - 44.6995617 - ], - [ - -124.0471959, - 44.6985819 - ], - [ - -124.0448634, - 44.6972519 - ], - [ - -124.0429396, - 44.6956229 - ], - [ - -124.0414984, - 44.6937575 - ], - [ - -124.0405952, - 44.6917274 - ], - [ - -124.0402646, - 44.6896106 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16070_s_16071", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.017411, - 44.9880899 - ], - [ - -124.0174167, - 44.988094 - ], - [ - -124.0159917, - 44.9890881 - ], - [ - -124.0133777, - 44.9905514 - ], - [ - -124.0103797, - 44.991579 - ], - [ - -124.0071394, - 44.9921223 - ], - [ - -124.0070493, - 44.9921232 - ], - [ - -124.0060027, - 44.9927248 - ], - [ - -124.0059285, - 44.9927531 - ], - [ - -124.0057896, - 44.9928732 - ], - [ - -124.0034696, - 44.9942245 - ], - [ - -124.0008226, - 44.9952287 - ], - [ - -123.9979502, - 44.9958471 - ], - [ - -123.994963, - 44.9960559 - ], - [ - -123.9948422, - 44.9960559 - ], - [ - -123.9919121, - 44.9958551 - ], - [ - -123.9890904, - 44.99526 - ], - [ - -123.9864814, - 44.9942928 - ], - [ - -123.9841815, - 44.9929892 - ], - [ - -123.9822758, - 44.9913973 - ], - [ - -123.9808347, - 44.9895761 - ], - [ - -123.9799114, - 44.9875928 - ], - [ - -123.97954, - 44.9855208 - ], - [ - -123.9794777, - 44.9840579 - ], - [ - -123.9796831, - 44.9819259 - ], - [ - -123.9804724, - 44.9798638 - ], - [ - -123.9818151, - 44.9779511 - ], - [ - -123.9836592, - 44.976262 - ], - [ - -123.985198, - 44.9753145 - ], - [ - -123.9855844, - 44.9748811 - ], - [ - -123.9878707, - 44.9728858 - ], - [ - -123.9880307, - 44.9727759 - ], - [ - -123.9904923, - 44.9714004 - ], - [ - -123.9932968, - 44.9704095 - ], - [ - -123.9934468, - 44.9703695 - ], - [ - -123.9975456, - 44.9697138 - ], - [ - -123.9993852, - 44.9696038 - ], - [ - -124.0026018, - 44.9697271 - ], - [ - -124.0040008, - 44.969466 - ], - [ - -124.0070396, - 44.9693409 - ], - [ - -124.0100533, - 44.9696451 - ], - [ - -124.0129225, - 44.9703666 - ], - [ - -124.0137616, - 44.9707233 - ], - [ - -124.0142527, - 44.970876 - ], - [ - -124.0150549, - 44.9712732 - ], - [ - -124.0151177, - 44.9712999 - ], - [ - -124.0151333, - 44.9712838 - ], - [ - -124.0153783, - 44.9714038 - ], - [ - -124.0153736, - 44.9714086 - ], - [ - -124.015534, - 44.9714768 - ], - [ - -124.0157554, - 44.97162 - ], - [ - -124.0167136, - 44.9720944 - ], - [ - -124.0187925, - 44.9736302 - ], - [ - -124.0204095, - 44.9754243 - ], - [ - -124.0215023, - 44.9774078 - ], - [ - -124.022029, - 44.9795046 - ], - [ - -124.0219692, - 44.981634 - ], - [ - -124.0213253, - 44.9837142 - ], - [ - -124.0201218, - 44.9856652 - ], - [ - -124.018405, - 44.9874122 - ], - [ - -124.017411, - 44.9880899 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16071_s_16076", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0104947, - 44.9801574 - ], - [ - -124.0105696, - 44.980192 - ], - [ - -124.0127191, - 44.9816782 - ], - [ - -124.0144188, - 44.9834335 - ], - [ - -124.0156034, - 44.9853903 - ], - [ - -124.0162274, - 44.9874736 - ], - [ - -124.0162667, - 44.9896032 - ], - [ - -124.0157198, - 44.9916974 - ], - [ - -124.0146075, - 44.9936756 - ], - [ - -124.0129727, - 44.9954618 - ], - [ - -124.010878, - 44.9969873 - ], - [ - -124.0084041, - 44.9981935 - ], - [ - -124.0056459, - 44.999034 - ], - [ - -124.0040566, - 44.9993921 - ], - [ - -124.003952, - 44.9994153 - ], - [ - -124.0023077, - 44.9997766 - ], - [ - -124.0014594, - 44.9999658 - ], - [ - -123.9986131, - 45.0003948 - ], - [ - -123.9957037, - 45.000434 - ], - [ - -123.9928365, - 45.000082 - ], - [ - -123.9901149, - 44.9993514 - ], - [ - -123.9876374, - 44.9982687 - ], - [ - -123.9854933, - 44.996873 - ], - [ - -123.9837602, - 44.9952147 - ], - [ - -123.9825005, - 44.9933537 - ], - [ - -123.9817598, - 44.9913572 - ], - [ - -123.9816767, - 44.9904808 - ], - [ - -123.9808996, - 44.9894817 - ], - [ - -123.9799896, - 44.9874521 - ], - [ - -123.9796552, - 44.9853356 - ], - [ - -123.979909, - 44.9832134 - ], - [ - -123.9807413, - 44.9811671 - ], - [ - -123.98212, - 44.9792754 - ], - [ - -123.9839922, - 44.9776109 - ], - [ - -123.9862857, - 44.9762375 - ], - [ - -123.9889126, - 44.9752081 - ], - [ - -123.9917718, - 44.9745622 - ], - [ - -123.9947536, - 44.9743245 - ], - [ - -123.9948302, - 44.9743237 - ], - [ - -123.9951903, - 44.9743193 - ], - [ - -123.995374, - 44.9743167 - ], - [ - -123.995446, - 44.9743158 - ], - [ - -123.9963343, - 44.9743059 - ], - [ - -123.9967257, - 44.9743011 - ], - [ - -123.9997521, - 44.9744775 - ], - [ - -124.0026698, - 44.9750744 - ], - [ - -124.0053642, - 44.9760684 - ], - [ - -124.0077293, - 44.9774202 - ], - [ - -124.0096719, - 44.9790768 - ], - [ - -124.0104947, - 44.9801574 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16071_s_16082", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0252256, - 44.982228 - ], - [ - -124.0249344, - 44.9827939 - ], - [ - -124.0249344, - 44.982794 - ], - [ - -124.0249344, - 44.982794 - ], - [ - -124.0248641, - 44.9829305 - ], - [ - -124.0244869, - 44.9834963 - ], - [ - -124.0244845, - 44.9834955 - ], - [ - -124.0235818, - 44.9849031 - ], - [ - -124.0235518, - 44.9849391 - ], - [ - -124.0232538, - 44.9852822 - ], - [ - -124.0231388, - 44.9854092 - ], - [ - -124.0227799, - 44.9857879 - ], - [ - -124.0226629, - 44.9859059 - ], - [ - -124.0226275, - 44.9859415 - ], - [ - -124.0226185, - 44.9859505 - ], - [ - -124.0222706, - 44.9862847 - ], - [ - -124.0222446, - 44.9863087 - ], - [ - -124.0220717, - 44.9864654 - ], - [ - -124.0220446, - 44.9864895 - ], - [ - -124.0219423, - 44.9865815 - ], - [ - -124.0201984, - 44.9879058 - ], - [ - -124.019929, - 44.9880518 - ], - [ - -124.0198897, - 44.9880798 - ], - [ - -124.0196272, - 44.9882671 - ], - [ - -124.0196115, - 44.9882782 - ], - [ - -124.0195656, - 44.9883154 - ], - [ - -124.0195622, - 44.9883133 - ], - [ - -124.019486, - 44.9883676 - ], - [ - -124.0185266, - 44.9892082 - ], - [ - -124.0159574, - 44.9906665 - ], - [ - -124.0130084, - 44.9917016 - ], - [ - -124.0098157, - 44.9922657 - ], - [ - -124.0084765, - 44.992293 - ], - [ - -124.0080614, - 44.9926696 - ], - [ - -124.0057686, - 44.9940662 - ], - [ - -124.0031339, - 44.995116 - ], - [ - -124.0002598, - 44.9957782 - ], - [ - -123.9972584, - 44.9960269 - ], - [ - -123.9968906, - 44.9960314 - ], - [ - -123.9961047, - 44.9960438 - ], - [ - -123.9959431, - 44.996042 - ], - [ - -123.9957881, - 44.9960443 - ], - [ - -123.9957395, - 44.9960449 - ], - [ - -123.9953284, - 44.9960499 - ], - [ - -123.9952755, - 44.9960505 - ], - [ - -123.9951725, - 44.9960515 - ], - [ - -123.9921815, - 44.9958717 - ], - [ - -123.9892975, - 44.9952813 - ], - [ - -123.9866313, - 44.9943029 - ], - [ - -123.9842854, - 44.9929743 - ], - [ - -123.9823501, - 44.9913463 - ], - [ - -123.9808996, - 44.9894817 - ], - [ - -123.9799896, - 44.9874521 - ], - [ - -123.9796552, - 44.9853356 - ], - [ - -123.979909, - 44.9832134 - ], - [ - -123.9807413, - 44.9811671 - ], - [ - -123.98212, - 44.9792754 - ], - [ - -123.9831656, - 44.9783458 - ], - [ - -123.9834885, - 44.9775614 - ], - [ - -123.9848411, - 44.9757039 - ], - [ - -123.9853686, - 44.975124 - ], - [ - -123.9856262, - 44.9748401 - ], - [ - -123.987845, - 44.9729187 - ], - [ - -123.988034, - 44.9727887 - ], - [ - -123.9905147, - 44.9714041 - ], - [ - -123.9933426, - 44.97041 - ], - [ - -123.9935506, - 44.970355 - ], - [ - -123.9974665, - 44.9697188 - ], - [ - -123.9978424, - 44.9696938 - ], - [ - -123.9978919, - 44.9696906 - ], - [ - -123.9990026, - 44.9696193 - ], - [ - -123.9991295, - 44.969611 - ], - [ - -124.0004346, - 44.9695657 - ], - [ - -124.0006606, - 44.9695647 - ], - [ - -124.0008309, - 44.9695778 - ], - [ - -124.002945, - 44.9683293 - ], - [ - -124.0055814, - 44.9673128 - ], - [ - -124.0084465, - 44.9666808 - ], - [ - -124.0114301, - 44.9664577 - ], - [ - -124.0144177, - 44.9666521 - ], - [ - -124.0172946, - 44.9672563 - ], - [ - -124.0199502, - 44.9682474 - ], - [ - -124.0222825, - 44.9695871 - ], - [ - -124.024202, - 44.9712241 - ], - [ - -124.0256347, - 44.9730954 - ], - [ - -124.0265257, - 44.9751291 - ], - [ - -124.0268407, - 44.9772472 - ], - [ - -124.0265674, - 44.9793682 - ], - [ - -124.0257163, - 44.9814105 - ], - [ - -124.0255459, - 44.981712 - ], - [ - -124.0254406, - 44.9818934 - ], - [ - -124.0254183, - 44.9819308 - ], - [ - -124.0253051, - 44.9821271 - ], - [ - -124.0252701, - 44.9821872 - ], - [ - -124.0252431, - 44.9822332 - ], - [ - -124.0252256, - 44.982228 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16071_s_16212", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0209174, - 44.988169 - ], - [ - -124.020932, - 44.988262 - ], - [ - -124.0209717, - 44.9903916 - ], - [ - -124.0204252, - 44.9924858 - ], - [ - -124.0193133, - 44.9944641 - ], - [ - -124.0176787, - 44.9962504 - ], - [ - -124.0155843, - 44.9977761 - ], - [ - -124.0131106, - 44.9989826 - ], - [ - -124.0103525, - 44.9998234 - ], - [ - -124.0074162, - 45.0002662 - ], - [ - -124.0044146, - 45.0002939 - ], - [ - -124.0016303, - 44.9999277 - ], - [ - -124.0014594, - 44.9999658 - ], - [ - -123.9986131, - 45.0003948 - ], - [ - -123.9957037, - 45.000434 - ], - [ - -123.9928365, - 45.000082 - ], - [ - -123.9901149, - 44.9993514 - ], - [ - -123.9876374, - 44.9982687 - ], - [ - -123.9854933, - 44.996873 - ], - [ - -123.9837602, - 44.9952147 - ], - [ - -123.9825005, - 44.9933537 - ], - [ - -123.9817598, - 44.9913572 - ], - [ - -123.9816767, - 44.9904808 - ], - [ - -123.9808996, - 44.9894817 - ], - [ - -123.9799896, - 44.9874521 - ], - [ - -123.9796552, - 44.9853356 - ], - [ - -123.979909, - 44.9832134 - ], - [ - -123.9807413, - 44.9811671 - ], - [ - -123.98212, - 44.9792754 - ], - [ - -123.9839922, - 44.9776109 - ], - [ - -123.9862857, - 44.9762375 - ], - [ - -123.9889126, - 44.9752081 - ], - [ - -123.9917718, - 44.9745622 - ], - [ - -123.9947536, - 44.9743245 - ], - [ - -123.9948302, - 44.9743237 - ], - [ - -123.9951903, - 44.9743193 - ], - [ - -123.995374, - 44.9743167 - ], - [ - -123.995446, - 44.9743158 - ], - [ - -123.9963343, - 44.9743059 - ], - [ - -123.9967257, - 44.9743011 - ], - [ - -123.9997521, - 44.9744775 - ], - [ - -124.0026698, - 44.9750744 - ], - [ - -124.0053642, - 44.9760684 - ], - [ - -124.0067653, - 44.9768692 - ], - [ - -124.0071102, - 44.9768698 - ], - [ - -124.0099562, - 44.9772626 - ], - [ - -124.0126469, - 44.9780292 - ], - [ - -124.0150857, - 44.9791421 - ], - [ - -124.0171853, - 44.9805614 - ], - [ - -124.0188702, - 44.9822362 - ], - [ - -124.02008, - 44.9841064 - ], - [ - -124.0207712, - 44.9861049 - ], - [ - -124.0209191, - 44.9881601 - ], - [ - -124.0209174, - 44.988169 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16072_s_16081", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0209976, - 44.9897713 - ], - [ - -124.0210139, - 44.9899939 - ], - [ - -124.0205817, - 44.9921016 - ], - [ - -124.0195784, - 44.9941089 - ], - [ - -124.0180423, - 44.9959387 - ], - [ - -124.0160326, - 44.9975206 - ], - [ - -124.0136264, - 44.998794 - ], - [ - -124.0109162, - 44.9997098 - ], - [ - -124.0080062, - 45.0002327 - ], - [ - -124.0050083, - 45.0003428 - ], - [ - -124.0020377, - 45.0000357 - ], - [ - -123.9992088, - 44.9993232 - ], - [ - -123.9966302, - 44.9982328 - ], - [ - -123.9944011, - 44.9968064 - ], - [ - -123.9926071, - 44.9950989 - ], - [ - -123.9913172, - 44.9931757 - ], - [ - -123.9905808, - 44.991111 - ], - [ - -123.9903811, - 44.990171 - ], - [ - -123.9902649, - 44.9894708 - ], - [ - -123.990205, - 44.9889708 - ], - [ - -123.9902809, - 44.9866334 - ], - [ - -123.990331, - 44.9863634 - ], - [ - -123.9914965, - 44.9834056 - ], - [ - -123.9919583, - 44.9826606 - ], - [ - -123.9922333, - 44.9809007 - ], - [ - -123.9931396, - 44.9788703 - ], - [ - -123.9945865, - 44.9770045 - ], - [ - -123.9965184, - 44.9753747 - ], - [ - -123.9988609, - 44.9740438 - ], - [ - -124.0015242, - 44.9730628 - ], - [ - -124.0044058, - 44.9724693 - ], - [ - -124.0073952, - 44.9722863 - ], - [ - -124.0103774, - 44.9725206 - ], - [ - -124.013238, - 44.9731634 - ], - [ - -124.015867, - 44.9741898 - ], - [ - -124.0181635, - 44.9755606 - ], - [ - -124.0200393, - 44.977223 - ], - [ - -124.0214221, - 44.9791132 - ], - [ - -124.022259, - 44.9811585 - ], - [ - -124.0225175, - 44.9832804 - ], - [ - -124.022488, - 44.9850404 - ], - [ - -124.0221667, - 44.9871289 - ], - [ - -124.0221167, - 44.9872989 - ], - [ - -124.0216466, - 44.9885313 - ], - [ - -124.0214766, - 44.9888913 - ], - [ - -124.0209976, - 44.9897713 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16072_s_2455436", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0221287, - 44.9873171 - ], - [ - -124.0221325, - 44.9873177 - ], - [ - -124.0221005, - 44.9874277 - ], - [ - -124.0220891, - 44.9874585 - ], - [ - -124.0220798, - 44.987492 - ], - [ - -124.0220728, - 44.987514 - ], - [ - -124.0220688, - 44.9875134 - ], - [ - -124.0217069, - 44.9884918 - ], - [ - -124.0217105, - 44.9884926 - ], - [ - -124.0216495, - 44.9886316 - ], - [ - -124.02122, - 44.989484 - ], - [ - -124.0211881, - 44.98954 - ], - [ - -124.0211415, - 44.9896205 - ], - [ - -124.0211036, - 44.9896855 - ], - [ - -124.0210385, - 44.9897925 - ], - [ - -124.021056, - 44.9900812 - ], - [ - -124.0205975, - 44.992186 - ], - [ - -124.0195691, - 44.9941869 - ], - [ - -124.0180102, - 44.996007 - ], - [ - -124.0159808, - 44.9975763 - ], - [ - -124.0135587, - 44.9988344 - ], - [ - -124.0108372, - 44.9997331 - ], - [ - -124.0079208, - 45.0002377 - ], - [ - -124.0049216, - 45.0003288 - ], - [ - -124.001955, - 45.0000031 - ], - [ - -123.9991351, - 44.9992728 - ], - [ - -123.9965702, - 44.9981663 - ], - [ - -123.994359, - 44.9967259 - ], - [ - -123.9925865, - 44.9950071 - ], - [ - -123.9913207, - 44.9930759 - ], - [ - -123.990757, - 44.9914342 - ], - [ - -123.9907109, - 44.9914402 - ], - [ - -123.990678, - 44.9913142 - ], - [ - -123.9906605, - 44.9912462 - ], - [ - -123.9905646, - 44.9908662 - ], - [ - -123.990491, - 44.9905737 - ], - [ - -123.9903437, - 44.9898464 - ], - [ - -123.9903227, - 44.9897104 - ], - [ - -123.9902916, - 44.9894869 - ], - [ - -123.9902776, - 44.9893749 - ], - [ - -123.9902495, - 44.9891144 - ], - [ - -123.9902366, - 44.9889714 - ], - [ - -123.9902058, - 44.9883845 - ], - [ - -123.9902038, - 44.9882475 - ], - [ - -123.9903173, - 44.9868123 - ], - [ - -123.9903453, - 44.9866503 - ], - [ - -123.990428, - 44.9862381 - ], - [ - -123.990459, - 44.9861021 - ], - [ - -123.990679, - 44.9853208 - ], - [ - -123.9907311, - 44.9851658 - ], - [ - -123.9912608, - 44.9839228 - ], - [ - -123.9913268, - 44.9837958 - ], - [ - -123.9916145, - 44.983283 - ], - [ - -123.9917055, - 44.983132 - ], - [ - -123.9917197, - 44.9831086 - ], - [ - -123.9918678, - 44.9828646 - ], - [ - -123.991878, - 44.9828478 - ], - [ - -123.991956, - 44.9827198 - ], - [ - -123.9919947, - 44.9826569 - ], - [ - -123.9922868, - 44.982186 - ], - [ - -123.9923511, - 44.9820837 - ], - [ - -123.9924091, - 44.9819927 - ], - [ - -123.9924261, - 44.9819661 - ], - [ - -123.9924381, - 44.9819474 - ], - [ - -123.9924828, - 44.9817712 - ], - [ - -123.9935799, - 44.9797888 - ], - [ - -123.9952007, - 44.9779964 - ], - [ - -123.997283, - 44.9764628 - ], - [ - -123.9997467, - 44.975247 - ], - [ - -124.0024971, - 44.9743957 - ], - [ - -124.0054286, - 44.9739415 - ], - [ - -124.0084287, - 44.9739018 - ], - [ - -124.0113819, - 44.9742784 - ], - [ - -124.0141751, - 44.9750565 - ], - [ - -124.0167007, - 44.9762065 - ], - [ - -124.0188619, - 44.977684 - ], - [ - -124.0205755, - 44.9794324 - ], - [ - -124.0217758, - 44.9813844 - ], - [ - -124.0224164, - 44.9834651 - ], - [ - -124.0224728, - 44.9855946 - ], - [ - -124.0224529, - 44.9857726 - ], - [ - -124.0222805, - 44.9867487 - ], - [ - -124.0222345, - 44.9869387 - ], - [ - -124.0221287, - 44.9873171 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16074_s_16077", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.018119, - 45.0014204 - ], - [ - -124.0162258, - 45.0030509 - ], - [ - -124.0153358, - 45.003681 - ], - [ - -124.0126379, - 45.0052022 - ], - [ - -124.0113978, - 45.0057523 - ], - [ - -124.0101349, - 45.0062552 - ], - [ - -124.0090647, - 45.0066353 - ], - [ - -124.0067115, - 45.0073045 - ], - [ - -124.0056114, - 45.0075445 - ], - [ - -124.0041818, - 45.0077674 - ], - [ - -124.0027121, - 45.0083101 - ], - [ - -124.0023332, - 45.0084184 - ], - [ - -123.9994517, - 45.0090164 - ], - [ - -123.996461, - 45.0092042 - ], - [ - -123.9934762, - 45.0089743 - ], - [ - -123.9906119, - 45.0083357 - ], - [ - -123.9879785, - 45.0073129 - ], - [ - -123.985677, - 45.0059453 - ], - [ - -123.9837959, - 45.0042854 - ], - [ - -123.9824076, - 45.002397 - ], - [ - -123.9815653, - 45.0003527 - ], - [ - -123.9813013, - 44.9982312 - ], - [ - -123.981402, - 44.9975739 - ], - [ - -123.9813907, - 44.997468 - ], - [ - -123.9817343, - 44.9953917 - ], - [ - -123.982632, - 44.9934005 - ], - [ - -123.9840505, - 44.9915681 - ], - [ - -123.9859372, - 44.9899625 - ], - [ - -123.9882222, - 44.9886429 - ], - [ - -123.990821, - 44.9876583 - ], - [ - -123.9914309, - 44.9874783 - ], - [ - -123.9938091, - 44.9869333 - ], - [ - -123.994469, - 44.9868233 - ], - [ - -123.9955258, - 44.9866748 - ], - [ - -123.9959481, - 44.9866263 - ], - [ - -123.99748, - 44.9857394 - ], - [ - -124.0001308, - 44.9847408 - ], - [ - -124.0030051, - 44.9841284 - ], - [ - -124.0059925, - 44.9839255 - ], - [ - -124.0089783, - 44.9841401 - ], - [ - -124.0118478, - 44.9847639 - ], - [ - -124.0144907, - 44.985773 - ], - [ - -124.0168056, - 44.9871285 - ], - [ - -124.0187034, - 44.9887784 - ], - [ - -124.0201114, - 44.9906593 - ], - [ - -124.0209752, - 44.992699 - ], - [ - -124.0212616, - 44.9948191 - ], - [ - -124.0209597, - 44.9969381 - ], - [ - -124.0200809, - 44.9989746 - ], - [ - -124.0186589, - 45.0008503 - ], - [ - -124.018119, - 45.0014204 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16075_s_16074", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0215326, - 44.9910433 - ], - [ - -124.0216834, - 44.9920746 - ], - [ - -124.0217195, - 44.9925346 - ], - [ - -124.0217245, - 44.993677 - ], - [ - -124.0216896, - 44.994176 - ], - [ - -124.0214602, - 44.9955861 - ], - [ - -124.0213703, - 44.9959361 - ], - [ - -124.021027, - 44.9969785 - ], - [ - -124.0208781, - 44.9973475 - ], - [ - -124.0201873, - 44.9987091 - ], - [ - -124.0199254, - 44.9991342 - ], - [ - -124.018459, - 45.0009926 - ], - [ - -124.0165097, - 45.0026123 - ], - [ - -124.0141523, - 45.003931 - ], - [ - -124.0114775, - 45.0048981 - ], - [ - -124.0085881, - 45.0054763 - ], - [ - -124.0055952, - 45.0056434 - ], - [ - -124.0026138, - 45.005393 - ], - [ - -123.9997586, - 45.0047347 - ], - [ - -123.9971394, - 45.0036938 - ], - [ - -123.9948569, - 45.0023104 - ], - [ - -123.9929988, - 45.0006376 - ], - [ - -123.9916364, - 44.9987398 - ], - [ - -123.9908222, - 44.9966898 - ], - [ - -123.9905873, - 44.9945665 - ], - [ - -123.9909055, - 44.9926619 - ], - [ - -123.9907331, - 44.9918566 - ], - [ - -123.9905754, - 44.9897298 - ], - [ - -123.9910054, - 44.9876219 - ], - [ - -123.9920066, - 44.9856141 - ], - [ - -123.9935404, - 44.9837835 - ], - [ - -123.9955479, - 44.9822003 - ], - [ - -123.9979519, - 44.9809255 - ], - [ - -124.00066, - 44.980008 - ], - [ - -124.0035683, - 44.979483 - ], - [ - -124.0065649, - 44.9793707 - ], - [ - -124.0095349, - 44.9796754 - ], - [ - -124.0123641, - 44.9803854 - ], - [ - -124.0149438, - 44.9814735 - ], - [ - -124.017175, - 44.9828978 - ], - [ - -124.0189719, - 44.9846036 - ], - [ - -124.0202655, - 44.9865254 - ], - [ - -124.021006, - 44.9885894 - ], - [ - -124.0215326, - 44.9910433 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16076_s_16075", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0208616, - 44.9879642 - ], - [ - -124.0209754, - 44.9884528 - ], - [ - -124.0211724, - 44.990578 - ], - [ - -124.0207813, - 44.9926896 - ], - [ - -124.0198171, - 44.9947066 - ], - [ - -124.0183168, - 44.9965513 - ], - [ - -124.0163381, - 44.9981528 - ], - [ - -124.0139569, - 44.9994496 - ], - [ - -124.0112647, - 45.0003918 - ], - [ - -124.0083651, - 45.0009433 - ], - [ - -124.0053696, - 45.0010827 - ], - [ - -124.0023934, - 45.0008047 - ], - [ - -123.9995508, - 45.0001201 - ], - [ - -123.9973069, - 44.9992009 - ], - [ - -123.9970595, - 44.9991723 - ], - [ - -123.9942479, - 44.9984262 - ], - [ - -123.9916955, - 44.9973052 - ], - [ - -123.9895005, - 44.9958524 - ], - [ - -123.9877473, - 44.9941237 - ], - [ - -123.9865031, - 44.9921854 - ], - [ - -123.9858158, - 44.9901122 - ], - [ - -123.9857117, - 44.9879837 - ], - [ - -123.9861948, - 44.9858816 - ], - [ - -123.9872464, - 44.9838868 - ], - [ - -123.9888261, - 44.982076 - ], - [ - -123.9908731, - 44.9805186 - ], - [ - -123.9933088, - 44.9792745 - ], - [ - -123.9960395, - 44.9783915 - ], - [ - -123.9972883, - 44.9780885 - ], - [ - -123.9979075, - 44.9779487 - ], - [ - -124.0012349, - 44.9772518 - ], - [ - -124.0040506, - 44.976861 - ], - [ - -124.0069195, - 44.9768499 - ], - [ - -124.009741, - 44.9772189 - ], - [ - -124.012416, - 44.9779551 - ], - [ - -124.0148505, - 44.9790326 - ], - [ - -124.0169591, - 44.9804136 - ], - [ - -124.0186676, - 44.9820495 - ], - [ - -124.0199161, - 44.983883 - ], - [ - -124.0206606, - 44.9858496 - ], - [ - -124.020875, - 44.9878802 - ], - [ - -124.0208616, - 44.9879642 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16077_s_16077", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9812827, - 44.9984335 - ], - [ - -123.9815407, - 44.9963116 - ], - [ - -123.9823772, - 44.9942661 - ], - [ - -123.9837599, - 44.9923757 - ], - [ - -123.9856356, - 44.9907131 - ], - [ - -123.9879324, - 44.989342 - ], - [ - -123.9905618, - 44.9883151 - ], - [ - -123.993423, - 44.987672 - ], - [ - -123.996406, - 44.9874372 - ], - [ - -123.9993962, - 44.9876199 - ], - [ - -124.0022787, - 44.9882129 - ], - [ - -124.004943, - 44.9891936 - ], - [ - -124.0072865, - 44.9905242 - ], - [ - -124.0092193, - 44.9921536 - ], - [ - -124.0106671, - 44.9940193 - ], - [ - -124.0115742, - 44.9960495 - ], - [ - -124.0119057, - 44.9981663 - ], - [ - -124.0116488, - 45.0002883 - ], - [ - -124.0108133, - 45.0023339 - ], - [ - -124.0094313, - 45.0042246 - ], - [ - -124.0075557, - 45.0058877 - ], - [ - -124.0052588, - 45.0072592 - ], - [ - -124.0026288, - 45.0082863 - ], - [ - -123.9997667, - 45.0089297 - ], - [ - -123.9967826, - 45.0091646 - ], - [ - -123.9937913, - 45.0089819 - ], - [ - -123.9909078, - 45.0083886 - ], - [ - -123.9882429, - 45.0074077 - ], - [ - -123.9858991, - 45.0060767 - ], - [ - -123.9839665, - 45.0044469 - ], - [ - -123.9825193, - 45.0025809 - ], - [ - -123.9816131, - 45.0005504 - ], - [ - -123.9812827, - 44.9984335 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16077_s_759421", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9968936, - 44.9865274 - ], - [ - -123.9979172, - 44.9860561 - ], - [ - -124.0005612, - 44.9852879 - ], - [ - -124.0033603, - 44.9848816 - ], - [ - -124.006217, - 44.9848514 - ], - [ - -124.0090318, - 44.9851983 - ], - [ - -124.0117069, - 44.9859104 - ], - [ - -124.0141491, - 44.9869627 - ], - [ - -124.0162733, - 44.9883186 - ], - [ - -124.0166578, - 44.9886146 - ], - [ - -124.0183378, - 44.9901679 - ], - [ - -124.0195976, - 44.9919099 - ], - [ - -124.0196857, - 44.9920647 - ], - [ - -124.0204873, - 44.9939485 - ], - [ - -124.0207969, - 44.9959039 - ], - [ - -124.0208014, - 44.996052 - ], - [ - -124.0206095, - 44.9980119 - ], - [ - -124.0204836, - 44.998566 - ], - [ - -124.0197175, - 45.0006252 - ], - [ - -124.0183998, - 45.0025389 - ], - [ - -124.0165812, - 45.0042334 - ], - [ - -124.0143313, - 45.0056436 - ], - [ - -124.0117369, - 45.0067152 - ], - [ - -124.0088974, - 45.0074071 - ], - [ - -124.0059223, - 45.0076927 - ], - [ - -124.0050181, - 45.007653 - ], - [ - -124.0048822, - 45.0076817 - ], - [ - -124.0046939, - 45.0077111 - ], - [ - -124.0044826, - 45.0078136 - ], - [ - -124.0041722, - 45.007936 - ], - [ - -124.0029503, - 45.0083683 - ], - [ - -124.0026975, - 45.008448 - ], - [ - -124.0000572, - 45.009083 - ], - [ - -123.9972983, - 45.009368 - ], - [ - -123.9945123, - 45.0092933 - ], - [ - -123.9917916, - 45.0088616 - ], - [ - -123.9892263, - 45.0080871 - ], - [ - -123.9869016, - 45.0069955 - ], - [ - -123.9867752, - 45.0069236 - ], - [ - -123.9847186, - 45.0055103 - ], - [ - -123.9830688, - 45.0038501 - ], - [ - -123.9818836, - 45.002001 - ], - [ - -123.9812043, - 45.0000277 - ], - [ - -123.9810547, - 44.9979992 - ], - [ - -123.9814399, - 44.9959864 - ], - [ - -123.9822852, - 44.9941897 - ], - [ - -123.9823794, - 44.9939263 - ], - [ - -123.9837921, - 44.9918919 - ], - [ - -123.9857692, - 44.99011 - ], - [ - -123.9882243, - 44.9886581 - ], - [ - -123.9910506, - 44.9875994 - ], - [ - -123.9916702, - 44.9874232 - ], - [ - -123.9935569, - 44.9869851 - ], - [ - -123.9941658, - 44.9868741 - ], - [ - -123.9956925, - 44.9866539 - ], - [ - -123.9968233, - 44.9865329 - ], - [ - -123.9968936, - 44.9865274 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16079_s_16079", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9951555, - 44.996691 - ], - [ - -123.995413, - 44.994569 - ], - [ - -123.996249, - 44.9925235 - ], - [ - -123.9976312, - 44.9906329 - ], - [ - -123.9995065, - 44.98897 - ], - [ - -124.0018028, - 44.9875986 - ], - [ - -124.0044319, - 44.9865715 - ], - [ - -124.0072929, - 44.985928 - ], - [ - -124.0102757, - 44.9856929 - ], - [ - -124.0132658, - 44.9858751 - ], - [ - -124.0161484, - 44.9864678 - ], - [ - -124.0188128, - 44.9874482 - ], - [ - -124.0211566, - 44.9887785 - ], - [ - -124.0230897, - 44.9904077 - ], - [ - -124.0245379, - 44.9922732 - ], - [ - -124.0254455, - 44.9943033 - ], - [ - -124.0257775, - 44.99642 - ], - [ - -124.0255211, - 44.998542 - ], - [ - -124.0246861, - 45.0005878 - ], - [ - -124.0233046, - 45.0024786 - ], - [ - -124.0214295, - 45.0041419 - ], - [ - -124.019133, - 45.0055137 - ], - [ - -124.0165033, - 45.0065412 - ], - [ - -124.0136415, - 45.0071849 - ], - [ - -124.0106576, - 45.0074201 - ], - [ - -124.0076663, - 45.0072378 - ], - [ - -124.0047827, - 45.0066449 - ], - [ - -124.0021177, - 45.0056643 - ], - [ - -123.9997736, - 45.0043336 - ], - [ - -123.9978407, - 45.002704 - ], - [ - -123.9963931, - 45.0008382 - ], - [ - -123.9954864, - 44.9988078 - ], - [ - -123.9951555, - 44.996691 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16079_s_16080", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.025299, - 44.9988841 - ], - [ - -124.0242261, - 45.0013217 - ], - [ - -124.0241144, - 45.0014989 - ], - [ - -124.0228091, - 45.0031614 - ], - [ - -124.0211149, - 45.0046369 - ], - [ - -124.0209406, - 45.004764 - ], - [ - -124.0190423, - 45.0059384 - ], - [ - -124.0174173, - 45.0067874 - ], - [ - -124.0156287, - 45.0075927 - ], - [ - -124.0151709, - 45.0077686 - ], - [ - -124.0111415, - 45.0088299 - ], - [ - -124.0106989, - 45.0088983 - ], - [ - -124.0075449, - 45.0091475 - ], - [ - -124.0071179, - 45.0091496 - ], - [ - -124.0050311, - 45.0090588 - ], - [ - -124.0031912, - 45.0088887 - ], - [ - -124.0002786, - 45.0084107 - ], - [ - -123.9975526, - 45.0075404 - ], - [ - -123.9951169, - 45.0063109 - ], - [ - -123.9930644, - 45.0047691 - ], - [ - -123.9914733, - 45.0029738 - ], - [ - -123.9904041, - 45.0009934 - ], - [ - -123.9898977, - 44.9989034 - ], - [ - -123.9899732, - 44.9967834 - ], - [ - -123.990137, - 44.9958431 - ], - [ - -123.9907955, - 44.9937652 - ], - [ - -123.9920125, - 44.9918183 - ], - [ - -123.9937414, - 44.9900773 - ], - [ - -123.9959156, - 44.988609 - ], - [ - -123.9984515, - 44.9874699 - ], - [ - -124.0012518, - 44.9867038 - ], - [ - -124.0042089, - 44.9863399 - ], - [ - -124.0052404, - 44.9863579 - ], - [ - -124.0071795, - 44.9859236 - ], - [ - -124.0101627, - 44.985691 - ], - [ - -124.0131525, - 44.9858759 - ], - [ - -124.0160341, - 44.986471 - ], - [ - -124.0186968, - 44.9874536 - ], - [ - -124.0210383, - 44.9887859 - ], - [ - -124.0229687, - 44.9904168 - ], - [ - -124.0244137, - 44.9922835 - ], - [ - -124.0253178, - 44.9943144 - ], - [ - -124.0256463, - 44.9964314 - ], - [ - -124.0253863, - 44.9985532 - ], - [ - -124.025299, - 44.9988841 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16080_s_16072", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0206187, - 44.9980672 - ], - [ - -124.0205999, - 44.9981724 - ], - [ - -124.0205146, - 44.9986238 - ], - [ - -124.0198258, - 45.0006967 - ], - [ - -124.0185802, - 45.0026346 - ], - [ - -124.0168256, - 45.0043627 - ], - [ - -124.0146294, - 45.0058148 - ], - [ - -124.0120759, - 45.0069349 - ], - [ - -124.0092634, - 45.0076801 - ], - [ - -124.0062999, - 45.0080216 - ], - [ - -124.0032995, - 45.0079463 - ], - [ - -124.0003774, - 45.0074572 - ], - [ - -123.9976461, - 45.006573 - ], - [ - -123.9952105, - 45.0053277 - ], - [ - -123.9931643, - 45.0037693 - ], - [ - -123.9915861, - 45.0019575 - ], - [ - -123.9905365, - 44.9999621 - ], - [ - -123.9900558, - 44.9978598 - ], - [ - -123.9900673, - 44.9976309 - ], - [ - -123.9898028, - 44.9966511 - ], - [ - -123.9898434, - 44.9944564 - ], - [ - -123.9905049, - 44.9923122 - ], - [ - -123.9908024, - 44.9918368 - ], - [ - -123.9906605, - 44.9912054 - ], - [ - -123.9904809, - 44.9890794 - ], - [ - -123.9908891, - 44.9869694 - ], - [ - -123.9918696, - 44.9849565 - ], - [ - -123.9933845, - 44.9831179 - ], - [ - -123.9953755, - 44.9815244 - ], - [ - -123.9977663, - 44.9802371 - ], - [ - -124.0004649, - 44.9793055 - ], - [ - -124.0033676, - 44.9787654 - ], - [ - -124.0063629, - 44.9786376 - ], - [ - -124.0093359, - 44.9789269 - ], - [ - -124.0121723, - 44.9796222 - ], - [ - -124.0147632, - 44.9806968 - ], - [ - -124.017009, - 44.9821095 - ], - [ - -124.0188234, - 44.9838059 - ], - [ - -124.0201368, - 44.9857209 - ], - [ - -124.0208985, - 44.987781 - ], - [ - -124.0216191, - 44.9909813 - ], - [ - -124.0218064, - 44.9924322 - ], - [ - -124.0218314, - 44.9931628 - ], - [ - -124.0216924, - 44.9949102 - ], - [ - -124.0216171, - 44.9952976 - ], - [ - -124.0213289, - 44.9963752 - ], - [ - -124.0211732, - 44.9968305 - ], - [ - -124.0206187, - 44.9980672 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16080_s_16210", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0032682, - 45.0079106 - ], - [ - -124.0031613, - 45.0079266 - ], - [ - -124.0024311, - 45.0079966 - ], - [ - -124.0012879, - 45.0080657 - ], - [ - -123.9991697, - 45.0086446 - ], - [ - -123.9972837, - 45.0094718 - ], - [ - -123.9967365, - 45.0098568 - ], - [ - -123.9942333, - 45.0110328 - ], - [ - -123.9914546, - 45.0118397 - ], - [ - -123.9885073, - 45.0122465 - ], - [ - -123.9855048, - 45.0122376 - ], - [ - -123.9825625, - 45.0118133 - ], - [ - -123.9797935, - 45.0109899 - ], - [ - -123.9773042, - 45.009799 - ], - [ - -123.9751904, - 45.0082865 - ], - [ - -123.9735333, - 45.0065105 - ], - [ - -123.9723965, - 45.0045392 - ], - [ - -123.9718238, - 45.0024485 - ], - [ - -123.9718369, - 45.0003187 - ], - [ - -123.9724354, - 44.9982317 - ], - [ - -123.9735963, - 44.9962676 - ], - [ - -123.9752747, - 44.9945018 - ], - [ - -123.9755548, - 44.9942619 - ], - [ - -123.9769212, - 44.9932348 - ], - [ - -123.9774212, - 44.9929048 - ], - [ - -123.9791567, - 44.9919162 - ], - [ - -123.9796267, - 44.9916862 - ], - [ - -123.9802701, - 44.991388 - ], - [ - -123.9838498, - 44.9898183 - ], - [ - -123.9849342, - 44.9893849 - ], - [ - -123.9857341, - 44.9890949 - ], - [ - -123.9871969, - 44.9886315 - ], - [ - -123.9918062, - 44.9873717 - ], - [ - -123.9941129, - 44.986885 - ], - [ - -123.9954327, - 44.986685 - ], - [ - -123.9967186, - 44.9865305 - ], - [ - -123.9967828, - 44.9865247 - ], - [ - -123.9969543, - 44.9864321 - ], - [ - -123.9996508, - 44.9854975 - ], - [ - -124.0025524, - 44.9849541 - ], - [ - -124.0055477, - 44.9848227 - ], - [ - -124.0085215, - 44.9851085 - ], - [ - -124.0113597, - 44.9858004 - ], - [ - -124.0139532, - 44.9868718 - ], - [ - -124.0162025, - 44.9882817 - ], - [ - -124.0165825, - 44.9885717 - ], - [ - -124.0180175, - 44.9898465 - ], - [ - -124.0191674, - 44.9912594 - ], - [ - -124.0193075, - 44.9914661 - ], - [ - -124.0203595, - 44.9935271 - ], - [ - -124.0208071, - 44.995696 - ], - [ - -124.0206321, - 44.9978845 - ], - [ - -124.0206256, - 44.9979134 - ], - [ - -124.0205314, - 44.9984656 - ], - [ - -124.0198804, - 45.0005448 - ], - [ - -124.0186702, - 45.0024938 - ], - [ - -124.0169472, - 45.0042379 - ], - [ - -124.0147776, - 45.00571 - ], - [ - -124.0122448, - 45.0068535 - ], - [ - -124.009446, - 45.0076243 - ], - [ - -124.0064891, - 45.007993 - ], - [ - -124.0034875, - 45.0079452 - ], - [ - -124.0032682, - 45.0079106 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16081_s_16082", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0216491, - 44.9866582 - ], - [ - -124.0207397, - 44.988234 - ], - [ - -124.0190822, - 44.9900095 - ], - [ - -124.0169683, - 44.9915215 - ], - [ - -124.0144793, - 44.9927117 - ], - [ - -124.0117107, - 44.9935344 - ], - [ - -124.0087691, - 44.993958 - ], - [ - -124.0057676, - 44.9939662 - ], - [ - -124.0028215, - 44.9935586 - ], - [ - -124.0000441, - 44.992751 - ], - [ - -123.9975423, - 44.9915743 - ], - [ - -123.9954121, - 44.9900739 - ], - [ - -123.9937355, - 44.9883073 - ], - [ - -123.9925769, - 44.9863426 - ], - [ - -123.9919806, - 44.9842553 - ], - [ - -123.9919697, - 44.9821255 - ], - [ - -123.99209, - 44.9812255 - ], - [ - -123.9925016, - 44.9795518 - ], - [ - -123.9926317, - 44.9791918 - ], - [ - -123.9935606, - 44.9773381 - ], - [ - -123.9938207, - 44.9769381 - ], - [ - -123.9951182, - 44.9753224 - ], - [ - -123.9954583, - 44.9749724 - ], - [ - -123.9966102, - 44.9739293 - ], - [ - -123.9970602, - 44.9735693 - ], - [ - -123.9971495, - 44.9735004 - ], - [ - -123.9973032, - 44.973231 - ], - [ - -123.9986971, - 44.9713449 - ], - [ - -124.0005824, - 44.9696881 - ], - [ - -124.0028868, - 44.9683242 - ], - [ - -124.0055216, - 44.9673055 - ], - [ - -124.0083857, - 44.9666713 - ], - [ - -124.0113689, - 44.9664458 - ], - [ - -124.0143569, - 44.9666378 - ], - [ - -124.0172347, - 44.9672398 - ], - [ - -124.0198919, - 44.9682287 - ], - [ - -124.0222263, - 44.9695666 - ], - [ - -124.0241483, - 44.971202 - ], - [ - -124.025584, - 44.9730722 - ], - [ - -124.0264782, - 44.9751052 - ], - [ - -124.0267965, - 44.977223 - ], - [ - -124.0265266, - 44.9793442 - ], - [ - -124.0256788, - 44.9813872 - ], - [ - -124.0247091, - 44.9830874 - ], - [ - -124.0244716, - 44.9834812 - ], - [ - -124.0242617, - 44.9838112 - ], - [ - -124.023226, - 44.9851719 - ], - [ - -124.022966, - 44.9854619 - ], - [ - -124.0216491, - 44.9866582 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16082_s_16084", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0295645, - 44.9731011 - ], - [ - -124.0278846, - 44.9774215 - ], - [ - -124.0272496, - 44.9787252 - ], - [ - -124.0256102, - 44.9815054 - ], - [ - -124.0241858, - 44.9833801 - ], - [ - -124.0222734, - 44.9850214 - ], - [ - -124.0199464, - 44.9863664 - ], - [ - -124.0172942, - 44.9873633 - ], - [ - -124.0144189, - 44.9879738 - ], - [ - -124.011431, - 44.9881744 - ], - [ - -124.0084454, - 44.9879575 - ], - [ - -124.0055768, - 44.9873313 - ], - [ - -124.0029355, - 44.9863199 - ], - [ - -124.0006232, - 44.9849622 - ], - [ - -123.9987286, - 44.9833104 - ], - [ - -123.9973246, - 44.9814281 - ], - [ - -123.9964651, - 44.9793875 - ], - [ - -123.9961831, - 44.9772671 - ], - [ - -123.9964892, - 44.9751484 - ], - [ - -123.9973718, - 44.9731128 - ], - [ - -123.9986362, - 44.9709704 - ], - [ - -124.0006582, - 44.9657768 - ], - [ - -124.000955, - 44.965101 - ], - [ - -124.000976, - 44.9650583 - ], - [ - -124.0006272, - 44.9643821 - ], - [ - -124.0001626, - 44.962326 - ], - [ - -124.000259, - 44.9602447 - ], - [ - -124.000592, - 44.959211 - ], - [ - -124.0006364, - 44.9589178 - ], - [ - -124.0008222, - 44.9584964 - ], - [ - -124.000913, - 44.9582147 - ], - [ - -124.0010272, - 44.9580315 - ], - [ - -124.0015326, - 44.9568853 - ], - [ - -124.00297, - 44.9550159 - ], - [ - -124.0048933, - 44.9533815 - ], - [ - -124.0072286, - 44.952045 - ], - [ - -124.0098861, - 44.9510575 - ], - [ - -124.0127638, - 44.9504571 - ], - [ - -124.0157511, - 44.9502669 - ], - [ - -124.0187333, - 44.950494 - ], - [ - -124.0215959, - 44.9511299 - ], - [ - -124.0242288, - 44.95215 - ], - [ - -124.026531, - 44.9535152 - ], - [ - -124.0284139, - 44.9551731 - ], - [ - -124.0292555, - 44.9563144 - ], - [ - -124.0293223, - 44.9563693 - ], - [ - -124.0305365, - 44.957733 - ], - [ - -124.0307465, - 44.958013 - ], - [ - -124.0315398, - 44.9592515 - ], - [ - -124.0317599, - 44.9596614 - ], - [ - -124.0326505, - 44.9622143 - ], - [ - -124.0329911, - 44.9641942 - ], - [ - -124.0330998, - 44.9652602 - ], - [ - -124.0331099, - 44.9655702 - ], - [ - -124.0327915, - 44.9680396 - ], - [ - -124.0327415, - 44.9682096 - ], - [ - -124.0325953, - 44.9686591 - ], - [ - -124.0324954, - 44.9689391 - ], - [ - -124.0310587, - 44.9715207 - ], - [ - -124.0306388, - 44.9720607 - ], - [ - -124.0295645, - 44.9731011 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16082_s_759422", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0317887, - 44.970251 - ], - [ - -124.0312775, - 44.9711605 - ], - [ - -124.0311186, - 44.9713885 - ], - [ - -124.0296981, - 44.9730381 - ], - [ - -124.0294522, - 44.9732737 - ], - [ - -124.0280174, - 44.9769775 - ], - [ - -124.0276595, - 44.9777786 - ], - [ - -124.0271018, - 44.9788777 - ], - [ - -124.0268548, - 44.9793322 - ], - [ - -124.0256312, - 44.9814413 - ], - [ - -124.0242221, - 44.9833218 - ], - [ - -124.0223231, - 44.984971 - ], - [ - -124.0200071, - 44.9863255 - ], - [ - -124.0173632, - 44.9873333 - ], - [ - -124.0144929, - 44.9879556 - ], - [ - -124.0115067, - 44.9881685 - ], - [ - -124.0085193, - 44.9879638 - ], - [ - -124.0056456, - 44.9873494 - ], - [ - -124.0029962, - 44.9863489 - ], - [ - -124.0006728, - 44.9850007 - ], - [ - -123.9987648, - 44.9833568 - ], - [ - -123.9973455, - 44.9814802 - ], - [ - -123.9964693, - 44.9794432 - ], - [ - -123.99617, - 44.977324 - ], - [ - -123.9964589, - 44.9752041 - ], - [ - -123.9973248, - 44.9731649 - ], - [ - -123.9984185, - 44.9712813 - ], - [ - -123.9986593, - 44.9708071 - ], - [ - -124.0007024, - 44.9655399 - ], - [ - -124.0015382, - 44.9639077 - ], - [ - -124.0018163, - 44.9634757 - ], - [ - -124.0028296, - 44.9621527 - ], - [ - -124.0030747, - 44.9618797 - ], - [ - -124.0039888, - 44.9610406 - ], - [ - -124.0043669, - 44.9604008 - ], - [ - -124.0059933, - 44.9586722 - ], - [ - -124.0080534, - 44.9571952 - ], - [ - -124.0093776, - 44.9565538 - ], - [ - -124.0098011, - 44.9563137 - ], - [ - -124.0100992, - 44.9562043 - ], - [ - -124.010472, - 44.9560237 - ], - [ - -124.011186, - 44.9558051 - ], - [ - -124.0124653, - 44.9553352 - ], - [ - -124.0153472, - 44.9547444 - ], - [ - -124.0183359, - 44.9545642 - ], - [ - -124.0213168, - 44.9548013 - ], - [ - -124.0241753, - 44.9554467 - ], - [ - -124.0268016, - 44.9564757 - ], - [ - -124.0290949, - 44.9578486 - ], - [ - -124.030967, - 44.9595127 - ], - [ - -124.0323459, - 44.9614042 - ], - [ - -124.0331787, - 44.9634503 - ], - [ - -124.0334332, - 44.9655724 - ], - [ - -124.0330997, - 44.9676891 - ], - [ - -124.0321908, - 44.9697188 - ], - [ - -124.0321327, - 44.9698148 - ], - [ - -124.0317887, - 44.970251 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16084_s_16094", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0177916, - 44.9485303 - ], - [ - -124.0190724, - 44.9487779 - ], - [ - -124.0216965, - 44.9496947 - ], - [ - -124.0240271, - 44.9509493 - ], - [ - -124.025979, - 44.9524958 - ], - [ - -124.0274202, - 44.9542056 - ], - [ - -124.0288629, - 44.9556196 - ], - [ - -124.0301613, - 44.9576993 - ], - [ - -124.0308212, - 44.9599254 - ], - [ - -124.0308323, - 44.9600014 - ], - [ - -124.0308455, - 44.9621312 - ], - [ - -124.0302732, - 44.9642219 - ], - [ - -124.0291373, - 44.9661932 - ], - [ - -124.0274815, - 44.9679692 - ], - [ - -124.0253693, - 44.9694818 - ], - [ - -124.0228818, - 44.9706727 - ], - [ - -124.0201148, - 44.9714962 - ], - [ - -124.0171746, - 44.9719206 - ], - [ - -124.0141742, - 44.9719296 - ], - [ - -124.0135554, - 44.9718442 - ], - [ - -124.0113552, - 44.9716308 - ], - [ - -124.0085854, - 44.9709635 - ], - [ - -124.0075346, - 44.9705378 - ], - [ - -124.0074023, - 44.970528 - ], - [ - -124.0044429, - 44.9698617 - ], - [ - -124.0041624, - 44.9697502 - ], - [ - -124.0036087, - 44.9696171 - ], - [ - -124.0011989, - 44.9686673 - ], - [ - -123.9990683, - 44.967426 - ], - [ - -123.997286, - 44.9659335 - ], - [ - -123.9959097, - 44.9642383 - ], - [ - -123.9958687, - 44.9641753 - ], - [ - -123.9949534, - 44.9623603 - ], - [ - -123.9945043, - 44.9604591 - ], - [ - -123.9944974, - 44.9603951 - ], - [ - -123.9944518, - 44.9595985 - ], - [ - -123.9944451, - 44.9583855 - ], - [ - -123.9946838, - 44.956431 - ], - [ - -123.9954136, - 44.9545388 - ], - [ - -123.9966107, - 44.9527706 - ], - [ - -123.9967007, - 44.9526637 - ], - [ - -123.9985648, - 44.9508881 - ], - [ - -124.000897, - 44.9494178 - ], - [ - -124.0036005, - 44.9483139 - ], - [ - -124.0042559, - 44.9481062 - ], - [ - -124.0071013, - 44.9474329 - ], - [ - -124.0100769, - 44.9471667 - ], - [ - -124.0130685, - 44.9473178 - ], - [ - -124.0159611, - 44.9478803 - ], - [ - -124.0177916, - 44.9485303 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16084_s_16185", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0317755, - 44.9509085 - ], - [ - -124.0317491, - 44.9509331 - ], - [ - -124.0314911, - 44.9511732 - ], - [ - -124.0314739, - 44.9511891 - ], - [ - -124.031174, - 44.9514671 - ], - [ - -124.031125, - 44.9515123 - ], - [ - -124.0310878, - 44.9515464 - ], - [ - -124.0307937, - 44.9518188 - ], - [ - -124.030126, - 44.9524391 - ], - [ - -124.0300148, - 44.9525412 - ], - [ - -124.0298217, - 44.9527162 - ], - [ - -124.0297482, - 44.9527973 - ], - [ - -124.0295773, - 44.9529817 - ], - [ - -124.0294305, - 44.9531366 - ], - [ - -124.0293219, - 44.9532737 - ], - [ - -124.0293296, - 44.95346 - ], - [ - -124.0293326, - 44.953638 - ], - [ - -124.0293331, - 44.9536721 - ], - [ - -124.0293352, - 44.9538331 - ], - [ - -124.0293266, - 44.9543074 - ], - [ - -124.0293192, - 44.9544593 - ], - [ - -124.0293058, - 44.9547512 - ], - [ - -124.029275, - 44.9551718 - ], - [ - -124.029254, - 44.9553798 - ], - [ - -124.0292072, - 44.9557536 - ], - [ - -124.0292049, - 44.9557692 - ], - [ - -124.0291591, - 44.9561008 - ], - [ - -124.0291537, - 44.9561395 - ], - [ - -124.0298515, - 44.95709 - ], - [ - -124.0306927, - 44.9591344 - ], - [ - -124.0309559, - 44.961256 - ], - [ - -124.030953, - 44.961459 - ], - [ - -124.0308731, - 44.962461 - ], - [ - -124.0308651, - 44.962516 - ], - [ - -124.030393, - 44.9642956 - ], - [ - -124.0303561, - 44.9643906 - ], - [ - -124.0293433, - 44.9662839 - ], - [ - -124.0278531, - 44.9680108 - ], - [ - -124.0278151, - 44.9680468 - ], - [ - -124.0258899, - 44.9695534 - ], - [ - -124.0257249, - 44.9696604 - ], - [ - -124.0232094, - 44.9709838 - ], - [ - -124.0203672, - 44.9719161 - ], - [ - -124.017317, - 44.9724182 - ], - [ - -124.0141867, - 44.9724692 - ], - [ - -124.0111073, - 44.9720668 - ], - [ - -124.0082078, - 44.9712279 - ], - [ - -124.0056096, - 44.9699877 - ], - [ - -124.0034214, - 44.9683981 - ], - [ - -124.0033464, - 44.9683311 - ], - [ - -124.0029188, - 44.9679303 - ], - [ - -124.0026758, - 44.9676913 - ], - [ - -124.0025862, - 44.9676022 - ], - [ - -124.0023742, - 44.9673892 - ], - [ - -124.0017738, - 44.9667375 - ], - [ - -124.0015969, - 44.9665294 - ], - [ - -124.0013968, - 44.9662872 - ], - [ - -124.0011578, - 44.9659892 - ], - [ - -124.0005393, - 44.9651313 - ], - [ - -124.0005013, - 44.9650723 - ], - [ - -124.0002575, - 44.9646608 - ], - [ - -124.000213, - 44.9645888 - ], - [ - -124.0001464, - 44.9644812 - ], - [ - -123.9998754, - 44.9640144 - ], - [ - -123.9998184, - 44.9639094 - ], - [ - -123.9995789, - 44.9634354 - ], - [ - -123.9995029, - 44.9632734 - ], - [ - -123.9994363, - 44.9631279 - ], - [ - -123.9993643, - 44.9629669 - ], - [ - -123.9993449, - 44.9629233 - ], - [ - -123.999319, - 44.9628643 - ], - [ - -123.9991361, - 44.9624153 - ], - [ - -123.9990761, - 44.9622553 - ], - [ - -123.9990013, - 44.9620476 - ], - [ - -123.9988295, - 44.9615496 - ], - [ - -123.9985507, - 44.9605353 - ], - [ - -123.9984768, - 44.9601763 - ], - [ - -123.998401, - 44.9597492 - ], - [ - -123.9983751, - 44.9595752 - ], - [ - -123.9983218, - 44.9589609 - ], - [ - -123.9983171, - 44.9589611 - ], - [ - -123.9983061, - 44.9588391 - ], - [ - -123.9983016, - 44.9587269 - ], - [ - -123.9982923, - 44.9586194 - ], - [ - -123.9982883, - 44.9584574 - ], - [ - -123.9982907, - 44.9584574 - ], - [ - -123.9982753, - 44.9580785 - ], - [ - -123.9982774, - 44.9578465 - ], - [ - -123.9982835, - 44.9576004 - ], - [ - -123.9982956, - 44.9573044 - ], - [ - -123.9983363, - 44.9567669 - ], - [ - -123.9983767, - 44.9564022 - ], - [ - -123.9983942, - 44.9562346 - ], - [ - -123.9984135, - 44.9560509 - ], - [ - -123.9984429, - 44.9558069 - ], - [ - -123.9984537, - 44.955728 - ], - [ - -123.9984898, - 44.9554471 - ], - [ - -123.9985353, - 44.9551404 - ], - [ - -123.9985574, - 44.9550096 - ], - [ - -123.9985625, - 44.9549722 - ], - [ - -123.9985707, - 44.9549135 - ], - [ - -123.9985979, - 44.9547247 - ], - [ - -123.9986002, - 44.9547079 - ], - [ - -123.9986027, - 44.9546894 - ], - [ - -123.9986468, - 44.9543724 - ], - [ - -123.9986503, - 44.9543475 - ], - [ - -123.9986764, - 44.9541645 - ], - [ - -123.9986779, - 44.9541535 - ], - [ - -123.9987021, - 44.9539855 - ], - [ - -123.9987096, - 44.9539276 - ], - [ - -123.998727, - 44.9538037 - ], - [ - -123.9987229, - 44.9537374 - ], - [ - -123.9987032, - 44.953537 - ], - [ - -123.9986945, - 44.9534544 - ], - [ - -123.998608, - 44.9526587 - ], - [ - -123.9985919, - 44.9524935 - ], - [ - -123.9985738, - 44.9522859 - ], - [ - -123.9985548, - 44.9520813 - ], - [ - -123.9985231, - 44.9512306 - ], - [ - -123.9985251, - 44.9511166 - ], - [ - -123.9985294, - 44.9509628 - ], - [ - -123.9985354, - 44.9508028 - ], - [ - -123.9986348, - 44.9498241 - ], - [ - -123.9986578, - 44.9496851 - ], - [ - -123.9988844, - 44.9487059 - ], - [ - -123.9989234, - 44.9485749 - ], - [ - -123.9989944, - 44.9483484 - ], - [ - -123.9990485, - 44.9481844 - ], - [ - -123.9990673, - 44.948128 - ], - [ - -123.9990963, - 44.948042 - ], - [ - -123.9993185, - 44.9474563 - ], - [ - -123.9993615, - 44.9473543 - ], - [ - -123.9998674, - 44.9463405 - ], - [ - -123.9999925, - 44.9461245 - ], - [ - -124.0004123, - 44.9454631 - ], - [ - -124.0005493, - 44.9452651 - ], - [ - -124.0008715, - 44.9448252 - ], - [ - -124.0011586, - 44.9444543 - ], - [ - -124.0013128, - 44.9442597 - ], - [ - -124.0019809, - 44.9434368 - ], - [ - -124.0020718, - 44.9433263 - ], - [ - -124.0023115, - 44.943039 - ], - [ - -124.0023773, - 44.9429598 - ], - [ - -124.0026505, - 44.9426241 - ], - [ - -124.0030589, - 44.9421083 - ], - [ - -124.0037033, - 44.9413658 - ], - [ - -124.0041066, - 44.9409404 - ], - [ - -124.0044795, - 44.9405293 - ], - [ - -124.0053, - 44.9397105 - ], - [ - -124.005874, - 44.9391903 - ], - [ - -124.0064939, - 44.9386146 - ], - [ - -124.0065083, - 44.9386012 - ], - [ - -124.0068323, - 44.9383013 - ], - [ - -124.0071843, - 44.9379758 - ], - [ - -124.0074155, - 44.9377608 - ], - [ - -124.0074657, - 44.9377137 - ], - [ - -124.0075908, - 44.9375951 - ], - [ - -124.0077671, - 44.9374277 - ], - [ - -124.0077774, - 44.9374179 - ], - [ - -124.0080266, - 44.9371819 - ], - [ - -124.0082798, - 44.9369275 - ], - [ - -124.0095872, - 44.9358458 - ], - [ - -124.0096812, - 44.9357539 - ], - [ - -124.0097633, - 44.9357001 - ], - [ - -124.0101541, - 44.9353767 - ], - [ - -124.0108987, - 44.9349551 - ], - [ - -124.0118838, - 44.9343087 - ], - [ - -124.0144408, - 44.9331964 - ], - [ - -124.0172542, - 44.9324598 - ], - [ - -124.0202157, - 44.9321271 - ], - [ - -124.0232118, - 44.9322112 - ], - [ - -124.0261272, - 44.9327087 - ], - [ - -124.02885, - 44.9336006 - ], - [ - -124.0312756, - 44.9348527 - ], - [ - -124.0333108, - 44.9364168 - ], - [ - -124.0348775, - 44.9382328 - ], - [ - -124.0359153, - 44.940231 - ], - [ - -124.0363844, - 44.9423346 - ], - [ - -124.0362666, - 44.9444628 - ], - [ - -124.0355664, - 44.9465338 - ], - [ - -124.0354165, - 44.9468408 - ], - [ - -124.0341426, - 44.9487969 - ], - [ - -124.0323499, - 44.9505359 - ], - [ - -124.0317755, - 44.9509085 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16086_s_16087", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0337515, - 44.9265252 - ], - [ - -124.0349833, - 44.9285068 - ], - [ - -124.0356372, - 44.9306227 - ], - [ - -124.0356873, - 44.9327887 - ], - [ - -124.0351313, - 44.9349186 - ], - [ - -124.0339914, - 44.9369279 - ], - [ - -124.0323129, - 44.9387365 - ], - [ - -124.0301625, - 44.9402727 - ], - [ - -124.0276255, - 44.9414753 - ], - [ - -124.0273338, - 44.9415854 - ], - [ - -124.0244758, - 44.942414 - ], - [ - -124.0214417, - 44.9428181 - ], - [ - -124.0183552, - 44.9427813 - ], - [ - -124.0153419, - 44.9423051 - ], - [ - -124.0125247, - 44.9414089 - ], - [ - -124.0100183, - 44.9401291 - ], - [ - -124.0079248, - 44.938518 - ], - [ - -124.0076986, - 44.9383042 - ], - [ - -124.0076898, - 44.9382984 - ], - [ - -124.005814, - 44.9371289 - ], - [ - -124.0037652, - 44.9355738 - ], - [ - -124.0021831, - 44.9337645 - ], - [ - -124.0011283, - 44.9317708 - ], - [ - -124.0006414, - 44.9296693 - ], - [ - -124.0007411, - 44.9275406 - ], - [ - -124.0014234, - 44.9254667 - ], - [ - -124.0026621, - 44.9235271 - ], - [ - -124.0044094, - 44.9217965 - ], - [ - -124.0065983, - 44.9203412 - ], - [ - -124.0091447, - 44.9192173 - ], - [ - -124.0119506, - 44.9184679 - ], - [ - -124.0149084, - 44.9181217 - ], - [ - -124.0179044, - 44.9181921 - ], - [ - -124.0208235, - 44.9186763 - ], - [ - -124.0235537, - 44.9195558 - ], - [ - -124.02599, - 44.9207968 - ], - [ - -124.0280235, - 44.9220643 - ], - [ - -124.0283354, - 44.9222642 - ], - [ - -124.0290271, - 44.9227198 - ], - [ - -124.0291754, - 44.9228236 - ], - [ - -124.0296196, - 44.9230234 - ], - [ - -124.0317913, - 44.9244917 - ], - [ - -124.0335182, - 44.9262327 - ], - [ - -124.0337515, - 44.9265252 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16087_s_16088", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.02974, - 44.9244485 - ], - [ - -124.0306058, - 44.9260267 - ], - [ - -124.0311287, - 44.9281238 - ], - [ - -124.0310656, - 44.9302532 - ], - [ - -124.0304189, - 44.9323329 - ], - [ - -124.0292134, - 44.934283 - ], - [ - -124.0274953, - 44.9360286 - ], - [ - -124.0253308, - 44.9375025 - ], - [ - -124.0228028, - 44.9386481 - ], - [ - -124.0200087, - 44.9394213 - ], - [ - -124.0170559, - 44.9397924 - ], - [ - -124.0140578, - 44.9397472 - ], - [ - -124.0111298, - 44.9392874 - ], - [ - -124.0083844, - 44.9384306 - ], - [ - -124.0059272, - 44.9372098 - ], - [ - -124.0045472, - 44.9363697 - ], - [ - -124.0027601, - 44.9350839 - ], - [ - -124.0012979, - 44.9336055 - ], - [ - -124.000878, - 44.9330954 - ], - [ - -123.9993298, - 44.930482 - ], - [ - -123.9991099, - 44.9299119 - ], - [ - -123.9986834, - 44.9283827 - ], - [ - -123.9985835, - 44.9278127 - ], - [ - -123.9984725, - 44.9261662 - ], - [ - -123.9987133, - 44.9245268 - ], - [ - -123.9987198, - 44.9245014 - ], - [ - -123.9981206, - 44.9235773 - ], - [ - -123.9974217, - 44.9215061 - ], - [ - -123.997305, - 44.9193779 - ], - [ - -123.9977749, - 44.9172744 - ], - [ - -123.9988132, - 44.9152764 - ], - [ - -124.0003802, - 44.9134607 - ], - [ - -124.0024154, - 44.9118971 - ], - [ - -124.0048406, - 44.9106457 - ], - [ - -124.0075628, - 44.9097544 - ], - [ - -124.0079648, - 44.9096554 - ], - [ - -124.0113199, - 44.90912 - ], - [ - -124.0118248, - 44.909081 - ], - [ - -124.0148289, - 44.9090599 - ], - [ - -124.0177807, - 44.9094566 - ], - [ - -124.0205665, - 44.9102558 - ], - [ - -124.0230787, - 44.9114265 - ], - [ - -124.0252203, - 44.9129237 - ], - [ - -124.0269087, - 44.9146895 - ], - [ - -124.0280786, - 44.9166559 - ], - [ - -124.0285513, - 44.918286 - ], - [ - -124.0292748, - 44.9196269 - ], - [ - -124.0293649, - 44.9198769 - ], - [ - -124.0298156, - 44.9219269 - ], - [ - -124.0298457, - 44.9222869 - ], - [ - -124.0298471, - 44.923558 - ], - [ - -124.0298072, - 44.924048 - ], - [ - -124.02974, - 44.9244485 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16088_s_16088", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9972547, - 44.9201162 - ], - [ - -123.9975118, - 44.9179942 - ], - [ - -123.9983466, - 44.9159486 - ], - [ - -123.999727, - 44.914058 - ], - [ - -124.0015997, - 44.9123951 - ], - [ - -124.003893, - 44.9110237 - ], - [ - -124.0065186, - 44.9099965 - ], - [ - -124.0093757, - 44.909353 - ], - [ - -124.0123546, - 44.9091178 - ], - [ - -124.0153407, - 44.9093001 - ], - [ - -124.0182195, - 44.9098928 - ], - [ - -124.0208804, - 44.9108731 - ], - [ - -124.0232211, - 44.9122034 - ], - [ - -124.0251517, - 44.9138326 - ], - [ - -124.026598, - 44.9156981 - ], - [ - -124.0275043, - 44.9177282 - ], - [ - -124.0278359, - 44.919845 - ], - [ - -124.0275799, - 44.9219671 - ], - [ - -124.026746, - 44.9240128 - ], - [ - -124.0253664, - 44.9259037 - ], - [ - -124.0234938, - 44.927567 - ], - [ - -124.0212004, - 44.9289388 - ], - [ - -124.0185742, - 44.9299664 - ], - [ - -124.0157162, - 44.9306101 - ], - [ - -124.0127362, - 44.9308454 - ], - [ - -124.009749, - 44.9306631 - ], - [ - -124.0068692, - 44.9300702 - ], - [ - -124.0042077, - 44.9290895 - ], - [ - -124.0018667, - 44.9277588 - ], - [ - -123.9999363, - 44.9261292 - ], - [ - -123.9984906, - 44.9242634 - ], - [ - -123.9975852, - 44.922233 - ], - [ - -123.9972547, - 44.9201162 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16088_s_16089", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0296089, - 44.9248714 - ], - [ - -124.0300788, - 44.9256779 - ], - [ - -124.0306629, - 44.9277669 - ], - [ - -124.0306621, - 44.9298967 - ], - [ - -124.0300764, - 44.9319855 - ], - [ - -124.0289282, - 44.933953 - ], - [ - -124.0272616, - 44.9357235 - ], - [ - -124.0251407, - 44.9372291 - ], - [ - -124.0226468, - 44.9384118 - ], - [ - -124.019876, - 44.9392261 - ], - [ - -124.0169346, - 44.9396407 - ], - [ - -124.0139359, - 44.9396398 - ], - [ - -124.010995, - 44.9392233 - ], - [ - -124.0082252, - 44.9384072 - ], - [ - -124.0057328, - 44.937223 - ], - [ - -124.0048828, - 44.9367269 - ], - [ - -124.0034944, - 44.9358085 - ], - [ - -124.0030324, - 44.9354624 - ], - [ - -124.0007727, - 44.9332784 - ], - [ - -124.0004947, - 44.9329243 - ], - [ - -123.9989771, - 44.9301584 - ], - [ - -123.9988102, - 44.9296624 - ], - [ - -123.9983916, - 44.9272057 - ], - [ - -123.9983867, - 44.9266597 - ], - [ - -123.9984704, - 44.9259686 - ], - [ - -123.998134, - 44.925615 - ], - [ - -123.9969503, - 44.9235748 - ], - [ - -123.9963713, - 44.9214069 - ], - [ - -123.9964208, - 44.9192005 - ], - [ - -123.9970967, - 44.9170467 - ], - [ - -123.9983711, - 44.9150344 - ], - [ - -124.0001914, - 44.9132465 - ], - [ - -124.0024824, - 44.9117568 - ], - [ - -124.0029574, - 44.9115059 - ], - [ - -124.0045, - 44.9107891 - ], - [ - -124.0049879, - 44.9105912 - ], - [ - -124.0077239, - 44.9097215 - ], - [ - -124.010646, - 44.9092477 - ], - [ - -124.0136419, - 44.9091881 - ], - [ - -124.0165968, - 44.9095449 - ], - [ - -124.0193969, - 44.9103044 - ], - [ - -124.0219348, - 44.9114374 - ], - [ - -124.024113, - 44.9129005 - ], - [ - -124.0258478, - 44.9146374 - ], - [ - -124.0265866, - 44.9158101 - ], - [ - -124.0280712, - 44.9174632 - ], - [ - -124.0283032, - 44.9178172 - ], - [ - -124.0295618, - 44.9207816 - ], - [ - -124.0296439, - 44.9211676 - ], - [ - -124.0298034, - 44.9232246 - ], - [ - -124.0297695, - 44.9238266 - ], - [ - -124.0296089, - 44.9248714 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16088_s_16189", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0223384, - 44.9036115 - ], - [ - -124.0219288, - 44.905839 - ], - [ - -124.0218863, - 44.9060534 - ], - [ - -124.0208517, - 44.9109217 - ], - [ - -124.0212908, - 44.9110957 - ], - [ - -124.0235736, - 44.9124759 - ], - [ - -124.0254336, - 44.9141461 - ], - [ - -124.0267994, - 44.916042 - ], - [ - -124.0276185, - 44.9180907 - ], - [ - -124.0278594, - 44.9202137 - ], - [ - -124.0275127, - 44.9223292 - ], - [ - -124.0265917, - 44.9243561 - ], - [ - -124.0251317, - 44.9262163 - ], - [ - -124.0231889, - 44.9278384 - ], - [ - -124.0208378, - 44.92916 - ], - [ - -124.0199177, - 44.9295801 - ], - [ - -124.0173822, - 44.9305126 - ], - [ - -124.0146468, - 44.931094 - ], - [ - -124.0118069, - 44.931304 - ], - [ - -124.0089615, - 44.9311354 - ], - [ - -124.0062099, - 44.930594 - ], - [ - -124.0036479, - 44.9296986 - ], - [ - -124.001365, - 44.9284806 - ], - [ - -124.000575, - 44.9279705 - ], - [ - -123.9991906, - 44.926952 - ], - [ - -123.9988806, - 44.926692 - ], - [ - -123.9987549, - 44.9265851 - ], - [ - -123.997605, - 44.925595 - ], - [ - -123.9973242, - 44.9253459 - ], - [ - -123.9940545, - 44.9223556 - ], - [ - -123.9936641, - 44.9219823 - ], - [ - -123.9931341, - 44.9214523 - ], - [ - -123.991453, - 44.9192834 - ], - [ - -123.9910431, - 44.9185734 - ], - [ - -123.9903106, - 44.9169531 - ], - [ - -123.9901008, - 44.9163231 - ], - [ - -123.9897313, - 44.914621 - ], - [ - -123.9896814, - 44.914141 - ], - [ - -123.9896546, - 44.9128643 - ], - [ - -123.9896948, - 44.9122143 - ], - [ - -123.9899814, - 44.9105446 - ], - [ - -123.9900782, - 44.9102034 - ], - [ - -123.9916317, - 44.9029116 - ], - [ - -123.9925433, - 44.8979691 - ], - [ - -123.9926522, - 44.897469 - ], - [ - -123.9931527, - 44.895479 - ], - [ - -123.9934057, - 44.894658 - ], - [ - -123.9935958, - 44.894138 - ], - [ - -123.9942884, - 44.8926781 - ], - [ - -123.9945885, - 44.8921681 - ], - [ - -123.9960452, - 44.8902563 - ], - [ - -123.9966853, - 44.8895864 - ], - [ - -123.9992381, - 44.8875304 - ], - [ - -124.000038, - 44.8870305 - ], - [ - -124.00182, - 44.8860715 - ], - [ - -124.00258, - 44.8857216 - ], - [ - -124.005227, - 44.8847486 - ], - [ - -124.0058969, - 44.8845587 - ], - [ - -124.0069201, - 44.8842981 - ], - [ - -124.0119723, - 44.8831536 - ], - [ - -124.0129944, - 44.8823836 - ], - [ - -124.0152542, - 44.8809854 - ], - [ - -124.017854, - 44.8799273 - ], - [ - -124.0206942, - 44.8792502 - ], - [ - -124.0236656, - 44.8789799 - ], - [ - -124.0266541, - 44.8791269 - ], - [ - -124.0295448, - 44.8796856 - ], - [ - -124.0322268, - 44.8806344 - ], - [ - -124.034597, - 44.8819369 - ], - [ - -124.0365643, - 44.8835431 - ], - [ - -124.0380532, - 44.8853913 - ], - [ - -124.0390064, - 44.8874104 - ], - [ - -124.0393872, - 44.889523 - ], - [ - -124.039181, - 44.8916478 - ], - [ - -124.0383955, - 44.8937031 - ], - [ - -124.0370609, - 44.8956101 - ], - [ - -124.0352284, - 44.8972952 - ], - [ - -124.0323085, - 44.8994955 - ], - [ - -124.0312294, - 44.9002327 - ], - [ - -124.0305994, - 44.9006228 - ], - [ - -124.0282906, - 44.9018028 - ], - [ - -124.0276906, - 44.9020528 - ], - [ - -124.0258684, - 44.9027002 - ], - [ - -124.0249283, - 44.9029803 - ], - [ - -124.0236628, - 44.9033114 - ], - [ - -124.0223384, - 44.9036115 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16089_s_759418", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0278524, - 44.9220936 - ], - [ - -124.02785, - 44.9220955 - ], - [ - -124.0285526, - 44.9224691 - ], - [ - -124.0296006, - 44.923178 - ], - [ - -124.0309443, - 44.9242129 - ], - [ - -124.0316833, - 44.9248618 - ], - [ - -124.0324523, - 44.9255985 - ], - [ - -124.0347265, - 44.9279812 - ], - [ - -124.0361579, - 44.9298527 - ], - [ - -124.0370478, - 44.9318865 - ], - [ - -124.0373622, - 44.9340046 - ], - [ - -124.0370887, - 44.9361256 - ], - [ - -124.0362379, - 44.9381679 - ], - [ - -124.0348424, - 44.940053 - ], - [ - -124.0329558, - 44.9417085 - ], - [ - -124.0306506, - 44.9430708 - ], - [ - -124.0280154, - 44.9440875 - ], - [ - -124.0251514, - 44.9447194 - ], - [ - -124.0221689, - 44.9449423 - ], - [ - -124.0191825, - 44.9447477 - ], - [ - -124.0163069, - 44.9441429 - ], - [ - -124.0136528, - 44.9431513 - ], - [ - -124.0113223, - 44.9418109 - ], - [ - -124.0094048, - 44.9401734 - ], - [ - -124.0078214, - 44.9385138 - ], - [ - -124.0078048, - 44.9385056 - ], - [ - -124.0054167, - 44.9370334 - ], - [ - -124.0033558, - 44.9354863 - ], - [ - -124.0017595, - 44.9336834 - ], - [ - -124.0006891, - 44.9316939 - ], - [ - -124.0001858, - 44.9295942 - ], - [ - -124.0002688, - 44.9274652 - ], - [ - -124.0009348, - 44.9253886 - ], - [ - -124.0021583, - 44.9234442 - ], - [ - -124.0038921, - 44.9217067 - ], - [ - -124.0060696, - 44.9202428 - ], - [ - -124.0086071, - 44.9191089 - ], - [ - -124.0114071, - 44.9183484 - ], - [ - -124.0143621, - 44.9179905 - ], - [ - -124.0173586, - 44.9180491 - ], - [ - -124.0202815, - 44.9185218 - ], - [ - -124.0230185, - 44.9193905 - ], - [ - -124.0254644, - 44.9206218 - ], - [ - -124.0278524, - 44.9220936 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16089_s_781959", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0364509, - 44.9432868 - ], - [ - -124.0364359, - 44.943397 - ], - [ - -124.0360755, - 44.9449143 - ], - [ - -124.0359686, - 44.9452273 - ], - [ - -124.0354635, - 44.9464085 - ], - [ - -124.0353415, - 44.9466445 - ], - [ - -124.0344362, - 44.9480699 - ], - [ - -124.0341773, - 44.9484099 - ], - [ - -124.0332823, - 44.9494429 - ], - [ - -124.0329543, - 44.9497779 - ], - [ - -124.0326375, - 44.9500896 - ], - [ - -124.0318668, - 44.9508203 - ], - [ - -124.0298421, - 44.9523916 - ], - [ - -124.0274245, - 44.9536522 - ], - [ - -124.0247069, - 44.9545536 - ], - [ - -124.0217937, - 44.9550612 - ], - [ - -124.0187971, - 44.9551553 - ], - [ - -124.0158323, - 44.9548325 - ], - [ - -124.0130131, - 44.9541051 - ], - [ - -124.010448, - 44.9530011 - ], - [ - -124.0082357, - 44.951563 - ], - [ - -124.0064611, - 44.9498459 - ], - [ - -124.0051925, - 44.947916 - ], - [ - -124.0044784, - 44.9458475 - ], - [ - -124.0043464, - 44.9437197 - ], - [ - -124.0048014, - 44.9416145 - ], - [ - -124.0058259, - 44.9396128 - ], - [ - -124.0061584, - 44.9392233 - ], - [ - -124.0063809, - 44.938186 - ], - [ - -124.006503, - 44.937781 - ], - [ - -124.0065538, - 44.9376412 - ], - [ - -124.0056528, - 44.9371013 - ], - [ - -124.0035614, - 44.935575 - ], - [ - -124.0019296, - 44.9337882 - ], - [ - -124.00082, - 44.9318096 - ], - [ - -124.0002752, - 44.9297152 - ], - [ - -124.000316, - 44.9275855 - ], - [ - -124.0009409, - 44.9255025 - ], - [ - -124.0021257, - 44.923546 - ], - [ - -124.003825, - 44.9217914 - ], - [ - -124.0059733, - 44.9203059 - ], - [ - -124.0084881, - 44.9191467 - ], - [ - -124.0112729, - 44.9183583 - ], - [ - -124.0142205, - 44.917971 - ], - [ - -124.0172178, - 44.9179996 - ], - [ - -124.0201498, - 44.9184431 - ], - [ - -124.0229037, - 44.9192844 - ], - [ - -124.0253737, - 44.9204912 - ], - [ - -124.026803, - 44.9213474 - ], - [ - -124.0268302, - 44.9213637 - ], - [ - -124.0276542, - 44.9218596 - ], - [ - -124.0277794, - 44.9219358 - ], - [ - -124.0286344, - 44.9224618 - ], - [ - -124.0295657, - 44.923085 - ], - [ - -124.0300687, - 44.9234509 - ], - [ - -124.0307962, - 44.924019 - ], - [ - -124.0312243, - 44.924378 - ], - [ - -124.0317827, - 44.9248751 - ], - [ - -124.0321337, - 44.9252071 - ], - [ - -124.0324774, - 44.9255455 - ], - [ - -124.0327683, - 44.9258438 - ], - [ - -124.0329461, - 44.9260242 - ], - [ - -124.0330083, - 44.9260878 - ], - [ - -124.0345115, - 44.9276366 - ], - [ - -124.0347025, - 44.9278382 - ], - [ - -124.0349678, - 44.9281251 - ], - [ - -124.035325, - 44.928508 - ], - [ - -124.0354156, - 44.9286063 - ], - [ - -124.0359577, - 44.9292012 - ], - [ - -124.0371331, - 44.9307547 - ], - [ - -124.0373232, - 44.9310637 - ], - [ - -124.0374319, - 44.9312448 - ], - [ - -124.0375009, - 44.9313628 - ], - [ - -124.0381623, - 44.932751 - ], - [ - -124.0383685, - 44.933304 - ], - [ - -124.0386364, - 44.9341613 - ], - [ - -124.0387205, - 44.9344933 - ], - [ - -124.0389589, - 44.9361938 - ], - [ - -124.038967, - 44.9364727 - ], - [ - -124.0388095, - 44.9382668 - ], - [ - -124.0387476, - 44.9385678 - ], - [ - -124.0382461, - 44.9401589 - ], - [ - -124.0381172, - 44.9404599 - ], - [ - -124.0377641, - 44.9411902 - ], - [ - -124.0375042, - 44.9416712 - ], - [ - -124.037116, - 44.942325 - ], - [ - -124.036933, - 44.942607 - ], - [ - -124.0364881, - 44.943238 - ], - [ - -124.0364509, - 44.9432868 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16092_s_759419", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0292523, - 44.9533122 - ], - [ - -124.0292615, - 44.9535226 - ], - [ - -124.0292547, - 44.9544286 - ], - [ - -124.0291798, - 44.9554466 - ], - [ - -124.029042, - 44.9564296 - ], - [ - -124.0284539, - 44.9585181 - ], - [ - -124.0273031, - 44.960485 - ], - [ - -124.0256339, - 44.9622547 - ], - [ - -124.0235104, - 44.9637591 - ], - [ - -124.0210142, - 44.9649405 - ], - [ - -124.0182412, - 44.9657533 - ], - [ - -124.0152981, - 44.9661665 - ], - [ - -124.012298, - 44.966164 - ], - [ - -124.0093562, - 44.9657459 - ], - [ - -124.006586, - 44.9649284 - ], - [ - -124.0040937, - 44.9637429 - ], - [ - -124.0019751, - 44.9622349 - ], - [ - -124.0003118, - 44.9604624 - ], - [ - -123.9991676, - 44.9584936 - ], - [ - -123.9985864, - 44.9564041 - ], - [ - -123.9985905, - 44.9542743 - ], - [ - -123.9986574, - 44.9537991 - ], - [ - -123.9986574, - 44.9537963 - ], - [ - -123.9985247, - 44.9523843 - ], - [ - -123.9984919, - 44.9517945 - ], - [ - -123.9984811, - 44.9511685 - ], - [ - -123.9989136, - 44.9484666 - ], - [ - -123.9991418, - 44.9478006 - ], - [ - -124.0002985, - 44.9455456 - ], - [ - -124.0006465, - 44.9450466 - ], - [ - -124.0011659, - 44.9443645 - ], - [ - -124.0018735, - 44.9435094 - ], - [ - -124.0019067, - 44.9415277 - ], - [ - -124.0025266, - 44.9394439 - ], - [ - -124.003707, - 44.937486 - ], - [ - -124.0054023, - 44.9357292 - ], - [ - -124.0075475, - 44.9342411 - ], - [ - -124.0100601, - 44.9330788 - ], - [ - -124.0128435, - 44.932287 - ], - [ - -124.0157909, - 44.931896 - ], - [ - -124.0166028, - 44.931846 - ], - [ - -124.0192197, - 44.9318445 - ], - [ - -124.0197496, - 44.9318765 - ], - [ - -124.0221585, - 44.9321609 - ], - [ - -124.0226605, - 44.9322498 - ], - [ - -124.026243, - 44.9332384 - ], - [ - -124.0269549, - 44.9335124 - ], - [ - -124.0290094, - 44.9344616 - ], - [ - -124.0308241, - 44.9356316 - ], - [ - -124.0314911, - 44.9361365 - ], - [ - -124.0333496, - 44.9378604 - ], - [ - -124.0346885, - 44.9398124 - ], - [ - -124.0354542, - 44.9419145 - ], - [ - -124.0356161, - 44.9440827 - ], - [ - -124.0351676, - 44.9462305 - ], - [ - -124.0341267, - 44.9482721 - ], - [ - -124.0325348, - 44.9501258 - ], - [ - -124.0297639, - 44.9527263 - ], - [ - -124.0295584, - 44.9529421 - ], - [ - -124.0292523, - 44.9533122 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16094_s_16095", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0281364, - 44.9555467 - ], - [ - -124.0293691, - 44.9567541 - ], - [ - -124.0306221, - 44.9586892 - ], - [ - -124.0313194, - 44.9607607 - ], - [ - -124.0314341, - 44.962889 - ], - [ - -124.0309617, - 44.9649922 - ], - [ - -124.0299204, - 44.9669896 - ], - [ - -124.0283501, - 44.9688044 - ], - [ - -124.0263111, - 44.9703668 - ], - [ - -124.0238818, - 44.9716168 - ], - [ - -124.0211556, - 44.9725063 - ], - [ - -124.0182372, - 44.973001 - ], - [ - -124.0152389, - 44.9730821 - ], - [ - -124.0122759, - 44.9727463 - ], - [ - -124.0094623, - 44.9720066 - ], - [ - -124.0069061, - 44.9708913 - ], - [ - -124.0058236, - 44.9701792 - ], - [ - -124.0047904, - 44.9699597 - ], - [ - -124.0039139, - 44.9696287 - ], - [ - -124.0025535, - 44.9692289 - ], - [ - -124.0025029, - 44.9692092 - ], - [ - -124.0001439, - 44.9680738 - ], - [ - -123.9981225, - 44.9666476 - ], - [ - -123.9965086, - 44.96498 - ], - [ - -123.9964697, - 44.9649304 - ], - [ - -123.9954259, - 44.9632979 - ], - [ - -123.9947746, - 44.9615658 - ], - [ - -123.9945333, - 44.9597812 - ], - [ - -123.9945155, - 44.958811 - ], - [ - -123.9945146, - 44.9587534 - ], - [ - -123.9945113, - 44.9584448 - ], - [ - -123.9946977, - 44.9566673 - ], - [ - -123.995291, - 44.9549354 - ], - [ - -123.9953375, - 44.9548359 - ], - [ - -123.9963757, - 44.9531238 - ], - [ - -123.9978108, - 44.9515629 - ], - [ - -123.9978475, - 44.9515295 - ], - [ - -123.9998441, - 44.9500354 - ], - [ - -124.0022018, - 44.9488356 - ], - [ - -124.0040068, - 44.9482447 - ], - [ - -124.003987, - 44.948212 - ], - [ - -124.0044641, - 44.9480663 - ], - [ - -124.0047471, - 44.9480024 - ], - [ - -124.004836, - 44.9479732 - ], - [ - -124.0049718, - 44.9479395 - ], - [ - -124.0049772, - 44.9479504 - ], - [ - -124.0073222, - 44.9474207 - ], - [ - -124.0103026, - 44.9471834 - ], - [ - -124.013291, - 44.9473635 - ], - [ - -124.0161726, - 44.9479541 - ], - [ - -124.0178834, - 44.9485825 - ], - [ - -124.0190367, - 44.9488025 - ], - [ - -124.021648, - 44.9497041 - ], - [ - -124.0239726, - 44.9509398 - ], - [ - -124.0259266, - 44.952465 - ], - [ - -124.0274398, - 44.9542248 - ], - [ - -124.0281364, - 44.9555467 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16094_s_16185", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0320435, - 44.9506512 - ], - [ - -124.0319831, - 44.9507107 - ], - [ - -124.0317302, - 44.9509523 - ], - [ - -124.0297958, - 44.9527476 - ], - [ - -124.0295935, - 44.9529614 - ], - [ - -124.0292973, - 44.9533169 - ], - [ - -124.0293002, - 44.9533742 - ], - [ - -124.0293104, - 44.9542842 - ], - [ - -124.0292547, - 44.9553017 - ], - [ - -124.0290052, - 44.9573617 - ], - [ - -124.0289174, - 44.9579184 - ], - [ - -124.0286877, - 44.9590984 - ], - [ - -124.0279533, - 44.9612391 - ], - [ - -124.0266257, - 44.9632305 - ], - [ - -124.0247594, - 44.9649908 - ], - [ - -124.022431, - 44.9664476 - ], - [ - -124.0197365, - 44.9675409 - ], - [ - -124.0167866, - 44.9682257 - ], - [ - -124.0148618, - 44.9683806 - ], - [ - -124.0136383, - 44.9686519 - ], - [ - -124.010655, - 44.9688782 - ], - [ - -124.0076668, - 44.9686868 - ], - [ - -124.0047888, - 44.9680853 - ], - [ - -124.0021314, - 44.9670966 - ], - [ - -123.9997969, - 44.9657589 - ], - [ - -123.997875, - 44.9641235 - ], - [ - -123.9964395, - 44.9622533 - ], - [ - -123.9955456, - 44.9602202 - ], - [ - -123.9952276, - 44.9581024 - ], - [ - -123.9954976, - 44.9559812 - ], - [ - -123.9963451, - 44.9539382 - ], - [ - -123.9977377, - 44.9520518 - ], - [ - -123.9985632, - 44.9513257 - ], - [ - -123.9986523, - 44.9497013 - ], - [ - -123.9987224, - 44.9493513 - ], - [ - -123.9991334, - 44.9479596 - ], - [ - -123.9993536, - 44.9473996 - ], - [ - -124.0005871, - 44.945212 - ], - [ - -124.0012473, - 44.9443321 - ], - [ - -124.0015845, - 44.943906 - ], - [ - -124.0034848, - 44.9416262 - ], - [ - -124.0039548, - 44.9410977 - ], - [ - -124.0046649, - 44.9403478 - ], - [ - -124.0052124, - 44.9398061 - ], - [ - -124.0073038, - 44.9378659 - ], - [ - -124.0083168, - 44.9368701 - ], - [ - -124.009912, - 44.9355925 - ], - [ - -124.0103862, - 44.9351914 - ], - [ - -124.0127254, - 44.933859 - ], - [ - -124.0153856, - 44.9328763 - ], - [ - -124.0182645, - 44.932281 - ], - [ - -124.0212515, - 44.9320961 - ], - [ - -124.024232, - 44.9323286 - ], - [ - -124.0270913, - 44.9329695 - ], - [ - -124.0297198, - 44.9339944 - ], - [ - -124.0320164, - 44.9353637 - ], - [ - -124.0338929, - 44.9370249 - ], - [ - -124.0352772, - 44.9389142 - ], - [ - -124.0361159, - 44.9409591 - ], - [ - -124.0363769, - 44.9430808 - ], - [ - -124.0360501, - 44.9451979 - ], - [ - -124.0351479, - 44.9472291 - ], - [ - -124.03495, - 44.9475581 - ], - [ - -124.0334541, - 44.9494798 - ], - [ - -124.0320435, - 44.9506512 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16094_s_759425", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.025677, - 44.958345 - ], - [ - -124.0259013, - 44.9596392 - ], - [ - -124.025675, - 44.9617755 - ], - [ - -124.0248627, - 44.9638387 - ], - [ - -124.0234958, - 44.9657486 - ], - [ - -124.0216275, - 44.967431 - ], - [ - -124.0193303, - 44.9688204 - ], - [ - -124.0166937, - 44.9698627 - ], - [ - -124.0146001, - 44.9705074 - ], - [ - -124.0117982, - 44.971151 - ], - [ - -124.0088744, - 44.9714017 - ], - [ - -124.0059372, - 44.9712502 - ], - [ - -124.0030952, - 44.970702 - ], - [ - -124.0004539, - 44.9697776 - ], - [ - -123.9981109, - 44.9685112 - ], - [ - -123.9970068, - 44.9676305 - ], - [ - -123.9969497, - 44.9676032 - ], - [ - -123.9948348, - 44.9660926 - ], - [ - -123.9931758, - 44.964318 - ], - [ - -123.9920365, - 44.9623477 - ], - [ - -123.9914605, - 44.9602575 - ], - [ - -123.99147, - 44.9581277 - ], - [ - -123.9920644, - 44.9560401 - ], - [ - -123.9921057, - 44.9559445 - ], - [ - -123.9934862, - 44.9536945 - ], - [ - -123.9935575, - 44.9536069 - ], - [ - -123.9952519, - 44.9519199 - ], - [ - -123.9973664, - 44.9504919 - ], - [ - -123.9998242, - 44.949375 - ], - [ - -124.0025358, - 44.9486096 - ], - [ - -124.0026259, - 44.948591 - ], - [ - -124.0030878, - 44.9485226 - ], - [ - -124.003247, - 44.9484622 - ], - [ - -124.0060189, - 44.9476488 - ], - [ - -124.0089608, - 44.9472349 - ], - [ - -124.01196, - 44.9472365 - ], - [ - -124.0149011, - 44.9476535 - ], - [ - -124.0176712, - 44.9484699 - ], - [ - -124.0201639, - 44.9496543 - ], - [ - -124.0222834, - 44.9511613 - ], - [ - -124.0239483, - 44.9529329 - ], - [ - -124.0250945, - 44.954901 - ], - [ - -124.0256781, - 44.9569902 - ], - [ - -124.025677, - 44.958345 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16095_s_16212", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0328977, - 44.9634499 - ], - [ - -124.0329226, - 44.9635801 - ], - [ - -124.0329692, - 44.9638482 - ], - [ - -124.0329866, - 44.9639444 - ], - [ - -124.0330375, - 44.9642639 - ], - [ - -124.0330666, - 44.9644739 - ], - [ - -124.0330715, - 44.9645102 - ], - [ - -124.0330735, - 44.9645252 - ], - [ - -124.033136, - 44.9658513 - ], - [ - -124.0331301, - 44.9660043 - ], - [ - -124.033065, - 44.9667488 - ], - [ - -124.033047, - 44.9668808 - ], - [ - -124.0329362, - 44.9675057 - ], - [ - -124.0329022, - 44.9676607 - ], - [ - -124.0326524, - 44.9685531 - ], - [ - -124.0326394, - 44.9685911 - ], - [ - -124.0325973, - 44.9687113 - ], - [ - -124.0325463, - 44.9688533 - ], - [ - -124.0321393, - 44.9698033 - ], - [ - -124.0321244, - 44.9698333 - ], - [ - -124.0320215, - 44.9700329 - ], - [ - -124.0319365, - 44.970193 - ], - [ - -124.0314502, - 44.9710068 - ], - [ - -124.0313543, - 44.9711508 - ], - [ - -124.0305874, - 44.97216 - ], - [ - -124.0304594, - 44.972309 - ], - [ - -124.0304182, - 44.9723567 - ], - [ - -124.0303452, - 44.9724408 - ], - [ - -124.0295345, - 44.9732562 - ], - [ - -124.0294817, - 44.9733933 - ], - [ - -124.0294773, - 44.9734049 - ], - [ - -124.0294354, - 44.973513 - ], - [ - -124.0294112, - 44.9735829 - ], - [ - -124.0293772, - 44.9736769 - ], - [ - -124.029297, - 44.9738897 - ], - [ - -124.0291951, - 44.9741497 - ], - [ - -124.0291869, - 44.9741706 - ], - [ - -124.0290886, - 44.9744194 - ], - [ - -124.0289374, - 44.9748046 - ], - [ - -124.0289104, - 44.9748759 - ], - [ - -124.0288566, - 44.9750117 - ], - [ - -124.0288218, - 44.9751006 - ], - [ - -124.0286996, - 44.975412 - ], - [ - -124.0286884, - 44.9754414 - ], - [ - -124.0286419, - 44.9755614 - ], - [ - -124.028627, - 44.9756022 - ], - [ - -124.0285341, - 44.9758443 - ], - [ - -124.0284434, - 44.9760797 - ], - [ - -124.0284143, - 44.9761554 - ], - [ - -124.0283967, - 44.9762009 - ], - [ - -124.0282489, - 44.9765789 - ], - [ - -124.0282287, - 44.9766309 - ], - [ - -124.0282228, - 44.9766467 - ], - [ - -124.0281754, - 44.9767703 - ], - [ - -124.0281534, - 44.9768263 - ], - [ - -124.0280353, - 44.9771119 - ], - [ - -124.0277954, - 44.9776639 - ], - [ - -124.0276904, - 44.9778963 - ], - [ - -124.0276594, - 44.9779623 - ], - [ - -124.027522, - 44.9782423 - ], - [ - -124.027482, - 44.9783203 - ], - [ - -124.0274016, - 44.9784735 - ], - [ - -124.0272637, - 44.9787305 - ], - [ - -124.0272153, - 44.9788195 - ], - [ - -124.0270897, - 44.9790475 - ], - [ - -124.0270658, - 44.9790915 - ], - [ - -124.0268254, - 44.9795085 - ], - [ - -124.0265402, - 44.9799754 - ], - [ - -124.0264347, - 44.9801609 - ], - [ - -124.0262513, - 44.9804899 - ], - [ - -124.0261236, - 44.9807117 - ], - [ - -124.0258512, - 44.9811706 - ], - [ - -124.0258305, - 44.9812076 - ], - [ - -124.0258124, - 44.9812398 - ], - [ - -124.0255505, - 44.9817038 - ], - [ - -124.0254871, - 44.9818143 - ], - [ - -124.0254643, - 44.9818535 - ], - [ - -124.0253849, - 44.9820554 - ], - [ - -124.0253399, - 44.9821394 - ], - [ - -124.025312, - 44.9821911 - ], - [ - -124.025213, - 44.9823731 - ], - [ - -124.0247189, - 44.9831825 - ], - [ - -124.0247019, - 44.9832075 - ], - [ - -124.0246411, - 44.9832714 - ], - [ - -124.0245173, - 44.9834803 - ], - [ - -124.0233591, - 44.9850592 - ], - [ - -124.0224888, - 44.9858818 - ], - [ - -124.0225052, - 44.9858904 - ], - [ - -124.0224166, - 44.9859762 - ], - [ - -124.022273, - 44.9867794 - ], - [ - -124.0222528, - 44.9868613 - ], - [ - -124.022252, - 44.9868651 - ], - [ - -124.0221299, - 44.9873286 - ], - [ - -124.0220909, - 44.9874606 - ], - [ - -124.0217176, - 44.9884772 - ], - [ - -124.0216427, - 44.9886473 - ], - [ - -124.02122, - 44.989484 - ], - [ - -124.0211881, - 44.98954 - ], - [ - -124.0211415, - 44.9896205 - ], - [ - -124.0211036, - 44.9896855 - ], - [ - -124.0209825, - 44.9898843 - ], - [ - -124.0209778, - 44.9905802 - ], - [ - -124.0203783, - 44.9926671 - ], - [ - -124.0192165, - 44.9946309 - ], - [ - -124.017537, - 44.9963961 - ], - [ - -124.0154043, - 44.9978949 - ], - [ - -124.0129004, - 44.9990696 - ], - [ - -124.0101215, - 44.9998751 - ], - [ - -124.0071745, - 45.0002804 - ], - [ - -124.0041726, - 45.0002699 - ], - [ - -124.0012313, - 44.9998441 - ], - [ - -123.9984638, - 44.9990192 - ], - [ - -123.9959762, - 44.9978271 - ], - [ - -123.9938644, - 44.9963135 - ], - [ - -123.9922095, - 44.9945366 - ], - [ - -123.991075, - 44.9925648 - ], - [ - -123.9906988, - 44.9911858 - ], - [ - -123.9906476, - 44.9911924 - ], - [ - -123.9905687, - 44.9908824 - ], - [ - -123.9905535, - 44.99082 - ], - [ - -123.990495, - 44.9905895 - ], - [ - -123.9903437, - 44.9898464 - ], - [ - -123.9903227, - 44.9897104 - ], - [ - -123.9902916, - 44.9894869 - ], - [ - -123.9902776, - 44.9893749 - ], - [ - -123.9902495, - 44.9891144 - ], - [ - -123.9902366, - 44.9889714 - ], - [ - -123.9902058, - 44.9883845 - ], - [ - -123.9902038, - 44.9882475 - ], - [ - -123.9903173, - 44.9868123 - ], - [ - -123.9903453, - 44.9866503 - ], - [ - -123.990428, - 44.9862381 - ], - [ - -123.990459, - 44.9861021 - ], - [ - -123.990679, - 44.9853208 - ], - [ - -123.9907311, - 44.9851658 - ], - [ - -123.9912608, - 44.9839228 - ], - [ - -123.9913268, - 44.9837958 - ], - [ - -123.9916145, - 44.983283 - ], - [ - -123.9917055, - 44.983132 - ], - [ - -123.9917197, - 44.9831086 - ], - [ - -123.9918678, - 44.9828646 - ], - [ - -123.991878, - 44.9828478 - ], - [ - -123.9919481, - 44.9827328 - ], - [ - -123.9919517, - 44.982671 - ], - [ - -123.9919684, - 44.9823703 - ], - [ - -123.9919707, - 44.9823301 - ], - [ - -123.9919788, - 44.9821981 - ], - [ - -123.9920246, - 44.9817049 - ], - [ - -123.9920276, - 44.9816809 - ], - [ - -123.9920459, - 44.9815451 - ], - [ - -123.9920739, - 44.9813491 - ], - [ - -123.9922315, - 44.980547 - ], - [ - -123.9922375, - 44.980523 - ], - [ - -123.9923164, - 44.9802308 - ], - [ - -123.9923745, - 44.9800308 - ], - [ - -123.9924503, - 44.979784 - ], - [ - -123.9924984, - 44.979636 - ], - [ - -123.992539, - 44.9795142 - ], - [ - -123.992553, - 44.9794732 - ], - [ - -123.992896, - 44.9786222 - ], - [ - -123.9929641, - 44.9784762 - ], - [ - -123.9930288, - 44.9783403 - ], - [ - -123.9930468, - 44.9783033 - ], - [ - -123.9932566, - 44.9778985 - ], - [ - -123.9933336, - 44.9777585 - ], - [ - -123.9933459, - 44.9777363 - ], - [ - -123.9933769, - 44.9776803 - ], - [ - -123.9940023, - 44.9766974 - ], - [ - -123.9940413, - 44.9766434 - ], - [ - -123.9940904, - 44.976576 - ], - [ - -123.9941624, - 44.976478 - ], - [ - -123.9946511, - 44.9758627 - ], - [ - -123.9947992, - 44.9756897 - ], - [ - -123.9952532, - 44.9751904 - ], - [ - -123.9954172, - 44.9750204 - ], - [ - -123.9962846, - 44.9742063 - ], - [ - -123.9964336, - 44.9740794 - ], - [ - -123.9968688, - 44.9737244 - ], - [ - -123.9970788, - 44.9735605 - ], - [ - -123.9972305, - 44.9734466 - ], - [ - -123.9974173, - 44.9731124 - ], - [ - -123.9975744, - 44.9728422 - ], - [ - -123.9975957, - 44.9728068 - ], - [ - -123.9978488, - 44.9723809 - ], - [ - -123.9979835, - 44.9721395 - ], - [ - -123.9981054, - 44.9719196 - ], - [ - -123.9982385, - 44.9716873 - ], - [ - -123.9983126, - 44.9715624 - ], - [ - -123.9984324, - 44.9713655 - ], - [ - -123.9984463, - 44.9713432 - ], - [ - -123.9986248, - 44.9710512 - ], - [ - -123.9986655, - 44.9709774 - ], - [ - -123.9987102, - 44.9708745 - ], - [ - -123.9987435, - 44.9707891 - ], - [ - -123.9989213, - 44.9703334 - ], - [ - -123.9989984, - 44.9701334 - ], - [ - -123.999094, - 44.9698828 - ], - [ - -123.9991066, - 44.9698499 - ], - [ - -123.9991777, - 44.9696659 - ], - [ - -123.9991954, - 44.9696204 - ], - [ - -123.9993693, - 44.9691775 - ], - [ - -123.9994372, - 44.9690036 - ], - [ - -123.9994442, - 44.9689858 - ], - [ - -123.9996053, - 44.9685759 - ], - [ - -123.9996125, - 44.9685575 - ], - [ - -123.9997105, - 44.9683099 - ], - [ - -123.9997474, - 44.9682158 - ], - [ - -123.999758, - 44.9681854 - ], - [ - -123.9998591, - 44.9679102 - ], - [ - -123.9999579, - 44.967655 - ], - [ - -124.0001255, - 44.9672203 - ], - [ - -124.0002384, - 44.9669258 - ], - [ - -124.0002478, - 44.9669013 - ], - [ - -124.0005695, - 44.9660691 - ], - [ - -124.0006624, - 44.9658114 - ], - [ - -124.0007074, - 44.9656944 - ], - [ - -124.000979, - 44.9650647 - ], - [ - -124.001077, - 44.9648597 - ], - [ - -124.0012211, - 44.9645743 - ], - [ - -124.0011873, - 44.9644996 - ], - [ - -124.0008459, - 44.9623836 - ], - [ - -124.0010925, - 44.9602609 - ], - [ - -124.0019175, - 44.9582133 - ], - [ - -124.0032893, - 44.9563192 - ], - [ - -124.0051551, - 44.9546515 - ], - [ - -124.0074431, - 44.9532743 - ], - [ - -124.0100654, - 44.9522404 - ], - [ - -124.0129213, - 44.9515896 - ], - [ - -124.0159012, - 44.9513469 - ], - [ - -124.0188904, - 44.9515215 - ], - [ - -124.0217743, - 44.9521068 - ], - [ - -124.024442, - 44.9530803 - ], - [ - -124.0266939, - 44.9543498 - ], - [ - -124.026701, - 44.9543445 - ], - [ - -124.026752, - 44.9543785 - ], - [ - -124.0267882, - 44.954403 - ], - [ - -124.0267911, - 44.9544047 - ], - [ - -124.0268257, - 44.9544284 - ], - [ - -124.0269333, - 44.9545013 - ], - [ - -124.0272483, - 44.9547183 - ], - [ - -124.0275451, - 44.9549284 - ], - [ - -124.0277691, - 44.9550914 - ], - [ - -124.0278245, - 44.9551319 - ], - [ - -124.0278585, - 44.9551569 - ], - [ - -124.0288829, - 44.9559912 - ], - [ - -124.029132, - 44.9562162 - ], - [ - -124.0300456, - 44.9571359 - ], - [ - -124.0302036, - 44.9573139 - ], - [ - -124.0314113, - 44.9589758 - ], - [ - -124.0315213, - 44.9591658 - ], - [ - -124.0317887, - 44.9596617 - ], - [ - -124.0318488, - 44.9597817 - ], - [ - -124.0321918, - 44.9605585 - ], - [ - -124.0322398, - 44.9606835 - ], - [ - -124.0324774, - 44.9613953 - ], - [ - -124.0324984, - 44.9614693 - ], - [ - -124.0326293, - 44.9619971 - ], - [ - -124.0326503, - 44.9620961 - ], - [ - -124.0326599, - 44.9621416 - ], - [ - -124.0327009, - 44.9623406 - ], - [ - -124.0327642, - 44.9626857 - ], - [ - -124.0328083, - 44.9629606 - ], - [ - -124.0328151, - 44.9630026 - ], - [ - -124.032898, - 44.9634499 - ], - [ - -124.0328977, - 44.9634499 - ] - ], - [ - [ - -123.9905279, - 44.9905595 - ], - [ - -123.9905045, - 44.9904738 - ], - [ - -123.9905137, - 44.9905607 - ], - [ - -123.9905279, - 44.9905595 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16095_s_2456766", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0328977, - 44.9634499 - ], - [ - -124.0329226, - 44.9635801 - ], - [ - -124.0329692, - 44.9638482 - ], - [ - -124.0329866, - 44.9639444 - ], - [ - -124.0330375, - 44.9642639 - ], - [ - -124.0330666, - 44.9644739 - ], - [ - -124.0330715, - 44.9645102 - ], - [ - -124.0330735, - 44.9645252 - ], - [ - -124.033136, - 44.9658513 - ], - [ - -124.0331301, - 44.9660043 - ], - [ - -124.033065, - 44.9667488 - ], - [ - -124.033047, - 44.9668808 - ], - [ - -124.0329362, - 44.9675057 - ], - [ - -124.0329022, - 44.9676607 - ], - [ - -124.0326524, - 44.9685531 - ], - [ - -124.0326394, - 44.9685911 - ], - [ - -124.0325973, - 44.9687113 - ], - [ - -124.0325463, - 44.9688533 - ], - [ - -124.0321393, - 44.9698033 - ], - [ - -124.0321244, - 44.9698333 - ], - [ - -124.0320215, - 44.9700329 - ], - [ - -124.0319365, - 44.970193 - ], - [ - -124.0314502, - 44.9710068 - ], - [ - -124.0313543, - 44.9711508 - ], - [ - -124.0305874, - 44.97216 - ], - [ - -124.0304594, - 44.972309 - ], - [ - -124.0304182, - 44.9723567 - ], - [ - -124.0303452, - 44.9724408 - ], - [ - -124.0295345, - 44.9732562 - ], - [ - -124.0294817, - 44.9733933 - ], - [ - -124.0294773, - 44.9734049 - ], - [ - -124.0294354, - 44.973513 - ], - [ - -124.0294112, - 44.9735829 - ], - [ - -124.0293772, - 44.9736769 - ], - [ - -124.029297, - 44.9738897 - ], - [ - -124.0291951, - 44.9741497 - ], - [ - -124.0291869, - 44.9741706 - ], - [ - -124.0290886, - 44.9744194 - ], - [ - -124.0289374, - 44.9748046 - ], - [ - -124.0289104, - 44.9748759 - ], - [ - -124.0288566, - 44.9750117 - ], - [ - -124.0288218, - 44.9751006 - ], - [ - -124.0286996, - 44.975412 - ], - [ - -124.0286884, - 44.9754414 - ], - [ - -124.0286419, - 44.9755614 - ], - [ - -124.028627, - 44.9756022 - ], - [ - -124.0285341, - 44.9758443 - ], - [ - -124.0284434, - 44.9760797 - ], - [ - -124.0284143, - 44.9761554 - ], - [ - -124.0283967, - 44.9762009 - ], - [ - -124.0282489, - 44.9765789 - ], - [ - -124.0282287, - 44.9766309 - ], - [ - -124.0282228, - 44.9766467 - ], - [ - -124.0281754, - 44.9767703 - ], - [ - -124.0281534, - 44.9768263 - ], - [ - -124.0280353, - 44.9771119 - ], - [ - -124.0277954, - 44.9776639 - ], - [ - -124.0276904, - 44.9778963 - ], - [ - -124.0276594, - 44.9779623 - ], - [ - -124.027522, - 44.9782423 - ], - [ - -124.027482, - 44.9783203 - ], - [ - -124.0274016, - 44.9784735 - ], - [ - -124.0272637, - 44.9787305 - ], - [ - -124.0272153, - 44.9788195 - ], - [ - -124.0270897, - 44.9790475 - ], - [ - -124.0270658, - 44.9790915 - ], - [ - -124.0268254, - 44.9795085 - ], - [ - -124.0265402, - 44.9799754 - ], - [ - -124.0264347, - 44.9801609 - ], - [ - -124.0262513, - 44.9804899 - ], - [ - -124.0261236, - 44.9807117 - ], - [ - -124.0258512, - 44.9811706 - ], - [ - -124.0258305, - 44.9812076 - ], - [ - -124.0258124, - 44.9812398 - ], - [ - -124.0255505, - 44.9817038 - ], - [ - -124.0254871, - 44.9818143 - ], - [ - -124.0254643, - 44.9818535 - ], - [ - -124.0253849, - 44.9820554 - ], - [ - -124.0253399, - 44.9821394 - ], - [ - -124.025312, - 44.9821911 - ], - [ - -124.025213, - 44.9823731 - ], - [ - -124.0247189, - 44.9831825 - ], - [ - -124.0247019, - 44.9832075 - ], - [ - -124.0246411, - 44.9832714 - ], - [ - -124.0245173, - 44.9834803 - ], - [ - -124.0233591, - 44.9850592 - ], - [ - -124.0224888, - 44.9858818 - ], - [ - -124.0225052, - 44.9858904 - ], - [ - -124.0223523, - 44.9860384 - ], - [ - -124.0223335, - 44.9860286 - ], - [ - -124.021853, - 44.9864828 - ], - [ - -124.021609, - 44.9866778 - ], - [ - -124.021593, - 44.9866677 - ], - [ - -124.0205824, - 44.9875872 - ], - [ - -124.0203538, - 44.9877491 - ], - [ - -124.0201622, - 44.9878859 - ], - [ - -124.020147, - 44.9878967 - ], - [ - -124.0198861, - 44.9880824 - ], - [ - -124.0196935, - 44.9882197 - ], - [ - -124.0191322, - 44.9887557 - ], - [ - -124.0170729, - 44.9901115 - ], - [ - -124.0146991, - 44.9911774 - ], - [ - -124.0120908, - 44.9919175 - ], - [ - -124.0093358, - 44.992307 - ], - [ - -124.0065268, - 44.9923326 - ], - [ - -124.0063488, - 44.9923226 - ], - [ - -124.0057231, - 44.9922783 - ], - [ - -124.0055657, - 44.9922648 - ], - [ - -124.0053466, - 44.9922518 - ], - [ - -124.0052317, - 44.9922456 - ], - [ - -124.0022761, - 44.9918749 - ], - [ - -123.9994791, - 44.9911022 - ], - [ - -123.9969485, - 44.989957 - ], - [ - -123.9947814, - 44.9884835 - ], - [ - -123.9930612, - 44.9867382 - ], - [ - -123.9918539, - 44.9847884 - ], - [ - -123.9912059, - 44.9827088 - ], - [ - -123.9911421, - 44.9805794 - ], - [ - -123.9916647, - 44.9784822 - ], - [ - -123.9927538, - 44.9764976 - ], - [ - -123.9943673, - 44.9747019 - ], - [ - -123.9964432, - 44.9731641 - ], - [ - -123.997777, - 44.9725018 - ], - [ - -123.9978488, - 44.9723809 - ], - [ - -123.9979835, - 44.9721395 - ], - [ - -123.9981054, - 44.9719196 - ], - [ - -123.9982385, - 44.9716873 - ], - [ - -123.9983126, - 44.9715624 - ], - [ - -123.9984324, - 44.9713655 - ], - [ - -123.9984463, - 44.9713432 - ], - [ - -123.9986248, - 44.9710512 - ], - [ - -123.9986655, - 44.9709774 - ], - [ - -123.9987102, - 44.9708745 - ], - [ - -123.9987435, - 44.9707891 - ], - [ - -123.9989213, - 44.9703334 - ], - [ - -123.9989984, - 44.9701334 - ], - [ - -123.999094, - 44.9698828 - ], - [ - -123.9991066, - 44.9698499 - ], - [ - -123.9991777, - 44.9696659 - ], - [ - -123.9991954, - 44.9696204 - ], - [ - -123.9993693, - 44.9691775 - ], - [ - -123.9994372, - 44.9690036 - ], - [ - -123.9994442, - 44.9689858 - ], - [ - -123.9996053, - 44.9685759 - ], - [ - -123.9996125, - 44.9685575 - ], - [ - -123.9997105, - 44.9683099 - ], - [ - -123.9997474, - 44.9682158 - ], - [ - -123.999758, - 44.9681854 - ], - [ - -123.9998591, - 44.9679102 - ], - [ - -123.9999579, - 44.967655 - ], - [ - -124.0001255, - 44.9672203 - ], - [ - -124.0002384, - 44.9669258 - ], - [ - -124.0002478, - 44.9669013 - ], - [ - -124.0005695, - 44.9660691 - ], - [ - -124.0006624, - 44.9658114 - ], - [ - -124.0007074, - 44.9656944 - ], - [ - -124.000979, - 44.9650647 - ], - [ - -124.001077, - 44.9648597 - ], - [ - -124.0012511, - 44.9645149 - ], - [ - -124.0012687, - 44.9644817 - ], - [ - -124.0011237, - 44.9641113 - ], - [ - -124.0008993, - 44.9619874 - ], - [ - -124.0012628, - 44.9598733 - ], - [ - -124.0022002, - 44.9578502 - ], - [ - -124.0036755, - 44.9559957 - ], - [ - -124.0056318, - 44.9543812 - ], - [ - -124.007994, - 44.9530687 - ], - [ - -124.0106713, - 44.9521085 - ], - [ - -124.013561, - 44.9515377 - ], - [ - -124.0165519, - 44.951378 - ], - [ - -124.0195292, - 44.9516356 - ], - [ - -124.0223786, - 44.9523007 - ], - [ - -124.0249906, - 44.9533477 - ], - [ - -124.026909, - 44.9545191 - ], - [ - -124.0269333, - 44.9545013 - ], - [ - -124.0272483, - 44.9547183 - ], - [ - -124.0275451, - 44.9549284 - ], - [ - -124.0277691, - 44.9550914 - ], - [ - -124.0278245, - 44.9551319 - ], - [ - -124.0278585, - 44.9551569 - ], - [ - -124.0288829, - 44.9559912 - ], - [ - -124.029132, - 44.9562162 - ], - [ - -124.0300456, - 44.9571359 - ], - [ - -124.0302036, - 44.9573139 - ], - [ - -124.0314113, - 44.9589758 - ], - [ - -124.0315213, - 44.9591658 - ], - [ - -124.0317887, - 44.9596617 - ], - [ - -124.0318488, - 44.9597817 - ], - [ - -124.0321918, - 44.9605585 - ], - [ - -124.0322398, - 44.9606835 - ], - [ - -124.0324774, - 44.9613953 - ], - [ - -124.0324984, - 44.9614693 - ], - [ - -124.0326293, - 44.9619971 - ], - [ - -124.0326503, - 44.9620961 - ], - [ - -124.0326599, - 44.9621416 - ], - [ - -124.0327009, - 44.9623406 - ], - [ - -124.0327642, - 44.9626857 - ], - [ - -124.0328083, - 44.9629606 - ], - [ - -124.0328151, - 44.9630026 - ], - [ - -124.032898, - 44.9634499 - ], - [ - -124.0328977, - 44.9634499 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16097_s_16070", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0244464, - 44.9835088 - ], - [ - -124.0228895, - 44.9855313 - ], - [ - -124.0224595, - 44.9859714 - ], - [ - -124.0210075, - 44.9872414 - ], - [ - -124.0203533, - 44.9877328 - ], - [ - -124.0199109, - 44.9880517 - ], - [ - -124.0198666, - 44.9880824 - ], - [ - -124.0194546, - 44.988509 - ], - [ - -124.0172849, - 44.9900076 - ], - [ - -124.014742, - 44.9911739 - ], - [ - -124.0119252, - 44.9919622 - ], - [ - -124.0089449, - 44.9923417 - ], - [ - -124.0059176, - 44.9922975 - ], - [ - -124.005242, - 44.9922399 - ], - [ - -124.0023785, - 44.991795 - ], - [ - -123.999687, - 44.990971 - ], - [ - -123.9972663, - 44.9897981 - ], - [ - -123.995205, - 44.9883193 - ], - [ - -123.9935787, - 44.9865888 - ], - [ - -123.9924471, - 44.98467 - ], - [ - -123.9918855, - 44.9827498 - ], - [ - -123.9917469, - 44.9824198 - ], - [ - -123.9914673, - 44.9802992 - ], - [ - -123.9917759, - 44.9781807 - ], - [ - -123.9926609, - 44.9761456 - ], - [ - -123.9940882, - 44.9742722 - ], - [ - -123.9960028, - 44.9726323 - ], - [ - -123.9983313, - 44.9712891 - ], - [ - -123.9987913, - 44.9711165 - ], - [ - -123.9991341, - 44.9706627 - ], - [ - -124.0010406, - 44.9690181 - ], - [ - -124.0033623, - 44.9676691 - ], - [ - -124.00601, - 44.9666674 - ], - [ - -124.008882, - 44.9660517 - ], - [ - -124.011868, - 44.9658455 - ], - [ - -124.0148533, - 44.9660567 - ], - [ - -124.0177233, - 44.9666772 - ], - [ - -124.0203677, - 44.9676833 - ], - [ - -124.0226849, - 44.9690362 - ], - [ - -124.0245859, - 44.9706839 - ], - [ - -124.0259976, - 44.9725633 - ], - [ - -124.0268657, - 44.974602 - ], - [ - -124.0271569, - 44.9767218 - ], - [ - -124.0268598, - 44.9788411 - ], - [ - -124.0259858, - 44.9808786 - ], - [ - -124.0244464, - 44.9835088 - ] - ], - [ - [ - -124.0096058, - 44.9696887 - ], - [ - -124.0097158, - 44.9696968 - ], - [ - -124.0096095, - 44.9696741 - ], - [ - -124.0096058, - 44.9696887 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16183_s_16184", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9941059, - 45.0124163 - ], - [ - -123.9940602, - 45.0138373 - ], - [ - -123.9939903, - 45.0142773 - ], - [ - -123.9934141, - 45.0162451 - ], - [ - -123.9932542, - 45.0166151 - ], - [ - -123.9914384, - 45.0193667 - ], - [ - -123.9912516, - 45.0195698 - ], - [ - -123.9912439, - 45.0196192 - ], - [ - -123.9912734, - 45.0196201 - ], - [ - -123.9912534, - 45.0199401 - ], - [ - -123.991095, - 45.0205734 - ], - [ - -123.9909568, - 45.0214589 - ], - [ - -123.9907846, - 45.0218142 - ], - [ - -123.9905518, - 45.0227449 - ], - [ - -123.9903819, - 45.0231249 - ], - [ - -123.9891623, - 45.0251278 - ], - [ - -123.9889423, - 45.0254078 - ], - [ - -123.987227, - 45.027161 - ], - [ - -123.986987, - 45.027361 - ], - [ - -123.9859114, - 45.0281697 - ], - [ - -123.9856314, - 45.0283597 - ], - [ - -123.9831757, - 45.0297159 - ], - [ - -123.9827256, - 45.0299159 - ], - [ - -123.9795825, - 45.0309814 - ], - [ - -123.9791325, - 45.0310914 - ], - [ - -123.9755507, - 45.0316383 - ], - [ - -123.9749405, - 45.0316783 - ], - [ - -123.97353, - 45.0317245 - ], - [ - -123.97332, - 45.0317245 - ], - [ - -123.9701094, - 45.0314832 - ], - [ - -123.9688592, - 45.0312932 - ], - [ - -123.9681159, - 45.0311664 - ], - [ - -123.9658908, - 45.0307448 - ], - [ - -123.9635437, - 45.0307255 - ], - [ - -123.9531433, - 45.0308432 - ], - [ - -123.9503929, - 45.0306981 - ], - [ - -123.9497127, - 45.030618 - ], - [ - -123.948125, - 45.0303692 - ], - [ - -123.9475149, - 45.0302492 - ], - [ - -123.9468697, - 45.0301114 - ], - [ - -123.9447894, - 45.0296313 - ], - [ - -123.9420382, - 45.0287768 - ], - [ - -123.9395752, - 45.0275581 - ], - [ - -123.9374948, - 45.0260219 - ], - [ - -123.9358771, - 45.0242275 - ], - [ - -123.9347842, - 45.0222437 - ], - [ - -123.9342581, - 45.0201468 - ], - [ - -123.9343189, - 45.0180174 - ], - [ - -123.9349642, - 45.0159374 - ], - [ - -123.9361692, - 45.0139866 - ], - [ - -123.9378874, - 45.0122399 - ], - [ - -123.940053, - 45.0107646 - ], - [ - -123.9425826, - 45.0096173 - ], - [ - -123.945379, - 45.008842 - ], - [ - -123.9483348, - 45.0084686 - ], - [ - -123.9513366, - 45.0085113 - ], - [ - -123.954269, - 45.0089685 - ], - [ - -123.9548066, - 45.0090926 - ], - [ - -123.962612, - 45.0090043 - ], - [ - -123.9626305, - 45.0085334 - ], - [ - -123.9626705, - 45.0082934 - ], - [ - -123.9631467, - 45.0066033 - ], - [ - -123.9633268, - 45.0061533 - ], - [ - -123.9639356, - 45.0049199 - ], - [ - -123.9654662, - 45.0023301 - ], - [ - -123.9660187, - 45.0014962 - ], - [ - -123.9661587, - 45.0013062 - ], - [ - -123.9679333, - 44.9994122 - ], - [ - -123.9681433, - 44.9992322 - ], - [ - -123.9687461, - 44.9987459 - ], - [ - -123.9692461, - 44.9983659 - ], - [ - -123.9716187, - 44.9968992 - ], - [ - -123.9717987, - 44.9968092 - ], - [ - -123.9734922, - 44.9960742 - ], - [ - -123.9736511, - 44.9960149 - ], - [ - -123.9747475, - 44.9949725 - ], - [ - -123.9767699, - 44.9933987 - ], - [ - -123.979186, - 44.992135 - ], - [ - -123.981903, - 44.9912301 - ], - [ - -123.9848166, - 44.9907185 - ], - [ - -123.9878148, - 44.9906201 - ], - [ - -123.9907825, - 44.9909386 - ], - [ - -123.9936057, - 44.9916617 - ], - [ - -123.9961759, - 44.9927617 - ], - [ - -123.9983944, - 44.9941962 - ], - [ - -124.000176, - 44.9959103 - ], - [ - -124.0014521, - 44.9978381 - ], - [ - -124.0021737, - 44.9999055 - ], - [ - -124.002313, - 45.002033 - ], - [ - -124.0018646, - 45.0041389 - ], - [ - -124.0008457, - 45.0061423 - ], - [ - -123.9992953, - 45.0079661 - ], - [ - -123.9970555, - 45.0100964 - ], - [ - -123.9966709, - 45.010447 - ], - [ - -123.9955609, - 45.0114171 - ], - [ - -123.9941059, - 45.0124163 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16184_s_16079", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.007723, - 44.984253 - ], - [ - -124.0077419, - 44.9842524 - ], - [ - -124.0079807, - 44.9842592 - ], - [ - -124.0083585, - 44.9842886 - ], - [ - -124.0086682, - 44.9842845 - ], - [ - -124.0094432, - 44.9842882 - ], - [ - -124.0097185, - 44.9842945 - ], - [ - -124.0126269, - 44.9845603 - ], - [ - -124.0128341, - 44.9845938 - ], - [ - -124.0165051, - 44.9855506 - ], - [ - -124.0167354, - 44.9856357 - ], - [ - -124.0191785, - 44.9867599 - ], - [ - -124.0194686, - 44.9869232 - ], - [ - -124.0223338, - 44.9890422 - ], - [ - -124.0227316, - 44.98943 - ], - [ - -124.0241955, - 44.9911813 - ], - [ - -124.0251732, - 44.9930956 - ], - [ - -124.0252292, - 44.9932488 - ], - [ - -124.0257193, - 44.996082 - ], - [ - -124.0257164, - 44.996296 - ], - [ - -124.0255206, - 44.9979262 - ], - [ - -124.025438, - 44.9982887 - ], - [ - -124.0246705, - 45.0003477 - ], - [ - -124.0233515, - 45.0022609 - ], - [ - -124.0215317, - 45.0039548 - ], - [ - -124.0192809, - 45.0053642 - ], - [ - -124.0166857, - 45.0064349 - ], - [ - -124.0138458, - 45.0071259 - ], - [ - -124.0108705, - 45.0074104 - ], - [ - -124.007874, - 45.0072776 - ], - [ - -124.0072157, - 45.007154 - ], - [ - -124.0062778, - 45.0074102 - ], - [ - -124.0053476, - 45.0076002 - ], - [ - -124.0031613, - 45.0079266 - ], - [ - -124.0024311, - 45.0079966 - ], - [ - -124.0012879, - 45.0080657 - ], - [ - -123.9992496, - 45.0086228 - ], - [ - -123.997274, - 45.0094803 - ], - [ - -123.9966271, - 45.0099309 - ], - [ - -123.9941156, - 45.011098 - ], - [ - -123.9913313, - 45.0118951 - ], - [ - -123.9883812, - 45.0122915 - ], - [ - -123.9853788, - 45.0122719 - ], - [ - -123.9824395, - 45.0118372 - ], - [ - -123.9796763, - 45.011004 - ], - [ - -123.9771955, - 45.0098043 - ], - [ - -123.9750923, - 45.0082843 - ], - [ - -123.9734477, - 45.0065025 - ], - [ - -123.9723248, - 45.0045272 - ], - [ - -123.9717668, - 45.0024345 - ], - [ - -123.9717949, - 45.0003048 - ], - [ - -123.9724081, - 44.9982199 - ], - [ - -123.9735828, - 44.9962599 - ], - [ - -123.9752736, - 44.9945002 - ], - [ - -123.9756036, - 44.9942202 - ], - [ - -123.9769212, - 44.9932348 - ], - [ - -123.9774212, - 44.9929048 - ], - [ - -123.9791567, - 44.9919162 - ], - [ - -123.9796267, - 44.9916862 - ], - [ - -123.9803307, - 44.9913616 - ], - [ - -123.9842703, - 44.9896519 - ], - [ - -123.9856293, - 44.989127 - ], - [ - -123.9860693, - 44.9889771 - ], - [ - -123.9871969, - 44.9886315 - ], - [ - -123.9918062, - 44.9873717 - ], - [ - -123.9941129, - 44.986885 - ], - [ - -123.9954327, - 44.986685 - ], - [ - -123.996172, - 44.9865962 - ], - [ - -123.9976039, - 44.9857969 - ], - [ - -124.0004006, - 44.9848084 - ], - [ - -124.0034218, - 44.9842434 - ], - [ - -124.0065417, - 44.9841253 - ], - [ - -124.007723, - 44.984253 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16185_s_16086", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0364105, - 44.9432372 - ], - [ - -124.0363976, - 44.9433653 - ], - [ - -124.0361793, - 44.9445728 - ], - [ - -124.0360804, - 44.9449508 - ], - [ - -124.0352462, - 44.9469966 - ], - [ - -124.0338658, - 44.9488874 - ], - [ - -124.0319925, - 44.9505507 - ], - [ - -124.029698, - 44.9519224 - ], - [ - -124.0270707, - 44.9529499 - ], - [ - -124.0242116, - 44.9535935 - ], - [ - -124.0212304, - 44.9538287 - ], - [ - -124.018242, - 44.9536463 - ], - [ - -124.0153611, - 44.9530534 - ], - [ - -124.0126986, - 44.9520727 - ], - [ - -124.0103568, - 44.9507419 - ], - [ - -124.0084257, - 44.9491123 - ], - [ - -124.0069795, - 44.9472464 - ], - [ - -124.0060738, - 44.945216 - ], - [ - -124.0057432, - 44.9430992 - ], - [ - -124.0058999, - 44.9418076 - ], - [ - -124.0058808, - 44.9418066 - ], - [ - -124.0059026, - 44.9415924 - ], - [ - -124.0059102, - 44.9414899 - ], - [ - -124.0059272, - 44.9406507 - ], - [ - -124.0061837, - 44.9388201 - ], - [ - -124.0064199, - 44.9379181 - ], - [ - -124.0067644, - 44.9370996 - ], - [ - -124.0059219, - 44.9359339 - ], - [ - -124.0050887, - 44.9337854 - ], - [ - -124.0048902, - 44.9315613 - ], - [ - -124.0049772, - 44.9311295 - ], - [ - -124.0049659, - 44.9308302 - ], - [ - -124.0054716, - 44.9287308 - ], - [ - -124.0065441, - 44.9267419 - ], - [ - -124.008142, - 44.9249398 - ], - [ - -124.0102041, - 44.9233938 - ], - [ - -124.0126509, - 44.9221633 - ], - [ - -124.0153886, - 44.9212954 - ], - [ - -124.0183119, - 44.9208237 - ], - [ - -124.0213086, - 44.9207661 - ], - [ - -124.0242635, - 44.9211248 - ], - [ - -124.0270632, - 44.9218862 - ], - [ - -124.0296001, - 44.923021 - ], - [ - -124.0317768, - 44.9244855 - ], - [ - -124.0335096, - 44.9262235 - ], - [ - -124.0337332, - 44.9265023 - ], - [ - -124.0344643, - 44.9276682 - ], - [ - -124.0358712, - 44.9292024 - ], - [ - -124.0373651, - 44.9312957 - ], - [ - -124.0377142, - 44.9319527 - ], - [ - -124.0384389, - 44.9337912 - ], - [ - -124.038593, - 44.9343761 - ], - [ - -124.0388441, - 44.9367691 - ], - [ - -124.0388122, - 44.9373921 - ], - [ - -124.0381353, - 44.9402173 - ], - [ - -124.0377985, - 44.9409884 - ], - [ - -124.0365657, - 44.9430384 - ], - [ - -124.0364105, - 44.9432372 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16185_s_16087", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0365139, - 44.9431339 - ], - [ - -124.0364877, - 44.943958 - ], - [ - -124.0356416, - 44.9463285 - ], - [ - -124.0353917, - 44.9467986 - ], - [ - -124.0340624, - 44.9487077 - ], - [ - -124.032234, - 44.9503961 - ], - [ - -124.0299768, - 44.9517986 - ], - [ - -124.0273776, - 44.9528614 - ], - [ - -124.0245362, - 44.9535437 - ], - [ - -124.021562, - 44.9538192 - ], - [ - -124.0185691, - 44.9536772 - ], - [ - -124.0156729, - 44.9531234 - ], - [ - -124.0129845, - 44.9521789 - ], - [ - -124.0106074, - 44.9508801 - ], - [ - -124.0086329, - 44.9492769 - ], - [ - -124.0071369, - 44.9474309 - ], - [ - -124.0061768, - 44.9454132 - ], - [ - -124.0057896, - 44.9433012 - ], - [ - -124.0059463, - 44.9416387 - ], - [ - -124.0059417, - 44.9415183 - ], - [ - -124.0059477, - 44.9414653 - ], - [ - -124.0059431, - 44.9410338 - ], - [ - -124.0060141, - 44.9399017 - ], - [ - -124.0060743, - 44.9394617 - ], - [ - -124.0064036, - 44.93804 - ], - [ - -124.0065502, - 44.9375944 - ], - [ - -124.005851, - 44.9371631 - ], - [ - -124.0037908, - 44.9356156 - ], - [ - -124.0021953, - 44.9338123 - ], - [ - -124.0011258, - 44.9318225 - ], - [ - -124.0006234, - 44.9297228 - ], - [ - -124.0007074, - 44.9275938 - ], - [ - -124.0013743, - 44.9255173 - ], - [ - -124.0025987, - 44.9235732 - ], - [ - -124.0043332, - 44.9218361 - ], - [ - -124.0065114, - 44.9203727 - ], - [ - -124.0090494, - 44.9192393 - ], - [ - -124.0118498, - 44.9184795 - ], - [ - -124.014805, - 44.9181223 - ], - [ - -124.0178014, - 44.9181815 - ], - [ - -124.0207241, - 44.9186548 - ], - [ - -124.0234607, - 44.9195242 - ], - [ - -124.0259061, - 44.920756 - ], - [ - -124.0266454, - 44.921212 - ], - [ - -124.0271189, - 44.9214718 - ], - [ - -124.0284786, - 44.9224145 - ], - [ - -124.0285052, - 44.9223942 - ], - [ - -124.0296251, - 44.9231341 - ], - [ - -124.0313116, - 44.9244467 - ], - [ - -124.0319316, - 44.9250166 - ], - [ - -124.0325041, - 44.9255791 - ], - [ - -124.0352045, - 44.9284188 - ], - [ - -124.0353841, - 44.9286121 - ], - [ - -124.0359742, - 44.929262 - ], - [ - -124.0373471, - 44.9311612 - ], - [ - -124.0376973, - 44.9317911 - ], - [ - -124.0385829, - 44.9341053 - ], - [ - -124.0387631, - 44.9349253 - ], - [ - -124.0388372, - 44.9378956 - ], - [ - -124.0387274, - 44.9385456 - ], - [ - -124.0382647, - 44.9401935 - ], - [ - -124.0374497, - 44.9417709 - ], - [ - -124.0368699, - 44.942671 - ], - [ - -124.0365139, - 44.9431339 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16187_s_16211", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0683812, - 44.8388206 - ], - [ - -124.061987, - 44.8477344 - ], - [ - -124.0618281, - 44.8480739 - ], - [ - -124.0613506, - 44.8487631 - ], - [ - -124.0605361, - 44.8501642 - ], - [ - -124.0584166, - 44.8540452 - ], - [ - -124.057064, - 44.8559453 - ], - [ - -124.055216, - 44.8576212 - ], - [ - -124.0529438, - 44.8590085 - ], - [ - -124.0503346, - 44.8600537 - ], - [ - -124.0474888, - 44.8607167 - ], - [ - -124.0445158, - 44.8609721 - ], - [ - -124.0415298, - 44.8608099 - ], - [ - -124.0386458, - 44.8602365 - ], - [ - -124.0359745, - 44.8592739 - ], - [ - -124.0336187, - 44.857959 - ], - [ - -124.031669, - 44.8563425 - ], - [ - -124.0302002, - 44.8544865 - ], - [ - -124.0292687, - 44.8524623 - ], - [ - -124.0289104, - 44.8503478 - ], - [ - -124.0291388, - 44.8482241 - ], - [ - -124.0299453, - 44.846173 - ], - [ - -124.0321261, - 44.8421833 - ], - [ - -124.0322488, - 44.8419657 - ], - [ - -124.0333192, - 44.8401258 - ], - [ - -124.033734, - 44.8394744 - ], - [ - -124.0344008, - 44.8385126 - ], - [ - -124.0345802, - 44.8381384 - ], - [ - -124.0437525, - 44.8253595 - ], - [ - -124.0444941, - 44.8244397 - ], - [ - -124.0447642, - 44.8241397 - ], - [ - -124.0458889, - 44.8230469 - ], - [ - -124.0464389, - 44.8225769 - ], - [ - -124.0484874, - 44.8211985 - ], - [ - -124.0482903, - 44.8205859 - ], - [ - -124.0479115, - 44.8184732 - ], - [ - -124.0481192, - 44.8163484 - ], - [ - -124.0489051, - 44.8142933 - ], - [ - -124.0502392, - 44.8123869 - ], - [ - -124.05207, - 44.8107023 - ], - [ - -124.0543272, - 44.8093043 - ], - [ - -124.0569242, - 44.8082465 - ], - [ - -124.059761, - 44.8075697 - ], - [ - -124.0627287, - 44.8072998 - ], - [ - -124.0657134, - 44.8074472 - ], - [ - -124.0686004, - 44.8080061 - ], - [ - -124.0712788, - 44.8089553 - ], - [ - -124.0736457, - 44.8102581 - ], - [ - -124.0756103, - 44.8118645 - ], - [ - -124.0770969, - 44.8137129 - ], - [ - -124.0780484, - 44.8157322 - ], - [ - -124.0806103, - 44.8236818 - ], - [ - -124.0809131, - 44.8249745 - ], - [ - -124.0810032, - 44.8255845 - ], - [ - -124.0808297, - 44.828707 - ], - [ - -124.0806599, - 44.829357 - ], - [ - -124.0793023, - 44.8322341 - ], - [ - -124.0791123, - 44.8325041 - ], - [ - -124.0777775, - 44.8340599 - ], - [ - -124.0774275, - 44.8343999 - ], - [ - -124.0753108, - 44.8360641 - ], - [ - -124.0749508, - 44.8362941 - ], - [ - -124.0722321, - 44.8376808 - ], - [ - -124.0719821, - 44.8377808 - ], - [ - -124.0687059, - 44.8387544 - ], - [ - -124.0683812, - 44.8388206 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16188_s_16187", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0514155, - 44.8667412 - ], - [ - -124.0490965, - 44.8750484 - ], - [ - -124.0491452, - 44.876153 - ], - [ - -124.0491253, - 44.876363 - ], - [ - -124.0485527, - 44.8786636 - ], - [ - -124.0483728, - 44.8791036 - ], - [ - -124.0481794, - 44.8794885 - ], - [ - -124.0478688, - 44.8809403 - ], - [ - -124.046849, - 44.8829429 - ], - [ - -124.0452991, - 44.8847656 - ], - [ - -124.0432788, - 44.8863383 - ], - [ - -124.0408656, - 44.8876005 - ], - [ - -124.0381523, - 44.8885037 - ], - [ - -124.0352432, - 44.8890132 - ], - [ - -124.0322502, - 44.8891094 - ], - [ - -124.0292883, - 44.8887886 - ], - [ - -124.0264714, - 44.8880631 - ], - [ - -124.0239078, - 44.8869608 - ], - [ - -124.0216961, - 44.8855241 - ], - [ - -124.0199213, - 44.8838082 - ], - [ - -124.0186515, - 44.8818791 - ], - [ - -124.0179356, - 44.879811 - ], - [ - -124.0178009, - 44.8776833 - ], - [ - -124.0178511, - 44.8770133 - ], - [ - -124.01803, - 44.8758364 - ], - [ - -124.0181425, - 44.8753476 - ], - [ - -124.0181404, - 44.8753302 - ], - [ - -124.0184336, - 44.8732815 - ], - [ - -124.0216665, - 44.8617219 - ], - [ - -124.022124, - 44.8604766 - ], - [ - -124.0223941, - 44.8598867 - ], - [ - -124.0227684, - 44.8591585 - ], - [ - -124.0243268, - 44.8564325 - ], - [ - -124.0299483, - 44.8461675 - ], - [ - -124.0313031, - 44.8442682 - ], - [ - -124.0331526, - 44.8425934 - ], - [ - -124.0354257, - 44.8412074 - ], - [ - -124.0380351, - 44.8401636 - ], - [ - -124.0408805, - 44.8395019 - ], - [ - -124.0438527, - 44.8392478 - ], - [ - -124.0468374, - 44.839411 - ], - [ - -124.04972, - 44.8399854 - ], - [ - -124.0523899, - 44.8409487 - ], - [ - -124.0547444, - 44.8422641 - ], - [ - -124.0566931, - 44.843881 - ], - [ - -124.058161, - 44.8457372 - ], - [ - -124.0590918, - 44.8477615 - ], - [ - -124.0594496, - 44.8498761 - ], - [ - -124.0592207, - 44.8519997 - ], - [ - -124.0584136, - 44.8540507 - ], - [ - -124.0527558, - 44.8643914 - ], - [ - -124.052673, - 44.8645396 - ], - [ - -124.0514155, - 44.8667412 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16189_s_16188", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0375872, - 44.895328 - ], - [ - -124.037189, - 44.8956871 - ], - [ - -124.0357191, - 44.8969072 - ], - [ - -124.0335564, - 44.8983814 - ], - [ - -124.0310304, - 44.8995273 - ], - [ - -124.0282384, - 44.9003009 - ], - [ - -124.0252876, - 44.9006724 - ], - [ - -124.0222916, - 44.9006275 - ], - [ - -124.0193655, - 44.900168 - ], - [ - -124.0166217, - 44.8993115 - ], - [ - -124.014166, - 44.898091 - ], - [ - -124.0120925, - 44.8965534 - ], - [ - -124.010481, - 44.8947578 - ], - [ - -124.0093934, - 44.8927732 - ], - [ - -124.0088714, - 44.8906759 - ], - [ - -124.008935, - 44.8885466 - ], - [ - -124.0095818, - 44.8864669 - ], - [ - -124.0107869, - 44.884517 - ], - [ - -124.0125037, - 44.8827716 - ], - [ - -124.0135695, - 44.8818872 - ], - [ - -124.0145871, - 44.880889 - ], - [ - -124.0163049, - 44.8795129 - ], - [ - -124.0171848, - 44.8785166 - ], - [ - -124.0177904, - 44.877829 - ], - [ - -124.017799, - 44.8777085 - ], - [ - -124.0182439, - 44.8756022 - ], - [ - -124.019258, - 44.8735982 - ], - [ - -124.0208024, - 44.8717733 - ], - [ - -124.0228177, - 44.8701976 - ], - [ - -124.0252265, - 44.8689318 - ], - [ - -124.0279361, - 44.8680244 - ], - [ - -124.0308425, - 44.8675103 - ], - [ - -124.0338342, - 44.8674093 - ], - [ - -124.036796, - 44.8677251 - ], - [ - -124.0396144, - 44.8684457 - ], - [ - -124.042181, - 44.8695435 - ], - [ - -124.0443973, - 44.8709761 - ], - [ - -124.046178, - 44.8726887 - ], - [ - -124.0474548, - 44.8746153 - ], - [ - -124.0481785, - 44.8766821 - ], - [ - -124.0483212, - 44.8788095 - ], - [ - -124.0481738, - 44.8808835 - ], - [ - -124.0478664, - 44.8825701 - ], - [ - -124.0476396, - 44.8833372 - ], - [ - -124.0473326, - 44.8841987 - ], - [ - -124.0472016, - 44.8845117 - ], - [ - -124.0462672, - 44.8862092 - ], - [ - -124.0459573, - 44.8866572 - ], - [ - -124.0452971, - 44.8875123 - ], - [ - -124.0448552, - 44.8880284 - ], - [ - -124.0445958, - 44.8883206 - ], - [ - -124.0443231, - 44.8886175 - ], - [ - -124.0440929, - 44.8888987 - ], - [ - -124.0438385, - 44.8891982 - ], - [ - -124.0430867, - 44.8900523 - ], - [ - -124.0430768, - 44.8900635 - ], - [ - -124.0406772, - 44.8927818 - ], - [ - -124.0395762, - 44.8938728 - ], - [ - -124.0393972, - 44.8940288 - ], - [ - -124.0392296, - 44.8941723 - ], - [ - -124.0391286, - 44.8942573 - ], - [ - -124.0375872, - 44.895328 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16190_s_16191", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0711381, - 44.7417964 - ], - [ - -124.0711506, - 44.7421752 - ], - [ - -124.0711544, - 44.7423516 - ], - [ - -124.0711647, - 44.7433516 - ], - [ - -124.071136, - 44.7438815 - ], - [ - -124.0711552, - 44.7443385 - ], - [ - -124.0711457, - 44.7462985 - ], - [ - -124.0710906, - 44.7471847 - ], - [ - -124.0710307, - 44.7476847 - ], - [ - -124.0704218, - 44.7499327 - ], - [ - -124.0703619, - 44.7500727 - ], - [ - -124.0692133, - 44.752039 - ], - [ - -124.0675484, - 44.7538079 - ], - [ - -124.065431, - 44.7553113 - ], - [ - -124.0629426, - 44.7564914 - ], - [ - -124.0601788, - 44.7573029 - ], - [ - -124.0572459, - 44.7577145 - ], - [ - -124.0542566, - 44.7577105 - ], - [ - -124.0513259, - 44.757291 - ], - [ - -124.0485664, - 44.756472 - ], - [ - -124.0460843, - 44.7552852 - ], - [ - -124.043975, - 44.7537761 - ], - [ - -124.0423194, - 44.7520027 - ], - [ - -124.0411813, - 44.7500333 - ], - [ - -124.0406043, - 44.7479434 - ], - [ - -124.0406105, - 44.7458136 - ], - [ - -124.0406573, - 44.7456477 - ], - [ - -124.0406628, - 44.744623 - ], - [ - -124.0406551, - 44.7445359 - ], - [ - -124.0406735, - 44.7433284 - ], - [ - -124.0406664, - 44.7425946 - ], - [ - -124.0406639, - 44.7425184 - ], - [ - -124.0405964, - 44.7421709 - ], - [ - -124.0406811, - 44.7403234 - ], - [ - -124.0409842, - 44.7384992 - ], - [ - -124.041289, - 44.7351565 - ], - [ - -124.0413201, - 44.7348725 - ], - [ - -124.041761, - 44.7314325 - ], - [ - -124.041788, - 44.7312406 - ], - [ - -124.0419383, - 44.7302606 - ], - [ - -124.0420907, - 44.72951 - ], - [ - -124.0423663, - 44.7284221 - ], - [ - -124.0423898, - 44.7282109 - ], - [ - -124.0424585, - 44.7268114 - ], - [ - -124.0425596, - 44.7258857 - ], - [ - -124.0427599, - 44.7247057 - ], - [ - -124.0434078, - 44.7226265 - ], - [ - -124.0446121, - 44.7206773 - ], - [ - -124.0463266, - 44.7189331 - ], - [ - -124.0484853, - 44.7174608 - ], - [ - -124.0510052, - 44.7163171 - ], - [ - -124.0537896, - 44.7155458 - ], - [ - -124.0567315, - 44.7151765 - ], - [ - -124.0597179, - 44.7152235 - ], - [ - -124.062634, - 44.715685 - ], - [ - -124.065368, - 44.7165431 - ], - [ - -124.0678147, - 44.717765 - ], - [ - -124.0698802, - 44.7193038 - ], - [ - -124.071485, - 44.7211002 - ], - [ - -124.0725676, - 44.7230854 - ], - [ - -124.0730862, - 44.7251829 - ], - [ - -124.0730208, - 44.7273123 - ], - [ - -124.0728992, - 44.728031 - ], - [ - -124.0728421, - 44.7292066 - ], - [ - -124.0728039, - 44.7296869 - ], - [ - -124.0726941, - 44.7306769 - ], - [ - -124.0724998, - 44.731748 - ], - [ - -124.0721847, - 44.7329946 - ], - [ - -124.0721072, - 44.7335015 - ], - [ - -124.0716985, - 44.7367036 - ], - [ - -124.0713823, - 44.7401915 - ], - [ - -124.0713089, - 44.7407646 - ], - [ - -124.0711381, - 44.7417964 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16191_s_16025", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0451291, - 44.7063734 - ], - [ - -124.0451849, - 44.7059188 - ], - [ - -124.0455656, - 44.7034388 - ], - [ - -124.0456239, - 44.7031061 - ], - [ - -124.0469868, - 44.6962019 - ], - [ - -124.047421, - 44.6936779 - ], - [ - -124.0474713, - 44.6934127 - ], - [ - -124.04798, - 44.6909569 - ], - [ - -124.0483116, - 44.688962 - ], - [ - -124.0484226, - 44.6878292 - ], - [ - -124.048435, - 44.6863563 - ], - [ - -124.0481127, - 44.684273 - ], - [ - -124.0480776, - 44.6821432 - ], - [ - -124.0486255, - 44.6800495 - ], - [ - -124.0497354, - 44.6780723 - ], - [ - -124.0513645, - 44.6762875 - ], - [ - -124.0534502, - 44.6747637 - ], - [ - -124.0559123, - 44.6735595 - ], - [ - -124.0586563, - 44.6727212 - ], - [ - -124.0615767, - 44.6722808 - ], - [ - -124.0645614, - 44.6722554 - ], - [ - -124.0674957, - 44.6726459 - ], - [ - -124.070267, - 44.6734373 - ], - [ - -124.0727687, - 44.6745992 - ], - [ - -124.0749047, - 44.6760869 - ], - [ - -124.0765931, - 44.6778435 - ], - [ - -124.0777688, - 44.6798012 - ], - [ - -124.0783867, - 44.681885 - ], - [ - -124.0788074, - 44.6845949 - ], - [ - -124.0788997, - 44.6858523 - ], - [ - -124.0788803, - 44.6883023 - ], - [ - -124.0788439, - 44.6889944 - ], - [ - -124.0786744, - 44.6907344 - ], - [ - -124.0786057, - 44.6912564 - ], - [ - -124.0782063, - 44.6936665 - ], - [ - -124.0781489, - 44.6939752 - ], - [ - -124.0776369, - 44.6964529 - ], - [ - -124.0772103, - 44.6989402 - ], - [ - -124.0771751, - 44.6991317 - ], - [ - -124.0758295, - 44.7059658 - ], - [ - -124.0755117, - 44.7080439 - ], - [ - -124.0754236, - 44.7090077 - ], - [ - -124.0750729, - 44.7107216 - ], - [ - -124.074903, - 44.7112517 - ], - [ - -124.0744768, - 44.7123246 - ], - [ - -124.0738969, - 44.7135422 - ], - [ - -124.0736385, - 44.7141968 - ], - [ - -124.0734965, - 44.7149002 - ], - [ - -124.0734925, - 44.714951 - ], - [ - -124.0735151, - 44.7163315 - ], - [ - -124.073681, - 44.7199789 - ], - [ - -124.0736888, - 44.7203783 - ], - [ - -124.0736793, - 44.7219483 - ], - [ - -124.0736413, - 44.7226688 - ], - [ - -124.073372, - 44.7253788 - ], - [ - -124.0732579, - 44.7261426 - ], - [ - -124.0729783, - 44.7275426 - ], - [ - -124.0722692, - 44.7296117 - ], - [ - -124.0710074, - 44.7315423 - ], - [ - -124.0692414, - 44.7332604 - ], - [ - -124.067039, - 44.7346998 - ], - [ - -124.0644848, - 44.7358052 - ], - [ - -124.0616771, - 44.7365342 - ], - [ - -124.0587237, - 44.7368586 - ], - [ - -124.0557383, - 44.7367661 - ], - [ - -124.0528357, - 44.7362601 - ], - [ - -124.0501273, - 44.7353602 - ], - [ - -124.0477175, - 44.7341009 - ], - [ - -124.0456987, - 44.7325306 - ], - [ - -124.0441486, - 44.7307098 - ], - [ - -124.0431266, - 44.7287083 - ], - [ - -124.0426721, - 44.7266032 - ], - [ - -124.0428025, - 44.7244754 - ], - [ - -124.0430066, - 44.7234558 - ], - [ - -124.0432031, - 44.721489 - ], - [ - -124.0432098, - 44.7204794 - ], - [ - -124.0430498, - 44.716919 - ], - [ - -124.0430429, - 44.7166939 - ], - [ - -124.0430134, - 44.7148339 - ], - [ - -124.0430365, - 44.7141006 - ], - [ - -124.0431067, - 44.7132106 - ], - [ - -124.0432389, - 44.712269 - ], - [ - -124.0436194, - 44.7103891 - ], - [ - -124.0440348, - 44.7089929 - ], - [ - -124.0446752, - 44.707373 - ], - [ - -124.0449146, - 44.7068234 - ], - [ - -124.0451291, - 44.7063734 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16192_s_16190", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.08657, - 44.7764457 - ], - [ - -124.0874332, - 44.7780544 - ], - [ - -124.0876033, - 44.7784843 - ], - [ - -124.0881739, - 44.7813021 - ], - [ - -124.0881841, - 44.7819121 - ], - [ - -124.0879495, - 44.7839435 - ], - [ - -124.0878895, - 44.7841835 - ], - [ - -124.0875554, - 44.7852227 - ], - [ - -124.0868958, - 44.7868927 - ], - [ - -124.0868548, - 44.7869947 - ], - [ - -124.0862851, - 44.7883848 - ], - [ - -124.0846427, - 44.7910236 - ], - [ - -124.0841428, - 44.7916037 - ], - [ - -124.0819104, - 44.7936154 - ], - [ - -124.0816004, - 44.7938354 - ], - [ - -124.0805556, - 44.7944837 - ], - [ - -124.0804535, - 44.7961071 - ], - [ - -124.0804406, - 44.7962808 - ], - [ - -124.0803808, - 44.7969808 - ], - [ - -124.0802285, - 44.7979868 - ], - [ - -124.0801087, - 44.7985368 - ], - [ - -124.0798279, - 44.799522 - ], - [ - -124.0795381, - 44.8003421 - ], - [ - -124.0789121, - 44.8017185 - ], - [ - -124.0769329, - 44.8052487 - ], - [ - -124.0767295, - 44.805594 - ], - [ - -124.076419, - 44.8060967 - ], - [ - -124.0765732, - 44.8077969 - ], - [ - -124.0761799, - 44.8099083 - ], - [ - -124.0752154, - 44.8119244 - ], - [ - -124.0737168, - 44.8137679 - ], - [ - -124.0717416, - 44.8153678 - ], - [ - -124.0693658, - 44.8166626 - ], - [ - -124.0666806, - 44.8176026 - ], - [ - -124.0637893, - 44.8181516 - ], - [ - -124.0608031, - 44.8182885 - ], - [ - -124.0578368, - 44.818008 - ], - [ - -124.0550043, - 44.817321 - ], - [ - -124.0524147, - 44.8162538 - ], - [ - -124.0501675, - 44.8148474 - ], - [ - -124.048349, - 44.813156 - ], - [ - -124.0470292, - 44.8112446 - ], - [ - -124.0462586, - 44.8091866 - ], - [ - -124.045909, - 44.8076665 - ], - [ - -124.0457773, - 44.8069419 - ], - [ - -124.0456675, - 44.8061219 - ], - [ - -124.0456534, - 44.8041715 - ], - [ - -124.0457035, - 44.8037515 - ], - [ - -124.0462217, - 44.8017221 - ], - [ - -124.0464118, - 44.8012421 - ], - [ - -124.04678, - 44.8004346 - ], - [ - -124.0476804, - 44.7986947 - ], - [ - -124.0480323, - 44.7980742 - ], - [ - -124.0486867, - 44.7970157 - ], - [ - -124.0499951, - 44.794684 - ], - [ - -124.0503885, - 44.7884809 - ], - [ - -124.0504979, - 44.7875834 - ], - [ - -124.0506281, - 44.7868634 - ], - [ - -124.0515981, - 44.7842091 - ], - [ - -124.0517782, - 44.7838891 - ], - [ - -124.053977, - 44.7811877 - ], - [ - -124.054377, - 44.7808277 - ], - [ - -124.0552879, - 44.7801589 - ], - [ - -124.0552783, - 44.780133 - ], - [ - -124.0552183, - 44.7798429 - ], - [ - -124.0551817, - 44.7796543 - ], - [ - -124.0551218, - 44.7793243 - ], - [ - -124.0550593, - 44.776941 - ], - [ - -124.0551094, - 44.776551 - ], - [ - -124.0552286, - 44.7760074 - ], - [ - -124.0551491, - 44.7759338 - ], - [ - -124.0544991, - 44.7753037 - ], - [ - -124.0537073, - 44.7744554 - ], - [ - -124.0523275, - 44.7728152 - ], - [ - -124.0517022, - 44.7719936 - ], - [ - -124.0495727, - 44.7688833 - ], - [ - -124.0493027, - 44.7684669 - ], - [ - -124.0491128, - 44.7681569 - ], - [ - -124.0485192, - 44.7670183 - ], - [ - -124.0482893, - 44.7664882 - ], - [ - -124.0478419, - 44.7647187 - ], - [ - -124.0475236, - 44.7643804 - ], - [ - -124.0456899, - 44.7616939 - ], - [ - -124.0456469, - 44.7615998 - ], - [ - -124.0447677, - 44.7611106 - ], - [ - -124.0438177, - 44.7605405 - ], - [ - -124.0418753, - 44.759142 - ], - [ - -124.0408454, - 44.7582519 - ], - [ - -124.0400422, - 44.7574924 - ], - [ - -124.0397723, - 44.7572123 - ], - [ - -124.0385899, - 44.7557558 - ], - [ - -124.03822, - 44.7552058 - ], - [ - -124.0376066, - 44.7541557 - ], - [ - -124.0372667, - 44.7534757 - ], - [ - -124.0365759, - 44.7515528 - ], - [ - -124.0363461, - 44.7505327 - ], - [ - -124.0361658, - 44.748374 - ], - [ - -124.036589, - 44.7462326 - ], - [ - -124.0375989, - 44.7441933 - ], - [ - -124.0391555, - 44.7423369 - ], - [ - -124.0411969, - 44.740737 - ], - [ - -124.0436424, - 44.7394569 - ], - [ - -124.0456343, - 44.7387987 - ], - [ - -124.047966, - 44.7375709 - ], - [ - -124.0506696, - 44.7366638 - ], - [ - -124.0535695, - 44.7361499 - ], - [ - -124.0565544, - 44.7360491 - ], - [ - -124.0595095, - 44.7363653 - ], - [ - -124.0623213, - 44.7370862 - ], - [ - -124.0648819, - 44.7381841 - ], - [ - -124.0670929, - 44.739617 - ], - [ - -124.0688692, - 44.7413298 - ], - [ - -124.0701428, - 44.7432566 - ], - [ - -124.0708644, - 44.7453234 - ], - [ - -124.0710064, - 44.7474509 - ], - [ - -124.0708722, - 44.7480889 - ], - [ - -124.0718776, - 44.7489573 - ], - [ - -124.0721876, - 44.7492773 - ], - [ - -124.0738516, - 44.7515133 - ], - [ - -124.0740917, - 44.7519533 - ], - [ - -124.0746425, - 44.7533357 - ], - [ - -124.0755678, - 44.7541364 - ], - [ - -124.0758178, - 44.7544064 - ], - [ - -124.0775854, - 44.7570165 - ], - [ - -124.0776954, - 44.7572565 - ], - [ - -124.0782596, - 44.7589215 - ], - [ - -124.0784496, - 44.760629 - ], - [ - -124.0784497, - 44.761219 - ], - [ - -124.0784161, - 44.7614438 - ], - [ - -124.0788276, - 44.7620444 - ], - [ - -124.0795021, - 44.7628458 - ], - [ - -124.0795267, - 44.7628697 - ], - [ - -124.0823235, - 44.7653408 - ], - [ - -124.0834486, - 44.7664765 - ], - [ - -124.0840087, - 44.7671264 - ], - [ - -124.0851363, - 44.7687131 - ], - [ - -124.0854164, - 44.7692031 - ], - [ - -124.0860442, - 44.7705455 - ], - [ - -124.0863644, - 44.7714154 - ], - [ - -124.0868625, - 44.7742669 - ], - [ - -124.0868527, - 44.7750569 - ], - [ - -124.08657, - 44.7764457 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16192_s_16191", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0865689, - 44.7764508 - ], - [ - -124.0866164, - 44.7765107 - ], - [ - -124.0869665, - 44.7771107 - ], - [ - -124.0879917, - 44.7797954 - ], - [ - -124.0880518, - 44.7801054 - ], - [ - -124.0881932, - 44.7817609 - ], - [ - -124.0881833, - 44.7822109 - ], - [ - -124.0879495, - 44.7839435 - ], - [ - -124.0878895, - 44.7841835 - ], - [ - -124.0875369, - 44.7852691 - ], - [ - -124.0863076, - 44.7883293 - ], - [ - -124.0846427, - 44.7910236 - ], - [ - -124.0841428, - 44.7916037 - ], - [ - -124.0819104, - 44.7936154 - ], - [ - -124.0816004, - 44.7938354 - ], - [ - -124.0805556, - 44.7944837 - ], - [ - -124.0804535, - 44.7961071 - ], - [ - -124.0804406, - 44.7962808 - ], - [ - -124.0803808, - 44.7969808 - ], - [ - -124.0802285, - 44.7979868 - ], - [ - -124.0801087, - 44.7985368 - ], - [ - -124.0798279, - 44.799522 - ], - [ - -124.0795381, - 44.8003421 - ], - [ - -124.0789121, - 44.8017185 - ], - [ - -124.0769329, - 44.8052487 - ], - [ - -124.0767295, - 44.805594 - ], - [ - -124.076419, - 44.8060967 - ], - [ - -124.0765732, - 44.8077969 - ], - [ - -124.0761799, - 44.8099083 - ], - [ - -124.0752154, - 44.8119244 - ], - [ - -124.0737168, - 44.8137679 - ], - [ - -124.0717416, - 44.8153678 - ], - [ - -124.0693658, - 44.8166626 - ], - [ - -124.0666806, - 44.8176026 - ], - [ - -124.0637893, - 44.8181516 - ], - [ - -124.0608031, - 44.8182885 - ], - [ - -124.0578368, - 44.818008 - ], - [ - -124.0550043, - 44.817321 - ], - [ - -124.0524147, - 44.8162538 - ], - [ - -124.0501675, - 44.8148474 - ], - [ - -124.048349, - 44.813156 - ], - [ - -124.0470292, - 44.8112446 - ], - [ - -124.0462586, - 44.8091866 - ], - [ - -124.045909, - 44.8076665 - ], - [ - -124.0457773, - 44.8069419 - ], - [ - -124.0456675, - 44.8061219 - ], - [ - -124.0456534, - 44.8041715 - ], - [ - -124.0457035, - 44.8037515 - ], - [ - -124.0462217, - 44.8017221 - ], - [ - -124.0464118, - 44.8012421 - ], - [ - -124.04678, - 44.8004346 - ], - [ - -124.0476804, - 44.7986947 - ], - [ - -124.0480323, - 44.7980742 - ], - [ - -124.0486867, - 44.7970157 - ], - [ - -124.0499951, - 44.794684 - ], - [ - -124.0503885, - 44.7884809 - ], - [ - -124.0504979, - 44.7875834 - ], - [ - -124.0506281, - 44.7868634 - ], - [ - -124.0515981, - 44.7842091 - ], - [ - -124.0517782, - 44.7838891 - ], - [ - -124.053977, - 44.7811877 - ], - [ - -124.054377, - 44.7808277 - ], - [ - -124.0552879, - 44.7801589 - ], - [ - -124.0552783, - 44.780133 - ], - [ - -124.0552183, - 44.7798429 - ], - [ - -124.0551817, - 44.7796543 - ], - [ - -124.0551218, - 44.7793243 - ], - [ - -124.0550593, - 44.776941 - ], - [ - -124.0551094, - 44.776551 - ], - [ - -124.0552286, - 44.7760074 - ], - [ - -124.0551491, - 44.7759338 - ], - [ - -124.0544991, - 44.7753037 - ], - [ - -124.0537073, - 44.7744554 - ], - [ - -124.0523275, - 44.7728152 - ], - [ - -124.0517022, - 44.7719936 - ], - [ - -124.0495727, - 44.7688833 - ], - [ - -124.0493027, - 44.7684669 - ], - [ - -124.0491128, - 44.7681569 - ], - [ - -124.0485192, - 44.7670183 - ], - [ - -124.0482893, - 44.7664882 - ], - [ - -124.0478419, - 44.7647187 - ], - [ - -124.0475236, - 44.7643804 - ], - [ - -124.0456899, - 44.7616939 - ], - [ - -124.0456469, - 44.7615998 - ], - [ - -124.0447677, - 44.7611106 - ], - [ - -124.0438177, - 44.7605405 - ], - [ - -124.0422529, - 44.759456 - ], - [ - -124.0418529, - 44.7591359 - ], - [ - -124.0410671, - 44.7584533 - ], - [ - -124.0401672, - 44.7576032 - ], - [ - -124.0385899, - 44.7557558 - ], - [ - -124.03822, - 44.7552058 - ], - [ - -124.0376066, - 44.7541557 - ], - [ - -124.0372667, - 44.7534757 - ], - [ - -124.0366491, - 44.7518512 - ], - [ - -124.0364393, - 44.7510611 - ], - [ - -124.0361919, - 44.749576 - ], - [ - -124.0361421, - 44.748856 - ], - [ - -124.0362232, - 44.7470812 - ], - [ - -124.0363634, - 44.7462112 - ], - [ - -124.0366901, - 44.7448997 - ], - [ - -124.0369003, - 44.7442797 - ], - [ - -124.0376076, - 44.7427197 - ], - [ - -124.0380378, - 44.7419697 - ], - [ - -124.0385787, - 44.7411303 - ], - [ - -124.0388588, - 44.7407404 - ], - [ - -124.03983, - 44.7395738 - ], - [ - -124.0402601, - 44.7391238 - ], - [ - -124.0408598, - 44.7385393 - ], - [ - -124.0409915, - 44.7384195 - ], - [ - -124.041289, - 44.7351565 - ], - [ - -124.0413201, - 44.7348725 - ], - [ - -124.041761, - 44.7314325 - ], - [ - -124.041788, - 44.7312406 - ], - [ - -124.0419383, - 44.7302606 - ], - [ - -124.0420907, - 44.72951 - ], - [ - -124.0423663, - 44.7284221 - ], - [ - -124.0423898, - 44.7282109 - ], - [ - -124.0424585, - 44.7268114 - ], - [ - -124.0425596, - 44.7258857 - ], - [ - -124.0427599, - 44.7247057 - ], - [ - -124.0434078, - 44.7226265 - ], - [ - -124.0446121, - 44.7206773 - ], - [ - -124.0463266, - 44.7189331 - ], - [ - -124.0484853, - 44.7174608 - ], - [ - -124.0510052, - 44.7163171 - ], - [ - -124.0537896, - 44.7155458 - ], - [ - -124.0567315, - 44.7151765 - ], - [ - -124.0597179, - 44.7152235 - ], - [ - -124.062634, - 44.715685 - ], - [ - -124.065368, - 44.7165431 - ], - [ - -124.0678147, - 44.717765 - ], - [ - -124.0698802, - 44.7193038 - ], - [ - -124.071485, - 44.7211002 - ], - [ - -124.0725676, - 44.7230854 - ], - [ - -124.0730862, - 44.7251829 - ], - [ - -124.0730208, - 44.7273123 - ], - [ - -124.0728992, - 44.728031 - ], - [ - -124.0728421, - 44.7292066 - ], - [ - -124.0728039, - 44.7296869 - ], - [ - -124.0726941, - 44.7306769 - ], - [ - -124.0724998, - 44.731748 - ], - [ - -124.0721847, - 44.7329946 - ], - [ - -124.0721072, - 44.7335015 - ], - [ - -124.0716985, - 44.7367036 - ], - [ - -124.0713823, - 44.7401915 - ], - [ - -124.0713089, - 44.7407646 - ], - [ - -124.0709595, - 44.7428746 - ], - [ - -124.0702685, - 44.7450661 - ], - [ - -124.0696688, - 44.7463361 - ], - [ - -124.06931, - 44.7469053 - ], - [ - -124.0697804, - 44.7472059 - ], - [ - -124.0702204, - 44.7475259 - ], - [ - -124.0718776, - 44.7489573 - ], - [ - -124.0721876, - 44.7492773 - ], - [ - -124.0738516, - 44.7515133 - ], - [ - -124.0740917, - 44.7519533 - ], - [ - -124.0746425, - 44.7533357 - ], - [ - -124.0755678, - 44.7541364 - ], - [ - -124.0758178, - 44.7544064 - ], - [ - -124.0775854, - 44.7570165 - ], - [ - -124.0776954, - 44.7572565 - ], - [ - -124.0782596, - 44.7589215 - ], - [ - -124.0784496, - 44.760629 - ], - [ - -124.0784497, - 44.761219 - ], - [ - -124.0784161, - 44.7614438 - ], - [ - -124.0788276, - 44.7620444 - ], - [ - -124.0795021, - 44.7628458 - ], - [ - -124.0795267, - 44.7628697 - ], - [ - -124.0823235, - 44.7653408 - ], - [ - -124.0834486, - 44.7664765 - ], - [ - -124.0840087, - 44.7671264 - ], - [ - -124.0851363, - 44.7687131 - ], - [ - -124.0854164, - 44.7692031 - ], - [ - -124.0860442, - 44.7705455 - ], - [ - -124.0863644, - 44.7714154 - ], - [ - -124.0868625, - 44.7742669 - ], - [ - -124.0868527, - 44.7750569 - ], - [ - -124.0865689, - 44.7764508 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16194_s_15889", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0703323, - 44.6392473 - ], - [ - -124.0698062, - 44.64055 - ], - [ - -124.0684554, - 44.642425 - ], - [ - -124.0666228, - 44.6440783 - ], - [ - -124.0643772, - 44.6454478 - ], - [ - -124.0618033, - 44.6464818 - ], - [ - -124.0589981, - 44.6471414 - ], - [ - -124.0560671, - 44.6474017 - ], - [ - -124.0559913, - 44.6474031 - ], - [ - -124.0530153, - 44.6472507 - ], - [ - -124.0501382, - 44.6466867 - ], - [ - -124.0474706, - 44.6457328 - ], - [ - -124.0451151, - 44.6444256 - ], - [ - -124.0431621, - 44.6428154 - ], - [ - -124.0416868, - 44.6409642 - ], - [ - -124.0415443, - 44.6406581 - ], - [ - -124.0404787, - 44.6394452 - ], - [ - -124.039417, - 44.6374547 - ], - [ - -124.0389196, - 44.6353546 - ], - [ - -124.0390056, - 44.6332256 - ], - [ - -124.0396717, - 44.6311494 - ], - [ - -124.0408921, - 44.6292059 - ], - [ - -124.0426199, - 44.6274697 - ], - [ - -124.0447887, - 44.6260076 - ], - [ - -124.0473621, - 44.6245858 - ], - [ - -124.0499359, - 44.623437 - ], - [ - -124.0527778, - 44.6226759 - ], - [ - -124.0557747, - 44.6223328 - ], - [ - -124.0588072, - 44.6224212 - ], - [ - -124.0617549, - 44.6229378 - ], - [ - -124.0645004, - 44.6238619 - ], - [ - -124.0669346, - 44.6251567 - ], - [ - -124.0689605, - 44.6267709 - ], - [ - -124.0695301, - 44.6273277 - ], - [ - -124.0710125, - 44.6291131 - ], - [ - -124.0719926, - 44.6310673 - ], - [ - -124.0724344, - 44.6331188 - ], - [ - -124.0723218, - 44.6351929 - ], - [ - -124.0716588, - 44.6372139 - ], - [ - -124.0704696, - 44.6391079 - ], - [ - -124.0703323, - 44.6392473 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16195_s_16204", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0481663, - 44.8808801 - ], - [ - -124.0479688, - 44.8821412 - ], - [ - -124.0479239, - 44.8823282 - ], - [ - -124.047837, - 44.8826588 - ], - [ - -124.0478195, - 44.88272 - ], - [ - -124.0477952, - 44.8828193 - ], - [ - -124.0476591, - 44.8833089 - ], - [ - -124.0476051, - 44.8834819 - ], - [ - -124.047221, - 44.884484 - ], - [ - -124.0471471, - 44.884646 - ], - [ - -124.0467938, - 44.8853387 - ], - [ - -124.0466719, - 44.8855547 - ], - [ - -124.0459816, - 44.8866101 - ], - [ - -124.0457346, - 44.8869401 - ], - [ - -124.045307, - 44.8874745 - ], - [ - -124.0448573, - 44.8880013 - ], - [ - -124.0444126, - 44.8885241 - ], - [ - -124.044386, - 44.8885552 - ], - [ - -124.0439291, - 44.8890882 - ], - [ - -124.0438279, - 44.8892047 - ], - [ - -124.043081, - 44.8900518 - ], - [ - -124.043066, - 44.8900687 - ], - [ - -124.0416346, - 44.8916854 - ], - [ - -124.0408318, - 44.8926079 - ], - [ - -124.0401351, - 44.89334 - ], - [ - -124.0397772, - 44.893685 - ], - [ - -124.0377103, - 44.895306 - ], - [ - -124.0375023, - 44.8954145 - ], - [ - -124.0373714, - 44.8955158 - ], - [ - -124.0366236, - 44.8961702 - ], - [ - -124.0345156, - 44.8976839 - ], - [ - -124.0320324, - 44.8988761 - ], - [ - -124.0292697, - 44.899701 - ], - [ - -124.0263336, - 44.9001269 - ], - [ - -124.0233369, - 44.9001375 - ], - [ - -124.020395, - 44.8997322 - ], - [ - -124.0176209, - 44.8989268 - ], - [ - -124.0151213, - 44.8977521 - ], - [ - -124.0129922, - 44.8962533 - ], - [ - -124.0113156, - 44.8944881 - ], - [ - -124.0101557, - 44.8925243 - ], - [ - -124.0095572, - 44.8904374 - ], - [ - -124.009543, - 44.8883075 - ], - [ - -124.0101135, - 44.8862167 - ], - [ - -124.0112467, - 44.8842451 - ], - [ - -124.0128992, - 44.8824685 - ], - [ - -124.0136295, - 44.8818296 - ], - [ - -124.0145839, - 44.8808754 - ], - [ - -124.0163633, - 44.879437 - ], - [ - -124.0171931, - 44.8785002 - ], - [ - -124.0177881, - 44.8778258 - ], - [ - -124.0178006, - 44.8776579 - ], - [ - -124.018251, - 44.8755522 - ], - [ - -124.0192705, - 44.8735495 - ], - [ - -124.0208198, - 44.8717267 - ], - [ - -124.0228393, - 44.8701538 - ], - [ - -124.0252514, - 44.8688913 - ], - [ - -124.0279635, - 44.8679875 - ], - [ - -124.0308713, - 44.8674774 - ], - [ - -124.0338631, - 44.8673803 - ], - [ - -124.0368242, - 44.8677002 - ], - [ - -124.0396406, - 44.8684246 - ], - [ - -124.0422043, - 44.8695258 - ], - [ - -124.0444167, - 44.8709614 - ], - [ - -124.0461929, - 44.8726764 - ], - [ - -124.0474645, - 44.8746048 - ], - [ - -124.0481826, - 44.8766725 - ], - [ - -124.0483197, - 44.8788001 - ], - [ - -124.0481663, - 44.8808801 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16196_s_781958", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0725732, - 44.666517 - ], - [ - -124.0725814, - 44.6665359 - ], - [ - -124.0727136, - 44.6668378 - ], - [ - -124.072788, - 44.6670129 - ], - [ - -124.0729261, - 44.6673479 - ], - [ - -124.0729516, - 44.6674105 - ], - [ - -124.073061, - 44.667682 - ], - [ - -124.0737104, - 44.6692797 - ], - [ - -124.0739406, - 44.6698293 - ], - [ - -124.0742185, - 44.6704796 - ], - [ - -124.0748138, - 44.6718725 - ], - [ - -124.0754005, - 44.6739608 - ], - [ - -124.075405, - 44.6760907 - ], - [ - -124.074827, - 44.6781803 - ], - [ - -124.0736887, - 44.6801493 - ], - [ - -124.0720338, - 44.681922 - ], - [ - -124.0699258, - 44.6834303 - ], - [ - -124.0674458, - 44.6846161 - ], - [ - -124.0646891, - 44.6854339 - ], - [ - -124.0617617, - 44.6858523 - ], - [ - -124.0587761, - 44.6858551 - ], - [ - -124.0558472, - 44.6854422 - ], - [ - -124.0530875, - 44.6846296 - ], - [ - -124.0506031, - 44.6834484 - ], - [ - -124.0484896, - 44.6819441 - ], - [ - -124.0468281, - 44.6801745 - ], - [ - -124.0456826, - 44.6782077 - ], - [ - -124.0450879, - 44.6768146 - ], - [ - -124.044798, - 44.6761354 - ], - [ - -124.0447738, - 44.6760782 - ], - [ - -124.0445139, - 44.6754572 - ], - [ - -124.0444787, - 44.6753717 - ], - [ - -124.0438081, - 44.6737196 - ], - [ - -124.0437988, - 44.6736967 - ], - [ - -124.0436975, - 44.673445 - ], - [ - -124.0436086, - 44.673229 - ], - [ - -124.0435098, - 44.6730033 - ], - [ - -124.0435002, - 44.6729812 - ], - [ - -124.0434472, - 44.6728592 - ], - [ - -124.0433544, - 44.6726155 - ], - [ - -124.0433321, - 44.6725702 - ], - [ - -124.0430503, - 44.6719383 - ], - [ - -124.0429416, - 44.6716662 - ], - [ - -124.0428572, - 44.6714801 - ], - [ - -124.0426781, - 44.6710563 - ], - [ - -124.0425511, - 44.670732 - ], - [ - -124.0425009, - 44.6706321 - ], - [ - -124.0423721, - 44.6702713 - ], - [ - -124.0423563, - 44.6702748 - ], - [ - -124.0422745, - 44.6700853 - ], - [ - -124.0422392, - 44.6700075 - ], - [ - -124.0421031, - 44.6696909 - ], - [ - -124.0418023, - 44.6689518 - ], - [ - -124.0415285, - 44.6683339 - ], - [ - -124.041495, - 44.6682573 - ], - [ - -124.0407474, - 44.6665252 - ], - [ - -124.0406785, - 44.6663609 - ], - [ - -124.0403553, - 44.6655679 - ], - [ - -124.04027, - 44.6653704 - ], - [ - -124.0396738, - 44.6632834 - ], - [ - -124.0396596, - 44.6611535 - ], - [ - -124.0402278, - 44.6590626 - ], - [ - -124.0413567, - 44.6570909 - ], - [ - -124.0430026, - 44.6553143 - ], - [ - -124.0451024, - 44.653801 - ], - [ - -124.0475754, - 44.6526091 - ], - [ - -124.0503266, - 44.6517844 - ], - [ - -124.0532502, - 44.6513587 - ], - [ - -124.056234, - 44.6513481 - ], - [ - -124.0591633, - 44.6517532 - ], - [ - -124.0619258, - 44.6525585 - ], - [ - -124.0644151, - 44.6537328 - ], - [ - -124.0665358, - 44.6552312 - ], - [ - -124.0682063, - 44.6569961 - ], - [ - -124.0693624, - 44.6589597 - ], - [ - -124.0694844, - 44.6592417 - ], - [ - -124.0695557, - 44.6594113 - ], - [ - -124.0698803, - 44.6602069 - ], - [ - -124.0705768, - 44.6618185 - ], - [ - -124.070888, - 44.6625203 - ], - [ - -124.0709922, - 44.6627653 - ], - [ - -124.0712793, - 44.6634699 - ], - [ - -124.071342, - 44.6636114 - ], - [ - -124.0714561, - 44.6638754 - ], - [ - -124.0714695, - 44.663923 - ], - [ - -124.0717292, - 44.6645039 - ], - [ - -124.0719208, - 44.6649927 - ], - [ - -124.0719932, - 44.665152 - ], - [ - -124.0721511, - 44.6655219 - ], - [ - -124.0722067, - 44.6656608 - ], - [ - -124.0722122, - 44.665672 - ], - [ - -124.0723089, - 44.665874 - ], - [ - -124.0723779, - 44.666023 - ], - [ - -124.0725732, - 44.666517 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16197_s_16202", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.077647, - 44.8144593 - ], - [ - -124.077795, - 44.8149742 - ], - [ - -124.0781042, - 44.8170927 - ], - [ - -124.0778269, - 44.8192133 - ], - [ - -124.0769736, - 44.8212548 - ], - [ - -124.0755771, - 44.8231385 - ], - [ - -124.0736909, - 44.8247921 - ], - [ - -124.0713875, - 44.8261519 - ], - [ - -124.0687555, - 44.8271658 - ], - [ - -124.0658961, - 44.8277948 - ], - [ - -124.0629192, - 44.8280146 - ], - [ - -124.0599392, - 44.8278168 - ], - [ - -124.0570707, - 44.827209 - ], - [ - -124.0544241, - 44.8262146 - ], - [ - -124.052101, - 44.8248718 - ], - [ - -124.0501908, - 44.8232322 - ], - [ - -124.0487669, - 44.8213589 - ], - [ - -124.0478839, - 44.8193238 - ], - [ - -124.0475741, - 44.8182438 - ], - [ - -124.0473834, - 44.8174171 - ], - [ - -124.0472536, - 44.8166771 - ], - [ - -124.0471466, - 44.8157357 - ], - [ - -124.0471167, - 44.8151657 - ], - [ - -124.04711, - 44.8145155 - ], - [ - -124.0471397, - 44.8135796 - ], - [ - -124.0470842, - 44.8125629 - ], - [ - -124.0470685, - 44.8124745 - ], - [ - -124.0470048, - 44.8122087 - ], - [ - -124.0470117, - 44.8122078 - ], - [ - -124.046761, - 44.8114612 - ], - [ - -124.0466007, - 44.8105703 - ], - [ - -124.0459234, - 44.8077281 - ], - [ - -124.0457152, - 44.8062347 - ], - [ - -124.0456825, - 44.8054533 - ], - [ - -124.0457954, - 44.8037715 - ], - [ - -124.0459276, - 44.8030245 - ], - [ - -124.0465907, - 44.8009476 - ], - [ - -124.04781, - 44.7990027 - ], - [ - -124.0495388, - 44.7972645 - ], - [ - -124.0517105, - 44.7957998 - ], - [ - -124.0542417, - 44.7946649 - ], - [ - -124.0570351, - 44.7939033 - ], - [ - -124.0599835, - 44.7935443 - ], - [ - -124.0629735, - 44.7936018 - ], - [ - -124.0658904, - 44.7940734 - ], - [ - -124.0686222, - 44.7949411 - ], - [ - -124.0710638, - 44.7961715 - ], - [ - -124.0731214, - 44.7977174 - ], - [ - -124.0747161, - 44.7995194 - ], - [ - -124.0757864, - 44.8015082 - ], - [ - -124.0762913, - 44.8036076 - ], - [ - -124.0762381, - 44.8050216 - ], - [ - -124.0767464, - 44.8071499 - ], - [ - -124.0768379, - 44.8075868 - ], - [ - -124.0769319, - 44.8081073 - ], - [ - -124.0770942, - 44.8085494 - ], - [ - -124.0772144, - 44.8090493 - ], - [ - -124.0773124, - 44.8095192 - ], - [ - -124.0774526, - 44.8103092 - ], - [ - -124.0775612, - 44.8112444 - ], - [ - -124.0776617, - 44.8130644 - ], - [ - -124.0776697, - 44.8137325 - ], - [ - -124.077647, - 44.8144593 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16200_s_2456760", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0682463, - 44.6483062 - ], - [ - -124.0682488, - 44.6484308 - ], - [ - -124.0682469, - 44.6486498 - ], - [ - -124.0682467, - 44.6486736 - ], - [ - -124.0682427, - 44.6490016 - ], - [ - -124.0682419, - 44.6490709 - ], - [ - -124.0682423, - 44.6491136 - ], - [ - -124.0682465, - 44.6499656 - ], - [ - -124.0682465, - 44.6500464 - ], - [ - -124.0682431, - 44.6506613 - ], - [ - -124.067939, - 44.6527802 - ], - [ - -124.0670617, - 44.6548159 - ], - [ - -124.0656447, - 44.6566904 - ], - [ - -124.0637425, - 44.6583315 - ], - [ - -124.0614282, - 44.6596762 - ], - [ - -124.0587907, - 44.6606727 - ], - [ - -124.0559314, - 44.6612828 - ], - [ - -124.0529603, - 44.6614829 - ], - [ - -124.0499915, - 44.6612654 - ], - [ - -124.0471393, - 44.6606387 - ], - [ - -124.0445133, - 44.6596269 - ], - [ - -124.0422145, - 44.6582687 - ], - [ - -124.0403311, - 44.6566166 - ], - [ - -124.0389356, - 44.6547339 - ], - [ - -124.0380816, - 44.6526931 - ], - [ - -124.0378018, - 44.6505725 - ], - [ - -124.0378053, - 44.6500005 - ], - [ - -124.0378007, - 44.6491085 - ], - [ - -124.0378013, - 44.64897 - ], - [ - -124.0378033, - 44.6488112 - ], - [ - -124.0378066, - 44.6485456 - ], - [ - -124.0378059, - 44.6483278 - ], - [ - -124.037806, - 44.6482482 - ], - [ - -124.0378122, - 44.6473498 - ], - [ - -124.0378247, - 44.6455133 - ], - [ - -124.0378257, - 44.6453723 - ], - [ - -124.0378299, - 44.6446598 - ], - [ - -124.0378302, - 44.6446213 - ], - [ - -124.0378311, - 44.6445416 - ], - [ - -124.0378351, - 44.6439499 - ], - [ - -124.0378353, - 44.6439341 - ], - [ - -124.0378371, - 44.6437217 - ], - [ - -124.0378381, - 44.6434604 - ], - [ - -124.0378384, - 44.6434175 - ], - [ - -124.0378404, - 44.6432056 - ], - [ - -124.0378413, - 44.6430835 - ], - [ - -124.0378423, - 44.6428263 - ], - [ - -124.0378425, - 44.6427906 - ], - [ - -124.0378445, - 44.6425588 - ], - [ - -124.0378486, - 44.641894 - ], - [ - -124.0378489, - 44.6418592 - ], - [ - -124.0378498, - 44.6417764 - ], - [ - -124.0378543, - 44.6411658 - ], - [ - -124.0373114, - 44.6399498 - ], - [ - -124.0369766, - 44.6378397 - ], - [ - -124.0369694, - 44.637493 - ], - [ - -124.0372175, - 44.6353704 - ], - [ - -124.0380407, - 44.6333232 - ], - [ - -124.0394074, - 44.63143 - ], - [ - -124.041265, - 44.6297635 - ], - [ - -124.043542, - 44.6283878 - ], - [ - -124.0461511, - 44.6273557 - ], - [ - -124.0489919, - 44.6267068 - ], - [ - -124.0519554, - 44.6264661 - ], - [ - -124.0549276, - 44.6266429 - ], - [ - -124.0577946, - 44.6272302 - ], - [ - -124.0587936, - 44.6275977 - ], - [ - -124.0588202, - 44.6276034 - ], - [ - -124.0593288, - 44.6277946 - ], - [ - -124.060446, - 44.6282056 - ], - [ - -124.060494, - 44.6282329 - ], - [ - -124.0614827, - 44.6286047 - ], - [ - -124.0638172, - 44.6299606 - ], - [ - -124.0657325, - 44.6316181 - ], - [ - -124.0671536, - 44.6335123 - ], - [ - -124.0680249, - 44.6355691 - ], - [ - -124.0683123, - 44.6377082 - ], - [ - -124.0683104, - 44.6381042 - ], - [ - -124.0683102, - 44.6381355 - ], - [ - -124.0683085, - 44.6383202 - ], - [ - -124.0683085, - 44.638352 - ], - [ - -124.0683083, - 44.6384109 - ], - [ - -124.0683045, - 44.6389342 - ], - [ - -124.0682997, - 44.6396826 - ], - [ - -124.068296, - 44.6401893 - ], - [ - -124.0682961, - 44.640386 - ], - [ - -124.0682959, - 44.640438 - ], - [ - -124.0682911, - 44.641183 - ], - [ - -124.0682863, - 44.6418964 - ], - [ - -124.0682815, - 44.6426644 - ], - [ - -124.0682814, - 44.6426784 - ], - [ - -124.0682796, - 44.6429015 - ], - [ - -124.0682787, - 44.6431537 - ], - [ - -124.0682786, - 44.6431792 - ], - [ - -124.0682776, - 44.6433222 - ], - [ - -124.0682775, - 44.6433385 - ], - [ - -124.0682758, - 44.643537 - ], - [ - -124.0682749, - 44.6437966 - ], - [ - -124.0682747, - 44.6438359 - ], - [ - -124.0682728, - 44.64406 - ], - [ - -124.068269, - 44.6446543 - ], - [ - -124.0682681, - 44.6448365 - ], - [ - -124.0682642, - 44.6454705 - ], - [ - -124.0682633, - 44.6456164 - ], - [ - -124.0682517, - 44.6474517 - ], - [ - -124.0682463, - 44.6483062 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16201_s_16197", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0865689, - 44.7764508 - ], - [ - -124.0866164, - 44.7765107 - ], - [ - -124.0869665, - 44.7771107 - ], - [ - -124.0879917, - 44.7797954 - ], - [ - -124.0880518, - 44.7801054 - ], - [ - -124.0881932, - 44.7817609 - ], - [ - -124.0881833, - 44.7822109 - ], - [ - -124.0879495, - 44.7839435 - ], - [ - -124.0878895, - 44.7841835 - ], - [ - -124.0875369, - 44.7852691 - ], - [ - -124.0863076, - 44.7883293 - ], - [ - -124.0846427, - 44.7910236 - ], - [ - -124.0841428, - 44.7916037 - ], - [ - -124.0819104, - 44.7936154 - ], - [ - -124.0816004, - 44.7938354 - ], - [ - -124.0805556, - 44.7944837 - ], - [ - -124.0804535, - 44.7961071 - ], - [ - -124.0804406, - 44.7962808 - ], - [ - -124.0803808, - 44.7969808 - ], - [ - -124.0802285, - 44.7979868 - ], - [ - -124.0801087, - 44.7985368 - ], - [ - -124.0798279, - 44.799522 - ], - [ - -124.0795381, - 44.8003421 - ], - [ - -124.0789121, - 44.8017185 - ], - [ - -124.0769871, - 44.8051519 - ], - [ - -124.0763774, - 44.806303 - ], - [ - -124.0762787, - 44.8064844 - ], - [ - -124.0752107, - 44.808396 - ], - [ - -124.0738379, - 44.8102884 - ], - [ - -124.0719726, - 44.8119537 - ], - [ - -124.0696867, - 44.813328 - ], - [ - -124.067068, - 44.8143584 - ], - [ - -124.064217, - 44.8150052 - ], - [ - -124.0612436, - 44.8152437 - ], - [ - -124.0582619, - 44.8150646 - ], - [ - -124.0553867, - 44.8144748 - ], - [ - -124.0527285, - 44.813497 - ], - [ - -124.0503894, - 44.8121688 - ], - [ - -124.0484594, - 44.8105413 - ], - [ - -124.0470126, - 44.808677 - ], - [ - -124.0461046, - 44.8066475 - ], - [ - -124.0457703, - 44.804531 - ], - [ - -124.0460224, - 44.8024087 - ], - [ - -124.0468512, - 44.8003622 - ], - [ - -124.0478694, - 44.7985412 - ], - [ - -124.0484831, - 44.7973837 - ], - [ - -124.0485891, - 44.7971895 - ], - [ - -124.0499951, - 44.794684 - ], - [ - -124.0503885, - 44.7884809 - ], - [ - -124.0504979, - 44.7875834 - ], - [ - -124.0506281, - 44.7868634 - ], - [ - -124.0515981, - 44.7842091 - ], - [ - -124.0517782, - 44.7838891 - ], - [ - -124.053977, - 44.7811877 - ], - [ - -124.054377, - 44.7808277 - ], - [ - -124.0552879, - 44.7801589 - ], - [ - -124.0552783, - 44.780133 - ], - [ - -124.0552183, - 44.7798429 - ], - [ - -124.0551817, - 44.7796543 - ], - [ - -124.0551218, - 44.7793243 - ], - [ - -124.0550593, - 44.776941 - ], - [ - -124.0551094, - 44.776551 - ], - [ - -124.0552286, - 44.7760074 - ], - [ - -124.0551491, - 44.7759338 - ], - [ - -124.0544991, - 44.7753037 - ], - [ - -124.0537073, - 44.7744554 - ], - [ - -124.0523275, - 44.7728152 - ], - [ - -124.0517022, - 44.7719936 - ], - [ - -124.0495727, - 44.7688833 - ], - [ - -124.0493027, - 44.7684669 - ], - [ - -124.0491128, - 44.7681569 - ], - [ - -124.0485192, - 44.7670183 - ], - [ - -124.0482893, - 44.7664882 - ], - [ - -124.0478419, - 44.7647187 - ], - [ - -124.0475236, - 44.7643804 - ], - [ - -124.0456899, - 44.7616939 - ], - [ - -124.0456469, - 44.7615998 - ], - [ - -124.0447677, - 44.7611106 - ], - [ - -124.0438177, - 44.7605405 - ], - [ - -124.0422529, - 44.759456 - ], - [ - -124.0418529, - 44.7591359 - ], - [ - -124.0410671, - 44.7584533 - ], - [ - -124.0401672, - 44.7576032 - ], - [ - -124.0385899, - 44.7557558 - ], - [ - -124.03822, - 44.7552058 - ], - [ - -124.0376066, - 44.7541557 - ], - [ - -124.0372667, - 44.7534757 - ], - [ - -124.0366491, - 44.7518512 - ], - [ - -124.0364393, - 44.7510611 - ], - [ - -124.0361919, - 44.749576 - ], - [ - -124.0361421, - 44.748856 - ], - [ - -124.0362232, - 44.7470812 - ], - [ - -124.0363634, - 44.7462112 - ], - [ - -124.0366901, - 44.7448997 - ], - [ - -124.0369003, - 44.7442797 - ], - [ - -124.0376076, - 44.7427197 - ], - [ - -124.0380378, - 44.7419697 - ], - [ - -124.0385787, - 44.7411303 - ], - [ - -124.0388588, - 44.7407404 - ], - [ - -124.03983, - 44.7395738 - ], - [ - -124.0402601, - 44.7391238 - ], - [ - -124.0408598, - 44.7385393 - ], - [ - -124.0409915, - 44.7384195 - ], - [ - -124.041289, - 44.7351565 - ], - [ - -124.0413201, - 44.7348725 - ], - [ - -124.041761, - 44.7314325 - ], - [ - -124.041788, - 44.7312406 - ], - [ - -124.0418767, - 44.7306619 - ], - [ - -124.0419353, - 44.7294567 - ], - [ - -124.0419707, - 44.7290023 - ], - [ - -124.042095, - 44.7278463 - ], - [ - -124.0421541, - 44.7274112 - ], - [ - -124.0423121, - 44.7264505 - ], - [ - -124.0424701, - 44.7257108 - ], - [ - -124.0429112, - 44.7240362 - ], - [ - -124.0437476, - 44.7219914 - ], - [ - -124.0451273, - 44.7201023 - ], - [ - -124.0469974, - 44.7184414 - ], - [ - -124.0492859, - 44.7170724 - ], - [ - -124.051905, - 44.7160481 - ], - [ - -124.0547539, - 44.7154076 - ], - [ - -124.0577232, - 44.7151757 - ], - [ - -124.060699, - 44.7153612 - ], - [ - -124.0635668, - 44.7159571 - ], - [ - -124.0662166, - 44.7169403 - ], - [ - -124.0685466, - 44.7182732 - ], - [ - -124.0704672, - 44.7199046 - ], - [ - -124.0719047, - 44.7217717 - ], - [ - -124.0728036, - 44.7238029 - ], - [ - -124.0731295, - 44.72592 - ], - [ - -124.0728698, - 44.7280419 - ], - [ - -124.0725263, - 44.7293487 - ], - [ - -124.0724654, - 44.7297206 - ], - [ - -124.0723893, - 44.7304316 - ], - [ - -124.072323, - 44.7318127 - ], - [ - -124.0722423, - 44.7326174 - ], - [ - -124.0721072, - 44.7335015 - ], - [ - -124.0716985, - 44.7367036 - ], - [ - -124.0713823, - 44.7401915 - ], - [ - -124.0713089, - 44.7407646 - ], - [ - -124.0709595, - 44.7428746 - ], - [ - -124.0702685, - 44.7450661 - ], - [ - -124.0696688, - 44.7463361 - ], - [ - -124.06931, - 44.7469053 - ], - [ - -124.0697804, - 44.7472059 - ], - [ - -124.0702204, - 44.7475259 - ], - [ - -124.0718776, - 44.7489573 - ], - [ - -124.0721876, - 44.7492773 - ], - [ - -124.0738516, - 44.7515133 - ], - [ - -124.0740917, - 44.7519533 - ], - [ - -124.0746425, - 44.7533357 - ], - [ - -124.0755678, - 44.7541364 - ], - [ - -124.0758178, - 44.7544064 - ], - [ - -124.0775854, - 44.7570165 - ], - [ - -124.0776954, - 44.7572565 - ], - [ - -124.0782596, - 44.7589215 - ], - [ - -124.0784496, - 44.760629 - ], - [ - -124.0784497, - 44.761219 - ], - [ - -124.0784161, - 44.7614438 - ], - [ - -124.0788276, - 44.7620444 - ], - [ - -124.0795021, - 44.7628458 - ], - [ - -124.0795267, - 44.7628697 - ], - [ - -124.0823235, - 44.7653408 - ], - [ - -124.0834486, - 44.7664765 - ], - [ - -124.0840087, - 44.7671264 - ], - [ - -124.0851363, - 44.7687131 - ], - [ - -124.0854164, - 44.7692031 - ], - [ - -124.0860442, - 44.7705455 - ], - [ - -124.0863644, - 44.7714154 - ], - [ - -124.0868625, - 44.7742669 - ], - [ - -124.0868527, - 44.7750569 - ], - [ - -124.0865689, - 44.7764508 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16202_s_16203", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0806091, - 44.823678 - ], - [ - -124.0809131, - 44.8249745 - ], - [ - -124.0810032, - 44.8255845 - ], - [ - -124.0808297, - 44.828707 - ], - [ - -124.0806599, - 44.829357 - ], - [ - -124.0793023, - 44.8322341 - ], - [ - -124.0791123, - 44.8325041 - ], - [ - -124.0777775, - 44.8340599 - ], - [ - -124.0774275, - 44.8343999 - ], - [ - -124.0753108, - 44.8360641 - ], - [ - -124.0749508, - 44.8362941 - ], - [ - -124.0722321, - 44.8376808 - ], - [ - -124.0719821, - 44.8377808 - ], - [ - -124.0687059, - 44.8387544 - ], - [ - -124.0683812, - 44.8388206 - ], - [ - -124.0617821, - 44.84802 - ], - [ - -124.0612941, - 44.8485797 - ], - [ - -124.0603266, - 44.8502554 - ], - [ - -124.058414, - 44.8537716 - ], - [ - -124.0570649, - 44.8556731 - ], - [ - -124.0552201, - 44.8573507 - ], - [ - -124.0529505, - 44.8587401 - ], - [ - -124.0503433, - 44.8597878 - ], - [ - -124.0474988, - 44.8604535 - ], - [ - -124.0445263, - 44.8607117 - ], - [ - -124.04154, - 44.8605524 - ], - [ - -124.0386549, - 44.8599818 - ], - [ - -124.0359818, - 44.8590217 - ], - [ - -124.0336236, - 44.8577091 - ], - [ - -124.0316708, - 44.8560945 - ], - [ - -124.0301985, - 44.8542398 - ], - [ - -124.0292632, - 44.8522166 - ], - [ - -124.0289009, - 44.8501023 - ], - [ - -124.0291254, - 44.8479785 - ], - [ - -124.0299279, - 44.8459266 - ], - [ - -124.0318987, - 44.8423068 - ], - [ - -124.0320149, - 44.8420997 - ], - [ - -124.0333554, - 44.8397798 - ], - [ - -124.0339227, - 44.8389094 - ], - [ - -124.0344329, - 44.8382094 - ], - [ - -124.0349529, - 44.8376192 - ], - [ - -124.0437525, - 44.8253595 - ], - [ - -124.0444941, - 44.8244397 - ], - [ - -124.0447642, - 44.8241397 - ], - [ - -124.0458889, - 44.8230469 - ], - [ - -124.0464389, - 44.8225769 - ], - [ - -124.0484841, - 44.8212007 - ], - [ - -124.0479618, - 44.8195797 - ], - [ - -124.047582, - 44.8174671 - ], - [ - -124.0477885, - 44.8153423 - ], - [ - -124.0485734, - 44.813287 - ], - [ - -124.0499065, - 44.8113802 - ], - [ - -124.0517364, - 44.8096951 - ], - [ - -124.0539929, - 44.8082965 - ], - [ - -124.0565893, - 44.8072381 - ], - [ - -124.0594257, - 44.8065606 - ], - [ - -124.0623932, - 44.8062899 - ], - [ - -124.0653779, - 44.8064365 - ], - [ - -124.0682652, - 44.8069947 - ], - [ - -124.070944, - 44.8079432 - ], - [ - -124.0733116, - 44.8092454 - ], - [ - -124.0752769, - 44.8108513 - ], - [ - -124.0767644, - 44.8126993 - ], - [ - -124.0777169, - 44.8147184 - ], - [ - -124.0806091, - 44.823678 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16203_s_16195", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0515377, - 44.8662919 - ], - [ - -124.0514476, - 44.8666115 - ], - [ - -124.0514396, - 44.8666289 - ], - [ - -124.051215, - 44.867402 - ], - [ - -124.049096, - 44.8750363 - ], - [ - -124.0491452, - 44.876153 - ], - [ - -124.0491253, - 44.876363 - ], - [ - -124.0485527, - 44.8786636 - ], - [ - -124.0483728, - 44.8791036 - ], - [ - -124.0481705, - 44.8795063 - ], - [ - -124.0478594, - 44.8809364 - ], - [ - -124.0468326, - 44.8829372 - ], - [ - -124.0452764, - 44.8847572 - ], - [ - -124.0432506, - 44.8863263 - ], - [ - -124.040833, - 44.8875842 - ], - [ - -124.0381166, - 44.8884827 - ], - [ - -124.0352057, - 44.888987 - ], - [ - -124.0322124, - 44.8890779 - ], - [ - -124.0292516, - 44.8887519 - ], - [ - -124.0264372, - 44.8880214 - ], - [ - -124.0238775, - 44.8869146 - ], - [ - -124.0216708, - 44.885474 - ], - [ - -124.019902, - 44.883755 - ], - [ - -124.018639, - 44.8818237 - ], - [ - -124.0179302, - 44.8797543 - ], - [ - -124.017803, - 44.8776264 - ], - [ - -124.0178531, - 44.8769864 - ], - [ - -124.01803, - 44.8758364 - ], - [ - -124.0181416, - 44.8753515 - ], - [ - -124.0181403, - 44.8753407 - ], - [ - -124.0184304, - 44.873293 - ], - [ - -124.0212529, - 44.8631434 - ], - [ - -124.0212798, - 44.8630488 - ], - [ - -124.0216902, - 44.8616388 - ], - [ - -124.022124, - 44.8604766 - ], - [ - -124.0223941, - 44.8598867 - ], - [ - -124.0224415, - 44.8598977 - ], - [ - -124.0227226, - 44.8590338 - ], - [ - -124.0299454, - 44.8458947 - ], - [ - -124.0313036, - 44.8439966 - ], - [ - -124.033156, - 44.8423235 - ], - [ - -124.0354316, - 44.8409396 - ], - [ - -124.0380429, - 44.839898 - ], - [ - -124.0408894, - 44.8392389 - ], - [ - -124.043862, - 44.8389875 - ], - [ - -124.0468464, - 44.8391534 - ], - [ - -124.049728, - 44.8397304 - ], - [ - -124.0523962, - 44.8406961 - ], - [ - -124.0547483, - 44.8420136 - ], - [ - -124.0566941, - 44.8436322 - ], - [ - -124.0581587, - 44.8454898 - ], - [ - -124.0590859, - 44.8475149 - ], - [ - -124.05944, - 44.8496298 - ], - [ - -124.0592072, - 44.8517532 - ], - [ - -124.0583965, - 44.8538035 - ], - [ - -124.0515377, - 44.8662919 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16204_s_16205", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0323668, - 44.8994513 - ], - [ - -124.0312294, - 44.9002327 - ], - [ - -124.0305994, - 44.9006228 - ], - [ - -124.0282906, - 44.9018028 - ], - [ - -124.0276906, - 44.9020528 - ], - [ - -124.0258684, - 44.9027002 - ], - [ - -124.0249283, - 44.9029803 - ], - [ - -124.0236628, - 44.9033114 - ], - [ - -124.0223384, - 44.9036115 - ], - [ - -124.0219288, - 44.905839 - ], - [ - -124.0218863, - 44.9060534 - ], - [ - -124.0207598, - 44.911354 - ], - [ - -124.0217353, - 44.9122384 - ], - [ - -124.0233442, - 44.9140354 - ], - [ - -124.0244289, - 44.9160209 - ], - [ - -124.0249477, - 44.9181186 - ], - [ - -124.0248805, - 44.9202479 - ], - [ - -124.0242299, - 44.922327 - ], - [ - -124.0230209, - 44.9242759 - ], - [ - -124.0212998, - 44.9260198 - ], - [ - -124.0191327, - 44.9274916 - ], - [ - -124.016603, - 44.9286348 - ], - [ - -124.0138079, - 44.9294053 - ], - [ - -124.0108549, - 44.9297736 - ], - [ - -124.0078574, - 44.9297255 - ], - [ - -124.0049308, - 44.9292628 - ], - [ - -124.0021875, - 44.9284034 - ], - [ - -123.9997331, - 44.9271802 - ], - [ - -123.9976619, - 44.9256403 - ], - [ - -123.9944421, - 44.92272 - ], - [ - -123.9941112, - 44.9224085 - ], - [ - -123.9932313, - 44.9215484 - ], - [ - -123.991453, - 44.9192834 - ], - [ - -123.9910431, - 44.9185734 - ], - [ - -123.9904814, - 44.9174194 - ], - [ - -123.9903615, - 44.9171194 - ], - [ - -123.9900584, - 44.916216 - ], - [ - -123.9899685, - 44.915886 - ], - [ - -123.9897313, - 44.914621 - ], - [ - -123.9896814, - 44.914141 - ], - [ - -123.9896546, - 44.9128643 - ], - [ - -123.9896948, - 44.9122143 - ], - [ - -123.9899814, - 44.9105446 - ], - [ - -123.9900782, - 44.9102034 - ], - [ - -123.9916317, - 44.9029116 - ], - [ - -123.9925433, - 44.8979691 - ], - [ - -123.9926522, - 44.897469 - ], - [ - -123.9931527, - 44.895479 - ], - [ - -123.9934057, - 44.894658 - ], - [ - -123.9935958, - 44.894138 - ], - [ - -123.9942884, - 44.8926781 - ], - [ - -123.9945885, - 44.8921681 - ], - [ - -123.9960452, - 44.8902563 - ], - [ - -123.9966853, - 44.8895864 - ], - [ - -123.9992381, - 44.8875304 - ], - [ - -124.000038, - 44.8870305 - ], - [ - -124.00182, - 44.8860715 - ], - [ - -124.00258, - 44.8857216 - ], - [ - -124.005227, - 44.8847486 - ], - [ - -124.0058969, - 44.8845587 - ], - [ - -124.0069201, - 44.8842981 - ], - [ - -124.0119418, - 44.8831605 - ], - [ - -124.0135861, - 44.8819079 - ], - [ - -124.0158348, - 44.8805007 - ], - [ - -124.0184263, - 44.8794323 - ], - [ - -124.0212611, - 44.8787439 - ], - [ - -124.0242303, - 44.8784619 - ], - [ - -124.0272198, - 44.878597 - ], - [ - -124.0301149, - 44.8791441 - ], - [ - -124.0328042, - 44.8800823 - ], - [ - -124.0351846, - 44.8813754 - ], - [ - -124.0371645, - 44.8829737 - ], - [ - -124.0386679, - 44.884816 - ], - [ - -124.039637, - 44.8868313 - ], - [ - -124.0400344, - 44.8889423 - ], - [ - -124.0398448, - 44.8910679 - ], - [ - -124.0390755, - 44.8931264 - ], - [ - -124.0377559, - 44.8950385 - ], - [ - -124.0359368, - 44.896731 - ], - [ - -124.0323668, - 44.8994513 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16205_s_16089", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0296807, - 44.9248022 - ], - [ - -124.0300472, - 44.9253892 - ], - [ - -124.0307047, - 44.9274672 - ], - [ - -124.030779, - 44.9295964 - ], - [ - -124.0302671, - 44.9316949 - ], - [ - -124.0291886, - 44.9336822 - ], - [ - -124.027585, - 44.9354818 - ], - [ - -124.0255178, - 44.9370246 - ], - [ - -124.0230664, - 44.9382513 - ], - [ - -124.0203252, - 44.9391146 - ], - [ - -124.0173994, - 44.9395815 - ], - [ - -124.0144015, - 44.9396339 - ], - [ - -124.0114469, - 44.9392698 - ], - [ - -124.0086492, - 44.9385032 - ], - [ - -124.0061158, - 44.9373637 - ], - [ - -124.0049997, - 44.9367449 - ], - [ - -124.0023794, - 44.9348889 - ], - [ - -124.0021695, - 44.9346988 - ], - [ - -124.0011522, - 44.9336588 - ], - [ - -124.0008423, - 44.9332987 - ], - [ - -123.9997259, - 44.931729 - ], - [ - -123.9989807, - 44.930052 - ], - [ - -123.9987908, - 44.9294619 - ], - [ - -123.9984492, - 44.9278545 - ], - [ - -123.9984491, - 44.9263197 - ], - [ - -123.9979464, - 44.9258906 - ], - [ - -123.9962637, - 44.9241278 - ], - [ - -123.9950976, - 44.9221658 - ], - [ - -123.9944927, - 44.9200797 - ], - [ - -123.9944722, - 44.9179499 - ], - [ - -123.9950369, - 44.9158582 - ], - [ - -123.996165, - 44.913885 - ], - [ - -123.9978131, - 44.912106 - ], - [ - -123.9999179, - 44.9105896 - ], - [ - -124.0023984, - 44.9093942 - ], - [ - -124.0051594, - 44.9085655 - ], - [ - -124.0080948, - 44.9081354 - ], - [ - -124.0110918, - 44.9081205 - ], - [ - -124.0140354, - 44.9085212 - ], - [ - -124.0168124, - 44.9093223 - ], - [ - -124.0193163, - 44.910493 - ], - [ - -124.0214508, - 44.9119882 - ], - [ - -124.021877, - 44.9123519 - ], - [ - -124.0235903, - 44.9133423 - ], - [ - -124.0252294, - 44.914442 - ], - [ - -124.0254994, - 44.914652 - ], - [ - -124.0277631, - 44.9169486 - ], - [ - -124.0280132, - 44.9172886 - ], - [ - -124.0292748, - 44.9196269 - ], - [ - -124.0293649, - 44.9198769 - ], - [ - -124.0298156, - 44.9219269 - ], - [ - -124.0298457, - 44.9222869 - ], - [ - -124.0298471, - 44.923558 - ], - [ - -124.0298072, - 44.924048 - ], - [ - -124.0296807, - 44.9248022 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16210_s_16214", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9990044, - 45.0082304 - ], - [ - -123.9990288, - 45.0082443 - ], - [ - -123.9990028, - 45.0082673 - ], - [ - -123.9989141, - 45.0083508 - ], - [ - -123.9988898, - 45.0083736 - ], - [ - -123.9980773, - 45.0091335 - ], - [ - -123.9967965, - 45.0103514 - ], - [ - -123.9966466, - 45.0104915 - ], - [ - -123.9962136, - 45.0108896 - ], - [ - -123.9960636, - 45.0110252 - ], - [ - -123.9959097, - 45.0111622 - ], - [ - -123.9950494, - 45.0118638 - ], - [ - -123.9949104, - 45.0119679 - ], - [ - -123.9944775, - 45.012279 - ], - [ - -123.9943225, - 45.012386 - ], - [ - -123.9942089, - 45.0124596 - ], - [ - -123.9942135, - 45.0129664 - ], - [ - -123.9942066, - 45.0131194 - ], - [ - -123.9940652, - 45.0142824 - ], - [ - -123.9940373, - 45.0144234 - ], - [ - -123.9937953, - 45.0153501 - ], - [ - -123.9937553, - 45.0154731 - ], - [ - -123.9935163, - 45.0161176 - ], - [ - -123.9934504, - 45.0162756 - ], - [ - -123.9933646, - 45.0164741 - ], - [ - -123.9932926, - 45.0166351 - ], - [ - -123.9926037, - 45.0178975 - ], - [ - -123.9924887, - 45.0180745 - ], - [ - -123.99176, - 45.0190602 - ], - [ - -123.991609, - 45.0192412 - ], - [ - -123.9912146, - 45.0196889 - ], - [ - -123.9910167, - 45.0199019 - ], - [ - -123.9905826, - 45.0203446 - ], - [ - -123.9903356, - 45.0205836 - ], - [ - -123.9898193, - 45.0210555 - ], - [ - -123.9896631, - 45.0211905 - ], - [ - -123.9894055, - 45.0218489 - ], - [ - -123.9888801, - 45.0229566 - ], - [ - -123.9887092, - 45.0232616 - ], - [ - -123.9882936, - 45.0239358 - ], - [ - -123.9881216, - 45.0241908 - ], - [ - -123.9868492, - 45.0257362 - ], - [ - -123.9866872, - 45.0259002 - ], - [ - -123.9859388, - 45.0265965 - ], - [ - -123.9857649, - 45.0267455 - ], - [ - -123.9850513, - 45.0273148 - ], - [ - -123.9848603, - 45.0274568 - ], - [ - -123.9833219, - 45.0284549 - ], - [ - -123.9830299, - 45.0286199 - ], - [ - -123.9810716, - 45.0295609 - ], - [ - -123.9807055, - 45.029709 - ], - [ - -123.978951, - 45.0303169 - ], - [ - -123.978636, - 45.0304089 - ], - [ - -123.9764887, - 45.0309082 - ], - [ - -123.9761247, - 45.0309722 - ], - [ - -123.9748284, - 45.0311584 - ], - [ - -123.9744623, - 45.0311994 - ], - [ - -123.9714886, - 45.0313246 - ], - [ - -123.9711926, - 45.0313166 - ], - [ - -123.9702519, - 45.0312706 - ], - [ - -123.9698428, - 45.0312416 - ], - [ - -123.9680089, - 45.0310313 - ], - [ - -123.9677139, - 45.0309843 - ], - [ - -123.9673565, - 45.0309241 - ], - [ - -123.9672354, - 45.0309027 - ], - [ - -123.9671589, - 45.030891 - ], - [ - -123.9663245, - 45.0307824 - ], - [ - -123.9660923, - 45.0307427 - ], - [ - -123.9658013, - 45.0307441 - ], - [ - -123.9640046, - 45.0307597 - ], - [ - -123.9639, - 45.0307603 - ], - [ - -123.9623944, - 45.0307661 - ], - [ - -123.9578666, - 45.030808 - ], - [ - -123.957671, - 45.031001 - ], - [ - -123.9554969, - 45.0324457 - ], - [ - -123.9529694, - 45.0335648 - ], - [ - -123.9501842, - 45.0343157 - ], - [ - -123.9472467, - 45.0346701 - ], - [ - -123.9442679, - 45.0346145 - ], - [ - -123.9413607, - 45.0341512 - ], - [ - -123.9387175, - 45.0335332 - ], - [ - -123.9381047, - 45.0333939 - ], - [ - -123.9365569, - 45.0329753 - ], - [ - -123.9362048, - 45.0328642 - ], - [ - -123.9338025, - 45.0319151 - ], - [ - -123.9334445, - 45.0317421 - ], - [ - -123.9328888, - 45.0314256 - ], - [ - -123.9327035, - 45.0313472 - ], - [ - -123.9325578, - 45.0312848 - ], - [ - -123.9320968, - 45.0310847 - ], - [ - -123.9301217, - 45.030066 - ], - [ - -123.9284001, - 45.0288376 - ], - [ - -123.9281601, - 45.0286365 - ], - [ - -123.9277743, - 45.0282375 - ], - [ - -123.9277364, - 45.0282175 - ], - [ - -123.9262517, - 45.0273238 - ], - [ - -123.9259827, - 45.0271398 - ], - [ - -123.9250522, - 45.0264445 - ], - [ - -123.9247825, - 45.0262242 - ], - [ - -123.9247081, - 45.026204 - ], - [ - -123.9246755, - 45.0261951 - ], - [ - -123.9243314, - 45.0261011 - ], - [ - -123.9223561, - 45.0254432 - ], - [ - -123.9218851, - 45.0252562 - ], - [ - -123.9210886, - 45.0248654 - ], - [ - -123.9210216, - 45.0248544 - ], - [ - -123.9205316, - 45.0247714 - ], - [ - -123.918459, - 45.0243079 - ], - [ - -123.9181129, - 45.0242109 - ], - [ - -123.916586, - 45.0236058 - ], - [ - -123.9165349, - 45.0236034 - ], - [ - -123.9140138, - 45.0233331 - ], - [ - -123.9137528, - 45.0232891 - ], - [ - -123.9096119, - 45.0221181 - ], - [ - -123.9093978, - 45.0220301 - ], - [ - -123.9076169, - 45.0211738 - ], - [ - -123.9073639, - 45.0210328 - ], - [ - -123.9062111, - 45.0201848 - ], - [ - -123.9041152, - 45.0196509 - ], - [ - -123.9015415, - 45.0185536 - ], - [ - -123.8993191, - 45.0171212 - ], - [ - -123.8975336, - 45.0154088 - ], - [ - -123.8962534, - 45.0134823 - ], - [ - -123.8955278, - 45.0114156 - ], - [ - -123.8953845, - 45.0092881 - ], - [ - -123.8958291, - 45.0071818 - ], - [ - -123.8968444, - 45.0051774 - ], - [ - -123.8983912, - 45.003352 - ], - [ - -123.9004102, - 45.0017758 - ], - [ - -123.9028237, - 45.0005093 - ], - [ - -123.9055391, - 44.9996011 - ], - [ - -123.9084519, - 44.9990861 - ], - [ - -123.909151, - 44.9990623 - ], - [ - -123.9093801, - 44.9989924 - ], - [ - -123.9121365, - 44.9983627 - ], - [ - -123.9150107, - 44.9981125 - ], - [ - -123.9178999, - 44.9982505 - ], - [ - -123.9207008, - 44.9987719 - ], - [ - -123.9233134, - 44.999658 - ], - [ - -123.9256442, - 45.0008772 - ], - [ - -123.92761, - 45.0023859 - ], - [ - -123.9281193, - 45.0029664 - ], - [ - -123.9284765, - 45.0030544 - ], - [ - -123.9288855, - 45.0031994 - ], - [ - -123.9309185, - 45.0041691 - ], - [ - -123.931257, - 45.0042294 - ], - [ - -123.9315639, - 45.0042884 - ], - [ - -123.9342845, - 45.0050139 - ], - [ - -123.9345585, - 45.0051089 - ], - [ - -123.9373904, - 45.0063928 - ], - [ - -123.9379328, - 45.0065454 - ], - [ - -123.9387623, - 45.0067545 - ], - [ - -123.9401343, - 45.0071544 - ], - [ - -123.9405223, - 45.0072834 - ], - [ - -123.9419739, - 45.0078354 - ], - [ - -123.9423429, - 45.0079943 - ], - [ - -123.9440266, - 45.0088346 - ], - [ - -123.9441262, - 45.0088918 - ], - [ - -123.9464155, - 45.0085115 - ], - [ - -123.9466415, - 45.0084905 - ], - [ - -123.9482736, - 45.0084014 - ], - [ - -123.9485756, - 45.0083964 - ], - [ - -123.9496564, - 45.0084056 - ], - [ - -123.9499844, - 45.0084166 - ], - [ - -123.9511153, - 45.0084844 - ], - [ - -123.9514042, - 45.0085094 - ], - [ - -123.9527221, - 45.008665 - ], - [ - -123.953055, - 45.008715 - ], - [ - -123.9541323, - 45.0089059 - ], - [ - -123.9544642, - 45.0089739 - ], - [ - -123.954923, - 45.0090734 - ], - [ - -123.9550521, - 45.009103 - ], - [ - -123.9620531, - 45.0090384 - ], - [ - -123.9621703, - 45.0090376 - ], - [ - -123.9625962, - 45.009036 - ], - [ - -123.9625997, - 45.008993 - ], - [ - -123.9626157, - 45.008856 - ], - [ - -123.9628323, - 45.0077274 - ], - [ - -123.9628743, - 45.0075704 - ], - [ - -123.9630549, - 45.0069847 - ], - [ - -123.9630919, - 45.0068787 - ], - [ - -123.9632622, - 45.0064323 - ], - [ - -123.9633052, - 45.0063283 - ], - [ - -123.9639068, - 45.0051361 - ], - [ - -123.9639932, - 45.0049921 - ], - [ - -123.9640905, - 45.0048199 - ], - [ - -123.9641134, - 45.0047797 - ], - [ - -123.9643252, - 45.0044094 - ], - [ - -123.9647594, - 45.0036097 - ], - [ - -123.9650125, - 45.0031721 - ], - [ - -123.9654894, - 45.0023963 - ], - [ - -123.9656112, - 45.0021965 - ], - [ - -123.9660255, - 45.001572 - ], - [ - -123.9661175, - 45.001444 - ], - [ - -123.9667715, - 45.0006242 - ], - [ - -123.9668746, - 45.0005072 - ], - [ - -123.9674175, - 44.9999323 - ], - [ - -123.9675135, - 44.9998373 - ], - [ - -123.9681557, - 44.9992459 - ], - [ - -123.9682757, - 44.9991429 - ], - [ - -123.9686144, - 44.9988621 - ], - [ - -123.9687804, - 44.9987291 - ], - [ - -123.9701136, - 44.9977851 - ], - [ - -123.9703676, - 44.9976261 - ], - [ - -123.9722382, - 44.9966248 - ], - [ - -123.9726562, - 44.9964349 - ], - [ - -123.973641, - 44.996034 - ], - [ - -123.9744768, - 44.9952525 - ], - [ - -123.9746827, - 44.9950589 - ], - [ - -123.974946, - 44.9948184 - ], - [ - -123.9751061, - 44.9946764 - ], - [ - -123.9753684, - 44.99445 - ], - [ - -123.9753934, - 44.994429 - ], - [ - -123.9775459, - 44.9929446 - ], - [ - -123.980065, - 44.9917867 - ], - [ - -123.982854, - 44.9909997 - ], - [ - -123.9858058, - 44.9906138 - ], - [ - -123.9888069, - 44.9906439 - ], - [ - -123.9917421, - 44.9910888 - ], - [ - -123.9944987, - 44.9919314 - ], - [ - -123.9969707, - 44.9931394 - ], - [ - -123.9990632, - 44.9946664 - ], - [ - -124.0006958, - 44.9964536 - ], - [ - -124.0018057, - 44.9984325 - ], - [ - -124.0023502, - 45.000527 - ], - [ - -124.0023084, - 45.0026566 - ], - [ - -124.0016817, - 45.0047395 - ], - [ - -124.0004942, - 45.0066956 - ], - [ - -123.9990044, - 45.0082304 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16211_s_16192", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0776479, - 44.814432 - ], - [ - -124.0777212, - 44.8147272 - ], - [ - -124.0780405, - 44.8157076 - ], - [ - -124.0784272, - 44.8178196 - ], - [ - -124.0782276, - 44.8199447 - ], - [ - -124.0774493, - 44.8220012 - ], - [ - -124.0761222, - 44.8239102 - ], - [ - -124.0742972, - 44.8255982 - ], - [ - -124.0720444, - 44.8270004 - ], - [ - -124.0694504, - 44.8280627 - ], - [ - -124.0666149, - 44.8287445 - ], - [ - -124.063647, - 44.8290194 - ], - [ - -124.0606607, - 44.8288769 - ], - [ - -124.0577709, - 44.8283226 - ], - [ - -124.0550887, - 44.8273776 - ], - [ - -124.0527172, - 44.8260783 - ], - [ - -124.0507476, - 44.8244747 - ], - [ - -124.0492555, - 44.8226285 - ], - [ - -124.0482983, - 44.8206105 - ], - [ - -124.0478886, - 44.8193504 - ], - [ - -124.0477276, - 44.8187881 - ], - [ - -124.0474079, - 44.8174981 - ], - [ - -124.0472019, - 44.8162448 - ], - [ - -124.0471321, - 44.8153948 - ], - [ - -124.04711, - 44.8145155 - ], - [ - -124.0471397, - 44.8135796 - ], - [ - -124.0470842, - 44.8125629 - ], - [ - -124.0470685, - 44.8124745 - ], - [ - -124.0470048, - 44.8122087 - ], - [ - -124.0470117, - 44.8122078 - ], - [ - -124.046761, - 44.8114612 - ], - [ - -124.0466062, - 44.8106008 - ], - [ - -124.0462877, - 44.8093087 - ], - [ - -124.046062, - 44.8071849 - ], - [ - -124.0464226, - 44.8050705 - ], - [ - -124.0473556, - 44.8030469 - ], - [ - -124.0488252, - 44.8011917 - ], - [ - -124.0507748, - 44.7995763 - ], - [ - -124.0531295, - 44.7982626 - ], - [ - -124.0557987, - 44.7973013 - ], - [ - -124.0586801, - 44.796729 - ], - [ - -124.0616628, - 44.796568 - ], - [ - -124.0646324, - 44.7968243 - ], - [ - -124.0674747, - 44.7974881 - ], - [ - -124.0700807, - 44.7985338 - ], - [ - -124.0723501, - 44.7999215 - ], - [ - -124.0741958, - 44.8015976 - ], - [ - -124.0755469, - 44.8034979 - ], - [ - -124.0763513, - 44.8055493 - ], - [ - -124.0767317, - 44.8070893 - ], - [ - -124.0768379, - 44.8075868 - ], - [ - -124.0769319, - 44.8081073 - ], - [ - -124.0770942, - 44.8085494 - ], - [ - -124.0772144, - 44.8090493 - ], - [ - -124.0773124, - 44.8095192 - ], - [ - -124.0774526, - 44.8103092 - ], - [ - -124.0775612, - 44.8112444 - ], - [ - -124.0776617, - 44.8130644 - ], - [ - -124.0776697, - 44.8137325 - ], - [ - -124.0776479, - 44.814432 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16212_s_16079", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0208492, - 44.9878359 - ], - [ - -124.0219243, - 44.9886656 - ], - [ - -124.0221289, - 44.9888464 - ], - [ - -124.0232862, - 44.99002 - ], - [ - -124.0234652, - 44.9902298 - ], - [ - -124.0246363, - 44.9919154 - ], - [ - -124.0253805, - 44.9937191 - ], - [ - -124.0254317, - 44.9938999 - ], - [ - -124.0257208, - 44.9956315 - ], - [ - -124.0256157, - 44.9973736 - ], - [ - -124.0255764, - 44.9975989 - ], - [ - -124.0255434, - 44.9977763 - ], - [ - -124.0254851, - 44.9980706 - ], - [ - -124.0247781, - 45.0001405 - ], - [ - -124.0235155, - 45.0020727 - ], - [ - -124.0217456, - 45.003793 - ], - [ - -124.0195367, - 45.0052353 - ], - [ - -124.0169734, - 45.0063441 - ], - [ - -124.0141544, - 45.0070768 - ], - [ - -124.011188, - 45.0074051 - ], - [ - -124.0081883, - 45.0073166 - ], - [ - -124.0052707, - 45.0068145 - ], - [ - -124.0025473, - 45.0059182 - ], - [ - -124.0014962, - 45.0053737 - ], - [ - -123.9995626, - 45.0049064 - ], - [ - -123.9992037, - 45.0047848 - ], - [ - -123.9966493, - 45.0036913 - ], - [ - -123.9944424, - 45.0022671 - ], - [ - -123.9926667, - 45.0005663 - ], - [ - -123.9913896, - 44.9986535 - ], - [ - -123.9906594, - 44.9966013 - ], - [ - -123.990504, - 44.9944876 - ], - [ - -123.9909022, - 44.9925252 - ], - [ - -123.9906, - 44.9912129 - ], - [ - -123.9904087, - 44.9890874 - ], - [ - -123.9908055, - 44.9869763 - ], - [ - -123.9917749, - 44.9849606 - ], - [ - -123.9932797, - 44.9831179 - ], - [ - -123.995262, - 44.9815189 - ], - [ - -123.9976457, - 44.980225 - ], - [ - -124.0003391, - 44.979286 - ], - [ - -124.0032389, - 44.978738 - ], - [ - -124.0062335, - 44.9786018 - ], - [ - -124.0092081, - 44.9788829 - ], - [ - -124.0120482, - 44.9795704 - ], - [ - -124.014645, - 44.9806379 - ], - [ - -124.0168985, - 44.9820443 - ], - [ - -124.0187222, - 44.9837357 - ], - [ - -124.020046, - 44.9856472 - ], - [ - -124.020819, - 44.9877051 - ], - [ - -124.0208492, - 44.9878359 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16214_s_16215", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.8986333, - 45.0167471 - ], - [ - -123.8982961, - 45.0172214 - ], - [ - -123.8965947, - 45.0188066 - ], - [ - -123.8963747, - 45.0189766 - ], - [ - -123.8940317, - 45.0204514 - ], - [ - -123.8913146, - 45.0215571 - ], - [ - -123.8883371, - 45.0222477 - ], - [ - -123.888207, - 45.0222677 - ], - [ - -123.8856429, - 45.0225038 - ], - [ - -123.8830594, - 45.0224307 - ], - [ - -123.88053, - 45.0220504 - ], - [ - -123.8803899, - 45.0220204 - ], - [ - -123.8788139, - 45.0216146 - ], - [ - -123.8777815, - 45.0213025 - ], - [ - -123.876991, - 45.0211517 - ], - [ - -123.8741816, - 45.0203994 - ], - [ - -123.8716331, - 45.0192728 - ], - [ - -123.8694436, - 45.0178152 - ], - [ - -123.8676972, - 45.0160826 - ], - [ - -123.866461, - 45.0141416 - ], - [ - -123.8657825, - 45.0120668 - ], - [ - -123.8656877, - 45.009938 - ], - [ - -123.8661802, - 45.007837 - ], - [ - -123.8672409, - 45.0058446 - ], - [ - -123.8688291, - 45.0040371 - ], - [ - -123.8708837, - 45.0024842 - ], - [ - -123.8733258, - 45.0012455 - ], - [ - -123.8752664, - 45.0006234 - ], - [ - -123.8767774, - 44.9993277 - ], - [ - -123.8771273, - 44.9990877 - ], - [ - -123.8796304, - 44.9976971 - ], - [ - -123.8803165, - 44.9973917 - ], - [ - -123.8811758, - 44.9968991 - ], - [ - -123.8839298, - 44.9956401 - ], - [ - -123.8846598, - 44.9953801 - ], - [ - -123.8881795, - 44.9944886 - ], - [ - -123.8886195, - 44.9944186 - ], - [ - -123.8918868, - 44.9941555 - ], - [ - -123.8987494, - 44.9941288 - ], - [ - -123.9013908, - 44.9938252 - ], - [ - -123.9035362, - 44.9936875 - ], - [ - -123.904246, - 44.9936775 - ], - [ - -123.9072367, - 44.9938439 - ], - [ - -123.9081065, - 44.9939539 - ], - [ - -123.9111403, - 44.9945719 - ], - [ - -123.9119102, - 44.9947918 - ], - [ - -123.9126725, - 44.9950269 - ], - [ - -123.9198516, - 44.9974065 - ], - [ - -123.9211253, - 44.9978816 - ], - [ - -123.9216052, - 44.9980815 - ], - [ - -123.9229227, - 44.9986973 - ], - [ - -123.9233827, - 44.9989373 - ], - [ - -123.9262257, - 45.0008651 - ], - [ - -123.9268858, - 45.001445 - ], - [ - -123.9288667, - 45.0037039 - ], - [ - -123.9293368, - 45.0044238 - ], - [ - -123.9303646, - 45.0065513 - ], - [ - -123.9307529, - 45.0087834 - ], - [ - -123.9304851, - 45.0110243 - ], - [ - -123.9295725, - 45.0131781 - ], - [ - -123.9280543, - 45.0151525 - ], - [ - -123.9259953, - 45.0168628 - ], - [ - -123.9234839, - 45.0182358 - ], - [ - -123.9217132, - 45.0188413 - ], - [ - -123.9217265, - 45.0188605 - ], - [ - -123.9206364, - 45.0192405 - ], - [ - -123.9195336, - 45.0195874 - ], - [ - -123.9188235, - 45.0197875 - ], - [ - -123.9150689, - 45.0204708 - ], - [ - -123.9134886, - 45.0206108 - ], - [ - -123.9127861, - 45.0206498 - ], - [ - -123.9113707, - 45.0208116 - ], - [ - -123.908227, - 45.0207088 - ], - [ - -123.9051793, - 45.0201525 - ], - [ - -123.9023563, - 45.0191662 - ], - [ - -123.8998771, - 45.0177915 - ], - [ - -123.8986333, - 45.0167471 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16215_s_16183", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9503598, - 45.0084732 - ], - [ - -123.9510372, - 45.0084836 - ], - [ - -123.9514771, - 45.0085236 - ], - [ - -123.9544034, - 45.009 - ], - [ - -123.9571425, - 45.0098723 - ], - [ - -123.9595892, - 45.0111067 - ], - [ - -123.9616495, - 45.012656 - ], - [ - -123.9632442, - 45.0144606 - ], - [ - -123.964312, - 45.0164512 - ], - [ - -123.9648118, - 45.0185513 - ], - [ - -123.9647244, - 45.0206802 - ], - [ - -123.9640531, - 45.0227561 - ], - [ - -123.9628235, - 45.0246993 - ], - [ - -123.9610829, - 45.0264349 - ], - [ - -123.9588982, - 45.0278963 - ], - [ - -123.9563533, - 45.0290274 - ], - [ - -123.953546, - 45.0297846 - ], - [ - -123.9507577, - 45.030118 - ], - [ - -123.9490815, - 45.0305095 - ], - [ - -123.9460246, - 45.0309847 - ], - [ - -123.9450344, - 45.0310647 - ], - [ - -123.9418001, - 45.0310823 - ], - [ - -123.94137, - 45.0310523 - ], - [ - -123.9385899, - 45.0306719 - ], - [ - -123.9379598, - 45.0305419 - ], - [ - -123.93552, - 45.0298735 - ], - [ - -123.9352599, - 45.0297835 - ], - [ - -123.9326216, - 45.0286218 - ], - [ - -123.9320915, - 45.0283317 - ], - [ - -123.9293167, - 45.0263627 - ], - [ - -123.9290667, - 45.0261327 - ], - [ - -123.9274232, - 45.0242509 - ], - [ - -123.9273662, - 45.0241677 - ], - [ - -123.9254565, - 45.0235643 - ], - [ - -123.9251641, - 45.0234693 - ], - [ - -123.9202235, - 45.0218191 - ], - [ - -123.9193605, - 45.0215067 - ], - [ - -123.9187204, - 45.0212567 - ], - [ - -123.9178801, - 45.0209032 - ], - [ - -123.9151799, - 45.019683 - ], - [ - -123.9139203, - 45.0190483 - ], - [ - -123.9115802, - 45.0177381 - ], - [ - -123.9105404, - 45.0171002 - ], - [ - -123.9091404, - 45.0161601 - ], - [ - -123.9087995, - 45.0158769 - ], - [ - -123.907841, - 45.015597 - ], - [ - -123.9063291, - 45.0150854 - ], - [ - -123.905219, - 45.0146553 - ], - [ - -123.9040547, - 45.0141554 - ], - [ - -123.9025407, - 45.0134382 - ], - [ - -123.901986, - 45.0134396 - ], - [ - -123.9014626, - 45.0134284 - ], - [ - -123.8989165, - 45.0134696 - ], - [ - -123.898049, - 45.0136474 - ], - [ - -123.8971762, - 45.014075 - ], - [ - -123.8942735, - 45.0161268 - ], - [ - -123.8915738, - 45.0181158 - ], - [ - -123.8892891, - 45.0194979 - ], - [ - -123.886668, - 45.0205373 - ], - [ - -123.8838113, - 45.021194 - ], - [ - -123.8808287, - 45.0214427 - ], - [ - -123.8778351, - 45.0212739 - ], - [ - -123.8749455, - 45.0206941 - ], - [ - -123.872271, - 45.0197255 - ], - [ - -123.8699144, - 45.0184054 - ], - [ - -123.8679663, - 45.0167846 - ], - [ - -123.8665016, - 45.0149253 - ], - [ - -123.8655765, - 45.0128991 - ], - [ - -123.8652265, - 45.0107838 - ], - [ - -123.8654649, - 45.0086606 - ], - [ - -123.8662827, - 45.0066113 - ], - [ - -123.8676482, - 45.0047145 - ], - [ - -123.8695091, - 45.0030431 - ], - [ - -123.8723191, - 45.0009734 - ], - [ - -123.8725421, - 45.0008125 - ], - [ - -123.8765321, - 44.9979929 - ], - [ - -123.8786387, - 44.9967496 - ], - [ - -123.8816185, - 44.9952898 - ], - [ - -123.8832898, - 44.994578 - ], - [ - -123.8844896, - 44.994138 - ], - [ - -123.8856871, - 44.9937444 - ], - [ - -123.8869869, - 44.9933645 - ], - [ - -123.8885713, - 44.9929719 - ], - [ - -123.8910109, - 44.992472 - ], - [ - -123.8919234, - 44.9923064 - ], - [ - -123.8929332, - 44.9921464 - ], - [ - -123.8944611, - 44.9919614 - ], - [ - -123.8960008, - 44.9918314 - ], - [ - -123.8974614, - 44.9917582 - ], - [ - -123.9011707, - 44.9916982 - ], - [ - -123.901984, - 44.9917003 - ], - [ - -123.9023931, - 44.9917091 - ], - [ - -123.9041121, - 44.9916631 - ], - [ - -123.9052934, - 44.9916638 - ], - [ - -123.9067231, - 44.9917038 - ], - [ - -123.9092498, - 44.9919247 - ], - [ - -123.9100597, - 44.9920447 - ], - [ - -123.9123685, - 44.9925237 - ], - [ - -123.9135183, - 44.9928336 - ], - [ - -123.9153954, - 44.9934453 - ], - [ - -123.9166652, - 44.9939352 - ], - [ - -123.9186715, - 44.9948602 - ], - [ - -123.9199618, - 44.9955626 - ], - [ - -123.9203788, - 44.9957601 - ], - [ - -123.9205819, - 44.9958194 - ], - [ - -123.922282, - 44.996214 - ], - [ - -123.9231031, - 44.9964232 - ], - [ - -123.923463, - 44.9965231 - ], - [ - -123.926048, - 44.9974499 - ], - [ - -123.926428, - 44.9976198 - ], - [ - -123.9288802, - 44.9989824 - ], - [ - -123.9308931, - 45.0006689 - ], - [ - -123.9313146, - 45.0011052 - ], - [ - -123.9322898, - 45.0016511 - ], - [ - -123.9338231, - 45.0023439 - ], - [ - -123.9380682, - 45.0037617 - ], - [ - -123.9413709, - 45.0048052 - ], - [ - -123.9420906, - 45.0050486 - ], - [ - -123.9437115, - 45.0056342 - ], - [ - -123.9456064, - 45.0062485 - ], - [ - -123.946835, - 45.0066953 - ], - [ - -123.9476249, - 45.0070152 - ], - [ - -123.9498543, - 45.0081148 - ], - [ - -123.9503598, - 45.0084732 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16215_s_16215", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.8656962, - 45.0106748 - ], - [ - -123.8659585, - 45.0085531 - ], - [ - -123.8667993, - 45.0065085 - ], - [ - -123.8681861, - 45.0046195 - ], - [ - -123.8700656, - 45.0029587 - ], - [ - -123.8723656, - 45.0015899 - ], - [ - -123.8749978, - 45.0005657 - ], - [ - -123.8778609, - 44.9999254 - ], - [ - -123.880845, - 44.9996937 - ], - [ - -123.8838355, - 44.9998793 - ], - [ - -123.8867175, - 45.0004753 - ], - [ - -123.8893804, - 45.0014587 - ], - [ - -123.8917218, - 45.0027916 - ], - [ - -123.8936518, - 45.0044231 - ], - [ - -123.8950962, - 45.0062902 - ], - [ - -123.8959994, - 45.0083214 - ], - [ - -123.8963267, - 45.0104385 - ], - [ - -123.8960655, - 45.0125603 - ], - [ - -123.8952257, - 45.0146051 - ], - [ - -123.8938396, - 45.0164945 - ], - [ - -123.8919603, - 45.0181556 - ], - [ - -123.8896601, - 45.0195248 - ], - [ - -123.8870273, - 45.0205494 - ], - [ - -123.8841633, - 45.0211899 - ], - [ - -123.8811781, - 45.0214217 - ], - [ - -123.8781865, - 45.021236 - ], - [ - -123.8753035, - 45.0206398 - ], - [ - -123.87264, - 45.0196562 - ], - [ - -123.8702983, - 45.0183228 - ], - [ - -123.8683685, - 45.016691 - ], - [ - -123.8669247, - 45.0148235 - ], - [ - -123.8660224, - 45.0127921 - ], - [ - -123.8656962, - 45.0106748 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16275_s_15889", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.067171, - 44.6402763 - ], - [ - -124.0655552, - 44.6418033 - ], - [ - -124.0634064, - 44.6431858 - ], - [ - -124.0631139, - 44.6433407 - ], - [ - -124.060555, - 44.6444359 - ], - [ - -124.057746, - 44.6451536 - ], - [ - -124.0547948, - 44.6454662 - ], - [ - -124.0518149, - 44.6453616 - ], - [ - -124.0489208, - 44.644844 - ], - [ - -124.0462239, - 44.6439332 - ], - [ - -124.0438278, - 44.6426642 - ], - [ - -124.0418246, - 44.6410859 - ], - [ - -124.0402913, - 44.6392588 - ], - [ - -124.0392868, - 44.6372532 - ], - [ - -124.0392018, - 44.6368437 - ], - [ - -124.038857, - 44.636053 - ], - [ - -124.0385376, - 44.6339812 - ], - [ - -124.038778, - 44.631904 - ], - [ - -124.0395695, - 44.6298978 - ], - [ - -124.0408828, - 44.6280364 - ], - [ - -124.0426697, - 44.6263883 - ], - [ - -124.0448642, - 44.6250141 - ], - [ - -124.0454433, - 44.6247164 - ], - [ - -124.0469502, - 44.623035 - ], - [ - -124.0490169, - 44.6214995 - ], - [ - -124.0514634, - 44.6202813 - ], - [ - -124.0541954, - 44.6194274 - ], - [ - -124.0571082, - 44.6189705 - ], - [ - -124.0600897, - 44.6189282 - ], - [ - -124.0630256, - 44.619302 - ], - [ - -124.065803, - 44.6200777 - ], - [ - -124.0665941, - 44.6203653 - ], - [ - -124.0690919, - 44.6215049 - ], - [ - -124.0712331, - 44.6229686 - ], - [ - -124.0729362, - 44.6247011 - ], - [ - -124.0741368, - 44.6266365 - ], - [ - -124.0747891, - 44.6287014 - ], - [ - -124.0748684, - 44.6308175 - ], - [ - -124.0743716, - 44.6329044 - ], - [ - -124.0733174, - 44.6348829 - ], - [ - -124.0726882, - 44.6357872 - ], - [ - -124.0724607, - 44.6361012 - ], - [ - -124.0723403, - 44.6362609 - ], - [ - -124.0704241, - 44.6382409 - ], - [ - -124.0679443, - 44.6398711 - ], - [ - -124.067171, - 44.6402763 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16275_s_16055", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0660592, - 44.6201728 - ], - [ - -124.066615, - 44.6203757 - ], - [ - -124.069092, - 44.6215079 - ], - [ - -124.0712179, - 44.6229593 - ], - [ - -124.072913, - 44.6246757 - ], - [ - -124.0741142, - 44.626593 - ], - [ - -124.0747764, - 44.6286394 - ], - [ - -124.0748748, - 44.6307386 - ], - [ - -124.0744058, - 44.6328122 - ], - [ - -124.0733867, - 44.6347825 - ], - [ - -124.0727769, - 44.6356825 - ], - [ - -124.0717426, - 44.6369749 - ], - [ - -124.0716026, - 44.6371249 - ], - [ - -124.0699964, - 44.638565 - ], - [ - -124.0680725, - 44.6397907 - ], - [ - -124.0675125, - 44.6400908 - ], - [ - -124.0649623, - 44.641196 - ], - [ - -124.062159, - 44.6419247 - ], - [ - -124.0592104, - 44.6422489 - ], - [ - -124.0562299, - 44.6421561 - ], - [ - -124.0533321, - 44.6416498 - ], - [ - -124.0506283, - 44.6407496 - ], - [ - -124.0482226, - 44.6394901 - ], - [ - -124.0462073, - 44.6379196 - ], - [ - -124.0446601, - 44.6360986 - ], - [ - -124.0436402, - 44.634097 - ], - [ - -124.0431868, - 44.6319919 - ], - [ - -124.0433173, - 44.629864 - ], - [ - -124.0439504, - 44.6280175 - ], - [ - -124.0443087, - 44.6266812 - ], - [ - -124.0454304, - 44.6247076 - ], - [ - -124.0470695, - 44.6229282 - ], - [ - -124.0491632, - 44.6214114 - ], - [ - -124.0516308, - 44.6202153 - ], - [ - -124.0543777, - 44.619386 - ], - [ - -124.0572983, - 44.6189553 - ], - [ - -124.0602803, - 44.6189397 - ], - [ - -124.0632094, - 44.6193399 - ], - [ - -124.065973, - 44.6201404 - ], - [ - -124.0660592, - 44.6201728 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16276_s_15885", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9503665, - 44.6158501 - ], - [ - -123.9517524, - 44.6166694 - ], - [ - -123.9536348, - 44.6183215 - ], - [ - -123.9550298, - 44.6202041 - ], - [ - -123.9558838, - 44.6222448 - ], - [ - -123.956164, - 44.6243654 - ], - [ - -123.9558595, - 44.6264842 - ], - [ - -123.9549821, - 44.6285199 - ], - [ - -123.9535652, - 44.6303942 - ], - [ - -123.9516634, - 44.6320351 - ], - [ - -123.9493498, - 44.6333795 - ], - [ - -123.9467132, - 44.6343757 - ], - [ - -123.943855, - 44.6349854 - ], - [ - -123.9408851, - 44.6351852 - ], - [ - -123.9404767, - 44.6351839 - ], - [ - -123.9362363, - 44.63474 - ], - [ - -123.9355315, - 44.6345915 - ], - [ - -123.9330469, - 44.6338937 - ], - [ - -123.9307714, - 44.6328964 - ], - [ - -123.9303744, - 44.6326861 - ], - [ - -123.9288036, - 44.6317293 - ], - [ - -123.9282736, - 44.6313592 - ], - [ - -123.9280412, - 44.631147 - ], - [ - -123.9275355, - 44.6308979 - ], - [ - -123.9255622, - 44.6294813 - ], - [ - -123.9239856, - 44.6278306 - ], - [ - -123.922859, - 44.6260016 - ], - [ - -123.9222205, - 44.6240562 - ], - [ - -123.9221201, - 44.6224999 - ], - [ - -123.9221153, - 44.6224999 - ], - [ - -123.9221147, - 44.6224162 - ], - [ - -123.9220917, - 44.6220602 - ], - [ - -123.9221111, - 44.6219603 - ], - [ - -123.9221068, - 44.6214113 - ], - [ - -123.9223827, - 44.6192905 - ], - [ - -123.9232325, - 44.6172488 - ], - [ - -123.9246236, - 44.6153648 - ], - [ - -123.9265024, - 44.6137107 - ], - [ - -123.9287968, - 44.6123503 - ], - [ - -123.9314186, - 44.6113356 - ], - [ - -123.934267, - 44.6107057 - ], - [ - -123.9372328, - 44.6104849 - ], - [ - -123.9402018, - 44.6106814 - ], - [ - -123.9430602, - 44.6112879 - ], - [ - -123.9456981, - 44.612281 - ], - [ - -123.9480142, - 44.6136226 - ], - [ - -123.9499194, - 44.6152611 - ], - [ - -123.9503665, - 44.6158501 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16278_s_15894", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9390848, - 44.6158946 - ], - [ - -123.9396849, - 44.6181195 - ], - [ - -123.939755, - 44.6187494 - ], - [ - -123.9397906, - 44.6200489 - ], - [ - -123.9397109, - 44.6214589 - ], - [ - -123.9394885, - 44.6229226 - ], - [ - -123.9387999, - 44.6256891 - ], - [ - -123.9385254, - 44.6271839 - ], - [ - -123.9381799, - 44.6284638 - ], - [ - -123.93799, - 44.6289938 - ], - [ - -123.9379874, - 44.6289992 - ], - [ - -123.9385615, - 44.6295487 - ], - [ - -123.9398374, - 44.6314511 - ], - [ - -123.9405746, - 44.6334937 - ], - [ - -123.9407452, - 44.6355995 - ], - [ - -123.9403426, - 44.6376892 - ], - [ - -123.9393822, - 44.639684 - ], - [ - -123.9378726, - 44.6420442 - ], - [ - -123.9372966, - 44.6428466 - ], - [ - -123.9368783, - 44.6438874 - ], - [ - -123.9367131, - 44.6442717 - ], - [ - -123.9357304, - 44.6464143 - ], - [ - -123.93508, - 44.6480051 - ], - [ - -123.9343918, - 44.6493511 - ], - [ - -123.9342618, - 44.6495612 - ], - [ - -123.9329101, - 44.6512965 - ], - [ - -123.9324702, - 44.6517565 - ], - [ - -123.9305544, - 44.6533895 - ], - [ - -123.9282289, - 44.6547242 - ], - [ - -123.9255833, - 44.6557095 - ], - [ - -123.9227191, - 44.6563073 - ], - [ - -123.9197465, - 44.6564947 - ], - [ - -123.9167799, - 44.6562646 - ], - [ - -123.9139332, - 44.6556256 - ], - [ - -123.9113159, - 44.6546025 - ], - [ - -123.9090286, - 44.6532346 - ], - [ - -123.9071593, - 44.6515743 - ], - [ - -123.9057798, - 44.6496857 - ], - [ - -123.904943, - 44.6476412 - ], - [ - -123.904681, - 44.6455194 - ], - [ - -123.9050039, - 44.643402 - ], - [ - -123.9058992, - 44.6413702 - ], - [ - -123.9062947, - 44.6408547 - ], - [ - -123.9065819, - 44.6401531 - ], - [ - -123.9067281, - 44.6398164 - ], - [ - -123.9077009, - 44.6376975 - ], - [ - -123.9083836, - 44.6360008 - ], - [ - -123.9085014, - 44.6357609 - ], - [ - -123.9084052, - 44.6352746 - ], - [ - -123.9082903, - 44.6351074 - ], - [ - -123.9073692, - 44.6334271 - ], - [ - -123.9068504, - 44.6316611 - ], - [ - -123.9067283, - 44.6309593 - ], - [ - -123.906585, - 44.6304431 - ], - [ - -123.9062952, - 44.6282463 - ], - [ - -123.9066329, - 44.626053 - ], - [ - -123.906723, - 44.625753 - ], - [ - -123.9078633, - 44.6233587 - ], - [ - -123.9080834, - 44.6230287 - ], - [ - -123.9087535, - 44.6222554 - ], - [ - -123.9087817, - 44.6221254 - ], - [ - -123.9089151, - 44.6215906 - ], - [ - -123.9087811, - 44.6213845 - ], - [ - -123.9079831, - 44.6198699 - ], - [ - -123.9075089, - 44.6182876 - ], - [ - -123.9074589, - 44.6180275 - ], - [ - -123.9073244, - 44.616231 - ], - [ - -123.9076068, - 44.6144432 - ], - [ - -123.9077369, - 44.6139732 - ], - [ - -123.9085189, - 44.6122823 - ], - [ - -123.908525, - 44.6121133 - ], - [ - -123.9092442, - 44.6099388 - ], - [ - -123.9105707, - 44.6079154 - ], - [ - -123.9124484, - 44.6061286 - ], - [ - -123.9147979, - 44.6046539 - ], - [ - -123.9175199, - 44.6035536 - ], - [ - -123.9204992, - 44.6028743 - ], - [ - -123.9236101, - 44.6026446 - ], - [ - -123.924278, - 44.6026446 - ], - [ - -123.927245, - 44.6028534 - ], - [ - -123.9300981, - 44.6034716 - ], - [ - -123.9327276, - 44.6044755 - ], - [ - -123.9350326, - 44.6058265 - ], - [ - -123.9369244, - 44.6074728 - ], - [ - -123.9383304, - 44.6093511 - ], - [ - -123.9391965, - 44.6113893 - ], - [ - -123.9394893, - 44.6135089 - ], - [ - -123.9391976, - 44.6156287 - ], - [ - -123.9390848, - 44.6158946 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16278_s_22287", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9707105, - 44.6759685 - ], - [ - -123.9709447, - 44.6765052 - ], - [ - -123.9712694, - 44.6785328 - ], - [ - -123.9712845, - 44.6790808 - ], - [ - -123.9712549, - 44.6800052 - ], - [ - -123.971212, - 44.6804722 - ], - [ - -123.9707088, - 44.6826188 - ], - [ - -123.9704979, - 44.6831708 - ], - [ - -123.9700764, - 44.6841054 - ], - [ - -123.9678463, - 44.6883777 - ], - [ - -123.9669601, - 44.6897678 - ], - [ - -123.9667435, - 44.6900525 - ], - [ - -123.9662943, - 44.6908448 - ], - [ - -123.9662011, - 44.6910054 - ], - [ - -123.9645107, - 44.6938546 - ], - [ - -123.9634665, - 44.6953017 - ], - [ - -123.9626044, - 44.6963039 - ], - [ - -123.9627601, - 44.6966614 - ], - [ - -123.9629923, - 44.6973014 - ], - [ - -123.9632853, - 44.6983005 - ], - [ - -123.9633704, - 44.6986784 - ], - [ - -123.9635619, - 44.7005356 - ], - [ - -123.9635451, - 44.7014996 - ], - [ - -123.9634345, - 44.7026788 - ], - [ - -123.9631949, - 44.7040818 - ], - [ - -123.9630876, - 44.704604 - ], - [ - -123.9628558, - 44.705568 - ], - [ - -123.9615332, - 44.7084945 - ], - [ - -123.9609074, - 44.7094096 - ], - [ - -123.9595601, - 44.7110127 - ], - [ - -123.9578475, - 44.7124274 - ], - [ - -123.9571265, - 44.7129285 - ], - [ - -123.9543233, - 44.7144675 - ], - [ - -123.9533962, - 44.7148636 - ], - [ - -123.952478, - 44.7152258 - ], - [ - -123.9509014, - 44.7157981 - ], - [ - -123.9431609, - 44.7186634 - ], - [ - -123.9427204, - 44.7188201 - ], - [ - -123.9399525, - 44.7197649 - ], - [ - -123.9369127, - 44.7208625 - ], - [ - -123.9365661, - 44.7209894 - ], - [ - -123.9361781, - 44.7211245 - ], - [ - -123.9361666, - 44.7211287 - ], - [ - -123.9355766, - 44.7213513 - ], - [ - -123.935378, - 44.7214963 - ], - [ - -123.9351945, - 44.7216217 - ], - [ - -123.9350742, - 44.7217181 - ], - [ - -123.9334554, - 44.7228369 - ], - [ - -123.9331984, - 44.7229899 - ], - [ - -123.9327413, - 44.7232516 - ], - [ - -123.9322931, - 44.7234982 - ], - [ - -123.9321112, - 44.723926 - ], - [ - -123.9307032, - 44.7258046 - ], - [ - -123.9288082, - 44.7274513 - ], - [ - -123.9264988, - 44.7288027 - ], - [ - -123.9238638, - 44.7298069 - ], - [ - -123.9210046, - 44.7304253 - ], - [ - -123.918031, - 44.7306341 - ], - [ - -123.9150575, - 44.7304253 - ], - [ - -123.9121982, - 44.7298069 - ], - [ - -123.9095632, - 44.7288027 - ], - [ - -123.9072538, - 44.7274513 - ], - [ - -123.9053588, - 44.7258047 - ], - [ - -123.9039508, - 44.7239261 - ], - [ - -123.9030841, - 44.7218877 - ], - [ - -123.9027918, - 44.719768 - ], - [ - -123.9027918, - 44.7197291 - ], - [ - -123.9027915, - 44.7196325 - ], - [ - -123.9027891, - 44.7195798 - ], - [ - -123.9027809, - 44.719223 - ], - [ - -123.9027812, - 44.718285 - ], - [ - -123.9027818, - 44.7181892 - ], - [ - -123.9027941, - 44.7172182 - ], - [ - -123.9029034, - 44.7160133 - ], - [ - -123.9029725, - 44.7156053 - ], - [ - -123.9037754, - 44.7132038 - ], - [ - -123.9039895, - 44.7127829 - ], - [ - -123.9050793, - 44.7111025 - ], - [ - -123.9065534, - 44.7095784 - ], - [ - -123.9069484, - 44.7092364 - ], - [ - -123.9087552, - 44.7079182 - ], - [ - -123.9092102, - 44.7076382 - ], - [ - -123.9112866, - 44.7065639 - ], - [ - -123.9117416, - 44.706368 - ], - [ - -123.9143769, - 44.7054664 - ], - [ - -123.9149342, - 44.7053207 - ], - [ - -123.9160616, - 44.70456 - ], - [ - -123.9169715, - 44.704029 - ], - [ - -123.9194954, - 44.7028339 - ], - [ - -123.9208682, - 44.702316 - ], - [ - -123.9219849, - 44.7018948 - ], - [ - -123.922123, - 44.7018433 - ], - [ - -123.9223539, - 44.7017584 - ], - [ - -123.9225472, - 44.7016885 - ], - [ - -123.9231727, - 44.7014663 - ], - [ - -123.9263381, - 44.7003235 - ], - [ - -123.9266432, - 44.7002163 - ], - [ - -123.9293419, - 44.6992953 - ], - [ - -123.9310148, - 44.6986761 - ], - [ - -123.9308927, - 44.6983414 - ], - [ - -123.9307469, - 44.6977314 - ], - [ - -123.9305407, - 44.6955003 - ], - [ - -123.9305668, - 44.6950003 - ], - [ - -123.9310782, - 44.6925851 - ], - [ - -123.9313954, - 44.6917432 - ], - [ - -123.93292, - 44.6891231 - ], - [ - -123.9342163, - 44.6875242 - ], - [ - -123.9348902, - 44.6867669 - ], - [ - -123.936415, - 44.6852001 - ], - [ - -123.9369055, - 44.6846302 - ], - [ - -123.9381034, - 44.6826129 - ], - [ - -123.9388299, - 44.6813325 - ], - [ - -123.9395631, - 44.6802246 - ], - [ - -123.9396783, - 44.6800733 - ], - [ - -123.9401243, - 44.6792196 - ], - [ - -123.9396971, - 44.6789693 - ], - [ - -123.9377477, - 44.6776003 - ], - [ - -123.9370867, - 44.6770443 - ], - [ - -123.9352998, - 44.6751772 - ], - [ - -123.9348709, - 44.6746102 - ], - [ - -123.9337415, - 44.6727007 - ], - [ - -123.9335266, - 44.6722117 - ], - [ - -123.9330696, - 44.6708843 - ], - [ - -123.9329328, - 44.6703413 - ], - [ - -123.9326977, - 44.6681286 - ], - [ - -123.9328276, - 44.6646496 - ], - [ - -123.9329419, - 44.6635794 - ], - [ - -123.9330531, - 44.6629504 - ], - [ - -123.9333747, - 44.6617128 - ], - [ - -123.9336589, - 44.6608889 - ], - [ - -123.9343561, - 44.6593632 - ], - [ - -123.9346652, - 44.6588253 - ], - [ - -123.9352134, - 44.6579771 - ], - [ - -123.9355564, - 44.6575011 - ], - [ - -123.9359097, - 44.6570389 - ], - [ - -123.9366159, - 44.656166 - ], - [ - -123.9372633, - 44.6554345 - ], - [ - -123.9376936, - 44.6549886 - ], - [ - -123.937732, - 44.6548382 - ], - [ - -123.9373118, - 44.6529853 - ], - [ - -123.9367556, - 44.6532055 - ], - [ - -123.9364396, - 44.6533215 - ], - [ - -123.9355796, - 44.6536133 - ], - [ - -123.9352626, - 44.6537123 - ], - [ - -123.9342992, - 44.6539857 - ], - [ - -123.9339632, - 44.6540717 - ], - [ - -123.9329437, - 44.6543041 - ], - [ - -123.9326097, - 44.6543711 - ], - [ - -123.9317792, - 44.6545198 - ], - [ - -123.9314562, - 44.6545709 - ], - [ - -123.9306048, - 44.6546872 - ], - [ - -123.9302677, - 44.6547262 - ], - [ - -123.9295446, - 44.6547897 - ], - [ - -123.9278275, - 44.6557079 - ], - [ - -123.9250433, - 44.6566445 - ], - [ - -123.9220519, - 44.6571622 - ], - [ - -123.9189757, - 44.6572396 - ], - [ - -123.9159406, - 44.6568737 - ], - [ - -123.9130708, - 44.6560794 - ], - [ - -123.9128397, - 44.6559954 - ], - [ - -123.9118845, - 44.6556166 - ], - [ - -123.9117545, - 44.6555606 - ], - [ - -123.9089351, - 44.6539969 - ], - [ - -123.9067038, - 44.6520073 - ], - [ - -123.9066208, - 44.6519123 - ], - [ - -123.9054808, - 44.6503325 - ], - [ - -123.9047169, - 44.6486411 - ], - [ - -123.9043495, - 44.6468835 - ], - [ - -123.9043385, - 44.6467655 - ], - [ - -123.9044777, - 44.6444145 - ], - [ - -123.9053225, - 44.6421401 - ], - [ - -123.9053705, - 44.6420511 - ], - [ - -123.9066542, - 44.6402123 - ], - [ - -123.9067702, - 44.6400793 - ], - [ - -123.9072825, - 44.63953 - ], - [ - -123.9074835, - 44.6393281 - ], - [ - -123.9094415, - 44.6377211 - ], - [ - -123.9095911, - 44.6376385 - ], - [ - -123.9098806, - 44.6373665 - ], - [ - -123.9100977, - 44.6371915 - ], - [ - -123.9115346, - 44.6361773 - ], - [ - -123.9117936, - 44.6360173 - ], - [ - -123.9132345, - 44.6352294 - ], - [ - -123.9136824, - 44.6350135 - ], - [ - -123.9160334, - 44.6340844 - ], - [ - -123.9165454, - 44.6339224 - ], - [ - -123.9191204, - 44.6332975 - ], - [ - -123.9195933, - 44.6332155 - ], - [ - -123.9213828, - 44.6329851 - ], - [ - -123.9218058, - 44.6329491 - ], - [ - -123.9238582, - 44.6328773 - ], - [ - -123.9249673, - 44.6321817 - ], - [ - -123.9253364, - 44.6319487 - ], - [ - -123.9260569, - 44.6315213 - ], - [ - -123.9264249, - 44.6313163 - ], - [ - -123.9276103, - 44.6307186 - ], - [ - -123.9279863, - 44.6305477 - ], - [ - -123.9290811, - 44.6300944 - ], - [ - -123.92947, - 44.6299484 - ], - [ - -123.9307865, - 44.6295102 - ], - [ - -123.9311594, - 44.6294012 - ], - [ - -123.9319828, - 44.6291803 - ], - [ - -123.9323907, - 44.6290803 - ], - [ - -123.9332488, - 44.6288907 - ], - [ - -123.9332616, - 44.6288773 - ], - [ - -123.9337837, - 44.6283673 - ], - [ - -123.9338424, - 44.6283104 - ], - [ - -123.9345055, - 44.6276714 - ], - [ - -123.9368741, - 44.6258628 - ], - [ - -123.9397545, - 44.6244841 - ], - [ - -123.9429972, - 44.6236069 - ], - [ - -123.9432571, - 44.62356 - ], - [ - -123.9459019, - 44.6232556 - ], - [ - -123.9485803, - 44.6232872 - ], - [ - -123.9487003, - 44.6232962 - ], - [ - -123.9514983, - 44.6236982 - ], - [ - -123.9541419, - 44.6244663 - ], - [ - -123.9542709, - 44.6245143 - ], - [ - -123.9565689, - 44.6255665 - ], - [ - -123.9585667, - 44.626895 - ], - [ - -123.9602, - 44.628457 - ], - [ - -123.960287, - 44.628558 - ], - [ - -123.9617377, - 44.6307626 - ], - [ - -123.9624642, - 44.6331426 - ], - [ - -123.9624299, - 44.6355784 - ], - [ - -123.9623221, - 44.6362044 - ], - [ - -123.9623191, - 44.6362217 - ], - [ - -123.9622512, - 44.6366107 - ], - [ - -123.9622386, - 44.6366806 - ], - [ - -123.9621864, - 44.6369649 - ], - [ - -123.963709, - 44.6392703 - ], - [ - -123.9639087, - 44.6395402 - ], - [ - -123.964523, - 44.6404753 - ], - [ - -123.9649161, - 44.6411563 - ], - [ - -123.9652304, - 44.6417491 - ], - [ - -123.9654965, - 44.6422991 - ], - [ - -123.9660488, - 44.6437652 - ], - [ - -123.966264, - 44.6445522 - ], - [ - -123.9662873, - 44.6446395 - ], - [ - -123.9665876, - 44.6457874 - ], - [ - -123.9667245, - 44.6464105 - ], - [ - -123.966967, - 44.6477707 - ], - [ - -123.9679994, - 44.6523127 - ], - [ - -123.9681003, - 44.6528374 - ], - [ - -123.9681774, - 44.6533264 - ], - [ - -123.968272, - 44.6546671 - ], - [ - -123.9682631, - 44.6552161 - ], - [ - -123.9682204, - 44.6559141 - ], - [ - -123.9681775, - 44.6563171 - ], - [ - -123.968096, - 44.656885 - ], - [ - -123.9680021, - 44.657404 - ], - [ - -123.9678822, - 44.6579552 - ], - [ - -123.9672608, - 44.6603962 - ], - [ - -123.9667398, - 44.6618575 - ], - [ - -123.966426, - 44.6625366 - ], - [ - -123.9654717, - 44.6641504 - ], - [ - -123.9651288, - 44.6646205 - ], - [ - -123.9646077, - 44.6652778 - ], - [ - -123.9645838, - 44.6653057 - ], - [ - -123.9658384, - 44.6662888 - ], - [ - -123.9674224, - 44.6682006 - ], - [ - -123.9676625, - 44.6685726 - ], - [ - -123.9677638, - 44.668733 - ], - [ - -123.9680129, - 44.669136 - ], - [ - -123.9687258, - 44.6705454 - ], - [ - -123.968923, - 44.6710394 - ], - [ - -123.9690912, - 44.671499 - ], - [ - -123.9694062, - 44.6724433 - ], - [ - -123.969766, - 44.6732106 - ], - [ - -123.9701707, - 44.6742393 - ], - [ - -123.970532, - 44.6753683 - ], - [ - -123.970592, - 44.675564 - ], - [ - -123.9707105, - 44.6759685 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_16279_s_16275", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0719979, - 44.6242537 - ], - [ - -124.072096, - 44.624352 - ], - [ - -124.07332, - 44.6262943 - ], - [ - -124.07399, - 44.6283698 - ], - [ - -124.0740802, - 44.6304987 - ], - [ - -124.0735869, - 44.6325993 - ], - [ - -124.0725292, - 44.6345908 - ], - [ - -124.0709475, - 44.6363967 - ], - [ - -124.0689028, - 44.6379476 - ], - [ - -124.0664735, - 44.6391837 - ], - [ - -124.0637529, - 44.6400577 - ], - [ - -124.0608458, - 44.6405359 - ], - [ - -124.0578639, - 44.6405999 - ], - [ - -124.0549218, - 44.6402472 - ], - [ - -124.0521327, - 44.6394915 - ], - [ - -124.0516673, - 44.6393264 - ], - [ - -124.0501925, - 44.6386314 - ], - [ - -124.0485361, - 44.6381947 - ], - [ - -124.045993, - 44.6370812 - ], - [ - -124.0438032, - 44.6356349 - ], - [ - -124.0420507, - 44.6339113 - ], - [ - -124.0408029, - 44.6319767 - ], - [ - -124.0401077, - 44.6299054 - ], - [ - -124.0399918, - 44.6277771 - ], - [ - -124.0404595, - 44.6256735 - ], - [ - -124.0414929, - 44.6236755 - ], - [ - -124.0427232, - 44.6218656 - ], - [ - -124.0443849, - 44.6199543 - ], - [ - -124.0465621, - 44.6183284 - ], - [ - -124.0491614, - 44.6170575 - ], - [ - -124.0520712, - 44.6161961 - ], - [ - -124.0551671, - 44.6157812 - ], - [ - -124.0583161, - 44.6158305 - ], - [ - -124.0613835, - 44.6163419 - ], - [ - -124.0622334, - 44.6165519 - ], - [ - -124.0648874, - 44.6174191 - ], - [ - -124.0672608, - 44.6186324 - ], - [ - -124.0692662, - 44.620147 - ], - [ - -124.0708298, - 44.6219072 - ], - [ - -124.071894, - 44.6238483 - ], - [ - -124.0719979, - 44.6242537 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_22283_s_22283", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.8941545, - 44.7206863 - ], - [ - -123.8944146, - 44.7185645 - ], - [ - -123.8952503, - 44.7165196 - ], - [ - -123.8966294, - 44.7146302 - ], - [ - -123.8984989, - 44.7129689 - ], - [ - -123.9007868, - 44.7115996 - ], - [ - -123.9034053, - 44.7105748 - ], - [ - -123.9062538, - 44.7099339 - ], - [ - -123.9092228, - 44.7097015 - ], - [ - -123.9121984, - 44.7098866 - ], - [ - -123.9150663, - 44.7104819 - ], - [ - -123.9177162, - 44.7114648 - ], - [ - -123.9200464, - 44.7127973 - ], - [ - -123.9219674, - 44.7144284 - ], - [ - -123.9234053, - 44.7162954 - ], - [ - -123.9243049, - 44.7183265 - ], - [ - -123.9246314, - 44.7204436 - ], - [ - -123.9243724, - 44.7225656 - ], - [ - -123.9235376, - 44.7246107 - ], - [ - -123.9221592, - 44.7265004 - ], - [ - -123.92029, - 44.728162 - ], - [ - -123.9180019, - 44.7295317 - ], - [ - -123.9153828, - 44.7305569 - ], - [ - -123.9125334, - 44.731198 - ], - [ - -123.9095632, - 44.7314305 - ], - [ - -123.9065866, - 44.7312454 - ], - [ - -123.9037178, - 44.7306498 - ], - [ - -123.9010672, - 44.7296666 - ], - [ - -123.8987367, - 44.7283337 - ], - [ - -123.8968159, - 44.7267022 - ], - [ - -123.8953786, - 44.7248349 - ], - [ - -123.89448, - 44.7228036 - ], - [ - -123.8941545, - 44.7206863 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_22283_s_22285", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9145954, - 44.7103135 - ], - [ - -123.9150467, - 44.7102155 - ], - [ - -123.918019, - 44.7100048 - ], - [ - -123.9209918, - 44.7102116 - ], - [ - -123.9238509, - 44.7108279 - ], - [ - -123.9264866, - 44.7118301 - ], - [ - -123.9287976, - 44.7131796 - ], - [ - -123.930695, - 44.7148246 - ], - [ - -123.932106, - 44.716702 - ], - [ - -123.9329763, - 44.7187395 - ], - [ - -123.9332725, - 44.720859 - ], - [ - -123.9332737, - 44.721632 - ], - [ - -123.9332736, - 44.7216847 - ], - [ - -123.9332721, - 44.7219684 - ], - [ - -123.933277, - 44.7222901 - ], - [ - -123.9330121, - 44.7244283 - ], - [ - -123.9321627, - 44.7264876 - ], - [ - -123.930762, - 44.7283876 - ], - [ - -123.9288645, - 44.7300543 - ], - [ - -123.9265443, - 44.7314225 - ], - [ - -123.9238919, - 44.7324388 - ], - [ - -123.921011, - 44.7330634 - ], - [ - -123.9180139, - 44.7332721 - ], - [ - -123.9162516, - 44.7332701 - ], - [ - -123.9150347, - 44.7332341 - ], - [ - -123.9147257, - 44.733216 - ], - [ - -123.9134566, - 44.7331037 - ], - [ - -123.9132045, - 44.7330737 - ], - [ - -123.9123773, - 44.7329584 - ], - [ - -123.9122772, - 44.7329424 - ], - [ - -123.9122095, - 44.7329315 - ], - [ - -123.911614, - 44.7328341 - ], - [ - -123.9101235, - 44.7326013 - ], - [ - -123.9096624, - 44.7325239 - ], - [ - -123.909569, - 44.7325071 - ], - [ - -123.9095557, - 44.7325052 - ], - [ - -123.9093139, - 44.7324724 - ], - [ - -123.9080821, - 44.7322676 - ], - [ - -123.907809, - 44.7322136 - ], - [ - -123.9061615, - 44.7318142 - ], - [ - -123.9059295, - 44.7317472 - ], - [ - -123.9023731, - 44.7302964 - ], - [ - -123.9021501, - 44.7301744 - ], - [ - -123.9014824, - 44.7297611 - ], - [ - -123.9014275, - 44.7297368 - ], - [ - -123.9010146, - 44.7295469 - ], - [ - -123.9009936, - 44.7295369 - ], - [ - -123.8986838, - 44.7281858 - ], - [ - -123.8967882, - 44.7265394 - ], - [ - -123.8953797, - 44.724661 - ], - [ - -123.8945124, - 44.7226228 - ], - [ - -123.8942196, - 44.7205031 - ], - [ - -123.8945124, - 44.7183834 - ], - [ - -123.8953795, - 44.7163451 - ], - [ - -123.8967876, - 44.7144667 - ], - [ - -123.8986825, - 44.7128201 - ], - [ - -123.9009913, - 44.7114688 - ], - [ - -123.9036255, - 44.7104645 - ], - [ - -123.9064836, - 44.709846 - ], - [ - -123.9094561, - 44.7096368 - ], - [ - -123.9124287, - 44.7098452 - ], - [ - -123.9145954, - 44.7103135 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_22284_s_22286", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9221694, - 44.7242183 - ], - [ - -123.9221735, - 44.7242184 - ], - [ - -123.9221656, - 44.7247554 - ], - [ - -123.9221547, - 44.7254609 - ], - [ - -123.9218335, - 44.7275632 - ], - [ - -123.920947, - 44.7295814 - ], - [ - -123.9195288, - 44.7314388 - ], - [ - -123.9176326, - 44.7330653 - ], - [ - -123.9153302, - 44.734399 - ], - [ - -123.9127089, - 44.7353896 - ], - [ - -123.9098679, - 44.7359993 - ], - [ - -123.906915, - 44.7362052 - ], - [ - -123.90688, - 44.7362052 - ], - [ - -123.9039062, - 44.7359963 - ], - [ - -123.9010466, - 44.7353779 - ], - [ - -123.8984114, - 44.7343737 - ], - [ - -123.8961018, - 44.7330223 - ], - [ - -123.8942065, - 44.7313757 - ], - [ - -123.8927984, - 44.7294971 - ], - [ - -123.8919316, - 44.7274587 - ], - [ - -123.891869, - 44.727005 - ], - [ - -123.8910702, - 44.7260966 - ], - [ - -123.8900076, - 44.7241059 - ], - [ - -123.8895103, - 44.7220056 - ], - [ - -123.8895973, - 44.7198766 - ], - [ - -123.8902652, - 44.7178005 - ], - [ - -123.8914882, - 44.7158573 - ], - [ - -123.8932193, - 44.7141214 - ], - [ - -123.895392, - 44.7126597 - ], - [ - -123.8979227, - 44.7115283 - ], - [ - -123.9007143, - 44.7107706 - ], - [ - -123.9020205, - 44.7106132 - ], - [ - -123.902364, - 44.7105509 - ], - [ - -123.9026399, - 44.7105129 - ], - [ - -123.90266, - 44.7105101 - ], - [ - -123.902799, - 44.7104911 - ], - [ - -123.90331, - 44.7104579 - ], - [ - -123.9036595, - 44.7104158 - ], - [ - -123.9038854, - 44.7104204 - ], - [ - -123.9057798, - 44.7102971 - ], - [ - -123.9087562, - 44.7105223 - ], - [ - -123.9116135, - 44.711158 - ], - [ - -123.9142415, - 44.7121796 - ], - [ - -123.9165388, - 44.7135479 - ], - [ - -123.9170722, - 44.71402 - ], - [ - -123.917112, - 44.7140441 - ], - [ - -123.918714, - 44.7153875 - ], - [ - -123.918836, - 44.7155085 - ], - [ - -123.9207899, - 44.718148 - ], - [ - -123.9208509, - 44.718268 - ], - [ - -123.9215436, - 44.7201317 - ], - [ - -123.9217982, - 44.7211878 - ], - [ - -123.9219187, - 44.721658 - ], - [ - -123.9221532, - 44.7231461 - ], - [ - -123.9221723, - 44.7234631 - ], - [ - -123.9221694, - 44.7242183 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_22285_s_16278", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9646357, - 44.6652912 - ], - [ - -123.965299, - 44.6657627 - ], - [ - -123.965459, - 44.6659027 - ], - [ - -123.9669308, - 44.6674433 - ], - [ - -123.9680118, - 44.6691408 - ], - [ - -123.9687221, - 44.6705707 - ], - [ - -123.9690226, - 44.6712444 - ], - [ - -123.9694228, - 44.6722544 - ], - [ - -123.9695457, - 44.6725843 - ], - [ - -123.9705164, - 44.6753641 - ], - [ - -123.9707654, - 44.6762238 - ], - [ - -123.9708855, - 44.6767438 - ], - [ - -123.9710857, - 44.6783102 - ], - [ - -123.9711059, - 44.6790902 - ], - [ - -123.9710059, - 44.6805501 - ], - [ - -123.9708162, - 44.6817101 - ], - [ - -123.9704452, - 44.6831393 - ], - [ - -123.9702054, - 44.6838094 - ], - [ - -123.9697754, - 44.6848076 - ], - [ - -123.9693456, - 44.6856577 - ], - [ - -123.9689302, - 44.6863939 - ], - [ - -123.9680825, - 44.6877507 - ], - [ - -123.965388, - 44.6924754 - ], - [ - -123.9651053, - 44.6929396 - ], - [ - -123.9641656, - 44.6943898 - ], - [ - -123.9639123, - 44.6947619 - ], - [ - -123.9636623, - 44.6951119 - ], - [ - -123.9627223, - 44.6962511 - ], - [ - -123.9626236, - 44.6963557 - ], - [ - -123.9629381, - 44.6971273 - ], - [ - -123.9634101, - 44.6987238 - ], - [ - -123.9635416, - 44.7003527 - ], - [ - -123.963502, - 44.7019527 - ], - [ - -123.9632239, - 44.7038364 - ], - [ - -123.9626044, - 44.7061064 - ], - [ - -123.9618733, - 44.7079241 - ], - [ - -123.9617334, - 44.7081842 - ], - [ - -123.9603965, - 44.7100865 - ], - [ - -123.9601665, - 44.7103466 - ], - [ - -123.9589929, - 44.7114986 - ], - [ - -123.958503, - 44.7119186 - ], - [ - -123.956382, - 44.7134118 - ], - [ - -123.955932, - 44.7136718 - ], - [ - -123.9537339, - 44.71473 - ], - [ - -123.9513837, - 44.7156602 - ], - [ - -123.9506672, - 44.7159263 - ], - [ - -123.9466734, - 44.7173147 - ], - [ - -123.9436466, - 44.7184486 - ], - [ - -123.9434406, - 44.7185243 - ], - [ - -123.9355428, - 44.7213741 - ], - [ - -123.9345729, - 44.7220744 - ], - [ - -123.9333312, - 44.7228774 - ], - [ - -123.9329244, - 44.7231127 - ], - [ - -123.932077, - 44.7250772 - ], - [ - -123.9306585, - 44.7269518 - ], - [ - -123.9287541, - 44.728593 - ], - [ - -123.9264371, - 44.7299378 - ], - [ - -123.9237965, - 44.7309345 - ], - [ - -123.9209337, - 44.7315447 - ], - [ - -123.917959, - 44.7317451 - ], - [ - -123.9149865, - 44.7315278 - ], - [ - -123.9121308, - 44.7309012 - ], - [ - -123.9095014, - 44.7298895 - ], - [ - -123.9071996, - 44.7285315 - ], - [ - -123.9053137, - 44.7268794 - ], - [ - -123.9039163, - 44.7249968 - ], - [ - -123.903061, - 44.722956 - ], - [ - -123.9027806, - 44.7208355 - ], - [ - -123.9028016, - 44.7172755 - ], - [ - -123.9029872, - 44.7156294 - ], - [ - -123.9031574, - 44.7148595 - ], - [ - -123.9039797, - 44.7126647 - ], - [ - -123.9054239, - 44.7106399 - ], - [ - -123.9074268, - 44.7088734 - ], - [ - -123.9084768, - 44.7081235 - ], - [ - -123.9106917, - 44.7068155 - ], - [ - -123.9132117, - 44.7058275 - ], - [ - -123.9142816, - 44.7054976 - ], - [ - -123.9148875, - 44.7053625 - ], - [ - -123.9152999, - 44.7050648 - ], - [ - -123.9178497, - 44.703584 - ], - [ - -123.9186496, - 44.7032141 - ], - [ - -123.9193986, - 44.7028892 - ], - [ - -123.9200385, - 44.7026292 - ], - [ - -123.9207028, - 44.7023747 - ], - [ - -123.9295783, - 44.6991725 - ], - [ - -123.9309893, - 44.698644 - ], - [ - -123.9308949, - 44.6983923 - ], - [ - -123.930775, - 44.6978923 - ], - [ - -123.9305709, - 44.6955981 - ], - [ - -123.9306211, - 44.6947581 - ], - [ - -123.9309168, - 44.6930418 - ], - [ - -123.9315904, - 44.6913807 - ], - [ - -123.9319506, - 44.6907008 - ], - [ - -123.932573, - 44.6896855 - ], - [ - -123.932853, - 44.6892856 - ], - [ - -123.9335725, - 44.6883713 - ], - [ - -123.9353027, - 44.6864015 - ], - [ - -123.93558, - 44.6860972 - ], - [ - -123.9368522, - 44.684751 - ], - [ - -123.9373078, - 44.6840484 - ], - [ - -123.939965, - 44.6793932 - ], - [ - -123.9400964, - 44.6791734 - ], - [ - -123.9397972, - 44.6790131 - ], - [ - -123.9390872, - 44.6785631 - ], - [ - -123.9372854, - 44.6772057 - ], - [ - -123.9367054, - 44.6766857 - ], - [ - -123.9349069, - 44.6746426 - ], - [ - -123.934447, - 44.6739625 - ], - [ - -123.9333227, - 44.67168 - ], - [ - -123.9331128, - 44.67103 - ], - [ - -123.9327271, - 44.6687985 - ], - [ - -123.9326973, - 44.6676885 - ], - [ - -123.9327036, - 44.6671059 - ], - [ - -123.9328344, - 44.6644059 - ], - [ - -123.9330763, - 44.6628163 - ], - [ - -123.9334266, - 44.6614563 - ], - [ - -123.9344058, - 44.6591422 - ], - [ - -123.9347959, - 44.6584922 - ], - [ - -123.9360077, - 44.6568687 - ], - [ - -123.9377376, - 44.6549602 - ], - [ - -123.937659, - 44.6546338 - ], - [ - -123.9375487, - 44.6540965 - ], - [ - -123.9373976, - 44.6532052 - ], - [ - -123.9373479, - 44.6529735 - ], - [ - -123.9370102, - 44.6531086 - ], - [ - -123.9355265, - 44.6536287 - ], - [ - -123.9349665, - 44.6537987 - ], - [ - -123.9328768, - 44.6543088 - ], - [ - -123.9317566, - 44.6545188 - ], - [ - -123.929569, - 44.6548053 - ], - [ - -123.9279211, - 44.6556911 - ], - [ - -123.9251659, - 44.6566281 - ], - [ - -123.9222042, - 44.6571539 - ], - [ - -123.9191551, - 44.6572473 - ], - [ - -123.9161411, - 44.6569047 - ], - [ - -123.9132836, - 44.6561398 - ], - [ - -123.9129435, - 44.6560197 - ], - [ - -123.9101581, - 44.654751 - ], - [ - -123.9078219, - 44.653083 - ], - [ - -123.907642, - 44.652923 - ], - [ - -123.9059931, - 44.6511149 - ], - [ - -123.9048773, - 44.6491098 - ], - [ - -123.9043385, - 44.6469869 - ], - [ - -123.9043979, - 44.6448299 - ], - [ - -123.9050532, - 44.6427237 - ], - [ - -123.9062783, - 44.6407515 - ], - [ - -123.9066684, - 44.6402616 - ], - [ - -123.9083897, - 44.6385219 - ], - [ - -123.9094242, - 44.6378207 - ], - [ - -123.9098312, - 44.637423 - ], - [ - -123.9101912, - 44.637133 - ], - [ - -123.9132052, - 44.6352679 - ], - [ - -123.9140552, - 44.634868 - ], - [ - -123.9179642, - 44.6335531 - ], - [ - -123.9186941, - 44.6333931 - ], - [ - -123.921805, - 44.6329579 - ], - [ - -123.9222749, - 44.6329279 - ], - [ - -123.9238002, - 44.6329104 - ], - [ - -123.9238618, - 44.6328703 - ], - [ - -123.9257518, - 44.6317005 - ], - [ - -123.9278515, - 44.63061 - ], - [ - -123.9283614, - 44.6303901 - ], - [ - -123.9294415, - 44.6299658 - ], - [ - -123.9300314, - 44.6297559 - ], - [ - -123.9324868, - 44.6290646 - ], - [ - -123.9332964, - 44.6288928 - ], - [ - -123.9339954, - 44.6282084 - ], - [ - -123.9355955, - 44.6267885 - ], - [ - -123.9377218, - 44.6252456 - ], - [ - -123.940234, - 44.6240343 - ], - [ - -123.9430326, - 44.6232027 - ], - [ - -123.9460064, - 44.6227837 - ], - [ - -123.9490375, - 44.622794 - ], - [ - -123.9520057, - 44.6232332 - ], - [ - -123.954793, - 44.6240838 - ], - [ - -123.9572891, - 44.6253121 - ], - [ - -123.9593947, - 44.6268694 - ], - [ - -123.9610263, - 44.6286938 - ], - [ - -123.9621192, - 44.630713 - ], - [ - -123.9626298, - 44.6328468 - ], - [ - -123.9625379, - 44.6350106 - ], - [ - -123.9621804, - 44.6369618 - ], - [ - -123.9622072, - 44.6370021 - ], - [ - -123.9636118, - 44.6391834 - ], - [ - -123.9638429, - 44.639493 - ], - [ - -123.9644257, - 44.6403658 - ], - [ - -123.9649059, - 44.6411758 - ], - [ - -123.9655467, - 44.6424833 - ], - [ - -123.966017, - 44.6436833 - ], - [ - -123.9663711, - 44.6448171 - ], - [ - -123.9666313, - 44.6459271 - ], - [ - -123.9666645, - 44.6460748 - ], - [ - -123.9675255, - 44.6500847 - ], - [ - -123.9675903, - 44.6504216 - ], - [ - -123.9677247, - 44.6512119 - ], - [ - -123.9680104, - 44.6523941 - ], - [ - -123.9681841, - 44.65338 - ], - [ - -123.9682442, - 44.65392 - ], - [ - -123.9682897, - 44.6549728 - ], - [ - -123.9682699, - 44.6557728 - ], - [ - -123.9680511, - 44.6574265 - ], - [ - -123.9673918, - 44.6601566 - ], - [ - -123.9667741, - 44.6618679 - ], - [ - -123.9662643, - 44.662918 - ], - [ - -123.9646644, - 44.6652595 - ], - [ - -123.9646357, - 44.6652912 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_22286_s_22283", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9219311, - 44.7266648 - ], - [ - -123.9217102, - 44.7278366 - ], - [ - -123.9207421, - 44.7298516 - ], - [ - -123.9192411, - 44.7316933 - ], - [ - -123.9172648, - 44.7332909 - ], - [ - -123.9148892, - 44.7345828 - ], - [ - -123.9122055, - 44.7355195 - ], - [ - -123.9093169, - 44.736065 - ], - [ - -123.9063345, - 44.7361982 - ], - [ - -123.9059407, - 44.7361882 - ], - [ - -123.9030513, - 44.7359161 - ], - [ - -123.9002874, - 44.7352569 - ], - [ - -123.8977502, - 44.7342348 - ], - [ - -123.8955323, - 44.7328871 - ], - [ - -123.893715, - 44.7312631 - ], - [ - -123.8923645, - 44.7294223 - ], - [ - -123.8915302, - 44.7274319 - ], - [ - -123.8912427, - 44.7253646 - ], - [ - -123.89124, - 44.7247581 - ], - [ - -123.8912661, - 44.724596 - ], - [ - -123.8908739, - 44.7237903 - ], - [ - -123.8908256, - 44.7236428 - ], - [ - -123.8904531, - 44.7205306 - ], - [ - -123.8904673, - 44.7203587 - ], - [ - -123.8908309, - 44.7185576 - ], - [ - -123.8916109, - 44.7168251 - ], - [ - -123.8917077, - 44.7166593 - ], - [ - -123.893948, - 44.7139841 - ], - [ - -123.8940715, - 44.7138757 - ], - [ - -123.8972737, - 44.711769 - ], - [ - -123.8974842, - 44.7116659 - ], - [ - -123.9007915, - 44.7104407 - ], - [ - -123.9014002, - 44.710279 - ], - [ - -123.9017271, - 44.7101952 - ], - [ - -123.9019323, - 44.7101444 - ], - [ - -123.9038815, - 44.7097636 - ], - [ - -123.9041318, - 44.7097272 - ], - [ - -123.9050524, - 44.7096143 - ], - [ - -123.9052942, - 44.70959 - ], - [ - -123.9089721, - 44.7095408 - ], - [ - -123.9091655, - 44.7095549 - ], - [ - -123.910184, - 44.7096628 - ], - [ - -123.9109778, - 44.7096603 - ], - [ - -123.9142263, - 44.7101646 - ], - [ - -123.9172441, - 44.7111592 - ], - [ - -123.9173241, - 44.7111935 - ], - [ - -123.9197193, - 44.7124662 - ], - [ - -123.9217204, - 44.7140475 - ], - [ - -123.9232505, - 44.7158769 - ], - [ - -123.9242507, - 44.7178839 - ], - [ - -123.9246826, - 44.7199914 - ], - [ - -123.9245296, - 44.7221186 - ], - [ - -123.9237973, - 44.7241835 - ], - [ - -123.922514, - 44.726107 - ], - [ - -123.9219311, - 44.7266648 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_22287_s_22284", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9332695, - 44.7200945 - ], - [ - -123.9332723, - 44.720281 - ], - [ - -123.9332724, - 44.7204786 - ], - [ - -123.9332737, - 44.7216353 - ], - [ - -123.9332736, - 44.7216847 - ], - [ - -123.9332721, - 44.7219684 - ], - [ - -123.933277, - 44.7222901 - ], - [ - -123.9330121, - 44.7244283 - ], - [ - -123.9321627, - 44.7264876 - ], - [ - -123.930762, - 44.7283876 - ], - [ - -123.9288645, - 44.7300543 - ], - [ - -123.9265443, - 44.7314225 - ], - [ - -123.9238919, - 44.7324388 - ], - [ - -123.921011, - 44.7330634 - ], - [ - -123.9180139, - 44.7332721 - ], - [ - -123.9162516, - 44.7332701 - ], - [ - -123.9150347, - 44.7332341 - ], - [ - -123.9147257, - 44.733216 - ], - [ - -123.9134566, - 44.7331037 - ], - [ - -123.9132045, - 44.7330737 - ], - [ - -123.9123184, - 44.7329489 - ], - [ - -123.9116185, - 44.7328348 - ], - [ - -123.9101235, - 44.7326013 - ], - [ - -123.9096624, - 44.7325239 - ], - [ - -123.9095826, - 44.7325096 - ], - [ - -123.9092617, - 44.7324653 - ], - [ - -123.9080821, - 44.7322676 - ], - [ - -123.907809, - 44.7322136 - ], - [ - -123.9068442, - 44.7319797 - ], - [ - -123.9063751, - 44.7320501 - ], - [ - -123.9055959, - 44.7320562 - ], - [ - -123.9051755, - 44.732084 - ], - [ - -123.9048739, - 44.7320618 - ], - [ - -123.9033872, - 44.7320735 - ], - [ - -123.9004504, - 44.7316808 - ], - [ - -123.8976775, - 44.7308872 - ], - [ - -123.8951752, - 44.7297232 - ], - [ - -123.8930397, - 44.7282335 - ], - [ - -123.8929567, - 44.728163 - ], - [ - -123.891151, - 44.7262472 - ], - [ - -123.8899537, - 44.7241026 - ], - [ - -123.8894191, - 44.7218261 - ], - [ - -123.8895709, - 44.7195205 - ], - [ - -123.8895926, - 44.7194205 - ], - [ - -123.89037, - 44.7172919 - ], - [ - -123.8917327, - 44.7153185 - ], - [ - -123.8936248, - 44.7135812 - ], - [ - -123.8959687, - 44.7121512 - ], - [ - -123.8986684, - 44.711087 - ], - [ - -123.8987821, - 44.7110524 - ], - [ - -123.8995305, - 44.7108942 - ], - [ - -123.9008824, - 44.7104152 - ], - [ - -123.9016802, - 44.7102073 - ], - [ - -123.9036175, - 44.7098038 - ], - [ - -123.9038835, - 44.7097618 - ], - [ - -123.9051456, - 44.7096019 - ], - [ - -123.9053436, - 44.7095829 - ], - [ - -123.907998, - 44.7094949 - ], - [ - -123.9082039, - 44.7095009 - ], - [ - -123.9096371, - 44.7096239 - ], - [ - -123.9101314, - 44.7096092 - ], - [ - -123.9120216, - 44.7098006 - ], - [ - -123.9122246, - 44.7097236 - ], - [ - -123.9150844, - 44.7091089 - ], - [ - -123.9180574, - 44.7089039 - ], - [ - -123.9210293, - 44.7091163 - ], - [ - -123.9238861, - 44.709738 - ], - [ - -123.926518, - 44.7107451 - ], - [ - -123.9288239, - 44.712099 - ], - [ - -123.9307152, - 44.7137476 - ], - [ - -123.9321192, - 44.7156276 - ], - [ - -123.9329819, - 44.7176668 - ], - [ - -123.9332702, - 44.7197868 - ], - [ - -123.9332695, - 44.7200945 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_22287_s_22287", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -123.9027457, - 44.7198905 - ], - [ - -123.9030056, - 44.7177686 - ], - [ - -123.9038409, - 44.7157236 - ], - [ - -123.9052197, - 44.7138341 - ], - [ - -123.9070889, - 44.7121727 - ], - [ - -123.9093766, - 44.7108032 - ], - [ - -123.9119949, - 44.7097782 - ], - [ - -123.9148433, - 44.7091371 - ], - [ - -123.9178122, - 44.7089045 - ], - [ - -123.9207878, - 44.7090894 - ], - [ - -123.9236557, - 44.7096845 - ], - [ - -123.9263058, - 44.7106672 - ], - [ - -123.9286361, - 44.7119996 - ], - [ - -123.9305573, - 44.7136305 - ], - [ - -123.9319955, - 44.7154973 - ], - [ - -123.9328953, - 44.7175283 - ], - [ - -123.9332222, - 44.7196455 - ], - [ - -123.9329634, - 44.7217674 - ], - [ - -123.932129, - 44.7238126 - ], - [ - -123.9307509, - 44.7257024 - ], - [ - -123.928882, - 44.7273642 - ], - [ - -123.9265941, - 44.7287341 - ], - [ - -123.9239752, - 44.7297594 - ], - [ - -123.9211259, - 44.7304008 - ], - [ - -123.9181559, - 44.7306335 - ], - [ - -123.9151792, - 44.7304486 - ], - [ - -123.9123103, - 44.7298532 - ], - [ - -123.9096596, - 44.7288702 - ], - [ - -123.907329, - 44.7275375 - ], - [ - -123.905408, - 44.7259061 - ], - [ - -123.9039704, - 44.724039 - ], - [ - -123.9030715, - 44.7220077 - ], - [ - -123.9027457, - 44.7198905 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_22289_s_2456757", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0894051, - 44.4256859 - ], - [ - -124.089019, - 44.4260355 - ], - [ - -124.088384, - 44.4265755 - ], - [ - -124.0873879, - 44.4273441 - ], - [ - -124.0869239, - 44.4276692 - ], - [ - -124.0862835, - 44.4280927 - ], - [ - -124.085858, - 44.4283583 - ], - [ - -124.0845515, - 44.4292073 - ], - [ - -124.0838723, - 44.4296232 - ], - [ - -124.0831542, - 44.4300372 - ], - [ - -124.0826715, - 44.4303043 - ], - [ - -124.0823443, - 44.4304779 - ], - [ - -124.0822982, - 44.4305156 - ], - [ - -124.081738, - 44.4309495 - ], - [ - -124.081378, - 44.4312136 - ], - [ - -124.0800804, - 44.4320603 - ], - [ - -124.0797487, - 44.4324796 - ], - [ - -124.0778064, - 44.434092 - ], - [ - -124.0754623, - 44.435402 - ], - [ - -124.0728064, - 44.436359 - ], - [ - -124.0699409, - 44.4369263 - ], - [ - -124.066976, - 44.4370821 - ], - [ - -124.0640256, - 44.4368205 - ], - [ - -124.0612033, - 44.4361514 - ], - [ - -124.0586174, - 44.4351005 - ], - [ - -124.0563674, - 44.4337084 - ], - [ - -124.0545399, - 44.4320285 - ], - [ - -124.0532049, - 44.4301253 - ], - [ - -124.0524139, - 44.4280721 - ], - [ - -124.052197, - 44.4259478 - ], - [ - -124.0525626, - 44.423834 - ], - [ - -124.0526972, - 44.4234059 - ], - [ - -124.0531899, - 44.4221791 - ], - [ - -124.053341, - 44.4218721 - ], - [ - -124.0539387, - 44.4208324 - ], - [ - -124.0541358, - 44.4205344 - ], - [ - -124.0554464, - 44.4189254 - ], - [ - -124.0558115, - 44.4185544 - ], - [ - -124.056905, - 44.4175696 - ], - [ - -124.057161, - 44.4173646 - ], - [ - -124.0585304, - 44.416399 - ], - [ - -124.0589024, - 44.416168 - ], - [ - -124.0605452, - 44.4152803 - ], - [ - -124.0608325, - 44.415146 - ], - [ - -124.0609584, - 44.4150559 - ], - [ - -124.0609688, - 44.4147789 - ], - [ - -124.0616269, - 44.4127018 - ], - [ - -124.0628376, - 44.4107566 - ], - [ - -124.0645544, - 44.4090181 - ], - [ - -124.0667113, - 44.407553 - ], - [ - -124.0674542, - 44.4072175 - ], - [ - -124.0676466, - 44.4071181 - ], - [ - -124.0678293, - 44.4070481 - ], - [ - -124.0692253, - 44.4064176 - ], - [ - -124.0701107, - 44.4061745 - ], - [ - -124.0712221, - 44.4057489 - ], - [ - -124.071428, - 44.4056939 - ], - [ - -124.0744119, - 44.4051371 - ], - [ - -124.0767485, - 44.4050518 - ], - [ - -124.0792314, - 44.4047386 - ], - [ - -124.081904, - 44.4047431 - ], - [ - -124.082211, - 44.4047631 - ], - [ - -124.0833236, - 44.4048655 - ], - [ - -124.0837685, - 44.4049185 - ], - [ - -124.0865361, - 44.4054446 - ], - [ - -124.0891163, - 44.4063343 - ], - [ - -124.0914171, - 44.407556 - ], - [ - -124.0933565, - 44.409066 - ], - [ - -124.0948653, - 44.4108105 - ], - [ - -124.0958895, - 44.4127272 - ], - [ - -124.0963926, - 44.4147478 - ], - [ - -124.0963566, - 44.4168001 - ], - [ - -124.0957827, - 44.418811 - ], - [ - -124.0946914, - 44.4207087 - ], - [ - -124.0931215, - 44.4224253 - ], - [ - -124.0926425, - 44.4228544 - ], - [ - -124.0925013, - 44.422979 - ], - [ - -124.0922552, - 44.4231929 - ], - [ - -124.0916887, - 44.4236945 - ], - [ - -124.0916108, - 44.4237628 - ], - [ - -124.0907449, - 44.4245169 - ], - [ - -124.0906009, - 44.4246404 - ], - [ - -124.0900926, - 44.4250699 - ], - [ - -124.0897748, - 44.4253603 - ], - [ - -124.0895063, - 44.4255986 - ], - [ - -124.0894051, - 44.4256859 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_29681_s_16032", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0682551, - 44.6448045 - ], - [ - -124.0682469, - 44.6455823 - ], - [ - -124.0682795, - 44.6481911 - ], - [ - -124.0682799, - 44.6482236 - ], - [ - -124.0683077, - 44.6515786 - ], - [ - -124.0680329, - 44.6536994 - ], - [ - -124.0671836, - 44.6557413 - ], - [ - -124.0657925, - 44.6576256 - ], - [ - -124.063913, - 44.65928 - ], - [ - -124.0616172, - 44.6606408 - ], - [ - -124.0589936, - 44.6616558 - ], - [ - -124.0561428, - 44.6622859 - ], - [ - -124.0531745, - 44.6625069 - ], - [ - -124.0502028, - 44.6623103 - ], - [ - -124.0473421, - 44.6617036 - ], - [ - -124.0447022, - 44.6607102 - ], - [ - -124.0423847, - 44.6593683 - ], - [ - -124.0404786, - 44.6577294 - ], - [ - -124.0390573, - 44.6558566 - ], - [ - -124.0381752, - 44.6538219 - ], - [ - -124.0378662, - 44.6517034 - ], - [ - -124.0378402, - 44.6483646 - ], - [ - -124.0378081, - 44.6456828 - ], - [ - -124.037808, - 44.6455045 - ], - [ - -124.0378482, - 44.6418566 - ], - [ - -124.0381647, - 44.6397363 - ], - [ - -124.039055, - 44.6377009 - ], - [ - -124.0404849, - 44.6358289 - ], - [ - -124.0423992, - 44.6341923 - ], - [ - -124.0447241, - 44.6328541 - ], - [ - -124.0473702, - 44.6318659 - ], - [ - -124.0502356, - 44.6312657 - ], - [ - -124.0532099, - 44.6310765 - ], - [ - -124.0537819, - 44.6310804 - ], - [ - -124.0567474, - 44.6313091 - ], - [ - -124.0595936, - 44.6319465 - ], - [ - -124.0622109, - 44.632968 - ], - [ - -124.064499, - 44.6343345 - ], - [ - -124.0663699, - 44.6359934 - ], - [ - -124.0677517, - 44.6378811 - ], - [ - -124.0685912, - 44.6399249 - ], - [ - -124.0688562, - 44.6420464 - ], - [ - -124.0685363, - 44.6441641 - ], - [ - -124.0682551, - 44.6448045 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_29681_s_16194", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0682997, - 44.6425106 - ], - [ - -124.0682996, - 44.6425858 - ], - [ - -124.0682981, - 44.6427347 - ], - [ - -124.0682444, - 44.645429 - ], - [ - -124.0682795, - 44.6481893 - ], - [ - -124.0682788, - 44.6484317 - ], - [ - -124.0682449, - 44.650263 - ], - [ - -124.0684006, - 44.6510493 - ], - [ - -124.0682339, - 44.6531759 - ], - [ - -124.0674891, - 44.6552384 - ], - [ - -124.0661948, - 44.6571575 - ], - [ - -124.0644008, - 44.6588596 - ], - [ - -124.0621759, - 44.6602791 - ], - [ - -124.0596056, - 44.6613614 - ], - [ - -124.0567888, - 44.662065 - ], - [ - -124.0538338, - 44.6623629 - ], - [ - -124.0536399, - 44.6623687 - ], - [ - -124.0505559, - 44.6622374 - ], - [ - -124.0475726, - 44.6616644 - ], - [ - -124.0448129, - 44.6606733 - ], - [ - -124.0423905, - 44.6593049 - ], - [ - -124.0404051, - 44.6576155 - ], - [ - -124.0389387, - 44.6556749 - ], - [ - -124.0380514, - 44.6535629 - ], - [ - -124.0377798, - 44.6513665 - ], - [ - -124.0378389, - 44.6482615 - ], - [ - -124.0378052, - 44.6454957 - ], - [ - -124.0378062, - 44.6452423 - ], - [ - -124.0378624, - 44.6424957 - ], - [ - -124.037867, - 44.6388654 - ], - [ - -124.0378681, - 44.6387428 - ], - [ - -124.0379082, - 44.6363972 - ], - [ - -124.0382417, - 44.6342637 - ], - [ - -124.039156, - 44.6322186 - ], - [ - -124.0406156, - 44.6303419 - ], - [ - -124.0425633, - 44.6287066 - ], - [ - -124.0449232, - 44.6273767 - ], - [ - -124.047603, - 44.626404 - ], - [ - -124.0504983, - 44.6258265 - ], - [ - -124.053496, - 44.6256668 - ], - [ - -124.05432, - 44.6256811 - ], - [ - -124.054977, - 44.6256792 - ], - [ - -124.0550416, - 44.6256791 - ], - [ - -124.0555941, - 44.6256791 - ], - [ - -124.0585623, - 44.6258878 - ], - [ - -124.0614164, - 44.626506 - ], - [ - -124.0640469, - 44.6275098 - ], - [ - -124.0663528, - 44.6288608 - ], - [ - -124.0682453, - 44.6305071 - ], - [ - -124.0696518, - 44.6323854 - ], - [ - -124.0705182, - 44.6344235 - ], - [ - -124.0708112, - 44.6365431 - ], - [ - -124.0705193, - 44.6386628 - ], - [ - -124.0696539, - 44.6407011 - ], - [ - -124.0682997, - 44.6425106 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_29681_s_16196", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0682301, - 44.6529113 - ], - [ - -124.0682303, - 44.6529344 - ], - [ - -124.0682293, - 44.6531474 - ], - [ - -124.0682275, - 44.6535001 - ], - [ - -124.0682275, - 44.653529 - ], - [ - -124.0682274, - 44.6535609 - ], - [ - -124.0682238, - 44.6545015 - ], - [ - -124.068226, - 44.6549833 - ], - [ - -124.0682329, - 44.655109 - ], - [ - -124.0682568, - 44.6553272 - ], - [ - -124.0683942, - 44.6563034 - ], - [ - -124.0684059, - 44.6563643 - ], - [ - -124.0684534, - 44.6565696 - ], - [ - -124.0685439, - 44.6569424 - ], - [ - -124.0686593, - 44.6572378 - ], - [ - -124.0687396, - 44.6574519 - ], - [ - -124.0688089, - 44.6576445 - ], - [ - -124.0694, - 44.6590244 - ], - [ - -124.0699887, - 44.6611125 - ], - [ - -124.0699952, - 44.6632424 - ], - [ - -124.0694194, - 44.6653323 - ], - [ - -124.0682833, - 44.6673019 - ], - [ - -124.0666305, - 44.6690754 - ], - [ - -124.0645245, - 44.6705847 - ], - [ - -124.0620463, - 44.6717718 - ], - [ - -124.059291, - 44.672591 - ], - [ - -124.0563646, - 44.6730108 - ], - [ - -124.0533797, - 44.6730151 - ], - [ - -124.0504509, - 44.6726037 - ], - [ - -124.047691, - 44.6717925 - ], - [ - -124.0452061, - 44.6706126 - ], - [ - -124.0430915, - 44.6691093 - ], - [ - -124.0414287, - 44.6673406 - ], - [ - -124.0402814, - 44.6653743 - ], - [ - -124.0395903, - 44.6637589 - ], - [ - -124.0394039, - 44.6632852 - ], - [ - -124.0392876, - 44.6629616 - ], - [ - -124.0390094, - 44.6622483 - ], - [ - -124.0386748, - 44.6611871 - ], - [ - -124.038444, - 44.6602351 - ], - [ - -124.0384238, - 44.6601497 - ], - [ - -124.0383319, - 44.6597517 - ], - [ - -124.0382685, - 44.6594511 - ], - [ - -124.0381916, - 44.6590481 - ], - [ - -124.0381281, - 44.6586644 - ], - [ - -124.0379475, - 44.6573763 - ], - [ - -124.0379176, - 44.657137 - ], - [ - -124.0378578, - 44.656588 - ], - [ - -124.0378233, - 44.6561654 - ], - [ - -124.0377944, - 44.6556334 - ], - [ - -124.0377831, - 44.6552438 - ], - [ - -124.0377803, - 44.6545348 - ], - [ - -124.0377803, - 44.6544717 - ], - [ - -124.0377845, - 44.6534487 - ], - [ - -124.0377846, - 44.6534368 - ], - [ - -124.0377867, - 44.6530717 - ], - [ - -124.0377873, - 44.6529412 - ], - [ - -124.0377827, - 44.6526418 - ], - [ - -124.0377824, - 44.6526257 - ], - [ - -124.0377795, - 44.6524077 - ], - [ - -124.0377789, - 44.652254 - ], - [ - -124.0377831, - 44.651594 - ], - [ - -124.0377832, - 44.6515813 - ], - [ - -124.0377842, - 44.6514513 - ], - [ - -124.0380915, - 44.6493402 - ], - [ - -124.0389677, - 44.6473119 - ], - [ - -124.0403796, - 44.645444 - ], - [ - -124.0422732, - 44.6438077 - ], - [ - -124.0445761, - 44.6424653 - ], - [ - -124.0472005, - 44.6414681 - ], - [ - -124.0500464, - 44.6408542 - ], - [ - -124.053005, - 44.6406469 - ], - [ - -124.053202, - 44.6406469 - ], - [ - -124.0561709, - 44.6408557 - ], - [ - -124.0590258, - 44.6414738 - ], - [ - -124.061657, - 44.6424777 - ], - [ - -124.0639634, - 44.6438287 - ], - [ - -124.0658565, - 44.645475 - ], - [ - -124.0672633, - 44.6473533 - ], - [ - -124.06813, - 44.6493913 - ], - [ - -124.068423, - 44.651511 - ], - [ - -124.0682301, - 44.6529113 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_29681_s_29681", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0379761, - 44.6515454 - ], - [ - -124.0382307, - 44.6494232 - ], - [ - -124.0390604, - 44.6473773 - ], - [ - -124.0404332, - 44.6454862 - ], - [ - -124.0422962, - 44.6438226 - ], - [ - -124.044578, - 44.6424505 - ], - [ - -124.0471909, - 44.6414224 - ], - [ - -124.0500343, - 44.640778 - ], - [ - -124.0529992, - 44.6405419 - ], - [ - -124.0559717, - 44.6407232 - ], - [ - -124.0588375, - 44.641315 - ], - [ - -124.0614866, - 44.6422946 - ], - [ - -124.0638173, - 44.6436242 - ], - [ - -124.06574, - 44.6452529 - ], - [ - -124.0671807, - 44.647118 - ], - [ - -124.0680841, - 44.6491479 - ], - [ - -124.0684155, - 44.6512647 - ], - [ - -124.0681619, - 44.6533869 - ], - [ - -124.0673332, - 44.655433 - ], - [ - -124.0659611, - 44.6573244 - ], - [ - -124.0640982, - 44.6589884 - ], - [ - -124.0618163, - 44.6603609 - ], - [ - -124.0592029, - 44.6613893 - ], - [ - -124.0563585, - 44.662034 - ], - [ - -124.0533925, - 44.6622702 - ], - [ - -124.050419, - 44.6620888 - ], - [ - -124.0475522, - 44.6614968 - ], - [ - -124.0449024, - 44.6605169 - ], - [ - -124.0425715, - 44.6591869 - ], - [ - -124.040649, - 44.6575579 - ], - [ - -124.0392089, - 44.6556924 - ], - [ - -124.0383063, - 44.6536622 - ], - [ - -124.0379761, - 44.6515454 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_759417_s_16097", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0295173, - 44.9731164 - ], - [ - -124.0281266, - 44.9767284 - ], - [ - -124.0279545, - 44.9771427 - ], - [ - -124.0276516, - 44.9778218 - ], - [ - -124.0272591, - 44.9785981 - ], - [ - -124.0260345, - 44.9807583 - ], - [ - -124.0246469, - 44.9826467 - ], - [ - -124.0227667, - 44.9843067 - ], - [ - -124.0204662, - 44.9856744 - ], - [ - -124.0178338, - 44.9866973 - ], - [ - -124.0149707, - 44.987336 - ], - [ - -124.011987, - 44.987566 - ], - [ - -124.0089974, - 44.9873784 - ], - [ - -124.0061169, - 44.9867804 - ], - [ - -124.0034562, - 44.9857951 - ], - [ - -124.0011177, - 44.9844603 - ], - [ - -123.9991911, - 44.9828273 - ], - [ - -123.9977505, - 44.9809589 - ], - [ - -123.9968512, - 44.978927 - ], - [ - -123.9965278, - 44.9768095 - ], - [ - -123.9967926, - 44.974688 - ], - [ - -123.9976354, - 44.972644 - ], - [ - -123.9986437, - 44.9708669 - ], - [ - -123.9986792, - 44.9707873 - ], - [ - -124.0006962, - 44.965556 - ], - [ - -124.0015382, - 44.9639077 - ], - [ - -124.0018163, - 44.9634757 - ], - [ - -124.0028296, - 44.9621527 - ], - [ - -124.0030747, - 44.9618797 - ], - [ - -124.0047842, - 44.9603118 - ], - [ - -124.0057802, - 44.9595529 - ], - [ - -124.0080305, - 44.9581445 - ], - [ - -124.0106243, - 44.9570748 - ], - [ - -124.0134622, - 44.9563849 - ], - [ - -124.0164351, - 44.9561013 - ], - [ - -124.0194288, - 44.9562348 - ], - [ - -124.0223284, - 44.9567804 - ], - [ - -124.0250223, - 44.9577171 - ], - [ - -124.0274073, - 44.9590089 - ], - [ - -124.0293916, - 44.9606062 - ], - [ - -124.0308989, - 44.9624476 - ], - [ - -124.0318714, - 44.9644624 - ], - [ - -124.0322716, - 44.9665732 - ], - [ - -124.032084, - 44.9686989 - ], - [ - -124.0313158, - 44.9707577 - ], - [ - -124.0299965, - 44.9726706 - ], - [ - -124.0295173, - 44.9731164 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_759418_s_759420", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0355671, - 44.9288629 - ], - [ - -124.0364272, - 44.9298805 - ], - [ - -124.0367143, - 44.9302665 - ], - [ - -124.0378227, - 44.9321776 - ], - [ - -124.0381099, - 44.9328475 - ], - [ - -124.0386684, - 44.9347436 - ], - [ - -124.0387646, - 44.9353246 - ], - [ - -124.0387326, - 44.9380416 - ], - [ - -124.0386078, - 44.9387006 - ], - [ - -124.0378602, - 44.9408922 - ], - [ - -124.0376013, - 44.9414092 - ], - [ - -124.0365657, - 44.9430384 - ], - [ - -124.0359589, - 44.9438155 - ], - [ - -124.0351249, - 44.9447646 - ], - [ - -124.0345399, - 44.9453597 - ], - [ - -124.0325686, - 44.946993 - ], - [ - -124.0301828, - 44.9483184 - ], - [ - -124.0274758, - 44.9492839 - ], - [ - -124.024554, - 44.9498517 - ], - [ - -124.0215318, - 44.9499995 - ], - [ - -124.0185279, - 44.9497215 - ], - [ - -124.0156601, - 44.9490286 - ], - [ - -124.0130408, - 44.947948 - ], - [ - -124.0127421, - 44.9477948 - ], - [ - -124.0122846, - 44.9476074 - ], - [ - -124.010649, - 44.9470694 - ], - [ - -124.0082259, - 44.9458143 - ], - [ - -124.0061943, - 44.9442476 - ], - [ - -124.0046322, - 44.9424295 - ], - [ - -124.0035997, - 44.9404299 - ], - [ - -124.0031363, - 44.9383257 - ], - [ - -124.0032598, - 44.9361977 - ], - [ - -124.0039654, - 44.9341276 - ], - [ - -124.0052259, - 44.9321951 - ], - [ - -124.0069929, - 44.9304744 - ], - [ - -124.0080463, - 44.9297853 - ], - [ - -124.0092986, - 44.9280968 - ], - [ - -124.0111867, - 44.9264423 - ], - [ - -124.0134927, - 44.9250813 - ], - [ - -124.0161281, - 44.924066 - ], - [ - -124.0189916, - 44.9234353 - ], - [ - -124.0219732, - 44.9232136 - ], - [ - -124.0249584, - 44.9234093 - ], - [ - -124.0278325, - 44.924015 - ], - [ - -124.0304852, - 44.9250073 - ], - [ - -124.0328146, - 44.9263481 - ], - [ - -124.034731, - 44.927986 - ], - [ - -124.0355671, - 44.9288629 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_759419_s_16094", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0287633, - 44.9585995 - ], - [ - -124.0281428, - 44.9608229 - ], - [ - -124.026886, - 44.9629065 - ], - [ - -124.0250474, - 44.9647595 - ], - [ - -124.0227072, - 44.9663014 - ], - [ - -124.0199671, - 44.967465 - ], - [ - -124.0169465, - 44.9681995 - ], - [ - -124.0150258, - 44.9683653 - ], - [ - -124.0132021, - 44.9687355 - ], - [ - -124.0102119, - 44.9689101 - ], - [ - -124.0072313, - 44.9686673 - ], - [ - -124.0043746, - 44.9680162 - ], - [ - -124.0017519, - 44.966982 - ], - [ - -123.9994639, - 44.9656044 - ], - [ - -123.9975985, - 44.9639363 - ], - [ - -123.9962275, - 44.9620419 - ], - [ - -123.9954035, - 44.959994 - ], - [ - -123.9951581, - 44.9578713 - ], - [ - -123.9955006, - 44.9557554 - ], - [ - -123.9964179, - 44.9537276 - ], - [ - -123.9978746, - 44.9518658 - ], - [ - -123.9998147, - 44.9502416 - ], - [ - -124.0008831, - 44.9496392 - ], - [ - -124.0019229, - 44.9485179 - ], - [ - -124.0040292, - 44.9470018 - ], - [ - -124.0065115, - 44.9458066 - ], - [ - -124.0092744, - 44.9449781 - ], - [ - -124.0122117, - 44.9445483 - ], - [ - -124.0152107, - 44.9445337 - ], - [ - -124.018156, - 44.9449347 - ], - [ - -124.0209347, - 44.9457361 - ], - [ - -124.0234399, - 44.9469069 - ], - [ - -124.0255755, - 44.9484023 - ], - [ - -124.0272593, - 44.9501649 - ], - [ - -124.0284266, - 44.9521268 - ], - [ - -124.0290325, - 44.9542127 - ], - [ - -124.0290537, - 44.9563424 - ], - [ - -124.0287633, - 44.9585995 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_759420_s_16092", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0331279, - 44.9405268 - ], - [ - -124.0330569, - 44.9410205 - ], - [ - -124.032985, - 44.9412986 - ], - [ - -124.0324095, - 44.9427947 - ], - [ - -124.0323365, - 44.9430432 - ], - [ - -124.0323372, - 44.9437785 - ], - [ - -124.0317541, - 44.9458677 - ], - [ - -124.0306083, - 44.9478359 - ], - [ - -124.0289437, - 44.9496076 - ], - [ - -124.0268242, - 44.9511145 - ], - [ - -124.0243313, - 44.9522989 - ], - [ - -124.0215609, - 44.9531151 - ], - [ - -124.0186194, - 44.9535317 - ], - [ - -124.0156199, - 44.9535328 - ], - [ - -124.0126778, - 44.9531182 - ], - [ - -124.0099062, - 44.952304 - ], - [ - -124.0074117, - 44.9511215 - ], - [ - -124.00529, - 44.949616 - ], - [ - -124.0036229, - 44.9478455 - ], - [ - -124.0035159, - 44.9477035 - ], - [ - -124.0024715, - 44.9459702 - ], - [ - -124.0018648, - 44.9441348 - ], - [ - -124.0017729, - 44.9436837 - ], - [ - -124.0016808, - 44.9411238 - ], - [ - -124.001817, - 44.9406715 - ], - [ - -124.001724, - 44.9395141 - ], - [ - -124.0021754, - 44.9373352 - ], - [ - -124.0032361, - 44.9352657 - ], - [ - -124.0033645, - 44.9351177 - ], - [ - -124.0036644, - 44.9343378 - ], - [ - -124.0037354, - 44.9341988 - ], - [ - -124.0053098, - 44.9319616 - ], - [ - -124.0075626, - 44.9300394 - ], - [ - -124.0078566, - 44.9298404 - ], - [ - -124.0102196, - 44.9285295 - ], - [ - -124.0128971, - 44.9275711 - ], - [ - -124.0157862, - 44.9270022 - ], - [ - -124.0187761, - 44.9268446 - ], - [ - -124.0217518, - 44.9271042 - ], - [ - -124.0245991, - 44.9277712 - ], - [ - -124.0272085, - 44.92882 - ], - [ - -124.02948, - 44.9302102 - ], - [ - -124.0313261, - 44.9318884 - ], - [ - -124.0326759, - 44.9337902 - ], - [ - -124.0334776, - 44.9358425 - ], - [ - -124.0337001, - 44.9379664 - ], - [ - -124.033335, - 44.9400804 - ], - [ - -124.0331279, - 44.9405268 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_759421_s_16079", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0066822, - 44.9860388 - ], - [ - -124.0071379, - 44.985936 - ], - [ - -124.0101204, - 44.9856988 - ], - [ - -124.0131107, - 44.9858791 - ], - [ - -124.0159941, - 44.9864699 - ], - [ - -124.0186598, - 44.9874484 - ], - [ - -124.0210054, - 44.9887772 - ], - [ - -124.0229407, - 44.9904051 - ], - [ - -124.0243913, - 44.9922696 - ], - [ - -124.0253016, - 44.9942991 - ], - [ - -124.0256364, - 44.9964156 - ], - [ - -124.0253828, - 44.9985378 - ], - [ - -124.0252809, - 44.998929 - ], - [ - -124.0245477, - 45.0007941 - ], - [ - -124.0233595, - 45.0025373 - ], - [ - -124.0232278, - 45.0026933 - ], - [ - -124.0214824, - 45.004371 - ], - [ - -124.0193172, - 45.0057812 - ], - [ - -124.0179396, - 45.0065189 - ], - [ - -124.0177256, - 45.0066314 - ], - [ - -124.0173447, - 45.0068281 - ], - [ - -124.0158263, - 45.0075189 - ], - [ - -124.0155626, - 45.0076238 - ], - [ - -124.0140157, - 45.0081608 - ], - [ - -124.0137, - 45.0082551 - ], - [ - -124.010344, - 45.0089509 - ], - [ - -124.0099469, - 45.0089993 - ], - [ - -124.006991, - 45.0091526 - ], - [ - -124.0066817, - 45.0091474 - ], - [ - -124.0051738, - 45.0090688 - ], - [ - -124.0032944, - 45.0089044 - ], - [ - -124.0003846, - 45.0084423 - ], - [ - -123.9976563, - 45.0075889 - ], - [ - -123.9952129, - 45.0063766 - ], - [ - -123.993147, - 45.0048513 - ], - [ - -123.991537, - 45.003071 - ], - [ - -123.9904438, - 45.001103 - ], - [ - -123.9899089, - 44.9990221 - ], - [ - -123.9899525, - 44.9969071 - ], - [ - -123.990156, - 44.9956247 - ], - [ - -123.9907825, - 44.9935418 - ], - [ - -123.9919697, - 44.9915857 - ], - [ - -123.9936717, - 44.9898314 - ], - [ - -123.9958232, - 44.9883465 - ], - [ - -123.9983415, - 44.9871878 - ], - [ - -124.0011299, - 44.9864001 - ], - [ - -124.0040812, - 44.9860134 - ], - [ - -124.0066822, - 44.9860388 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_759422_s_759423", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0312721, - 44.959007 - ], - [ - -124.0313168, - 44.9590474 - ], - [ - -124.0327119, - 44.9610337 - ], - [ - -124.0335093, - 44.9631799 - ], - [ - -124.0336758, - 44.9653963 - ], - [ - -124.0332043, - 44.9675905 - ], - [ - -124.033088, - 44.9679087 - ], - [ - -124.0323666, - 44.969418 - ], - [ - -124.0322193, - 44.969665 - ], - [ - -124.0307842, - 44.9715353 - ], - [ - -124.0288625, - 44.973171 - ], - [ - -124.0265281, - 44.9745091 - ], - [ - -124.0238707, - 44.9754981 - ], - [ - -124.0209924, - 44.9761001 - ], - [ - -124.018004, - 44.9762919 - ], - [ - -124.0150203, - 44.9760661 - ], - [ - -124.012156, - 44.9754314 - ], - [ - -124.0095213, - 44.9744122 - ], - [ - -124.0072174, - 44.9730477 - ], - [ - -124.005333, - 44.9713903 - ], - [ - -124.0048773, - 44.9707731 - ], - [ - -124.0048214, - 44.9707231 - ], - [ - -124.004343, - 44.9700494 - ], - [ - -124.0039403, - 44.9695038 - ], - [ - -124.0039187, - 44.9694518 - ], - [ - -124.0034199, - 44.9687492 - ], - [ - -124.0031844, - 44.9681283 - ], - [ - -124.0018441, - 44.9666536 - ], - [ - -124.0007768, - 44.9648031 - ], - [ - -124.0002053, - 44.962845 - ], - [ - -124.0001489, - 44.9608458 - ], - [ - -124.0006096, - 44.958873 - ], - [ - -124.000856, - 44.9583917 - ], - [ - -124.0014941, - 44.9569191 - ], - [ - -124.0029183, - 44.9550446 - ], - [ - -124.0048302, - 44.9534035 - ], - [ - -124.0071561, - 44.9520587 - ], - [ - -124.0098067, - 44.9510619 - ], - [ - -124.0126801, - 44.9504513 - ], - [ - -124.015666, - 44.9502505 - ], - [ - -124.0186498, - 44.9504671 - ], - [ - -124.0215167, - 44.9510929 - ], - [ - -124.0241568, - 44.9521037 - ], - [ - -124.0264685, - 44.9534608 - ], - [ - -124.028363, - 44.955112 - ], - [ - -124.0296767, - 44.9568721 - ], - [ - -124.029956, - 44.9571232 - ], - [ - -124.0303411, - 44.9575742 - ], - [ - -124.0312721, - 44.959007 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_759423_s_16185", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0292521, - 44.9532983 - ], - [ - -124.0292615, - 44.9535226 - ], - [ - -124.0292547, - 44.9544286 - ], - [ - -124.029188, - 44.9553859 - ], - [ - -124.0291034, - 44.9560265 - ], - [ - -124.0298998, - 44.957165 - ], - [ - -124.03068, - 44.9591778 - ], - [ - -124.0309036, - 44.9612593 - ], - [ - -124.0309016, - 44.9613293 - ], - [ - -124.0305476, - 44.9634443 - ], - [ - -124.0296193, - 44.9654695 - ], - [ - -124.0281521, - 44.9673273 - ], - [ - -124.0262024, - 44.9689461 - ], - [ - -124.0238453, - 44.9702638 - ], - [ - -124.0211712, - 44.9712296 - ], - [ - -124.0182829, - 44.9718065 - ], - [ - -124.0152916, - 44.9719723 - ], - [ - -124.0133707, - 44.97181 - ], - [ - -124.0123129, - 44.9717577 - ], - [ - -124.0094583, - 44.971212 - ], - [ - -124.0068048, - 44.9702869 - ], - [ - -124.0044515, - 44.969017 - ], - [ - -124.0024861, - 44.9674495 - ], - [ - -124.0020531, - 44.9670284 - ], - [ - -124.0002279, - 44.9646985 - ], - [ - -123.9996681, - 44.9637164 - ], - [ - -123.9990616, - 44.9624251 - ], - [ - -123.9988148, - 44.9617641 - ], - [ - -123.9983713, - 44.959999 - ], - [ - -123.9982794, - 44.959307 - ], - [ - -123.998213, - 44.9581606 - ], - [ - -123.9982242, - 44.9574836 - ], - [ - -123.9982906, - 44.956592 - ], - [ - -123.9986571, - 44.9538297 - ], - [ - -123.9986575, - 44.9537847 - ], - [ - -123.9985106, - 44.9521703 - ], - [ - -123.9984965, - 44.9509476 - ], - [ - -123.9985387, - 44.9503256 - ], - [ - -123.9990778, - 44.9479436 - ], - [ - -123.9992649, - 44.9474646 - ], - [ - -124.0001555, - 44.9457561 - ], - [ - -124.0003556, - 44.9454531 - ], - [ - -124.0009706, - 44.9446179 - ], - [ - -124.0031191, - 44.9419852 - ], - [ - -124.0036043, - 44.9414297 - ], - [ - -124.0045674, - 44.9403978 - ], - [ - -124.0051551, - 44.9398113 - ], - [ - -124.0073683, - 44.9377506 - ], - [ - -124.0076362, - 44.9375083 - ], - [ - -124.0090033, - 44.9363075 - ], - [ - -124.0090393, - 44.9363282 - ], - [ - -124.0101641, - 44.9353416 - ], - [ - -124.0124694, - 44.9339797 - ], - [ - -124.0151044, - 44.9329633 - ], - [ - -124.0179678, - 44.9323316 - ], - [ - -124.0209497, - 44.9321087 - ], - [ - -124.0239355, - 44.9323032 - ], - [ - -124.0268106, - 44.9329077 - ], - [ - -124.0294645, - 44.933899 - ], - [ - -124.0317952, - 44.9352389 - ], - [ - -124.0337133, - 44.936876 - ], - [ - -124.0351449, - 44.9387474 - ], - [ - -124.0360351, - 44.9407812 - ], - [ - -124.0363495, - 44.9428993 - ], - [ - -124.0360761, - 44.9450203 - ], - [ - -124.0352252, - 44.9470626 - ], - [ - -124.0338296, - 44.9489477 - ], - [ - -124.0336766, - 44.9491128 - ], - [ - -124.0327975, - 44.9499673 - ], - [ - -124.031567, - 44.9510486 - ], - [ - -124.0297931, - 44.9527009 - ], - [ - -124.0293647, - 44.9531602 - ], - [ - -124.0292521, - 44.9532983 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_759423_s_759423", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0003184, - 44.9612581 - ], - [ - -124.0005756, - 44.9591361 - ], - [ - -124.0014109, - 44.9570905 - ], - [ - -124.0027921, - 44.9551999 - ], - [ - -124.0046661, - 44.9535369 - ], - [ - -124.0069609, - 44.9521654 - ], - [ - -124.0095883, - 44.9511382 - ], - [ - -124.0124474, - 44.9504945 - ], - [ - -124.0154284, - 44.9502593 - ], - [ - -124.0184167, - 44.9504415 - ], - [ - -124.0212976, - 44.951034 - ], - [ - -124.0239604, - 44.9520143 - ], - [ - -124.0263028, - 44.9533445 - ], - [ - -124.0282349, - 44.9549736 - ], - [ - -124.0296824, - 44.9568391 - ], - [ - -124.0305895, - 44.9588691 - ], - [ - -124.0309215, - 44.9609859 - ], - [ - -124.0306654, - 44.9631079 - ], - [ - -124.0298311, - 44.9651537 - ], - [ - -124.0284506, - 44.9670447 - ], - [ - -124.0265768, - 44.968708 - ], - [ - -124.0242818, - 44.9700799 - ], - [ - -124.0216538, - 44.9711075 - ], - [ - -124.0187938, - 44.9717513 - ], - [ - -124.0158117, - 44.9719867 - ], - [ - -124.0128223, - 44.9718045 - ], - [ - -124.0099405, - 44.9712117 - ], - [ - -124.007277, - 44.9702311 - ], - [ - -124.0049343, - 44.9689005 - ], - [ - -124.0030024, - 44.967271 - ], - [ - -124.0015555, - 44.9654052 - ], - [ - -124.0006493, - 44.9633749 - ], - [ - -124.0003184, - 44.9612581 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_759425_s_771261", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0088585, - 44.9485223 - ], - [ - -124.0095716, - 44.9485377 - ], - [ - -124.0102699, - 44.9483758 - ], - [ - -124.0131714, - 44.9481188 - ], - [ - -124.0160888, - 44.9482584 - ], - [ - -124.0189155, - 44.9487895 - ], - [ - -124.0215484, - 44.9496928 - ], - [ - -124.0238913, - 44.9509352 - ], - [ - -124.0258587, - 44.9524713 - ], - [ - -124.0273787, - 44.9542452 - ], - [ - -124.0283958, - 44.956192 - ], - [ - -124.0285262, - 44.956541 - ], - [ - -124.0288094, - 44.9571499 - ], - [ - -124.0294663, - 44.959228 - ], - [ - -124.0295395, - 44.9613572 - ], - [ - -124.0290262, - 44.9634556 - ], - [ - -124.0279461, - 44.9654426 - ], - [ - -124.0263407, - 44.9672418 - ], - [ - -124.0242715, - 44.9687841 - ], - [ - -124.0218182, - 44.9700101 - ], - [ - -124.0190749, - 44.9708727 - ], - [ - -124.0161473, - 44.9713388 - ], - [ - -124.0131477, - 44.9713904 - ], - [ - -124.0115317, - 44.9711909 - ], - [ - -124.0088935, - 44.9714207 - ], - [ - -124.0059555, - 44.9712731 - ], - [ - -124.0031118, - 44.9707286 - ], - [ - -124.0004677, - 44.9698075 - ], - [ - -123.9981213, - 44.9685439 - ], - [ - -123.9977539, - 44.9682519 - ], - [ - -123.9972886, - 44.9680479 - ], - [ - -123.9950922, - 44.9665957 - ], - [ - -123.9933373, - 44.964867 - ], - [ - -123.9920916, - 44.9629285 - ], - [ - -123.9914028, - 44.9608546 - ], - [ - -123.9912974, - 44.9587251 - ], - [ - -123.9917793, - 44.956622 - ], - [ - -123.9928301, - 44.9546262 - ], - [ - -123.992956, - 44.9544439 - ], - [ - -123.9945343, - 44.9526327 - ], - [ - -123.9965797, - 44.951075 - ], - [ - -123.9990138, - 44.9498305 - ], - [ - -124.0017428, - 44.948947 - ], - [ - -124.0046621, - 44.9484586 - ], - [ - -124.0076595, - 44.9483839 - ], - [ - -124.0088585, - 44.9485223 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_771261_s_759417", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.027278, - 44.95479 - ], - [ - -124.0277983, - 44.9551622 - ], - [ - -124.029986, - 44.9571399 - ], - [ - -124.030244, - 44.9574389 - ], - [ - -124.0315094, - 44.9592719 - ], - [ - -124.0316895, - 44.9596099 - ], - [ - -124.0325217, - 44.9618985 - ], - [ - -124.032812, - 44.9633234 - ], - [ - -124.0329264, - 44.9640624 - ], - [ - -124.0330217, - 44.9649594 - ], - [ - -124.0328223, - 44.9677029 - ], - [ - -124.0327454, - 44.9680059 - ], - [ - -124.0321073, - 44.9697113 - ], - [ - -124.0319404, - 44.9700454 - ], - [ - -124.0305131, - 44.9721502 - ], - [ - -124.0301801, - 44.9725302 - ], - [ - -124.0286749, - 44.9739685 - ], - [ - -124.0284679, - 44.9741355 - ], - [ - -124.0262747, - 44.9755891 - ], - [ - -124.0237241, - 44.9767109 - ], - [ - -124.020914, - 44.9774579 - ], - [ - -124.0179526, - 44.9778014 - ], - [ - -124.0149536, - 44.9777282 - ], - [ - -124.0120325, - 44.977241 - ], - [ - -124.0093014, - 44.9763586 - ], - [ - -124.0068655, - 44.9751149 - ], - [ - -124.0048183, - 44.9735578 - ], - [ - -124.0032385, - 44.9717471 - ], - [ - -124.0021869, - 44.9697524 - ], - [ - -124.0017036, - 44.9676504 - ], - [ - -124.0017463, - 44.9667741 - ], - [ - -124.001446, - 44.9664441 - ], - [ - -124.0000726, - 44.9645506 - ], - [ - -123.9992459, - 44.9625032 - ], - [ - -123.9989978, - 44.9603807 - ], - [ - -123.9993377, - 44.9582646 - ], - [ - -124.0002524, - 44.9562362 - ], - [ - -124.0017069, - 44.9543735 - ], - [ - -124.003645, - 44.952748 - ], - [ - -124.0059924, - 44.9514222 - ], - [ - -124.0086589, - 44.950447 - ], - [ - -124.011542, - 44.9498599 - ], - [ - -124.0145309, - 44.9496834 - ], - [ - -124.0175109, - 44.9499243 - ], - [ - -124.0203676, - 44.9505733 - ], - [ - -124.0229911, - 44.9516055 - ], - [ - -124.0252808, - 44.9529813 - ], - [ - -124.0271485, - 44.9546478 - ], - [ - -124.027278, - 44.95479 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_781958_s_16068", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0748897, - 44.6720436 - ], - [ - -124.0749906, - 44.6722821 - ], - [ - -124.0755134, - 44.6735719 - ], - [ - -124.0757329, - 44.6740695 - ], - [ - -124.0759955, - 44.6746357 - ], - [ - -124.0760852, - 44.6748357 - ], - [ - -124.0765514, - 44.6759107 - ], - [ - -124.076714, - 44.6763129 - ], - [ - -124.0768431, - 44.6766569 - ], - [ - -124.0769474, - 44.6769512 - ], - [ - -124.0769748, - 44.6770334 - ], - [ - -124.0770396, - 44.6772224 - ], - [ - -124.0773398, - 44.6780228 - ], - [ - -124.0775622, - 44.6787022 - ], - [ - -124.0777003, - 44.6791952 - ], - [ - -124.0779957, - 44.6813146 - ], - [ - -124.077706, - 44.6834345 - ], - [ - -124.076842, - 44.6854733 - ], - [ - -124.0754371, - 44.6873526 - ], - [ - -124.0735451, - 44.6890003 - ], - [ - -124.0712387, - 44.6903529 - ], - [ - -124.0686066, - 44.6913586 - ], - [ - -124.06575, - 44.6919785 - ], - [ - -124.0627787, - 44.692189 - ], - [ - -124.059807, - 44.6919818 - ], - [ - -124.056949, - 44.691365 - ], - [ - -124.0543148, - 44.6903622 - ], - [ - -124.0520055, - 44.6890121 - ], - [ - -124.0501099, - 44.6873665 - ], - [ - -124.0487009, - 44.6854887 - ], - [ - -124.0478326, - 44.6834509 - ], - [ - -124.0477904, - 44.6833001 - ], - [ - -124.0475739, - 44.6827222 - ], - [ - -124.0474916, - 44.6824925 - ], - [ - -124.0473767, - 44.6821565 - ], - [ - -124.0473682, - 44.6821311 - ], - [ - -124.0470326, - 44.6813567 - ], - [ - -124.046782, - 44.6808154 - ], - [ - -124.0467143, - 44.6806657 - ], - [ - -124.0464085, - 44.6799716 - ], - [ - -124.0463055, - 44.6797281 - ], - [ - -124.0457823, - 44.6784357 - ], - [ - -124.0457207, - 44.6782956 - ], - [ - -124.0451102, - 44.6762107 - ], - [ - -124.0450815, - 44.6740809 - ], - [ - -124.0456358, - 44.671988 - ], - [ - -124.0467515, - 44.6700124 - ], - [ - -124.0483857, - 44.6682302 - ], - [ - -124.0504757, - 44.6667096 - ], - [ - -124.0529412, - 44.6655092 - ], - [ - -124.0556873, - 44.6646751 - ], - [ - -124.0586086, - 44.6642392 - ], - [ - -124.061593, - 44.6642184 - ], - [ - -124.0645257, - 44.6646134 - ], - [ - -124.0672942, - 44.6654091 - ], - [ - -124.069792, - 44.6665748 - ], - [ - -124.0719233, - 44.6680659 - ], - [ - -124.0736061, - 44.669825 - ], - [ - -124.0747757, - 44.6717846 - ], - [ - -124.0748897, - 44.6720436 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_781959_s_16094", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0301254, - 44.9524329 - ], - [ - -124.0300558, - 44.9524972 - ], - [ - -124.0298326, - 44.9527015 - ], - [ - -124.0297314, - 44.9528127 - ], - [ - -124.0296076, - 44.9529465 - ], - [ - -124.0294565, - 44.9531072 - ], - [ - -124.0293354, - 44.9532612 - ], - [ - -124.0293467, - 44.9535223 - ], - [ - -124.0293469, - 44.9541792 - ], - [ - -124.0293241, - 44.9547212 - ], - [ - -124.0293074, - 44.9549989 - ], - [ - -124.0292924, - 44.9551899 - ], - [ - -124.0292263, - 44.9557618 - ], - [ - -124.0290189, - 44.9571152 - ], - [ - -124.0290176, - 44.9571296 - ], - [ - -124.0289729, - 44.9575144 - ], - [ - -124.0288046, - 44.9587046 - ], - [ - -124.0282044, - 44.9608145 - ], - [ - -124.02703, - 44.962799 - ], - [ - -124.0253274, - 44.9645801 - ], - [ - -124.0231636, - 44.9660879 - ], - [ - -124.0206234, - 44.9672633 - ], - [ - -124.0178066, - 44.96806 - ], - [ - -124.0148237, - 44.9684467 - ], - [ - -124.0146541, - 44.9684565 - ], - [ - -124.0136728, - 44.9686769 - ], - [ - -124.0106907, - 44.9689106 - ], - [ - -124.0077016, - 44.9687267 - ], - [ - -124.0048206, - 44.9681323 - ], - [ - -124.0021583, - 44.9671503 - ], - [ - -123.9998171, - 44.9658185 - ], - [ - -123.9978871, - 44.9641879 - ], - [ - -123.9964424, - 44.9623213 - ], - [ - -123.9955384, - 44.9602905 - ], - [ - -123.9952098, - 44.9581735 - ], - [ - -123.9954693, - 44.9560516 - ], - [ - -123.9963067, - 44.9540065 - ], - [ - -123.9976899, - 44.9521166 - ], - [ - -123.9985335, - 44.9513692 - ], - [ - -123.9985331, - 44.9513452 - ], - [ - -123.9985642, - 44.9505008 - ], - [ - -123.9985943, - 44.9501728 - ], - [ - -123.9989857, - 44.9483397 - ], - [ - -123.9991008, - 44.9479997 - ], - [ - -123.9998745, - 44.9463253 - ], - [ - -124.0001186, - 44.9459133 - ], - [ - -124.0008223, - 44.9448816 - ], - [ - -124.0011654, - 44.9444396 - ], - [ - -124.0013541, - 44.9442035 - ], - [ - -124.0026615, - 44.9426145 - ], - [ - -124.0030401, - 44.9421333 - ], - [ - -124.003673, - 44.941399 - ], - [ - -124.0040984, - 44.9409466 - ], - [ - -124.0044953, - 44.9405109 - ], - [ - -124.005255, - 44.9397504 - ], - [ - -124.005846, - 44.9392095 - ], - [ - -124.0074477, - 44.9377208 - ], - [ - -124.0094932, - 44.9361634 - ], - [ - -124.0119269, - 44.9349193 - ], - [ - -124.0146556, - 44.9340363 - ], - [ - -124.0175742, - 44.9335483 - ], - [ - -124.0205708, - 44.9334741 - ], - [ - -124.0235303, - 44.9338164 - ], - [ - -124.0263389, - 44.9345622 - ], - [ - -124.0288888, - 44.9356829 - ], - [ - -124.031082, - 44.9371353 - ], - [ - -124.0328342, - 44.9388636 - ], - [ - -124.0340781, - 44.9408016 - ], - [ - -124.0347659, - 44.9428746 - ], - [ - -124.034871, - 44.9450031 - ], - [ - -124.0343894, - 44.9471053 - ], - [ - -124.0333395, - 44.9491004 - ], - [ - -124.0317616, - 44.9509116 - ], - [ - -124.0301254, - 44.9524329 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_781972_s_15954", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.1084342, - 44.3553513 - ], - [ - -124.1084472, - 44.3553527 - ], - [ - -124.1083244, - 44.3559337 - ], - [ - -124.1082938, - 44.3560724 - ], - [ - -124.1081395, - 44.3567436 - ], - [ - -124.1080306, - 44.3572775 - ], - [ - -124.1079941, - 44.3574474 - ], - [ - -124.107866, - 44.358013 - ], - [ - -124.1076438, - 44.3590939 - ], - [ - -124.1075163, - 44.3597194 - ], - [ - -124.1074725, - 44.3599211 - ], - [ - -124.1073011, - 44.3606637 - ], - [ - -124.1072472, - 44.3609319 - ], - [ - -124.1071119, - 44.3616109 - ], - [ - -124.1070744, - 44.3617889 - ], - [ - -124.1070156, - 44.3620527 - ], - [ - -124.1067081, - 44.3634415 - ], - [ - -124.1067044, - 44.3634581 - ], - [ - -124.1065246, - 44.3642621 - ], - [ - -124.1065125, - 44.3643157 - ], - [ - -124.1062064, - 44.3656417 - ], - [ - -124.1057437, - 44.3678646 - ], - [ - -124.1057161, - 44.367992 - ], - [ - -124.1052604, - 44.3700165 - ], - [ - -124.1048782, - 44.3719328 - ], - [ - -124.1048373, - 44.3721254 - ], - [ - -124.1047395, - 44.3725602 - ], - [ - -124.1042713, - 44.3746411 - ], - [ - -124.103429, - 44.3784701 - ], - [ - -124.1031156, - 44.3799833 - ], - [ - -124.1031738, - 44.3806499 - ], - [ - -124.1033418, - 44.3819141 - ], - [ - -124.10335, - 44.3819784 - ], - [ - -124.1034998, - 44.3831805 - ], - [ - -124.1037245, - 44.3849096 - ], - [ - -124.1037881, - 44.3860841 - ], - [ - -124.1037763, - 44.3866401 - ], - [ - -124.1035447, - 44.3883736 - ], - [ - -124.1033988, - 44.3889626 - ], - [ - -124.1031866, - 44.3896787 - ], - [ - -124.1029977, - 44.3902247 - ], - [ - -124.102973, - 44.3902951 - ], - [ - -124.1027639, - 44.3908826 - ], - [ - -124.1020002, - 44.3930521 - ], - [ - -124.1015934, - 44.3940167 - ], - [ - -124.1010487, - 44.3951208 - ], - [ - -124.1010156, - 44.3951124 - ], - [ - -124.1000427, - 44.3967631 - ], - [ - -124.0983745, - 44.3985256 - ], - [ - -124.0962587, - 44.4000209 - ], - [ - -124.0937766, - 44.4011914 - ], - [ - -124.0910235, - 44.4019923 - ], - [ - -124.0881053, - 44.4023926 - ], - [ - -124.0851343, - 44.4023771 - ], - [ - -124.0822246, - 44.4019462 - ], - [ - -124.0794881, - 44.4011166 - ], - [ - -124.0770301, - 44.3999201 - ], - [ - -124.074945, - 44.3984028 - ], - [ - -124.0733129, - 44.396623 - ], - [ - -124.0721966, - 44.3946491 - ], - [ - -124.0716389, - 44.392557 - ], - [ - -124.0716611, - 44.390427 - ], - [ - -124.0722624, - 44.3883411 - ], - [ - -124.0722955, - 44.3882651 - ], - [ - -124.0724791, - 44.3878694 - ], - [ - -124.0727895, - 44.3872409 - ], - [ - -124.0733766, - 44.3855754 - ], - [ - -124.0733244, - 44.3851724 - ], - [ - -124.0733191, - 44.3851306 - ], - [ - -124.0731714, - 44.3839398 - ], - [ - -124.072985, - 44.3825319 - ], - [ - -124.0729465, - 44.3821799 - ], - [ - -124.0728099, - 44.3806059 - ], - [ - -124.0727935, - 44.3794833 - ], - [ - -124.0728096, - 44.3792026 - ], - [ - -124.0728349, - 44.3787288 - ], - [ - -124.0729862, - 44.3775573 - ], - [ - -124.0730974, - 44.3770173 - ], - [ - -124.0731003, - 44.3770032 - ], - [ - -124.0734697, - 44.3752242 - ], - [ - -124.0734904, - 44.3751277 - ], - [ - -124.0743494, - 44.3712318 - ], - [ - -124.0743578, - 44.371194 - ], - [ - -124.0748313, - 44.3690941 - ], - [ - -124.0749078, - 44.3687548 - ], - [ - -124.0752911, - 44.3668383 - ], - [ - -124.0753322, - 44.366645 - ], - [ - -124.0757964, - 44.3645877 - ], - [ - -124.0762646, - 44.3623435 - ], - [ - -124.0763021, - 44.3621733 - ], - [ - -124.0766222, - 44.3607891 - ], - [ - -124.0767946, - 44.3600203 - ], - [ - -124.0771021, - 44.3586346 - ], - [ - -124.0771446, - 44.3584441 - ], - [ - -124.077264, - 44.3578462 - ], - [ - -124.0772672, - 44.35783 - ], - [ - -124.0773453, - 44.357443 - ], - [ - -124.0773932, - 44.3572219 - ], - [ - -124.0775671, - 44.3564696 - ], - [ - -124.0776756, - 44.3559386 - ], - [ - -124.0776783, - 44.3559256 - ], - [ - -124.0779186, - 44.3547597 - ], - [ - -124.0779526, - 44.3546026 - ], - [ - -124.0780795, - 44.3540435 - ], - [ - -124.0781913, - 44.3534966 - ], - [ - -124.0782339, - 44.3533006 - ], - [ - -124.0783951, - 44.3526009 - ], - [ - -124.0785035, - 44.3520893 - ], - [ - -124.0785446, - 44.3519061 - ], - [ - -124.0785616, - 44.3518341 - ], - [ - -124.0793424, - 44.3497791 - ], - [ - -124.0806669, - 44.3478729 - ], - [ - -124.0824841, - 44.3461887 - ], - [ - -124.0847242, - 44.3447912 - ], - [ - -124.0873011, - 44.3437341 - ], - [ - -124.0901157, - 44.343058 - ], - [ - -124.0930601, - 44.3427889 - ], - [ - -124.096021, - 44.3429371 - ], - [ - -124.0988848, - 44.3434969 - ], - [ - -124.1015414, - 44.3444468 - ], - [ - -124.1038889, - 44.3457504 - ], - [ - -124.1058369, - 44.3473575 - ], - [ - -124.1073108, - 44.3492064 - ], - [ - -124.1082536, - 44.3512261 - ], - [ - -124.1086293, - 44.353339 - ], - [ - -124.1084342, - 44.3553513 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_781974_s_15962", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0947114, - 44.4762259 - ], - [ - -124.0946583, - 44.4772197 - ], - [ - -124.0946553, - 44.4772662 - ], - [ - -124.0947129, - 44.4774188 - ], - [ - -124.0947323, - 44.4774708 - ], - [ - -124.095735, - 44.4801806 - ], - [ - -124.0957503, - 44.4802225 - ], - [ - -124.0959315, - 44.4807203 - ], - [ - -124.0960053, - 44.4809219 - ], - [ - -124.0974687, - 44.4848876 - ], - [ - -124.0976999, - 44.4856141 - ], - [ - -124.0979051, - 44.4863791 - ], - [ - -124.0979742, - 44.486656 - ], - [ - -124.0981294, - 44.487328 - ], - [ - -124.0982128, - 44.4877377 - ], - [ - -124.098329, - 44.4883957 - ], - [ - -124.0984371, - 44.4893316 - ], - [ - -124.0984722, - 44.4899726 - ], - [ - -124.0984814, - 44.490597 - ], - [ - -124.0984299, - 44.492619 - ], - [ - -124.098421, - 44.4928433 - ], - [ - -124.0982886, - 44.4952793 - ], - [ - -124.0982491, - 44.4957463 - ], - [ - -124.0981803, - 44.4963463 - ], - [ - -124.0981157, - 44.4967952 - ], - [ - -124.0979958, - 44.4974862 - ], - [ - -124.097921, - 44.4978634 - ], - [ - -124.0976943, - 44.4988784 - ], - [ - -124.097441, - 44.4997706 - ], - [ - -124.0974018, - 44.4998841 - ], - [ - -124.09724, - 44.5003716 - ], - [ - -124.0962718, - 44.5023857 - ], - [ - -124.0947731, - 44.5042259 - ], - [ - -124.0928014, - 44.5058214 - ], - [ - -124.0904325, - 44.507111 - ], - [ - -124.0877575, - 44.508045 - ], - [ - -124.0848792, - 44.5085876 - ], - [ - -124.0819083, - 44.5087178 - ], - [ - -124.0789589, - 44.5084307 - ], - [ - -124.0761445, - 44.5077373 - ], - [ - -124.0735734, - 44.5066643 - ], - [ - -124.0713443, - 44.5052529 - ], - [ - -124.0695429, - 44.5035573 - ], - [ - -124.0682384, - 44.5016428 - ], - [ - -124.067481, - 44.499583 - ], - [ - -124.0672996, - 44.497457 - ], - [ - -124.0677012, - 44.4953465 - ], - [ - -124.0678088, - 44.4950228 - ], - [ - -124.0678997, - 44.4946168 - ], - [ - -124.067948, - 44.4943387 - ], - [ - -124.0679644, - 44.4941969 - ], - [ - -124.0680791, - 44.4921068 - ], - [ - -124.068118, - 44.4906088 - ], - [ - -124.0680548, - 44.4903348 - ], - [ - -124.067985, - 44.4900741 - ], - [ - -124.0666518, - 44.4864564 - ], - [ - -124.0666429, - 44.4864321 - ], - [ - -124.0665629, - 44.4862131 - ], - [ - -124.0663839, - 44.4857206 - ], - [ - -124.0653998, - 44.4830574 - ], - [ - -124.0649449, - 44.4818503 - ], - [ - -124.0648329, - 44.4815343 - ], - [ - -124.0647, - 44.4811343 - ], - [ - -124.0643932, - 44.4798965 - ], - [ - -124.0643462, - 44.4796125 - ], - [ - -124.0642474, - 44.4786479 - ], - [ - -124.0642345, - 44.4783259 - ], - [ - -124.0642499, - 44.4774342 - ], - [ - -124.0643342, - 44.4763042 - ], - [ - -124.0643841, - 44.4753793 - ], - [ - -124.0643947, - 44.4751879 - ], - [ - -124.0644237, - 44.4748203 - ], - [ - -124.0645297, - 44.4737881 - ], - [ - -124.0645647, - 44.4730723 - ], - [ - -124.0645736, - 44.4729215 - ], - [ - -124.0646168, - 44.4722905 - ], - [ - -124.0646516, - 44.4719147 - ], - [ - -124.0646609, - 44.4718354 - ], - [ - -124.0646581, - 44.471695 - ], - [ - -124.0646391, - 44.4713498 - ], - [ - -124.0645628, - 44.4709713 - ], - [ - -124.0638711, - 44.4690977 - ], - [ - -124.0638364, - 44.4690019 - ], - [ - -124.0634995, - 44.4680543 - ], - [ - -124.0632912, - 44.467476 - ], - [ - -124.0631594, - 44.4671194 - ], - [ - -124.0625958, - 44.4656523 - ], - [ - -124.0625533, - 44.4655393 - ], - [ - -124.0618587, - 44.4636522 - ], - [ - -124.0618354, - 44.463588 - ], - [ - -124.0614873, - 44.4626182 - ], - [ - -124.0609717, - 44.4611934 - ], - [ - -124.0607307, - 44.4605684 - ], - [ - -124.0605, - 44.4599898 - ], - [ - -124.0603939, - 44.4597099 - ], - [ - -124.0601377, - 44.4589957 - ], - [ - -124.0593425, - 44.4568662 - ], - [ - -124.0592022, - 44.4564593 - ], - [ - -124.0590394, - 44.4559443 - ], - [ - -124.0589089, - 44.4554864 - ], - [ - -124.0587801, - 44.4549784 - ], - [ - -124.0585995, - 44.4540317 - ], - [ - -124.0585137, - 44.4533637 - ], - [ - -124.0585114, - 44.4533455 - ], - [ - -124.0584425, - 44.4527995 - ], - [ - -124.0583818, - 44.4519355 - ], - [ - -124.058374, - 44.4513965 - ], - [ - -124.0583853, - 44.450849 - ], - [ - -124.0584194, - 44.450237 - ], - [ - -124.0584816, - 44.4495971 - ], - [ - -124.0587357, - 44.4477644 - ], - [ - -124.0588182, - 44.4468572 - ], - [ - -124.0588297, - 44.4467409 - ], - [ - -124.0590508, - 44.4446556 - ], - [ - -124.0591689, - 44.4434773 - ], - [ - -124.0591894, - 44.4432938 - ], - [ - -124.0595251, - 44.4405858 - ], - [ - -124.0601091, - 44.4384157 - ], - [ - -124.0612938, - 44.4363752 - ], - [ - -124.0630302, - 44.4345486 - ], - [ - -124.0652464, - 44.4330115 - ], - [ - -124.0662625, - 44.4325495 - ], - [ - -124.0665464, - 44.4323777 - ], - [ - -124.0672782, - 44.4320877 - ], - [ - -124.0678507, - 44.4318274 - ], - [ - -124.0681181, - 44.4317549 - ], - [ - -124.0691478, - 44.4313469 - ], - [ - -124.0719797, - 44.4306996 - ], - [ - -124.0749335, - 44.4304605 - ], - [ - -124.0752414, - 44.4304573 - ], - [ - -124.0781203, - 44.4306249 - ], - [ - -124.0809027, - 44.4311804 - ], - [ - -124.0834876, - 44.4321039 - ], - [ - -124.0857814, - 44.4333618 - ], - [ - -124.0877008, - 44.4349085 - ], - [ - -124.0891761, - 44.4366879 - ], - [ - -124.0901539, - 44.4386354 - ], - [ - -124.0905985, - 44.4406804 - ], - [ - -124.0906141, - 44.4408686 - ], - [ - -124.0904995, - 44.4429894 - ], - [ - -124.0898116, - 44.4450538 - ], - [ - -124.0893513, - 44.4457727 - ], - [ - -124.0893058, - 44.4462297 - ], - [ - -124.0893011, - 44.446275 - ], - [ - -124.0890848, - 44.4483249 - ], - [ - -124.0889914, - 44.4493578 - ], - [ - -124.0889494, - 44.4497249 - ], - [ - -124.0887231, - 44.4513631 - ], - [ - -124.0887249, - 44.4513774 - ], - [ - -124.0887388, - 44.4514853 - ], - [ - -124.0894656, - 44.4534288 - ], - [ - -124.0895035, - 44.4535323 - ], - [ - -124.0897282, - 44.4541578 - ], - [ - -124.0899217, - 44.4546423 - ], - [ - -124.0899574, - 44.4547333 - ], - [ - -124.0902486, - 44.4554872 - ], - [ - -124.0903112, - 44.4556547 - ], - [ - -124.0908616, - 44.4571736 - ], - [ - -124.090869, - 44.4571942 - ], - [ - -124.0912097, - 44.458142 - ], - [ - -124.0918725, - 44.4599403 - ], - [ - -124.0924351, - 44.4614028 - ], - [ - -124.0924744, - 44.4615068 - ], - [ - -124.0926375, - 44.4619478 - ], - [ - -124.0926611, - 44.4620125 - ], - [ - -124.0928872, - 44.4626394 - ], - [ - -124.092899, - 44.4626723 - ], - [ - -124.0932252, - 44.4635883 - ], - [ - -124.094126, - 44.4660253 - ], - [ - -124.0944777, - 44.4672637 - ], - [ - -124.0945943, - 44.4678462 - ], - [ - -124.094695, - 44.4683437 - ], - [ - -124.0947243, - 44.4684963 - ], - [ - -124.0948204, - 44.4690242 - ], - [ - -124.0949357, - 44.4699969 - ], - [ - -124.09499, - 44.4709729 - ], - [ - -124.0950004, - 44.4712493 - ], - [ - -124.0950106, - 44.4717552 - ], - [ - -124.0950102, - 44.4720858 - ], - [ - -124.0950003, - 44.4725258 - ], - [ - -124.0949497, - 44.4732543 - ], - [ - -124.0949167, - 44.4735376 - ], - [ - -124.0948918, - 44.4739051 - ], - [ - -124.0948507, - 44.4747536 - ], - [ - -124.0948193, - 44.4751696 - ], - [ - -124.0947114, - 44.4762259 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_833259_s_16275", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0720725, - 44.6243692 - ], - [ - -124.0731988, - 44.6260471 - ], - [ - -124.0739387, - 44.6281105 - ], - [ - -124.0741006, - 44.6302372 - ], - [ - -124.0736784, - 44.6323457 - ], - [ - -124.0726882, - 44.6343549 - ], - [ - -124.071168, - 44.6361874 - ], - [ - -124.0691762, - 44.637773 - ], - [ - -124.0667894, - 44.6390506 - ], - [ - -124.0640992, - 44.6399712 - ], - [ - -124.0612091, - 44.6404993 - ], - [ - -124.0582302, - 44.6406145 - ], - [ - -124.055277, - 44.6403126 - ], - [ - -124.0524632, - 44.6396051 - ], - [ - -124.0523131, - 44.6395551 - ], - [ - -124.0512369, - 44.6391584 - ], - [ - -124.0508669, - 44.6390083 - ], - [ - -124.0488168, - 44.6380111 - ], - [ - -124.0485568, - 44.6378611 - ], - [ - -124.0463307, - 44.6362791 - ], - [ - -124.0462507, - 44.6362091 - ], - [ - -124.044957, - 44.6348877 - ], - [ - -124.0445399, - 44.6342888 - ], - [ - -124.0438964, - 44.633549 - ], - [ - -124.0438833, - 44.6335315 - ], - [ - -124.0436172, - 44.633269 - ], - [ - -124.0423885, - 44.6313787 - ], - [ - -124.0416879, - 44.6293556 - ], - [ - -124.0415411, - 44.6272743 - ], - [ - -124.0419535, - 44.6252112 - ], - [ - -124.0424909, - 44.6241048 - ], - [ - -124.0425026, - 44.6240638 - ], - [ - -124.0425352, - 44.6239732 - ], - [ - -124.0435553, - 44.6219717 - ], - [ - -124.0451024, - 44.6201508 - ], - [ - -124.0471172, - 44.6185804 - ], - [ - -124.049522, - 44.6173209 - ], - [ - -124.0522246, - 44.6164206 - ], - [ - -124.0551211, - 44.6159142 - ], - [ - -124.0581002, - 44.615821 - ], - [ - -124.0610476, - 44.6161446 - ], - [ - -124.06385, - 44.6168727 - ], - [ - -124.0663998, - 44.6179772 - ], - [ - -124.068599, - 44.6194157 - ], - [ - -124.0703632, - 44.621133 - ], - [ - -124.0716244, - 44.6230631 - ], - [ - -124.0720725, - 44.6243692 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2438932_s_16065", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0670572, - 44.6493516 - ], - [ - -124.067399, - 44.650154 - ], - [ - -124.0676936, - 44.6522735 - ], - [ - -124.0674033, - 44.6543933 - ], - [ - -124.0665391, - 44.656432 - ], - [ - -124.0651342, - 44.6583111 - ], - [ - -124.0648842, - 44.6585288 - ], - [ - -124.0643894, - 44.6597483 - ], - [ - -124.063016, - 44.6616392 - ], - [ - -124.0611519, - 44.6633026 - ], - [ - -124.0588689, - 44.6646744 - ], - [ - -124.0562547, - 44.665702 - ], - [ - -124.0534097, - 44.6663457 - ], - [ - -124.0504434, - 44.666581 - ], - [ - -124.0474697, - 44.6663986 - ], - [ - -124.0446031, - 44.6658057 - ], - [ - -124.0419537, - 44.664825 - ], - [ - -124.0396235, - 44.6634942 - ], - [ - -124.0377019, - 44.6618646 - ], - [ - -124.0362628, - 44.6599986 - ], - [ - -124.0353615, - 44.6579682 - ], - [ - -124.0350694, - 44.6560885 - ], - [ - -124.0347894, - 44.6554854 - ], - [ - -124.0347765, - 44.6554444 - ], - [ - -124.03441, - 44.6534094 - ], - [ - -124.0345861, - 44.6513615 - ], - [ - -124.0352983, - 44.6493738 - ], - [ - -124.0365213, - 44.647517 - ], - [ - -124.0382113, - 44.6458575 - ], - [ - -124.0403081, - 44.6444543 - ], - [ - -124.0407371, - 44.6442173 - ], - [ - -124.0414221, - 44.6438603 - ], - [ - -124.042645, - 44.6432594 - ], - [ - -124.0434946, - 44.6428427 - ], - [ - -124.0435022, - 44.6428506 - ], - [ - -124.0459441, - 44.6418524 - ], - [ - -124.0487591, - 44.6411763 - ], - [ - -124.0517045, - 44.6409033 - ], - [ - -124.054668, - 44.6410439 - ], - [ - -124.0575369, - 44.6415927 - ], - [ - -124.060202, - 44.6425288 - ], - [ - -124.0625617, - 44.6438166 - ], - [ - -124.0645262, - 44.645407 - ], - [ - -124.0646242, - 44.645504 - ], - [ - -124.066035, - 44.6472083 - ], - [ - -124.0664364, - 44.6479902 - ], - [ - -124.0665309, - 44.6481162 - ], - [ - -124.0666763, - 44.6484575 - ], - [ - -124.0669892, - 44.6490671 - ], - [ - -124.0670572, - 44.6493516 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2438933_s_16031", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0738621, - 44.6470465 - ], - [ - -124.0734843, - 44.6479389 - ], - [ - -124.0720804, - 44.6498184 - ], - [ - -124.0701897, - 44.6514661 - ], - [ - -124.067885, - 44.6528189 - ], - [ - -124.0652547, - 44.6538246 - ], - [ - -124.0623999, - 44.6544447 - ], - [ - -124.0594306, - 44.6546552 - ], - [ - -124.0564607, - 44.6544482 - ], - [ - -124.0536046, - 44.6538315 - ], - [ - -124.0509719, - 44.6528288 - ], - [ - -124.048664, - 44.6514788 - ], - [ - -124.0467696, - 44.6498332 - ], - [ - -124.0453613, - 44.6479555 - ], - [ - -124.0444934, - 44.6459177 - ], - [ - -124.0441991, - 44.6437981 - ], - [ - -124.0441983, - 44.6428949 - ], - [ - -124.0441998, - 44.6427347 - ], - [ - -124.044218, - 44.6418117 - ], - [ - -124.0445507, - 44.6397004 - ], - [ - -124.0454526, - 44.6376756 - ], - [ - -124.046889, - 44.6358149 - ], - [ - -124.048805, - 44.6341893 - ], - [ - -124.0511273, - 44.6328609 - ], - [ - -124.0537672, - 44.6318807 - ], - [ - -124.0566237, - 44.6312859 - ], - [ - -124.0595876, - 44.6310995 - ], - [ - -124.0600066, - 44.6311025 - ], - [ - -124.0600567, - 44.6311029 - ], - [ - -124.0606876, - 44.6311089 - ], - [ - -124.0636519, - 44.6313458 - ], - [ - -124.0664945, - 44.6319911 - ], - [ - -124.0691063, - 44.6330199 - ], - [ - -124.071387, - 44.6343927 - ], - [ - -124.0732488, - 44.6360568 - ], - [ - -124.0746203, - 44.6379483 - ], - [ - -124.0754487, - 44.6399944 - ], - [ - -124.0757021, - 44.6421166 - ], - [ - -124.0753708, - 44.6442334 - ], - [ - -124.0744673, - 44.6462633 - ], - [ - -124.0738621, - 44.6470465 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2438934_s_16049", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0617682, - 44.6188754 - ], - [ - -124.0612503, - 44.6200042 - ], - [ - -124.0597865, - 44.6218599 - ], - [ - -124.0578438, - 44.6234759 - ], - [ - -124.0554969, - 44.6247903 - ], - [ - -124.0528359, - 44.6257523 - ], - [ - -124.0499633, - 44.626325 - ], - [ - -124.0469893, - 44.6264864 - ], - [ - -124.0440284, - 44.6262303 - ], - [ - -124.0411944, - 44.6255666 - ], - [ - -124.0385962, - 44.6245207 - ], - [ - -124.0363338, - 44.6231328 - ], - [ - -124.0344941, - 44.6214564 - ], - [ - -124.0331478, - 44.6195559 - ], - [ - -124.0323466, - 44.6175042 - ], - [ - -124.0321212, - 44.6153804 - ], - [ - -124.0324802, - 44.6132659 - ], - [ - -124.0327713, - 44.6123312 - ], - [ - -124.0327622, - 44.6123636 - ], - [ - -124.0333289, - 44.6107359 - ], - [ - -124.0342502, - 44.6091775 - ], - [ - -124.0343133, - 44.6090905 - ], - [ - -124.0343447, - 44.6090473 - ], - [ - -124.0346208, - 44.6086704 - ], - [ - -124.035307, - 44.6078276 - ], - [ - -124.035497, - 44.6076167 - ], - [ - -124.0359864, - 44.6071059 - ], - [ - -124.0361594, - 44.6069359 - ], - [ - -124.036171, - 44.6069246 - ], - [ - -124.036221, - 44.6068756 - ], - [ - -124.0366157, - 44.6065057 - ], - [ - -124.0370418, - 44.6061238 - ], - [ - -124.0371222, - 44.6060523 - ], - [ - -124.0371812, - 44.6060003 - ], - [ - -124.0374742, - 44.6057498 - ], - [ - -124.0379574, - 44.6053493 - ], - [ - -124.0382802, - 44.6050642 - ], - [ - -124.0383133, - 44.605035 - ], - [ - -124.0384278, - 44.6049346 - ], - [ - -124.0405281, - 44.6034229 - ], - [ - -124.0430008, - 44.6022329 - ], - [ - -124.0457508, - 44.6014104 - ], - [ - -124.0486726, - 44.6009869 - ], - [ - -124.0516538, - 44.6009786 - ], - [ - -124.05458, - 44.601386 - ], - [ - -124.0573388, - 44.6021934 - ], - [ - -124.0598243, - 44.6033697 - ], - [ - -124.0619408, - 44.6048698 - ], - [ - -124.0636072, - 44.606636 - ], - [ - -124.0647593, - 44.6086005 - ], - [ - -124.0653528, - 44.6106878 - ], - [ - -124.0653648, - 44.6128177 - ], - [ - -124.0647949, - 44.6149084 - ], - [ - -124.0636648, - 44.6168795 - ], - [ - -124.062018, - 44.6186552 - ], - [ - -124.0619201, - 44.6187412 - ], - [ - -124.0617682, - 44.6188754 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2455436_s_16082", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0223392, - 44.9861269 - ], - [ - -124.021937, - 44.9877051 - ], - [ - -124.020837, - 44.9896867 - ], - [ - -124.0192132, - 44.9914779 - ], - [ - -124.017128, - 44.9930098 - ], - [ - -124.0146616, - 44.9942236 - ], - [ - -124.0119088, - 44.9950726 - ], - [ - -124.0089754, - 44.9955242 - ], - [ - -124.0059742, - 44.9955609 - ], - [ - -124.0030206, - 44.9951815 - ], - [ - -124.0002281, - 44.9944003 - ], - [ - -123.9977042, - 44.9932476 - ], - [ - -123.9955458, - 44.9917676 - ], - [ - -123.9938359, - 44.9900172 - ], - [ - -123.9926401, - 44.9880637 - ], - [ - -123.9920045, - 44.9859822 - ], - [ - -123.9919667, - 44.9844098 - ], - [ - -123.9919124, - 44.9844087 - ], - [ - -123.9919138, - 44.984371 - ], - [ - -123.9919123, - 44.9841285 - ], - [ - -123.9919148, - 44.9838751 - ], - [ - -123.9919159, - 44.9838371 - ], - [ - -123.9919229, - 44.9835759 - ], - [ - -123.9919224, - 44.9834259 - ], - [ - -123.9919354, - 44.98295 - ], - [ - -123.9919519, - 44.9826672 - ], - [ - -123.9919684, - 44.9823703 - ], - [ - -123.9919707, - 44.9823301 - ], - [ - -123.9919788, - 44.9821981 - ], - [ - -123.9920246, - 44.9817049 - ], - [ - -123.9920276, - 44.9816809 - ], - [ - -123.9920459, - 44.9815451 - ], - [ - -123.9920739, - 44.9813491 - ], - [ - -123.9922315, - 44.980547 - ], - [ - -123.9922375, - 44.980523 - ], - [ - -123.9923164, - 44.9802308 - ], - [ - -123.9923745, - 44.9800308 - ], - [ - -123.9924503, - 44.979784 - ], - [ - -123.9924984, - 44.979636 - ], - [ - -123.992539, - 44.9795142 - ], - [ - -123.992553, - 44.9794732 - ], - [ - -123.992896, - 44.9786222 - ], - [ - -123.9929641, - 44.9784762 - ], - [ - -123.9930288, - 44.9783403 - ], - [ - -123.9930468, - 44.9783033 - ], - [ - -123.9932566, - 44.9778985 - ], - [ - -123.9933336, - 44.9777585 - ], - [ - -123.9933459, - 44.9777363 - ], - [ - -123.9933769, - 44.9776803 - ], - [ - -123.9940023, - 44.9766974 - ], - [ - -123.9940413, - 44.9766434 - ], - [ - -123.9940904, - 44.976576 - ], - [ - -123.9941624, - 44.976478 - ], - [ - -123.9946511, - 44.9758627 - ], - [ - -123.9947992, - 44.9756897 - ], - [ - -123.9952532, - 44.9751904 - ], - [ - -123.9954172, - 44.9750204 - ], - [ - -123.9963, - 44.9741932 - ], - [ - -123.996433, - 44.9740802 - ], - [ - -123.996436, - 44.974082 - ], - [ - -123.9968688, - 44.9737244 - ], - [ - -123.9970788, - 44.9735605 - ], - [ - -123.9972268, - 44.9734494 - ], - [ - -123.9973858, - 44.9731761 - ], - [ - -123.9987973, - 44.9712966 - ], - [ - -124.0006981, - 44.9696488 - ], - [ - -124.0030152, - 44.9682957 - ], - [ - -124.0056595, - 44.9672896 - ], - [ - -124.0085295, - 44.9666689 - ], - [ - -124.0115148, - 44.9664575 - ], - [ - -124.0145009, - 44.9666635 - ], - [ - -124.017373, - 44.9672791 - ], - [ - -124.0200208, - 44.9682806 - ], - [ - -124.0223427, - 44.9696295 - ], - [ - -124.0242493, - 44.9712739 - ], - [ - -124.0256675, - 44.9731509 - ], - [ - -124.0265426, - 44.9751881 - ], - [ - -124.026841, - 44.9773073 - ], - [ - -124.0265512, - 44.9794272 - ], - [ - -124.0256842, - 44.9814662 - ], - [ - -124.0251508, - 44.9823839 - ], - [ - -124.0245142, - 44.9834885 - ], - [ - -124.0223931, - 44.9860781 - ], - [ - -124.0223392, - 44.9861269 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2455436_s_2456766", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.022531, - 44.9841855 - ], - [ - -124.0225316, - 44.9842613 - ], - [ - -124.0225317, - 44.9842736 - ], - [ - -124.0225328, - 44.9844266 - ], - [ - -124.0225284, - 44.9847428 - ], - [ - -124.0225265, - 44.9848008 - ], - [ - -124.0225257, - 44.9848222 - ], - [ - -124.0225197, - 44.9849832 - ], - [ - -124.0224751, - 44.9855743 - ], - [ - -124.0224711, - 44.9856093 - ], - [ - -124.021937, - 44.9877051 - ], - [ - -124.020837, - 44.9896867 - ], - [ - -124.0192132, - 44.9914779 - ], - [ - -124.017128, - 44.9930098 - ], - [ - -124.0146616, - 44.9942236 - ], - [ - -124.0119088, - 44.9950726 - ], - [ - -124.0089754, - 44.9955242 - ], - [ - -124.0059742, - 44.9955609 - ], - [ - -124.0030206, - 44.9951815 - ], - [ - -124.0002281, - 44.9944003 - ], - [ - -123.9977042, - 44.9932476 - ], - [ - -123.9955458, - 44.9917676 - ], - [ - -123.9938359, - 44.9900172 - ], - [ - -123.9926401, - 44.9880637 - ], - [ - -123.9920045, - 44.9859822 - ], - [ - -123.9919807, - 44.9849931 - ], - [ - -123.9918539, - 44.9847884 - ], - [ - -123.9912059, - 44.9827088 - ], - [ - -123.9911421, - 44.9805794 - ], - [ - -123.9916647, - 44.9784822 - ], - [ - -123.9927538, - 44.9764976 - ], - [ - -123.9943673, - 44.9747019 - ], - [ - -123.9964432, - 44.9731641 - ], - [ - -123.9989019, - 44.9719432 - ], - [ - -124.0016487, - 44.9710863 - ], - [ - -124.0045782, - 44.9706261 - ], - [ - -124.0075779, - 44.9705804 - ], - [ - -124.0077428, - 44.9705894 - ], - [ - -124.007843, - 44.9705951 - ], - [ - -124.0080826, - 44.9706093 - ], - [ - -124.0082541, - 44.9706187 - ], - [ - -124.0088837, - 44.9706625 - ], - [ - -124.0090377, - 44.9706755 - ], - [ - -124.0090633, - 44.9706777 - ], - [ - -124.0093903, - 44.9707057 - ], - [ - -124.0093865, - 44.9707278 - ], - [ - -124.0119022, - 44.9710479 - ], - [ - -124.014701, - 44.9718277 - ], - [ - -124.017231, - 44.9729809 - ], - [ - -124.0193948, - 44.9744628 - ], - [ - -124.0211088, - 44.9762163 - ], - [ - -124.0223068, - 44.9781739 - ], - [ - -124.0229426, - 44.9802599 - ], - [ - -124.0229916, - 44.9823938 - ], - [ - -124.022531, - 44.9841855 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2455449_s_29681", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0384372, - 44.6540176 - ], - [ - -124.0382729, - 44.6536307 - ], - [ - -124.037981, - 44.6515109 - ], - [ - -124.038274, - 44.6493913 - ], - [ - -124.0391407, - 44.6473532 - ], - [ - -124.0405475, - 44.6454749 - ], - [ - -124.0424406, - 44.6438287 - ], - [ - -124.044747, - 44.6424777 - ], - [ - -124.0473782, - 44.6414738 - ], - [ - -124.0502331, - 44.6408556 - ], - [ - -124.0532021, - 44.6406469 - ], - [ - -124.053755, - 44.6406469 - ], - [ - -124.0568224, - 44.6408699 - ], - [ - -124.059764, - 44.6415296 - ], - [ - -124.0624591, - 44.6425991 - ], - [ - -124.064797, - 44.6440344 - ], - [ - -124.065577, - 44.6446213 - ], - [ - -124.0659345, - 44.6448998 - ], - [ - -124.0662505, - 44.6451547 - ], - [ - -124.0664046, - 44.6452811 - ], - [ - -124.0667927, - 44.645604 - ], - [ - -124.0668483, - 44.6456508 - ], - [ - -124.0668483, - 44.6456508 - ], - [ - -124.0670713, - 44.6458378 - ], - [ - -124.0671284, - 44.6458859 - ], - [ - -124.0674254, - 44.6461379 - ], - [ - -124.0679978, - 44.6466545 - ], - [ - -124.0682038, - 44.6468525 - ], - [ - -124.0690598, - 44.6477687 - ], - [ - -124.0692519, - 44.6479986 - ], - [ - -124.0698112, - 44.648731 - ], - [ - -124.0699823, - 44.648977 - ], - [ - -124.0701689, - 44.6492553 - ], - [ - -124.0703059, - 44.6494673 - ], - [ - -124.0712237, - 44.6513049 - ], - [ - -124.0716663, - 44.6532301 - ], - [ - -124.0716195, - 44.6551807 - ], - [ - -124.0715839, - 44.655417 - ], - [ - -124.0715533, - 44.6556263 - ], - [ - -124.0714789, - 44.6560528 - ], - [ - -124.0714379, - 44.6562548 - ], - [ - -124.0713478, - 44.6566993 - ], - [ - -124.0713263, - 44.6568014 - ], - [ - -124.0712644, - 44.6570874 - ], - [ - -124.0710375, - 44.657919 - ], - [ - -124.0709296, - 44.658246 - ], - [ - -124.0699281, - 44.6603171 - ], - [ - -124.0683647, - 44.6622026 - ], - [ - -124.066303, - 44.6638259 - ], - [ - -124.0638268, - 44.6651209 - ], - [ - -124.0610367, - 44.6660351 - ], - [ - -124.0580464, - 44.6665311 - ], - [ - -124.0549773, - 44.6665888 - ], - [ - -124.0519545, - 44.6662058 - ], - [ - -124.0491009, - 44.6653978 - ], - [ - -124.0489389, - 44.6653378 - ], - [ - -124.0488701, - 44.6653122 - ], - [ - -124.0487581, - 44.6652702 - ], - [ - -124.0469583, - 44.6644767 - ], - [ - -124.0468393, - 44.6644157 - ], - [ - -124.0458971, - 44.6638454 - ], - [ - -124.0440913, - 44.663008 - ], - [ - -124.0419541, - 44.6615214 - ], - [ - -124.0402645, - 44.6597657 - ], - [ - -124.0390873, - 44.6578085 - ], - [ - -124.0384678, - 44.6557249 - ], - [ - -124.0384372, - 44.6540176 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2456756_s_781972", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.11987, - 44.3148411 - ], - [ - -124.1198647, - 44.3151629 - ], - [ - -124.1197919, - 44.3158829 - ], - [ - -124.1197358, - 44.3163168 - ], - [ - -124.1196799, - 44.3166718 - ], - [ - -124.1194408, - 44.3177241 - ], - [ - -124.1193389, - 44.3180661 - ], - [ - -124.119123, - 44.3186975 - ], - [ - -124.1183285, - 44.3207536 - ], - [ - -124.1183175, - 44.3207818 - ], - [ - -124.1180546, - 44.3214551 - ], - [ - -124.1178036, - 44.3221064 - ], - [ - -124.1177419, - 44.322262 - ], - [ - -124.1175288, - 44.3227845 - ], - [ - -124.1174785, - 44.3229098 - ], - [ - -124.1170405, - 44.3240554 - ], - [ - -124.1170213, - 44.3241054 - ], - [ - -124.1168324, - 44.3245904 - ], - [ - -124.1168315, - 44.3245902 - ], - [ - -124.1166258, - 44.3251278 - ], - [ - -124.1166226, - 44.3251349 - ], - [ - -124.1165565, - 44.325299 - ], - [ - -124.1161512, - 44.3263089 - ], - [ - -124.1161142, - 44.3264008 - ], - [ - -124.1161032, - 44.3264281 - ], - [ - -124.1160336, - 44.3265994 - ], - [ - -124.1159812, - 44.3267369 - ], - [ - -124.1158146, - 44.3271913 - ], - [ - -124.115707, - 44.3274697 - ], - [ - -124.1156584, - 44.3275892 - ], - [ - -124.1156242, - 44.3276809 - ], - [ - -124.115579, - 44.3277994 - ], - [ - -124.1149614, - 44.3293835 - ], - [ - -124.1149497, - 44.3294133 - ], - [ - -124.1146229, - 44.3302423 - ], - [ - -124.1145852, - 44.3303364 - ], - [ - -124.1142376, - 44.3311887 - ], - [ - -124.1142183, - 44.3312536 - ], - [ - -124.1140519, - 44.3316548 - ], - [ - -124.1139359, - 44.3320262 - ], - [ - -124.1136812, - 44.3327306 - ], - [ - -124.1136202, - 44.3328786 - ], - [ - -124.1136061, - 44.3329127 - ], - [ - -124.1132592, - 44.3337448 - ], - [ - -124.1131027, - 44.3341318 - ], - [ - -124.1131003, - 44.3341377 - ], - [ - -124.1130134, - 44.3344515 - ], - [ - -124.1129149, - 44.3348774 - ], - [ - -124.1128885, - 44.3348742 - ], - [ - -124.1128695, - 44.3351191 - ], - [ - -124.1127381, - 44.3356275 - ], - [ - -124.1125761, - 44.3363051 - ], - [ - -124.1117773, - 44.3399456 - ], - [ - -124.1115533, - 44.341014 - ], - [ - -124.1115449, - 44.3410533 - ], - [ - -124.1112364, - 44.3424887 - ], - [ - -124.1110386, - 44.3434099 - ], - [ - -124.1107896, - 44.3446237 - ], - [ - -124.1106784, - 44.3451988 - ], - [ - -124.1106179, - 44.3454838 - ], - [ - -124.1101728, - 44.3474097 - ], - [ - -124.109914, - 44.3486355 - ], - [ - -124.1098628, - 44.3488619 - ], - [ - -124.1097769, - 44.3492179 - ], - [ - -124.1097462, - 44.349341 - ], - [ - -124.10969, - 44.3495587 - ], - [ - -124.1093814, - 44.3510941 - ], - [ - -124.1093533, - 44.3512279 - ], - [ - -124.1092372, - 44.3517588 - ], - [ - -124.1090343, - 44.3527567 - ], - [ - -124.1090175, - 44.3528372 - ], - [ - -124.1088467, - 44.3536353 - ], - [ - -124.108749, - 44.3540401 - ], - [ - -124.1087027, - 44.3542129 - ], - [ - -124.1086157, - 44.3546418 - ], - [ - -124.1085527, - 44.3549262 - ], - [ - -124.1084149, - 44.3554992 - ], - [ - -124.1076255, - 44.3575526 - ], - [ - -124.106293, - 44.359456 - ], - [ - -124.1044683, - 44.3611362 - ], - [ - -124.1022217, - 44.3625288 - ], - [ - -124.0996394, - 44.3635802 - ], - [ - -124.0968208, - 44.3642498 - ], - [ - -124.0938742, - 44.3645121 - ], - [ - -124.0909129, - 44.3643568 - ], - [ - -124.0880508, - 44.3637901 - ], - [ - -124.0853978, - 44.3628335 - ], - [ - -124.0830561, - 44.3615241 - ], - [ - -124.0811156, - 44.359912 - ], - [ - -124.0796508, - 44.3580592 - ], - [ - -124.0787181, - 44.356037 - ], - [ - -124.0783532, - 44.3539232 - ], - [ - -124.07857, - 44.3517988 - ], - [ - -124.078674, - 44.3513677 - ], - [ - -124.0787822, - 44.3508352 - ], - [ - -124.0788979, - 44.3503449 - ], - [ - -124.0789557, - 44.3501297 - ], - [ - -124.0790747, - 44.349575 - ], - [ - -124.0792818, - 44.3485594 - ], - [ - -124.0793064, - 44.3484431 - ], - [ - -124.0794208, - 44.347921 - ], - [ - -124.0797598, - 44.346239 - ], - [ - -124.0798577, - 44.345813 - ], - [ - -124.0799529, - 44.3454445 - ], - [ - -124.0799968, - 44.3452632 - ], - [ - -124.0802481, - 44.3440756 - ], - [ - -124.0802814, - 44.3439252 - ], - [ - -124.080712, - 44.3420664 - ], - [ - -124.0808045, - 44.3415892 - ], - [ - -124.0808224, - 44.3414995 - ], - [ - -124.0810887, - 44.3402045 - ], - [ - -124.081104, - 44.3401319 - ], - [ - -124.0813103, - 44.3391739 - ], - [ - -124.0816156, - 44.3377564 - ], - [ - -124.0818438, - 44.3366711 - ], - [ - -124.0818595, - 44.3365978 - ], - [ - -124.0826845, - 44.3328469 - ], - [ - -124.0827184, - 44.3326992 - ], - [ - -124.0829121, - 44.3318907 - ], - [ - -124.0830514, - 44.3312999 - ], - [ - -124.0831861, - 44.3307187 - ], - [ - -124.0832725, - 44.3303793 - ], - [ - -124.0834787, - 44.3296363 - ], - [ - -124.0835526, - 44.3293855 - ], - [ - -124.0836387, - 44.3291095 - ], - [ - -124.0838764, - 44.3284462 - ], - [ - -124.0840296, - 44.3280683 - ], - [ - -124.0842029, - 44.3276404 - ], - [ - -124.0842382, - 44.3275544 - ], - [ - -124.0845096, - 44.3269043 - ], - [ - -124.0845454, - 44.3267899 - ], - [ - -124.0846939, - 44.3264385 - ], - [ - -124.0847499, - 44.3262505 - ], - [ - -124.085026, - 44.3254677 - ], - [ - -124.0855131, - 44.3242747 - ], - [ - -124.0858158, - 44.3235078 - ], - [ - -124.0864053, - 44.3219979 - ], - [ - -124.0864612, - 44.3218482 - ], - [ - -124.0865524, - 44.3216144 - ], - [ - -124.086592, - 44.3215171 - ], - [ - -124.0867269, - 44.3211499 - ], - [ - -124.0867662, - 44.3210448 - ], - [ - -124.0868713, - 44.3207698 - ], - [ - -124.0869354, - 44.3206069 - ], - [ - -124.0870694, - 44.3202766 - ], - [ - -124.0874725, - 44.3192733 - ], - [ - -124.0874774, - 44.3192611 - ], - [ - -124.0875985, - 44.3189611 - ], - [ - -124.0876107, - 44.3189322 - ], - [ - -124.087681, - 44.3187357 - ], - [ - -124.0878604, - 44.3182757 - ], - [ - -124.0883151, - 44.3170877 - ], - [ - -124.088368, - 44.3169531 - ], - [ - -124.088454, - 44.3167391 - ], - [ - -124.0884714, - 44.3166961 - ], - [ - -124.0886619, - 44.3162298 - ], - [ - -124.0888899, - 44.3156388 - ], - [ - -124.0889037, - 44.3156033 - ], - [ - -124.0891684, - 44.3149264 - ], - [ - -124.0894174, - 44.3142828 - ], - [ - -124.0890322, - 44.313165 - ], - [ - -124.0889005, - 44.3110123 - ], - [ - -124.0893629, - 44.3088833 - ], - [ - -124.0904013, - 44.3068617 - ], - [ - -124.0919748, - 44.3050269 - ], - [ - -124.0940214, - 44.3034511 - ], - [ - -124.0964607, - 44.3021963 - ], - [ - -124.0991967, - 44.3013118 - ], - [ - -124.1021219, - 44.3008323 - ], - [ - -124.1051214, - 44.3007767 - ], - [ - -124.1065336, - 44.3008514 - ], - [ - -124.109456, - 44.3012152 - ], - [ - -124.1122235, - 44.3019814 - ], - [ - -124.1147298, - 44.3031206 - ], - [ - -124.1168785, - 44.304589 - ], - [ - -124.1185871, - 44.3063301 - ], - [ - -124.11979, - 44.3082771 - ], - [ - -124.1204408, - 44.3103553 - ], - [ - -124.1205146, - 44.3124846 - ], - [ - -124.1200083, - 44.3145834 - ], - [ - -124.11987, - 44.3148411 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2456756_s_2456756", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0902915, - 44.3117717 - ], - [ - -124.090543, - 44.3096494 - ], - [ - -124.0913663, - 44.307603 - ], - [ - -124.0927296, - 44.3057113 - ], - [ - -124.0945806, - 44.3040469 - ], - [ - -124.0968482, - 44.3026737 - ], - [ - -124.099445, - 44.3016446 - ], - [ - -124.1022715, - 44.300999 - ], - [ - -124.1052191, - 44.3007617 - ], - [ - -124.1081744, - 44.3009418 - ], - [ - -124.1110241, - 44.3015325 - ], - [ - -124.1136586, - 44.3025111 - ], - [ - -124.1159768, - 44.3038398 - ], - [ - -124.1178896, - 44.3054678 - ], - [ - -124.1193234, - 44.3073325 - ], - [ - -124.1202232, - 44.3093621 - ], - [ - -124.1205542, - 44.3114789 - ], - [ - -124.1203038, - 44.3136013 - ], - [ - -124.1194815, - 44.3156478 - ], - [ - -124.1181188, - 44.3175399 - ], - [ - -124.1162681, - 44.3192047 - ], - [ - -124.1140004, - 44.3205782 - ], - [ - -124.1114029, - 44.3216077 - ], - [ - -124.1085756, - 44.3222535 - ], - [ - -124.105627, - 44.3224909 - ], - [ - -124.1026705, - 44.3223107 - ], - [ - -124.0998199, - 44.3217198 - ], - [ - -124.0971847, - 44.320741 - ], - [ - -124.0948663, - 44.3194118 - ], - [ - -124.0929537, - 44.3177835 - ], - [ - -124.0915204, - 44.3159185 - ], - [ - -124.0906216, - 44.3138886 - ], - [ - -124.0902915, - 44.3117717 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2456757_s_15950", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.1031156, - 44.3799833 - ], - [ - -124.1031738, - 44.3806499 - ], - [ - -124.1033418, - 44.3819141 - ], - [ - -124.10335, - 44.3819784 - ], - [ - -124.1034998, - 44.3831805 - ], - [ - -124.1037245, - 44.3849096 - ], - [ - -124.1037881, - 44.3860841 - ], - [ - -124.1037763, - 44.3866401 - ], - [ - -124.1035447, - 44.3883736 - ], - [ - -124.1033988, - 44.3889626 - ], - [ - -124.1031866, - 44.3896787 - ], - [ - -124.1029977, - 44.3902247 - ], - [ - -124.102973, - 44.3902951 - ], - [ - -124.1027639, - 44.3908826 - ], - [ - -124.1020002, - 44.3930521 - ], - [ - -124.1015934, - 44.3940167 - ], - [ - -124.1014031, - 44.3944025 - ], - [ - -124.1014003, - 44.3944832 - ], - [ - -124.1013789, - 44.3948491 - ], - [ - -124.1013089, - 44.3957025 - ], - [ - -124.1012445, - 44.3969531 - ], - [ - -124.1012128, - 44.397577 - ], - [ - -124.1012048, - 44.3977337 - ], - [ - -124.1011816, - 44.3981843 - ], - [ - -124.1011777, - 44.3982543 - ], - [ - -124.1011687, - 44.3984023 - ], - [ - -124.1010808, - 44.3998386 - ], - [ - -124.1010489, - 44.400212 - ], - [ - -124.1010049, - 44.4006145 - ], - [ - -124.100913, - 44.4019318 - ], - [ - -124.1008832, - 44.4022594 - ], - [ - -124.1008233, - 44.4027934 - ], - [ - -124.1008113, - 44.4028948 - ], - [ - -124.1007514, - 44.4033728 - ], - [ - -124.1007195, - 44.4036008 - ], - [ - -124.1005997, - 44.4043738 - ], - [ - -124.1005802, - 44.4044932 - ], - [ - -124.1004454, - 44.4052832 - ], - [ - -124.100416, - 44.4054454 - ], - [ - -124.1000664, - 44.4072665 - ], - [ - -124.0999824, - 44.4077445 - ], - [ - -124.0999488, - 44.4079237 - ], - [ - -124.0997923, - 44.4087088 - ], - [ - -124.099659, - 44.4095065 - ], - [ - -124.0996447, - 44.4095895 - ], - [ - -124.0995299, - 44.4102345 - ], - [ - -124.0994855, - 44.4104643 - ], - [ - -124.099051, - 44.412549 - ], - [ - -124.0990105, - 44.4128302 - ], - [ - -124.0987502, - 44.4140044 - ], - [ - -124.0985054, - 44.4148184 - ], - [ - -124.0979547, - 44.4161993 - ], - [ - -124.0977028, - 44.4167023 - ], - [ - -124.0972438, - 44.4175143 - ], - [ - -124.0971003, - 44.4177414 - ], - [ - -124.0969707, - 44.4179796 - ], - [ - -124.0967263, - 44.4184024 - ], - [ - -124.0966233, - 44.4185704 - ], - [ - -124.0950782, - 44.4205175 - ], - [ - -124.0947254, - 44.4208713 - ], - [ - -124.0943527, - 44.4212461 - ], - [ - -124.0940281, - 44.4215603 - ], - [ - -124.0935992, - 44.4219603 - ], - [ - -124.0934046, - 44.4221416 - ], - [ - -124.0933622, - 44.4221182 - ], - [ - -124.0923424, - 44.4230696 - ], - [ - -124.0901059, - 44.4244735 - ], - [ - -124.0875299, - 44.4255375 - ], - [ - -124.0847136, - 44.4262208 - ], - [ - -124.0836607, - 44.4263194 - ], - [ - -124.0816584, - 44.4267022 - ], - [ - -124.0785191, - 44.4268214 - ], - [ - -124.0783637, - 44.4268157 - ], - [ - -124.0770918, - 44.4269718 - ], - [ - -124.0741204, - 44.4269147 - ], - [ - -124.0712218, - 44.4264433 - ], - [ - -124.0685072, - 44.4255757 - ], - [ - -124.0660811, - 44.4243452 - ], - [ - -124.0640368, - 44.4227991 - ], - [ - -124.0624527, - 44.4209968 - ], - [ - -124.0613897, - 44.4190077 - ], - [ - -124.0608887, - 44.4169082 - ], - [ - -124.0609688, - 44.4147789 - ], - [ - -124.0616269, - 44.4127018 - ], - [ - -124.0628376, - 44.4107566 - ], - [ - -124.0645544, - 44.4090181 - ], - [ - -124.0667113, - 44.407553 - ], - [ - -124.0674542, - 44.4072175 - ], - [ - -124.0676466, - 44.4071181 - ], - [ - -124.0678293, - 44.4070481 - ], - [ - -124.0692253, - 44.4064176 - ], - [ - -124.0696636, - 44.4062973 - ], - [ - -124.0697138, - 44.4059975 - ], - [ - -124.0697587, - 44.4057533 - ], - [ - -124.0699221, - 44.4049358 - ], - [ - -124.0700014, - 44.4044855 - ], - [ - -124.0700242, - 44.4043616 - ], - [ - -124.0703711, - 44.4025596 - ], - [ - -124.0704822, - 44.4019105 - ], - [ - -124.0705754, - 44.4013111 - ], - [ - -124.0706125, - 44.4010159 - ], - [ - -124.0706136, - 44.4010064 - ], - [ - -124.070651, - 44.4006762 - ], - [ - -124.0707427, - 44.3993712 - ], - [ - -124.0707703, - 44.399064 - ], - [ - -124.070811, - 44.3986945 - ], - [ - -124.0708859, - 44.3974812 - ], - [ - -124.0708873, - 44.397456 - ], - [ - -124.070916, - 44.3969281 - ], - [ - -124.0709234, - 44.3967833 - ], - [ - -124.0709556, - 44.3961557 - ], - [ - -124.0710272, - 44.3947781 - ], - [ - -124.0710432, - 44.3945409 - ], - [ - -124.0711083, - 44.3937517 - ], - [ - -124.0711169, - 44.3935088 - ], - [ - -124.071138, - 44.3931489 - ], - [ - -124.0711607, - 44.3928716 - ], - [ - -124.0711805, - 44.3924404 - ], - [ - -124.071246, - 44.3917265 - ], - [ - -124.0712891, - 44.3914145 - ], - [ - -124.0715879, - 44.3900906 - ], - [ - -124.071673, - 44.3898206 - ], - [ - -124.071975, - 44.3890092 - ], - [ - -124.0722841, - 44.3882913 - ], - [ - -124.0724791, - 44.3878694 - ], - [ - -124.0727895, - 44.3872409 - ], - [ - -124.0733766, - 44.3855754 - ], - [ - -124.0733244, - 44.3851724 - ], - [ - -124.0733191, - 44.3851306 - ], - [ - -124.0731714, - 44.3839398 - ], - [ - -124.072985, - 44.3825319 - ], - [ - -124.0729465, - 44.3821799 - ], - [ - -124.0728099, - 44.3806059 - ], - [ - -124.0727935, - 44.3794833 - ], - [ - -124.0728096, - 44.3792026 - ], - [ - -124.0728349, - 44.3787288 - ], - [ - -124.0729862, - 44.3775573 - ], - [ - -124.0730974, - 44.3770173 - ], - [ - -124.0731003, - 44.3770032 - ], - [ - -124.0734697, - 44.3752242 - ], - [ - -124.0734904, - 44.3751277 - ], - [ - -124.0743494, - 44.3712318 - ], - [ - -124.0743578, - 44.371194 - ], - [ - -124.0748313, - 44.3690941 - ], - [ - -124.0749078, - 44.3687548 - ], - [ - -124.0752911, - 44.3668383 - ], - [ - -124.0753322, - 44.366645 - ], - [ - -124.0757964, - 44.3645877 - ], - [ - -124.0762646, - 44.3623435 - ], - [ - -124.0763021, - 44.3621733 - ], - [ - -124.0766222, - 44.3607891 - ], - [ - -124.0767946, - 44.3600203 - ], - [ - -124.0771021, - 44.3586346 - ], - [ - -124.0771446, - 44.3584441 - ], - [ - -124.077264, - 44.3578462 - ], - [ - -124.0772672, - 44.35783 - ], - [ - -124.0773453, - 44.357443 - ], - [ - -124.0773932, - 44.3572219 - ], - [ - -124.0775671, - 44.3564696 - ], - [ - -124.0776756, - 44.3559386 - ], - [ - -124.0776783, - 44.3559256 - ], - [ - -124.0779186, - 44.3547597 - ], - [ - -124.0779526, - 44.3546026 - ], - [ - -124.0780795, - 44.3540435 - ], - [ - -124.0781913, - 44.3534966 - ], - [ - -124.0782339, - 44.3533006 - ], - [ - -124.0783951, - 44.3526009 - ], - [ - -124.0785035, - 44.3520893 - ], - [ - -124.0785521, - 44.3518748 - ], - [ - -124.0786736, - 44.3513697 - ], - [ - -124.0787822, - 44.3508352 - ], - [ - -124.0788979, - 44.3503449 - ], - [ - -124.0789551, - 44.3501321 - ], - [ - -124.0790743, - 44.3495747 - ], - [ - -124.07981, - 44.3475112 - ], - [ - -124.0810925, - 44.3455902 - ], - [ - -124.0828725, - 44.3438857 - ], - [ - -124.0850817, - 44.3424631 - ], - [ - -124.087635, - 44.3413771 - ], - [ - -124.0904343, - 44.3406694 - ], - [ - -124.0933723, - 44.3403671 - ], - [ - -124.096336, - 44.3404819 - ], - [ - -124.0992116, - 44.3410093 - ], - [ - -124.1018886, - 44.3419292 - ], - [ - -124.1042642, - 44.3432061 - ], - [ - -124.1062471, - 44.3447911 - ], - [ - -124.1077611, - 44.3466231 - ], - [ - -124.1087481, - 44.348632 - ], - [ - -124.10917, - 44.3507404 - ], - [ - -124.1090105, - 44.3528673 - ], - [ - -124.1088477, - 44.3536303 - ], - [ - -124.108749, - 44.3540401 - ], - [ - -124.1087027, - 44.3542129 - ], - [ - -124.1086157, - 44.3546418 - ], - [ - -124.1085537, - 44.3549222 - ], - [ - -124.1084245, - 44.3554602 - ], - [ - -124.1083244, - 44.3559337 - ], - [ - -124.1082938, - 44.3560724 - ], - [ - -124.1081395, - 44.3567436 - ], - [ - -124.1080306, - 44.3572775 - ], - [ - -124.1079941, - 44.3574474 - ], - [ - -124.107866, - 44.358013 - ], - [ - -124.1076438, - 44.3590939 - ], - [ - -124.1075163, - 44.3597194 - ], - [ - -124.1074725, - 44.3599211 - ], - [ - -124.1073011, - 44.3606637 - ], - [ - -124.1072472, - 44.3609319 - ], - [ - -124.1071119, - 44.3616109 - ], - [ - -124.1070744, - 44.3617889 - ], - [ - -124.1070156, - 44.3620527 - ], - [ - -124.1067081, - 44.3634415 - ], - [ - -124.1067044, - 44.3634581 - ], - [ - -124.1065246, - 44.3642621 - ], - [ - -124.1065125, - 44.3643157 - ], - [ - -124.1062064, - 44.3656417 - ], - [ - -124.1057437, - 44.3678646 - ], - [ - -124.1057161, - 44.367992 - ], - [ - -124.1052604, - 44.3700165 - ], - [ - -124.1048782, - 44.3719328 - ], - [ - -124.1048373, - 44.3721254 - ], - [ - -124.1047395, - 44.3725602 - ], - [ - -124.1042713, - 44.3746411 - ], - [ - -124.103429, - 44.3784701 - ], - [ - -124.1031156, - 44.3799833 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2456757_s_15970", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0895216, - 44.425585 - ], - [ - -124.0894305, - 44.4256697 - ], - [ - -124.089019, - 44.4260355 - ], - [ - -124.088384, - 44.4265755 - ], - [ - -124.0873879, - 44.4273441 - ], - [ - -124.0869239, - 44.4276692 - ], - [ - -124.0862835, - 44.4280927 - ], - [ - -124.085858, - 44.4283583 - ], - [ - -124.0845515, - 44.4292073 - ], - [ - -124.0838723, - 44.4296232 - ], - [ - -124.0831542, - 44.4300372 - ], - [ - -124.0826715, - 44.4303043 - ], - [ - -124.0823443, - 44.4304779 - ], - [ - -124.0822982, - 44.4305156 - ], - [ - -124.081738, - 44.4309495 - ], - [ - -124.081378, - 44.4312136 - ], - [ - -124.0800703, - 44.4320669 - ], - [ - -124.0797443, - 44.4322559 - ], - [ - -124.0796582, - 44.432299 - ], - [ - -124.0779202, - 44.4337432 - ], - [ - -124.075577, - 44.435054 - ], - [ - -124.0729218, - 44.436012 - ], - [ - -124.0700568, - 44.4365803 - ], - [ - -124.067092, - 44.4367372 - ], - [ - -124.0641414, - 44.4364766 - ], - [ - -124.0613186, - 44.4358085 - ], - [ - -124.058732, - 44.4347586 - ], - [ - -124.0564811, - 44.4333672 - ], - [ - -124.0546524, - 44.431688 - ], - [ - -124.0533161, - 44.4297853 - ], - [ - -124.0525236, - 44.4277324 - ], - [ - -124.0523053, - 44.4256081 - ], - [ - -124.0526695, - 44.4234942 - ], - [ - -124.0526955, - 44.4234112 - ], - [ - -124.0531899, - 44.4221791 - ], - [ - -124.053341, - 44.4218721 - ], - [ - -124.0539387, - 44.4208324 - ], - [ - -124.0541358, - 44.4205344 - ], - [ - -124.0554464, - 44.4189254 - ], - [ - -124.0558115, - 44.4185544 - ], - [ - -124.056905, - 44.4175696 - ], - [ - -124.057161, - 44.4173646 - ], - [ - -124.0585304, - 44.416399 - ], - [ - -124.0589024, - 44.416168 - ], - [ - -124.0605452, - 44.4152803 - ], - [ - -124.0608325, - 44.415146 - ], - [ - -124.0609584, - 44.4150559 - ], - [ - -124.0609688, - 44.4147789 - ], - [ - -124.0616269, - 44.4127018 - ], - [ - -124.0628376, - 44.4107566 - ], - [ - -124.0645544, - 44.4090181 - ], - [ - -124.0667113, - 44.407553 - ], - [ - -124.0674542, - 44.4072175 - ], - [ - -124.0676466, - 44.4071181 - ], - [ - -124.0678293, - 44.4070481 - ], - [ - -124.0692253, - 44.4064176 - ], - [ - -124.0701107, - 44.4061745 - ], - [ - -124.0712221, - 44.4057489 - ], - [ - -124.071428, - 44.4056939 - ], - [ - -124.0744119, - 44.4051371 - ], - [ - -124.0767485, - 44.4050518 - ], - [ - -124.0792314, - 44.4047386 - ], - [ - -124.081904, - 44.4047431 - ], - [ - -124.082211, - 44.4047631 - ], - [ - -124.0833236, - 44.4048655 - ], - [ - -124.0837685, - 44.4049185 - ], - [ - -124.0865361, - 44.4054446 - ], - [ - -124.0891163, - 44.4063343 - ], - [ - -124.0914171, - 44.407556 - ], - [ - -124.0933565, - 44.409066 - ], - [ - -124.0948653, - 44.4108105 - ], - [ - -124.0958895, - 44.4127272 - ], - [ - -124.0963926, - 44.4147478 - ], - [ - -124.0963566, - 44.4168001 - ], - [ - -124.0957827, - 44.418811 - ], - [ - -124.0946914, - 44.4207087 - ], - [ - -124.0931215, - 44.4224253 - ], - [ - -124.0926425, - 44.4228544 - ], - [ - -124.0925013, - 44.422979 - ], - [ - -124.0922552, - 44.4231929 - ], - [ - -124.0916887, - 44.4236945 - ], - [ - -124.0916108, - 44.4237628 - ], - [ - -124.0907449, - 44.4245169 - ], - [ - -124.0906009, - 44.4246404 - ], - [ - -124.0900926, - 44.4250699 - ], - [ - -124.0897748, - 44.4253603 - ], - [ - -124.0895216, - 44.425585 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2456758_s_15962", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0901729, - 44.4386745 - ], - [ - -124.0902192, - 44.4387697 - ], - [ - -124.0906276, - 44.4409098 - ], - [ - -124.0906382, - 44.4411189 - ], - [ - -124.0904596, - 44.4432217 - ], - [ - -124.0897179, - 44.4452604 - ], - [ - -124.0884409, - 44.4471581 - ], - [ - -124.0866766, - 44.4488436 - ], - [ - -124.0844912, - 44.4502535 - ], - [ - -124.081967, - 44.4513347 - ], - [ - -124.0791989, - 44.4520466 - ], - [ - -124.0762909, - 44.4523625 - ], - [ - -124.075934, - 44.4523761 - ], - [ - -124.075483, - 44.4523943 - ], - [ - -124.0726059, - 44.452314 - ], - [ - -124.0698019, - 44.4518458 - ], - [ - -124.0671719, - 44.4510063 - ], - [ - -124.0648109, - 44.449826 - ], - [ - -124.0628039, - 44.4483474 - ], - [ - -124.0612231, - 44.4466237 - ], - [ - -124.0601256, - 44.4447171 - ], - [ - -124.0595507, - 44.4426962 - ], - [ - -124.0595193, - 44.440634 - ], - [ - -124.0596399, - 44.4396093 - ], - [ - -124.0591992, - 44.4392017 - ], - [ - -124.0564695, - 44.4366748 - ], - [ - -124.0558935, - 44.4361043 - ], - [ - -124.0555496, - 44.4357393 - ], - [ - -124.0550749, - 44.4352023 - ], - [ - -124.054844, - 44.4349233 - ], - [ - -124.0547643, - 44.4348206 - ], - [ - -124.0538474, - 44.4342282 - ], - [ - -124.0520707, - 44.4325205 - ], - [ - -124.0507932, - 44.4305972 - ], - [ - -124.050064, - 44.4285323 - ], - [ - -124.0499109, - 44.4264051 - ], - [ - -124.05034, - 44.4242974 - ], - [ - -124.0513345, - 44.4222902 - ], - [ - -124.0528562, - 44.4204605 - ], - [ - -124.0548466, - 44.4188788 - ], - [ - -124.0572293, - 44.4176057 - ], - [ - -124.0599126, - 44.4166901 - ], - [ - -124.0627936, - 44.4161673 - ], - [ - -124.0657614, - 44.4160573 - ], - [ - -124.0659414, - 44.4160633 - ], - [ - -124.0660654, - 44.4160678 - ], - [ - -124.0663204, - 44.4160778 - ], - [ - -124.0663583, - 44.4160793 - ], - [ - -124.0668653, - 44.4161001 - ], - [ - -124.0671268, - 44.4161107 - ], - [ - -124.0679981, - 44.4161436 - ], - [ - -124.0708781, - 44.4164529 - ], - [ - -124.0736225, - 44.4171512 - ], - [ - -124.07613, - 44.4182127 - ], - [ - -124.0783081, - 44.4195981 - ], - [ - -124.0800766, - 44.4212565 - ], - [ - -124.0813701, - 44.4231265 - ], - [ - -124.0820207, - 44.4248256 - ], - [ - -124.083174, - 44.4258929 - ], - [ - -124.0857592, - 44.4282828 - ], - [ - -124.0859265, - 44.4284403 - ], - [ - -124.0860568, - 44.4285654 - ], - [ - -124.0861265, - 44.4286302 - ], - [ - -124.0866223, - 44.4291185 - ], - [ - -124.0868453, - 44.4293514 - ], - [ - -124.0878954, - 44.4306267 - ], - [ - -124.0881354, - 44.4309697 - ], - [ - -124.0887532, - 44.4319764 - ], - [ - -124.0889683, - 44.4323814 - ], - [ - -124.0894122, - 44.4333521 - ], - [ - -124.0895653, - 44.4337491 - ], - [ - -124.0899409, - 44.4350108 - ], - [ - -124.0900451, - 44.4355018 - ], - [ - -124.0902171, - 44.437132 - ], - [ - -124.0902173, - 44.437641 - ], - [ - -124.0902103, - 44.4379733 - ], - [ - -124.0901934, - 44.4383713 - ], - [ - -124.0901729, - 44.4386745 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2456760_s_16196", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0682458, - 44.6509219 - ], - [ - -124.0682414, - 44.6511816 - ], - [ - -124.0682266, - 44.6516194 - ], - [ - -124.0682246, - 44.651734 - ], - [ - -124.0682215, - 44.6522711 - ], - [ - -124.0682234, - 44.6524042 - ], - [ - -124.0682293, - 44.6527752 - ], - [ - -124.0682303, - 44.6529344 - ], - [ - -124.0682293, - 44.6531474 - ], - [ - -124.0682275, - 44.6535001 - ], - [ - -124.0682275, - 44.653529 - ], - [ - -124.0682274, - 44.6535609 - ], - [ - -124.0682238, - 44.6545015 - ], - [ - -124.068226, - 44.6549833 - ], - [ - -124.0682329, - 44.655109 - ], - [ - -124.0682568, - 44.6553272 - ], - [ - -124.0683942, - 44.6563034 - ], - [ - -124.0684059, - 44.6563643 - ], - [ - -124.0684534, - 44.6565696 - ], - [ - -124.0685439, - 44.6569424 - ], - [ - -124.0686593, - 44.6572378 - ], - [ - -124.0687396, - 44.6574519 - ], - [ - -124.0688135, - 44.6576573 - ], - [ - -124.0693142, - 44.6588364 - ], - [ - -124.0693289, - 44.6588711 - ], - [ - -124.069413, - 44.6590716 - ], - [ - -124.0699847, - 44.6611621 - ], - [ - -124.0699741, - 44.663292 - ], - [ - -124.0693814, - 44.6653795 - ], - [ - -124.0682294, - 44.6673443 - ], - [ - -124.0665623, - 44.669111 - ], - [ - -124.0644441, - 44.6706116 - ], - [ - -124.0619563, - 44.6717885 - ], - [ - -124.0591944, - 44.6725963 - ], - [ - -124.0562647, - 44.6730041 - ], - [ - -124.0532798, - 44.6729961 - ], - [ - -124.0503545, - 44.6725727 - ], - [ - -124.0476012, - 44.6717501 - ], - [ - -124.0451258, - 44.67056 - ], - [ - -124.0430234, - 44.669048 - ], - [ - -124.0413749, - 44.6672725 - ], - [ - -124.0402436, - 44.6653015 - ], - [ - -124.0401668, - 44.6651184 - ], - [ - -124.0395795, - 44.6637336 - ], - [ - -124.0394039, - 44.6632852 - ], - [ - -124.0392876, - 44.6629616 - ], - [ - -124.0390094, - 44.6622483 - ], - [ - -124.0386748, - 44.6611871 - ], - [ - -124.038444, - 44.6602351 - ], - [ - -124.0384238, - 44.6601497 - ], - [ - -124.0383319, - 44.6597517 - ], - [ - -124.0382685, - 44.6594511 - ], - [ - -124.0381916, - 44.6590481 - ], - [ - -124.0381281, - 44.6586644 - ], - [ - -124.0379475, - 44.6573763 - ], - [ - -124.0379176, - 44.657137 - ], - [ - -124.0378578, - 44.656588 - ], - [ - -124.0378233, - 44.6561654 - ], - [ - -124.0377944, - 44.6556334 - ], - [ - -124.0377831, - 44.6552438 - ], - [ - -124.0377803, - 44.6545348 - ], - [ - -124.0377803, - 44.6544717 - ], - [ - -124.0377845, - 44.6534487 - ], - [ - -124.0377846, - 44.6534368 - ], - [ - -124.0377867, - 44.6530717 - ], - [ - -124.0377873, - 44.6529412 - ], - [ - -124.0377827, - 44.6526418 - ], - [ - -124.0377824, - 44.6526257 - ], - [ - -124.0377795, - 44.6524077 - ], - [ - -124.0377789, - 44.652254 - ], - [ - -124.0377831, - 44.651594 - ], - [ - -124.0377832, - 44.6515813 - ], - [ - -124.0377842, - 44.6514513 - ], - [ - -124.0377881, - 44.6512609 - ], - [ - -124.0377911, - 44.6511679 - ], - [ - -124.0377916, - 44.6511544 - ], - [ - -124.0378042, - 44.6507842 - ], - [ - -124.0378044, - 44.6506181 - ], - [ - -124.0380984, - 44.6484985 - ], - [ - -124.0389661, - 44.6464606 - ], - [ - -124.0403739, - 44.6445827 - ], - [ - -124.0422677, - 44.642937 - ], - [ - -124.0445748, - 44.6415865 - ], - [ - -124.0472065, - 44.6405833 - ], - [ - -124.0500616, - 44.6399659 - ], - [ - -124.0530306, - 44.6397579 - ], - [ - -124.0559994, - 44.6399674 - ], - [ - -124.0588539, - 44.6405863 - ], - [ - -124.0614846, - 44.6415909 - ], - [ - -124.0637903, - 44.6429425 - ], - [ - -124.0656824, - 44.6445892 - ], - [ - -124.0670884, - 44.6464678 - ], - [ - -124.0679539, - 44.6485061 - ], - [ - -124.0682459, - 44.6506258 - ], - [ - -124.0682458, - 44.6509219 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2456760_s_2455449", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0682455, - 44.6509884 - ], - [ - -124.0682414, - 44.6511816 - ], - [ - -124.0682266, - 44.6516194 - ], - [ - -124.0682263, - 44.6516388 - ], - [ - -124.0687271, - 44.6533379 - ], - [ - -124.06876, - 44.6554677 - ], - [ - -124.0682101, - 44.6575612 - ], - [ - -124.0670985, - 44.6595378 - ], - [ - -124.0654679, - 44.6613217 - ], - [ - -124.0633809, - 44.6628442 - ], - [ - -124.0609178, - 44.6640468 - ], - [ - -124.0581731, - 44.6648833 - ], - [ - -124.0552524, - 44.6653215 - ], - [ - -124.053027, - 44.6653388 - ], - [ - -124.0530256, - 44.6653728 - ], - [ - -124.0525756, - 44.6653638 - ], - [ - -124.0523539, - 44.665344 - ], - [ - -124.052268, - 44.6653446 - ], - [ - -124.052124, - 44.6653356 - ], - [ - -124.0521255, - 44.6653235 - ], - [ - -124.0496616, - 44.6651032 - ], - [ - -124.0468719, - 44.6644482 - ], - [ - -124.0443105, - 44.6634231 - ], - [ - -124.0420727, - 44.662066 - ], - [ - -124.0402416, - 44.6604275 - ], - [ - -124.0388855, - 44.6585685 - ], - [ - -124.0380548, - 44.6565583 - ], - [ - -124.0377803, - 44.6544717 - ], - [ - -124.0377845, - 44.6534487 - ], - [ - -124.0377846, - 44.6534368 - ], - [ - -124.0377867, - 44.6530717 - ], - [ - -124.0377873, - 44.6529412 - ], - [ - -124.0377827, - 44.6526418 - ], - [ - -124.0377824, - 44.6526257 - ], - [ - -124.0377795, - 44.6524077 - ], - [ - -124.0377789, - 44.652254 - ], - [ - -124.0377831, - 44.651594 - ], - [ - -124.0377832, - 44.6515813 - ], - [ - -124.0377842, - 44.6514513 - ], - [ - -124.0377881, - 44.6512609 - ], - [ - -124.0377911, - 44.6511679 - ], - [ - -124.0377916, - 44.6511544 - ], - [ - -124.0378054, - 44.650751 - ], - [ - -124.0378073, - 44.6505429 - ], - [ - -124.0381196, - 44.6484247 - ], - [ - -124.0390047, - 44.6463906 - ], - [ - -124.0404285, - 44.6445189 - ], - [ - -124.0423364, - 44.6428814 - ], - [ - -124.044655, - 44.6415411 - ], - [ - -124.0472953, - 44.6405494 - ], - [ - -124.0501557, - 44.6399445 - ], - [ - -124.0531264, - 44.6397495 - ], - [ - -124.0560933, - 44.6399719 - ], - [ - -124.0589425, - 44.6406033 - ], - [ - -124.0615645, - 44.6416193 - ], - [ - -124.0638585, - 44.642981 - ], - [ - -124.0657366, - 44.644636 - ], - [ - -124.0671263, - 44.6465207 - ], - [ - -124.0679744, - 44.6485627 - ], - [ - -124.0682482, - 44.6506837 - ], - [ - -124.0682455, - 44.6509884 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2456760_s_2456760", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0376759, - 44.6507593 - ], - [ - -124.0379306, - 44.6486371 - ], - [ - -124.0387602, - 44.6465912 - ], - [ - -124.040133, - 44.6447001 - ], - [ - -124.0419961, - 44.6430366 - ], - [ - -124.0442779, - 44.6416644 - ], - [ - -124.0468907, - 44.6406363 - ], - [ - -124.0497341, - 44.6399919 - ], - [ - -124.052699, - 44.6397558 - ], - [ - -124.0556714, - 44.6399372 - ], - [ - -124.0585371, - 44.640529 - ], - [ - -124.0611862, - 44.6415085 - ], - [ - -124.0635169, - 44.6428382 - ], - [ - -124.0654395, - 44.6444668 - ], - [ - -124.0668802, - 44.646332 - ], - [ - -124.0677836, - 44.6483619 - ], - [ - -124.0681149, - 44.6504787 - ], - [ - -124.0678614, - 44.6526009 - ], - [ - -124.0670326, - 44.654647 - ], - [ - -124.0656605, - 44.6565384 - ], - [ - -124.0637977, - 44.6582024 - ], - [ - -124.0615157, - 44.6595749 - ], - [ - -124.0589024, - 44.6606033 - ], - [ - -124.056058, - 44.661248 - ], - [ - -124.0530921, - 44.6614841 - ], - [ - -124.0501186, - 44.6613027 - ], - [ - -124.0472519, - 44.6607107 - ], - [ - -124.0446021, - 44.6597309 - ], - [ - -124.0422713, - 44.6584009 - ], - [ - -124.0403488, - 44.6567718 - ], - [ - -124.0389087, - 44.6549063 - ], - [ - -124.0380062, - 44.6528761 - ], - [ - -124.0376759, - 44.6507593 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2456766_s_16071", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0072436, - 44.9705607 - ], - [ - -124.0074355, - 44.9705717 - ], - [ - -124.0074797, - 44.9705743 - ], - [ - -124.0076816, - 44.9705863 - ], - [ - -124.0106326, - 44.9709711 - ], - [ - -124.0134213, - 44.971757 - ], - [ - -124.0159404, - 44.972914 - ], - [ - -124.0180932, - 44.9743976 - ], - [ - -124.0197971, - 44.9761507 - ], - [ - -124.0209864, - 44.9781061 - ], - [ - -124.0216155, - 44.9801886 - ], - [ - -124.02166, - 44.9823182 - ], - [ - -124.0211183, - 44.984413 - ], - [ - -124.0200111, - 44.9863926 - ], - [ - -124.0183809, - 44.9881808 - ], - [ - -124.0162903, - 44.9897089 - ], - [ - -124.0138197, - 44.9909182 - ], - [ - -124.011064, - 44.9917622 - ], - [ - -124.0081291, - 44.9922084 - ], - [ - -124.0068924, - 44.9922213 - ], - [ - -124.005961, - 44.9927323 - ], - [ - -124.0058686, - 44.9928134 - ], - [ - -124.0035626, - 44.9941768 - ], - [ - -124.000926, - 44.9951947 - ], - [ - -123.99806, - 44.9958279 - ], - [ - -123.9950751, - 44.9960522 - ], - [ - -123.994949, - 44.9960529 - ], - [ - -123.9919979, - 44.9958648 - ], - [ - -123.9891533, - 44.9952768 - ], - [ - -123.9865215, - 44.9943111 - ], - [ - -123.9842013, - 44.9930038 - ], - [ - -123.9822794, - 44.9914038 - ], - [ - -123.9808279, - 44.9895711 - ], - [ - -123.9799011, - 44.9875743 - ], - [ - -123.9795335, - 44.9854882 - ], - [ - -123.9794768, - 44.9840248 - ], - [ - -123.9796884, - 44.9819019 - ], - [ - -123.9804789, - 44.9798491 - ], - [ - -123.9818181, - 44.977945 - ], - [ - -123.9836544, - 44.9762627 - ], - [ - -123.9852002, - 44.9753091 - ], - [ - -123.9853686, - 44.975124 - ], - [ - -123.9856262, - 44.9748401 - ], - [ - -123.987845, - 44.9729187 - ], - [ - -123.988034, - 44.9727887 - ], - [ - -123.9905147, - 44.9714041 - ], - [ - -123.9933426, - 44.97041 - ], - [ - -123.9935506, - 44.970355 - ], - [ - -123.9974665, - 44.9697188 - ], - [ - -123.9978424, - 44.9696938 - ], - [ - -123.9978895, - 44.9696907 - ], - [ - -123.9991493, - 44.9696098 - ], - [ - -124.0004346, - 44.9695657 - ], - [ - -124.0006606, - 44.9695647 - ], - [ - -124.004127, - 44.9698312 - ], - [ - -124.004283, - 44.9698562 - ], - [ - -124.0055211, - 44.9700937 - ], - [ - -124.0056951, - 44.9701327 - ], - [ - -124.0072436, - 44.9705607 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2483495_s_16066", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.069884, - 44.6612268 - ], - [ - -124.0699935, - 44.6616801 - ], - [ - -124.0699965, - 44.6617141 - ], - [ - -124.0699635, - 44.6633887 - ], - [ - -124.0695703, - 44.6650397 - ], - [ - -124.0695573, - 44.6650767 - ], - [ - -124.0679611, - 44.6678845 - ], - [ - -124.0678961, - 44.6679645 - ], - [ - -124.0660314, - 44.6697913 - ], - [ - -124.0650211, - 44.6704402 - ], - [ - -124.0644544, - 44.6708679 - ], - [ - -124.0643353, - 44.6709469 - ], - [ - -124.0638483, - 44.6712566 - ], - [ - -124.0636923, - 44.6713516 - ], - [ - -124.0625092, - 44.6720033 - ], - [ - -124.0623482, - 44.6720833 - ], - [ - -124.0610926, - 44.6726446 - ], - [ - -124.0609226, - 44.6727126 - ], - [ - -124.0597078, - 44.6731489 - ], - [ - -124.0595328, - 44.6732049 - ], - [ - -124.0571225, - 44.6738086 - ], - [ - -124.0569765, - 44.6738356 - ], - [ - -124.0558501, - 44.673923 - ], - [ - -124.0557949, - 44.6739378 - ], - [ - -124.0556779, - 44.6739588 - ], - [ - -124.0527256, - 44.6742734 - ], - [ - -124.0497441, - 44.6741709 - ], - [ - -124.0468479, - 44.6736553 - ], - [ - -124.0441484, - 44.6727463 - ], - [ - -124.0417494, - 44.6714789 - ], - [ - -124.0397431, - 44.6699019 - ], - [ - -124.0382066, - 44.6680759 - ], - [ - -124.037199, - 44.6660711 - ], - [ - -124.0367588, - 44.6639644 - ], - [ - -124.0369029, - 44.661837 - ], - [ - -124.037214, - 44.6609478 - ], - [ - -124.0372581, - 44.6607009 - ], - [ - -124.0374398, - 44.6603023 - ], - [ - -124.0376258, - 44.6597705 - ], - [ - -124.0378074, - 44.6594959 - ], - [ - -124.0381416, - 44.658763 - ], - [ - -124.0381439, - 44.6587599 - ], - [ - -124.0381281, - 44.6586644 - ], - [ - -124.0379475, - 44.6573763 - ], - [ - -124.0379176, - 44.657137 - ], - [ - -124.0378578, - 44.656588 - ], - [ - -124.0378233, - 44.6561654 - ], - [ - -124.0377944, - 44.6556334 - ], - [ - -124.0377831, - 44.6552438 - ], - [ - -124.0377803, - 44.6545348 - ], - [ - -124.0380758, - 44.6523732 - ], - [ - -124.0389677, - 44.6502967 - ], - [ - -124.0404202, - 44.6483884 - ], - [ - -124.0423754, - 44.6467243 - ], - [ - -124.0447549, - 44.6453711 - ], - [ - -124.0474639, - 44.6443827 - ], - [ - -124.050394, - 44.6437986 - ], - [ - -124.0534283, - 44.6436422 - ], - [ - -124.0538782, - 44.6436512 - ], - [ - -124.0547625, - 44.6436873 - ], - [ - -124.0550704, - 44.6437063 - ], - [ - -124.0573334, - 44.6439696 - ], - [ - -124.0575654, - 44.6440096 - ], - [ - -124.0603505, - 44.6446995 - ], - [ - -124.0628973, - 44.6457597 - ], - [ - -124.06511, - 44.6471505 - ], - [ - -124.0669057, - 44.6488197 - ], - [ - -124.0682169, - 44.6507047 - ], - [ - -124.0689946, - 44.6527348 - ], - [ - -124.0692093, - 44.6548339 - ], - [ - -124.06919, - 44.6549472 - ], - [ - -124.0692268, - 44.655254 - ], - [ - -124.0691846, - 44.6574082 - ], - [ - -124.0689863, - 44.6580641 - ], - [ - -124.0693142, - 44.6588364 - ], - [ - -124.069859, - 44.6606861 - ], - [ - -124.069884, - 44.6612268 - ] - ] - ] - } - }, - { - "id": "radius_1207_s_2483495_s_29681", - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -124.0387506, - 44.6547672 - ], - [ - -124.0383073, - 44.653771 - ], - [ - -124.0379763, - 44.6516542 - ], - [ - -124.0382301, - 44.649532 - ], - [ - -124.039059, - 44.6474859 - ], - [ - -124.0404311, - 44.6455946 - ], - [ - -124.0422936, - 44.6439307 - ], - [ - -124.0445749, - 44.6425581 - ], - [ - -124.0471873, - 44.6415295 - ], - [ - -124.0500306, - 44.6408845 - ], - [ - -124.0529954, - 44.6406479 - ], - [ - -124.0535517, - 44.6406426 - ], - [ - -124.0566636, - 44.6408423 - ], - [ - -124.0596528, - 44.6414914 - ], - [ - -124.0623935, - 44.6425626 - ], - [ - -124.06477, - 44.6440108 - ], - [ - -124.0654129, - 44.6444922 - ], - [ - -124.065851, - 44.6448347 - ], - [ - -124.0667064, - 44.6455328 - ], - [ - -124.0669274, - 44.6457172 - ], - [ - -124.0676624, - 44.6463447 - ], - [ - -124.069257, - 44.6479941 - ], - [ - -124.0694591, - 44.6482509 - ], - [ - -124.0698322, - 44.6487557 - ], - [ - -124.0701333, - 44.6491905 - ], - [ - -124.071152, - 44.651091 - ], - [ - -124.0716564, - 44.6530938 - ], - [ - -124.0716289, - 44.6551285 - ], - [ - -124.0715559, - 44.6556299 - ], - [ - -124.0714292, - 44.6562984 - ], - [ - -124.0713867, - 44.6564801 - ], - [ - -124.0713235, - 44.6568231 - ], - [ - -124.0711309, - 44.657631 - ], - [ - -124.0710278, - 44.6579825 - ], - [ - -124.0701239, - 44.6600303 - ], - [ - -124.0686734, - 44.6619112 - ], - [ - -124.0667329, - 44.6635517 - ], - [ - -124.0643781, - 44.6648879 - ], - [ - -124.0617011, - 44.6658675 - ], - [ - -124.058897, - 44.6664339 - ], - [ - -124.0580681, - 44.6666607 - ], - [ - -124.0550796, - 44.6670196 - ], - [ - -124.0549125, - 44.6670276 - ], - [ - -124.0519294, - 44.6669613 - ], - [ - -124.0490217, - 44.6664808 - ], - [ - -124.0463013, - 44.6656046 - ], - [ - -124.0438728, - 44.6643665 - ], - [ - -124.0418295, - 44.6628141 - ], - [ - -124.04025, - 44.6610069 - ], - [ - -124.0391949, - 44.6590145 - ], - [ - -124.0387047, - 44.6569136 - ], - [ - -124.0387465, - 44.6559625 - ], - [ - -124.0387226, - 44.6557753 - ], - [ - -124.0387506, - 44.6547672 - ] - ] - ] - } - } - ] -} \ No newline at end of file diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/routes.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/routes.txt deleted file mode 100644 index 52c71914b7d..00000000000 --- a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/routes.txt +++ /dev/null @@ -1,7 +0,0 @@ -agency_id,route_id,route_short_name,route_long_name,route_desc,route_type,route_url,route_color,route_text_color,route_sort_order,min_headway_minutes,eligibility_restricted,continuous_pickup,continuous_drop_off -89,491,,Newport City Loop,"Runs every day through Newport, with stops from South Beach and OCCC to north of Agate Beach.",3,https://www.nworegontransit.org/routes/newport_city_loop/,145098,ffffff,1,,0,1,1 -89,495,,North County,"Runs every day between Newport and Rose Lodge, with stops in Depoe Bay, Lincoln City, and more.",3,https://www.nworegontransit.org/routes/north_county/,145098,ffffff,2,,0,1,1 -89,497,,South County,Service running Monday - Saturday connecting Newport and Yachats.,3,https://www.nworegontransit.org/routes/south_county/,145098,ffffff,3,,0,1,1 -89,493,,East County,"Service running Monday - Saturday connecting Newport, Toledo, and Siletz.",3,https://www.nworegontransit.org/routes/east_county/,145098,ffffff,4,,0,1,1 -89,13317,,Dial-a-Ride,,3,https://www.nworegontransit.org/dial-a-ride-lct/,,,7,,0,1,1 -89,492,,Lincoln City Loop,"Service along Hwy 101, from Chinook Winds and the DMV down to Cutler City.",3,https://www.nworegontransit.org/routes/lincoln_city_loop/,145098,ffffff,8,,0,1,1 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/stop_times.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/stop_times.txt deleted file mode 100644 index 643920c1932..00000000000 --- a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/stop_times.txt +++ /dev/null @@ -1,1023 +0,0 @@ -trip_id,arrival_time,departure_time,stop_id,stop_sequence,stop_headsign,pickup_type,drop_off_type,shape_dist_traveled,timepoint,start_service_area_id,end_service_area_id,start_service_area_radius,end_service_area_radius,continuous_pickup,continuous_drop_off,pickup_booking_rule_id,drop_off_booking_rule_id,min_arrival_time,max_departure_time,mean_duration_factor,mean_duration_offset,safe_duration_factor,safe_duration_offset -t_1225545_b_26748_tn_0,,,area_272,1,,2,2,0,0,,,,,1,1,booking_route_13317,booking_route_13317,00:00:00,07:30:00,1,00:10:00,1,00:25:00 -t_1225545_b_26748_tn_0,,,area_272,2,,2,2,0,0,,,,,1,1,booking_route_13317,booking_route_13317,07:30:00,07:30:00,1,00:10:00,1,00:25:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16069_s_16024,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16024_s_16025,2,,0,0,775.596266212284,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16025_s_16026,3,,0,0,1807.22190535612,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16026_s_2483495,4,,0,0,2766.28482550726,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_2483495_s_29681,5,,0,0,5416.75044306174,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_29681_s_16032,6,,0,0,6436.45201007476,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16032_s_2438933,7,,0,0,7576.71452995217,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_2438933_s_16031,8,,0,0,8240.84195654157,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16031_s_16030,9,,0,0,8527.62288862872,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16030_s_16033,10,,0,0,8932.84679637186,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16033_s_16034,11,,0,0,9165.13404331625,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16034_s_15889,12,,0,0,9628.59060260394,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_15889_s_16039,13,,0,0,10510.9386855591,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16039_s_16040,14,,0,0,11686.4154079233,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16040_s_16042,15,,0,0,12047.7835753043,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16042_s_16043,16,,0,0,12324.4604601439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16043_s_16044,17,,0,0,12526.5458089135,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16044_s_16045,18,,0,0,12886.5424727922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16045_s_15942,19,,0,0,13106.2063391676,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_15942_s_16048,20,,0,0,15282.8820371869,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16048_s_2438934,21,,2,3,17060.1720314054,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_2438934_s_16049,22,,0,0,18604.0056042532,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16049_s_16050,23,,0,0,19098.7301834617,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16050_s_16051,24,,0,0,19388.6880759922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16051_s_16052,25,,0,0,20425.6382579853,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16052_s_16053,26,,0,0,20752.5347065814,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16053_s_833259,27,,0,0,21230.9536762786,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_833259_s_16275,28,,0,0,23127.0336395412,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16275_s_16055,29,,0,0,23551.6916242021,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16055_s_16057,30,,0,0,23808.8722434897,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16057_s_16058,31,,0,0,24487.418244042,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16058_s_16059,32,,0,0,24680.6102514857,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16059_s_16060,33,,0,0,25614.1591340582,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16060_s_16061,34,,0,0,26256.131709164,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16061_s_16062,35,,0,0,27180.643659028,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16062_s_16063,36,,0,0,27686.863698439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16063_s_15890,37,,0,0,28259.1890347633,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_15890_s_2438932,38,,0,0,28886.6228332024,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_2438932_s_16065,39,,2,3,29619.901749005,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16065_s_2483495,40,,0,0,30254.2525223819,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_2483495_s_16066,41,,2,3,30838.8763853997,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16066_s_16068,42,,0,0,32312.2465968761,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16068_s_16069,43,,0,0,34898.4147967777,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299223_b_26748_tn_0,,,radius_1207_s_16069_s_16069,44,,0,0,36360.0641114,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16069_s_16024,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16024_s_16025,2,,0,0,775.596266212284,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16025_s_16026,3,,0,0,1807.22190535612,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16026_s_2483495,4,,0,0,2766.28482550726,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_2483495_s_29681,5,,0,0,5416.75044306174,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_29681_s_16032,6,,0,0,6436.45201007476,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16032_s_2438933,7,,0,0,7576.71452995217,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_2438933_s_16031,8,,0,0,8240.84195654157,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16031_s_16030,9,,0,0,8527.62288862872,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16030_s_16033,10,,0,0,8932.84679637186,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16033_s_16034,11,,0,0,9165.13404331625,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16034_s_15889,12,,0,0,9628.59060260394,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_15889_s_16039,13,,0,0,10510.9386855591,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16039_s_16040,14,,0,0,11686.4154079233,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16040_s_16042,15,,0,0,12047.7835753043,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16042_s_16043,16,,0,0,12324.4604601439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16043_s_16044,17,,0,0,12526.5458089135,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16044_s_16045,18,,0,0,12886.5424727922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16045_s_15942,19,,0,0,13106.2063391676,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_15942_s_16048,20,,0,0,15282.8820371869,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16048_s_2438934,21,,2,3,17060.1720314054,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_2438934_s_16049,22,,0,0,18604.0056042532,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16049_s_16050,23,,0,0,19098.7301834617,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16050_s_16051,24,,0,0,19388.6880759922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16051_s_16052,25,,0,0,20425.6382579853,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16052_s_16053,26,,0,0,20752.5347065814,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16053_s_833259,27,,0,0,21230.9536762786,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_833259_s_16275,28,,0,0,23127.0336395412,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16275_s_16055,29,,0,0,23551.6916242021,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16055_s_16057,30,,0,0,23808.8722434897,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16057_s_16058,31,,0,0,24487.418244042,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16058_s_16059,32,,0,0,24680.6102514857,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16059_s_16060,33,,0,0,25614.1591340582,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16060_s_16061,34,,0,0,26256.131709164,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16061_s_16062,35,,0,0,27180.643659028,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16062_s_16063,36,,0,0,27686.863698439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16063_s_15890,37,,0,0,28259.1890347633,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_15890_s_2438932,38,,0,0,28886.6228332024,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_2438932_s_16065,39,,2,3,29619.901749005,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16065_s_2483495,40,,0,0,30254.2525223819,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_2483495_s_16066,41,,2,3,30838.8763853997,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16066_s_16068,42,,0,0,32312.2465968761,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16068_s_16069,43,,0,0,34898.4147967777,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299224_b_26748_tn_0,,,radius_1207_s_16069_s_16069,44,,0,0,36360.0641114,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299225_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299225_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299225_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299225_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299225_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299225_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299225_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299225_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299225_b_26748_tn_0,,,radius_1207_s_759423_s_16185,9,,0,0,6685.31689051341,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299225_b_26748_tn_0,,,radius_1207_s_16185_s_16086,10,,0,0,8961.70505916116,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299225_b_26748_tn_0,,,radius_1207_s_16086_s_16087,11,,0,0,10360.6117120665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299225_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,10902.6642789545,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299225_b_26748_tn_0,,,radius_1207_s_16088_s_16088,13,,0,0,12081.82250474,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_22284_s_22286,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_22286_s_22283,2,,0,0,580.898703890139,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_22283_s_22285,3,,0,0,1485.07965471661,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_22285_s_16278,4,,0,0,2389.72540975272,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_16278_s_15894,5,,2,3,17038.9069974779,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_15894_s_15882,6,,0,0,20982.6560544094,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_15882_s_15883,7,,0,0,22817.3023837179,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_15883_s_16276,8,,0,0,23629.5651817964,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_16276_s_15885,9,,0,0,23872.2297549312,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_15885_s_15893,10,,0,0,24379.2249071533,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_15893_s_16279,11,,0,0,34442.5528158479,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_16279_s_16275,12,,0,0,36375.0147840304,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_16275_s_15889,13,,0,0,37076.2208086132,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_15889_s_2456760,14,,0,0,37902.6201584632,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_2456760_s_2455449,15,,2,3,39685.7670273536,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,16,,2,3,40220.1382077686,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299226_b_26748_tn_0,,,radius_1207_s_29681_s_29681,17,,2,3,41071.73219809,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_15889_s_16200,1,,0,1,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16200_s_2456760,2,,0,0,390.124447144401,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_2456760_s_2455449,3,,2,3,1942.71023257005,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,4,,0,0,2422.62267762865,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_29681_s_16196,5,,0,0,3274.21666796654,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16196_s_781958,6,,2,3,4494.33427254792,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_781958_s_16068,7,,2,3,6021.13767832062,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16068_s_16201,8,,2,3,6747.70023050663,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16201_s_16197,9,,2,3,11779.7874851007,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16197_s_16202,10,,2,3,21615.370013261,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16202_s_16203,11,,0,0,23050.8716339068,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16203_s_16195,12,,0,0,27401.2515905677,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16195_s_16204,13,,0,0,30736.7981805553,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16204_s_16205,14,,2,3,32196.0237533648,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16205_s_16089,15,,2,3,36386.2354670862,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16089_s_781959,16,,0,0,37705.6185146785,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_781959_s_16094,17,,2,3,39746.7124844555,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16094_s_16095,18,,0,0,41627.503762023,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16095_s_2456766,19,,0,0,42598.7096685439,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_2456766_s_16071,20,,0,0,45092.4976364488,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16071_s_16212,21,,0,0,46524.7014916334,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16212_s_16079,22,,2,3,48100.9316569625,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16079_s_16080,23,,0,0,49207.6451476667,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16080_s_16210,24,,0,0,49808.5381113633,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16210_s_16214,25,,2,3,51569.6459203115,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16214_s_16215,26,,0,0,60177.3071557854,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299227_b_26748_tn_0,,,radius_1207_s_16215_s_16215,27,,1,0,63973.65413202,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299228_b_26748_tn_0,,,radius_1207_s_16066_s_16068,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299228_b_26748_tn_0,,,radius_1207_s_16068_s_16069,2,,0,0,2583.74475543002,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299228_b_26748_tn_0,,,radius_1207_s_16069_s_16069,3,,0,0,4045.39406991,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16215_s_16183,1,,0,0,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16183_s_16184,2,,2,3,6520.50975296256,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16184_s_16079,3,,2,3,11084.1884902035,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16079_s_16080,4,,0,0,13248.1451958165,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16080_s_16072,5,,0,0,13848.9661178394,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16072_s_2455436,6,,0,0,14751.3733239552,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_2455436_s_2456766,7,,2,3,15308.1661406291,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_2456766_s_16071,8,,0,0,15778.6377100029,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16071_s_16082,9,,0,0,17210.8415651875,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16082_s_16084,10,,0,0,19259.2327970833,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16084_s_16094,11,,0,0,21236.5820279569,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16094_s_16185,12,,0,0,22119.5215086519,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16185_s_16087,13,,2,3,24197.4842031251,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16087_s_16088,14,,0,0,26027.3114484316,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16088_s_16189,15,,2,3,27204.5843383888,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16189_s_16188,16,,2,3,31631.2452421551,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16188_s_16187,17,,0,0,33154.5344338769,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16187_s_16211,18,,2,3,36465.5949927191,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16211_s_16192,19,,0,0,40725.7914104004,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16192_s_16190,20,,0,0,41931.6524731666,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16190_s_16191,21,,2,3,49989.5176117643,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16191_s_16025,22,,2,3,52321.8018521579,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16025_s_2455449,23,,0,0,57134.220310128,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,24,,0,0,60471.8291282356,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_29681_s_16194,25,,0,0,61323.4231185735,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_16194_s_15889,26,,0,0,63200.9410346108,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299229_b_26748_tn_0,,,radius_1207_s_15889_s_15889,27,,0,0,63916.4911365,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299230_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299230_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299230_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299230_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299230_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299230_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299230_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299230_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299230_b_26748_tn_0,,,radius_1207_s_759423_s_16185,9,,0,0,6685.31689051341,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299230_b_26748_tn_0,,,radius_1207_s_16185_s_16086,10,,0,0,8961.70505916116,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299230_b_26748_tn_0,,,radius_1207_s_16086_s_16087,11,,0,0,10360.6117120665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299230_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,10902.6642789545,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299230_b_26748_tn_0,,,radius_1207_s_16088_s_16088,13,,0,0,12081.82250474,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299231_b_26748_tn_0,,,radius_1207_s_15889_s_16045,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299231_b_26748_tn_0,,,radius_1207_s_16045_s_15942,2,,2,3,1709.19902985184,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299231_b_26748_tn_0,,,radius_1207_s_15942_s_781974,3,,0,0,3887.61490675644,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299231_b_26748_tn_0,,,radius_1207_s_781974_s_15962,4,,0,0,17321.7379087203,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299231_b_26748_tn_0,,,radius_1207_s_15962_s_15944,5,,2,3,23800.6169789249,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299231_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,25852.6322194589,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299231_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,29176.3686491574,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299231_b_26748_tn_0,,,radius_1207_s_15947_s_15946,8,,0,0,32106.8180713215,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299231_b_26748_tn_0,,,radius_1207_s_15946_s_22289,9,,2,3,32708.1019769077,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299231_b_26748_tn_0,,,radius_1207_s_22289_s_2456757,10,,0,0,32903.3688034016,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299231_b_26748_tn_0,,,radius_1207_s_2456757_s_15950,11,,0,0,34982.5332643694,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299231_b_26748_tn_0,,,radius_1207_s_15950_s_2456756,12,,2,3,42709.6374459764,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299231_b_26748_tn_0,,,radius_1207_s_2456756_s_2456756,13,,0,0,47675.32249262,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299232_b_26748_tn_0,,,radius_1207_s_15889_s_15888,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299232_b_26748_tn_0,,,radius_1207_s_15888_s_15887,2,,0,0,1317.07488036808,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299232_b_26748_tn_0,,,radius_1207_s_15887_s_16060,3,,0,0,2009.36822490283,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299232_b_26748_tn_0,,,radius_1207_s_16060_s_15892,4,,0,0,3915.44513711639,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299232_b_26748_tn_0,,,radius_1207_s_15892_s_15884,5,,0,0,13988.7032003241,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299232_b_26748_tn_0,,,radius_1207_s_15884_s_15882,6,,2,3,14497.8576948654,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299232_b_26748_tn_0,,,radius_1207_s_15882_s_16278,7,,0,0,15033.0163136232,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299232_b_26748_tn_0,,,radius_1207_s_16278_s_22287,8,,2,3,17915.1260372278,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299232_b_26748_tn_0,,,radius_1207_s_22287_s_22284,9,,0,0,32340.4796076039,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299232_b_26748_tn_0,,,radius_1207_s_22284_s_22286,10,,2,3,33841.6504949612,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299232_b_26748_tn_0,,,radius_1207_s_22286_s_22283,11,,2,3,34423.1462924291,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299232_b_26748_tn_0,,,radius_1207_s_22283_s_22283,12,,2,3,35327.32724326,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299233_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299233_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299233_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299233_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299233_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299233_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299233_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299233_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299233_b_26748_tn_0,,,radius_1207_s_759423_s_16185,9,,0,0,6685.31689051341,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299233_b_26748_tn_0,,,radius_1207_s_16185_s_16086,10,,0,0,8961.70505916116,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299233_b_26748_tn_0,,,radius_1207_s_16086_s_16087,11,,0,0,10360.6117120665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299233_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,10902.6642789545,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299233_b_26748_tn_0,,,radius_1207_s_16088_s_16088,13,,0,0,12081.82250474,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_22284_s_22286,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_22286_s_22283,2,,0,0,580.898703890139,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_22283_s_22285,3,,0,0,1485.07965471661,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_22285_s_16278,4,,0,0,2389.72540975272,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_16278_s_15894,5,,2,3,17038.9069974779,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_15894_s_15882,6,,0,0,20982.6560544094,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_15882_s_15883,7,,0,0,22817.3023837179,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_15883_s_16276,8,,0,0,23629.5651817964,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_16276_s_15885,9,,0,0,23872.2297549312,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_15885_s_15893,10,,0,0,24379.2249071533,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_15893_s_16279,11,,0,0,34442.5528158479,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_16279_s_16275,12,,0,0,36375.0147840304,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_16275_s_15889,13,,0,0,37076.2208086132,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_15889_s_2456760,14,,0,0,37902.6201584632,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299234_b_26748_tn_0,,,radius_1207_s_2456760_s_2456760,15,,2,3,39685.76702734,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299235_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299235_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299235_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299235_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299235_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299235_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299235_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299235_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299235_b_26748_tn_0,,,radius_1207_s_759423_s_16185,9,,0,0,6685.31689051341,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299235_b_26748_tn_0,,,radius_1207_s_16185_s_16086,10,,0,0,8961.70505916116,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299235_b_26748_tn_0,,,radius_1207_s_16086_s_16087,11,,0,0,10360.6117120665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299235_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,10902.6642789545,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299235_b_26748_tn_0,,,radius_1207_s_16088_s_16088,13,,0,0,12081.82250474,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299236_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299236_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299236_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299236_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299236_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299236_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299236_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299236_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299236_b_26748_tn_0,,,radius_1207_s_759423_s_16185,9,,0,0,6685.31689051341,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299236_b_26748_tn_0,,,radius_1207_s_16185_s_16086,10,,0,0,8961.70505916116,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299236_b_26748_tn_0,,,radius_1207_s_16086_s_16087,11,,0,0,10360.6117120665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299236_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,10902.6642789545,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299236_b_26748_tn_0,,,radius_1207_s_16088_s_16088,13,,0,0,12081.82250474,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299237_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299237_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299237_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299237_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299237_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299237_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299237_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299237_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299237_b_26748_tn_0,,,radius_1207_s_759423_s_16185,9,,0,0,6685.31689051341,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299237_b_26748_tn_0,,,radius_1207_s_16185_s_16086,10,,0,0,8961.70505916116,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299237_b_26748_tn_0,,,radius_1207_s_16086_s_16087,11,,0,0,10360.6117120665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299237_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,10902.6642789545,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299237_b_26748_tn_0,,,radius_1207_s_16088_s_16088,13,,0,0,12081.82250474,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16215_s_16183,1,,0,0,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16183_s_16184,2,,2,3,6520.50975296256,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16184_s_16079,3,,2,3,11084.1884902035,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16079_s_16080,4,,0,0,13248.1451958165,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16080_s_16072,5,,0,0,13848.9661178394,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16072_s_2455436,6,,0,0,14751.3733239552,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_2455436_s_2456766,7,,2,3,15308.1661406291,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_2456766_s_16071,8,,0,0,15778.6377100029,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16071_s_16082,9,,0,0,17210.8415651875,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16082_s_16084,10,,0,0,19259.2327970833,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16084_s_16094,11,,0,0,21236.5820279569,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16094_s_16185,12,,0,0,22119.5215086519,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16185_s_16087,13,,2,3,24197.4842031251,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16087_s_16088,14,,0,0,26027.3114484316,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16088_s_16189,15,,2,3,27204.5843383888,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16189_s_16188,16,,2,3,31631.2452421551,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16188_s_16187,17,,0,0,33154.5344338769,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16187_s_16211,18,,2,3,36465.5949927191,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16211_s_16192,19,,0,0,40725.7914104004,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16192_s_16190,20,,0,0,41931.6524731666,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16190_s_16191,21,,2,3,49989.5176117643,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16191_s_16025,22,,2,3,52321.8018521579,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16025_s_2455449,23,,0,0,57134.220310128,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,24,,0,0,60471.8291282356,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_29681_s_16194,25,,0,0,61323.4231185735,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_16194_s_15889,26,,0,0,63200.9410346108,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299238_b_26748_tn_0,,,radius_1207_s_15889_s_15889,27,,0,0,63916.4911365,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299239_b_26748_tn_0,,,radius_1207_s_15889_s_16045,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299239_b_26748_tn_0,,,radius_1207_s_16045_s_15942,2,,2,3,1709.19902985184,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299239_b_26748_tn_0,,,radius_1207_s_15942_s_781974,3,,0,0,3887.61490675644,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299239_b_26748_tn_0,,,radius_1207_s_781974_s_15962,4,,0,0,17321.7379087203,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299239_b_26748_tn_0,,,radius_1207_s_15962_s_15944,5,,2,3,23800.6169789249,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299239_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,25852.6322194589,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299239_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,29176.3686491574,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299239_b_26748_tn_0,,,radius_1207_s_15947_s_15946,8,,0,0,32106.8180713215,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299239_b_26748_tn_0,,,radius_1207_s_15946_s_22289,9,,2,3,32708.1019769077,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299239_b_26748_tn_0,,,radius_1207_s_22289_s_2456757,10,,0,0,32903.3688034016,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299239_b_26748_tn_0,,,radius_1207_s_2456757_s_15950,11,,0,0,34982.5332643694,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299239_b_26748_tn_0,,,radius_1207_s_15950_s_2456756,12,,2,3,42709.6374459764,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299239_b_26748_tn_0,,,radius_1207_s_2456756_s_2456756,13,,0,0,47675.32249262,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299240_b_26748_tn_0,,,radius_1207_s_22284_s_22286,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299240_b_26748_tn_0,,,radius_1207_s_22286_s_22283,2,,0,0,580.898703890139,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299240_b_26748_tn_0,,,radius_1207_s_22283_s_22285,3,,0,0,1485.07965471661,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299240_b_26748_tn_0,,,radius_1207_s_22285_s_16278,4,,0,0,2389.72540975272,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299240_b_26748_tn_0,,,radius_1207_s_16278_s_15894,5,,2,3,17038.9069974779,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299240_b_26748_tn_0,,,radius_1207_s_15894_s_15882,6,,0,0,20982.6560544094,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299240_b_26748_tn_0,,,radius_1207_s_15882_s_15883,7,,0,0,22817.3023837179,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299240_b_26748_tn_0,,,radius_1207_s_15883_s_16276,8,,0,0,23629.5651817964,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299240_b_26748_tn_0,,,radius_1207_s_16276_s_15885,9,,0,0,23872.2297549312,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299240_b_26748_tn_0,,,radius_1207_s_15885_s_15893,10,,0,0,24379.2249071533,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299240_b_26748_tn_0,,,radius_1207_s_15893_s_16279,11,,0,0,34442.5528158479,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299240_b_26748_tn_0,,,radius_1207_s_16279_s_16275,12,,0,0,36375.0147840304,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299240_b_26748_tn_0,,,radius_1207_s_16275_s_15889,13,,0,0,37076.2208086132,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299240_b_26748_tn_0,,,radius_1207_s_15889_s_15889,14,,0,0,37902.62015844,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299241_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299241_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299241_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299241_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299241_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299241_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299241_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299241_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299241_b_26748_tn_0,,,radius_1207_s_759423_s_16185,9,,0,0,6685.31689051341,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299241_b_26748_tn_0,,,radius_1207_s_16185_s_16086,10,,0,0,8961.70505916116,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299241_b_26748_tn_0,,,radius_1207_s_16086_s_16087,11,,0,0,10360.6117120665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299241_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,10902.6642789545,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299241_b_26748_tn_0,,,radius_1207_s_16088_s_16088,13,,0,0,12081.82250474,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299242_b_26748_tn_0,,,radius_1207_s_22286_s_22283,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299242_b_26748_tn_0,,,radius_1207_s_22283_s_22285,2,,0,0,903.942886074705,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299242_b_26748_tn_0,,,radius_1207_s_22285_s_16278,3,,0,0,1808.58864111081,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299242_b_26748_tn_0,,,radius_1207_s_16278_s_15894,4,,2,3,16457.770228836,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299242_b_26748_tn_0,,,radius_1207_s_15894_s_15882,5,,0,0,20401.5192857675,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299242_b_26748_tn_0,,,radius_1207_s_15882_s_15883,6,,0,0,22236.165615076,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299242_b_26748_tn_0,,,radius_1207_s_15883_s_16276,7,,0,0,23048.4284131545,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299242_b_26748_tn_0,,,radius_1207_s_16276_s_15885,8,,0,0,23291.0929862893,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299242_b_26748_tn_0,,,radius_1207_s_15885_s_15893,9,,0,0,23798.0881385114,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299242_b_26748_tn_0,,,radius_1207_s_15893_s_16279,10,,2,3,33861.416047206,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299242_b_26748_tn_0,,,radius_1207_s_16279_s_16275,11,,2,3,35793.8780153885,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299242_b_26748_tn_0,,,radius_1207_s_16275_s_15889,12,,2,3,36495.0840399713,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299242_b_26748_tn_0,,,radius_1207_s_15889_s_15889,13,,1,3,37321.48338979,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_16088_s_16089,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_16089_s_759418,2,,0,0,1178.83712246948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_759418_s_759420,3,,0,0,1969.86279603153,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_759420_s_16092,4,,0,0,2927.11341583294,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_16092_s_759419,5,,0,0,3543.01448403495,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_759419_s_16094,6,,0,0,5295.50711835856,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_16094_s_759425,7,,0,0,5812.69004042949,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_759425_s_771261,8,,0,0,6573.62375387002,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_771261_s_759417,9,,0,0,7491.45929283844,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_759417_s_16097,10,,0,0,8308.95264594237,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_16097_s_16070,11,,0,0,9477.65606835453,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_16070_s_16071,12,,0,0,10328.6932386946,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_16071_s_16076,13,,0,0,11858.7112708948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_16076_s_16075,14,,0,0,12854.788768735,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_16075_s_16074,15,,0,0,13521.4705782649,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_16074_s_16077,16,,0,0,14037.794295026,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299243_b_26748_tn_0,,,radius_1207_s_16077_s_16077,17,,0,0,14969.68155963,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299244_b_26748_tn_0,,,radius_1207_s_15889_s_16045,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299244_b_26748_tn_0,,,radius_1207_s_16045_s_15942,2,,2,3,1709.19902985184,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299244_b_26748_tn_0,,,radius_1207_s_15942_s_781974,3,,0,0,3887.61490675644,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299244_b_26748_tn_0,,,radius_1207_s_781974_s_15962,4,,0,0,17321.7379087203,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299244_b_26748_tn_0,,,radius_1207_s_15962_s_15944,5,,2,3,23800.6169789249,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299244_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,25852.6322194589,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299244_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,29176.3686491574,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299244_b_26748_tn_0,,,radius_1207_s_15947_s_15946,8,,0,0,32106.8180713215,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299244_b_26748_tn_0,,,radius_1207_s_15946_s_22289,9,,2,3,32708.1019769077,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299244_b_26748_tn_0,,,radius_1207_s_22289_s_2456757,10,,0,0,32903.3688034016,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299244_b_26748_tn_0,,,radius_1207_s_2456757_s_15950,11,,0,0,34982.5332643694,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299244_b_26748_tn_0,,,radius_1207_s_15950_s_2456756,12,,2,3,42709.6374459764,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299244_b_26748_tn_0,,,radius_1207_s_2456756_s_2456756,13,,0,0,47675.32249262,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_22284_s_22286,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_22286_s_22283,2,,0,0,580.898703890139,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_22283_s_22285,3,,0,0,1485.07965471661,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_22285_s_16278,4,,0,0,2389.72540975272,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_16278_s_15894,5,,2,3,17038.9069974779,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_15894_s_15882,6,,0,0,20982.6560544094,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_15882_s_15883,7,,0,0,22817.3023837179,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_15883_s_16276,8,,0,0,23629.5651817964,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_16276_s_15885,9,,0,0,23872.2297549312,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_15885_s_15893,10,,0,0,24379.2249071533,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_15893_s_16279,11,,0,0,34442.5528158479,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_16279_s_16275,12,,0,0,36375.0147840304,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_16275_s_15889,13,,0,0,37076.2208086132,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_15889_s_2456760,14,,0,0,37902.6201584632,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_2456760_s_2455449,15,,2,3,39685.7670273536,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,16,,0,0,40220.1382077686,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299245_b_26748_tn_0,,,radius_1207_s_29681_s_29681,17,,0,0,41071.73219809,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16215_s_16183,1,,0,0,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16183_s_16184,2,,2,3,6520.50975296256,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16184_s_16079,3,,2,3,11084.1884902035,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16079_s_16080,4,,0,0,13248.1451958165,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16080_s_16072,5,,0,0,13848.9661178394,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16072_s_2455436,6,,2,3,14751.3733239552,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_2455436_s_16082,7,,2,3,15308.1661406291,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16082_s_16084,8,,2,3,16234.3285942847,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16084_s_16094,9,,0,0,18211.6778251583,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16094_s_16185,10,,0,0,19094.6173058532,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16185_s_16087,11,,2,3,21172.5800003265,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16087_s_16088,12,,0,0,23002.407245633,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16088_s_16189,13,,2,3,24179.6801355902,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16189_s_16188,14,,2,3,28606.3410393564,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16188_s_16187,15,,2,3,30129.6302310783,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16187_s_16211,16,,2,3,33440.6907899205,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16211_s_16192,17,,0,0,37700.8872076018,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16192_s_16191,18,,2,3,38906.748270368,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16191_s_16025,19,,2,3,49088.9678458823,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16025_s_2455449,20,,2,3,53901.3863038524,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,21,,2,3,57238.9951219599,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_29681_s_16194,22,,2,3,58090.5891122978,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_16194_s_15889,23,,0,0,59968.1070283351,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299246_b_26748_tn_0,,,radius_1207_s_15889_s_15889,24,,0,0,60683.65713019,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_15889_s_16200,1,,0,1,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16200_s_2456760,2,,2,3,390.124447144401,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_2456760_s_2455449,3,,2,3,1942.71023257005,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,4,,0,0,2422.62267762865,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_29681_s_16196,5,,0,0,3274.21666796654,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16196_s_781958,6,,2,3,4494.33427254792,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_781958_s_16068,7,,2,3,6021.13767832062,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16068_s_16201,8,,2,3,6747.70023050663,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16201_s_16197,9,,2,3,11779.7874851007,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16197_s_16202,10,,2,3,21615.370013261,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16202_s_16203,11,,0,0,23050.8716339068,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16203_s_16195,12,,0,0,27401.2515905677,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16195_s_16204,13,,0,0,30736.7981805553,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16204_s_16205,14,,2,3,32196.0237533648,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16205_s_16089,15,,2,3,36386.2354670862,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16089_s_781959,16,,0,0,37705.6185146785,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_781959_s_16094,17,,2,3,39746.7124844555,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16094_s_16095,18,,0,0,41627.503762023,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16095_s_2456766,19,,0,0,42598.7096685439,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_2456766_s_16071,20,,0,0,45092.4976364488,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16071_s_16212,21,,0,0,46524.7014916334,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16212_s_16079,22,,2,3,48100.9316569625,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16079_s_16080,23,,0,0,49207.6451476667,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16080_s_16210,24,,0,0,49808.5381113633,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16210_s_16214,25,,2,3,51569.6459203115,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16214_s_16215,26,,2,3,60177.3071557854,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299247_b_26748_tn_0,,,radius_1207_s_16215_s_16215,27,,1,0,63973.65413202,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299248_b_26748_tn_0,,,radius_1207_s_15889_s_15888,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299248_b_26748_tn_0,,,radius_1207_s_15888_s_15887,2,,0,0,1317.07488036808,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299248_b_26748_tn_0,,,radius_1207_s_15887_s_16060,3,,0,0,2009.36822490283,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299248_b_26748_tn_0,,,radius_1207_s_16060_s_15892,4,,0,0,3915.44513711639,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299248_b_26748_tn_0,,,radius_1207_s_15892_s_15884,5,,0,0,13988.7032003241,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299248_b_26748_tn_0,,,radius_1207_s_15884_s_15882,6,,0,0,14497.8576948654,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299248_b_26748_tn_0,,,radius_1207_s_15882_s_15881,7,,0,0,15033.0163136232,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299248_b_26748_tn_0,,,radius_1207_s_15881_s_16278,8,,0,0,17044.3564195229,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299248_b_26748_tn_0,,,radius_1207_s_16278_s_22287,9,,2,3,20972.2366658974,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299248_b_26748_tn_0,,,radius_1207_s_22287_s_22287,10,,0,0,35397.5902362,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299249_b_26748_tn_0,,,radius_1207_s_15889_s_15888,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299249_b_26748_tn_0,,,radius_1207_s_15888_s_15887,2,,0,0,1317.07488036808,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299249_b_26748_tn_0,,,radius_1207_s_15887_s_16060,3,,0,0,2009.36822490283,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299249_b_26748_tn_0,,,radius_1207_s_16060_s_15892,4,,0,0,3915.44513711639,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299249_b_26748_tn_0,,,radius_1207_s_15892_s_15884,5,,0,0,13988.7032003241,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299249_b_26748_tn_0,,,radius_1207_s_15884_s_15882,6,,0,0,14497.8576948654,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299249_b_26748_tn_0,,,radius_1207_s_15882_s_15881,7,,0,0,15033.0163136232,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299249_b_26748_tn_0,,,radius_1207_s_15881_s_16278,8,,0,0,17044.3564195229,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299249_b_26748_tn_0,,,radius_1207_s_16278_s_22287,9,,2,3,20972.2366658974,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299249_b_26748_tn_0,,,radius_1207_s_22287_s_22287,10,,0,0,35397.5902362,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_15889_s_16200,1,,0,1,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16200_s_2456760,2,,2,3,390.124447144401,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_2456760_s_16196,3,,2,3,1942.71023257005,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16196_s_781958,4,,2,3,3244.96255176137,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_781958_s_16068,5,,2,3,4770.06007054754,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16068_s_16201,6,,2,3,5496.62262273355,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16201_s_16197,7,,2,3,10528.7098773277,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16197_s_16202,8,,2,3,20364.2924054879,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16202_s_16203,9,,0,0,21799.7940261338,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16203_s_16195,10,,0,0,26150.1739827946,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16195_s_16204,11,,2,3,29485.7205727822,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16204_s_16205,12,,2,3,30944.9461455917,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16205_s_16089,13,,2,3,35135.1578593131,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16089_s_781959,14,,0,0,36454.5409069054,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_781959_s_16094,15,,2,3,38495.6348766825,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16094_s_16095,16,,2,3,40376.42615425,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16095_s_16212,17,,2,3,41347.6320607708,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16212_s_16079,18,,2,3,44659.2176954334,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16079_s_16080,19,,2,3,45767.8807060955,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16080_s_16210,20,,0,0,46368.7736697921,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16210_s_16214,21,,2,3,48129.8814787402,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16214_s_16215,22,,0,0,56737.5427142141,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299250_b_26748_tn_0,,,radius_1207_s_16215_s_16215,23,,1,0,60533.88969042,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_2456756_s_781972,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_781972_s_15954,2,,2,3,4892.98593754999,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_15954_s_2456757,3,,0,0,9163.8842134249,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_2456757_s_15970,4,,2,3,12346.7152514911,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_15970_s_15944,5,,2,3,14386.1710952224,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,14693.4670718337,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,18015.6961187487,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_15947_s_2456758,8,,0,0,20946.1455409128,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_2456758_s_15962,9,,2,3,21488.8546393623,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_15962_s_15969,10,,2,3,23588.9757480457,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_15969_s_15972,11,,2,3,26224.689856775,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_15972_s_15965,12,,0,0,30092.112122092,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_15965_s_16047,13,,2,3,36213.8474001787,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_16047_s_15967,14,,2,3,42473.6591655056,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_15967_s_15889,15,,0,0,43679.0271092872,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299251_b_26748_tn_0,,,radius_1207_s_15889_s_15889,16,,0,0,46637.37079181,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299254_b_26748_tn_0,,,radius_1207_s_15889_s_16045,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299254_b_26748_tn_0,,,radius_1207_s_16045_s_15942,2,,2,3,1709.19902985184,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299254_b_26748_tn_0,,,radius_1207_s_15942_s_781974,3,,0,0,3887.61490675644,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299254_b_26748_tn_0,,,radius_1207_s_781974_s_15962,4,,0,0,17321.7379087203,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299254_b_26748_tn_0,,,radius_1207_s_15962_s_15944,5,,2,3,23800.6169789249,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299254_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,25852.6322194589,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299254_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,29176.3686491574,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299254_b_26748_tn_0,,,radius_1207_s_15947_s_15946,8,,0,0,32106.8180713215,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299254_b_26748_tn_0,,,radius_1207_s_15946_s_22289,9,,2,3,32708.1019769077,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299254_b_26748_tn_0,,,radius_1207_s_22289_s_2456757,10,,0,0,32903.3688034016,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299254_b_26748_tn_0,,,radius_1207_s_2456757_s_15950,11,,0,0,34982.5332643694,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299254_b_26748_tn_0,,,radius_1207_s_15950_s_2456756,12,,2,3,42709.6374459764,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299254_b_26748_tn_0,,,radius_1207_s_2456756_s_2456756,13,,0,0,47675.32249262,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_16088_s_16089,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_16089_s_759418,2,,0,0,1178.83712246948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_759418_s_759420,3,,0,0,1969.86279603153,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_759420_s_16092,4,,0,0,2927.11341583294,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_16092_s_759419,5,,0,0,3543.01448403495,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_759419_s_16094,6,,0,0,5295.50711835856,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_16094_s_759425,7,,0,0,5812.69004042949,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_759425_s_771261,8,,0,0,6573.62375387002,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_771261_s_759417,9,,0,0,7491.45929283844,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_759417_s_16097,10,,0,0,8308.95264594237,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_16097_s_16070,11,,0,0,9477.65606835453,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_16070_s_16071,12,,0,0,10328.6932386946,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_16071_s_16076,13,,0,0,11858.7112708948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_16076_s_16075,14,,0,0,12854.788768735,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_16075_s_16074,15,,0,0,13521.4705782649,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_16074_s_16077,16,,0,0,14037.794295026,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299255_b_26748_tn_0,,,radius_1207_s_16077_s_16077,17,,0,0,14969.68155963,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_2456756_s_781972,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_781972_s_15954,2,,2,3,4892.98593754999,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_15954_s_2456757,3,,0,0,9163.8842134249,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_2456757_s_15970,4,,2,3,12346.7152514911,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_15970_s_15944,5,,2,3,14386.1710952224,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,14693.4670718337,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,18015.6961187487,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_15947_s_2456758,8,,0,0,20946.1455409128,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_2456758_s_15962,9,,2,3,21488.8546393623,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_15962_s_15969,10,,2,3,23588.9757480457,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_15969_s_15972,11,,2,3,26224.689856775,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_15972_s_15965,12,,0,0,30092.112122092,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_15965_s_16047,13,,2,3,36213.8474001787,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_16047_s_15967,14,,2,3,42473.6591655056,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_15967_s_15889,15,,0,0,43679.0271092872,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299256_b_26748_tn_0,,,radius_1207_s_15889_s_15889,16,,0,0,46637.37079181,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_2456756_s_781972,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_781972_s_15954,2,,2,3,4892.98593754999,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_15954_s_2456757,3,,0,0,9163.8842134249,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_2456757_s_15970,4,,2,3,12346.7152514911,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_15970_s_15944,5,,2,3,14386.1710952224,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,14693.4670718337,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,18015.6961187487,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_15947_s_2456758,8,,0,0,20946.1455409128,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_2456758_s_15962,9,,2,3,21488.8546393623,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_15962_s_15969,10,,2,3,23588.9757480457,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_15969_s_15972,11,,2,3,26224.689856775,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_15972_s_15965,12,,0,0,30092.112122092,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_15965_s_16047,13,,2,3,36213.8474001787,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_16047_s_15967,14,,2,3,42473.6591655056,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_15967_s_15889,15,,0,0,43679.0271092872,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299257_b_26748_tn_0,,,radius_1207_s_15889_s_15889,16,,0,0,46637.37079181,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_2456756_s_781972,1,,0,0,0,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_781972_s_15954,2,,2,3,4892.98593754999,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_15954_s_2456757,3,,0,0,9163.8842134249,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_2456757_s_15970,4,,2,3,12346.7152514911,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_15970_s_15944,5,,2,3,14386.1710952224,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_15944_s_15958,6,,2,3,14693.4670718337,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_15958_s_15947,7,,2,3,18015.6961187487,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_15947_s_2456758,8,,0,0,20946.1455409128,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_2456758_s_15962,9,,2,3,21488.8546393623,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_15962_s_15969,10,,2,3,23588.9757480457,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_15969_s_15972,11,,2,3,26224.689856775,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_15972_s_15965,12,,0,0,30092.112122092,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_15965_s_16047,13,,2,3,36213.8474001787,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_16047_s_15967,14,,2,3,42473.6591655056,0,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_15967_s_15889,15,,0,0,43679.0271092872,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299258_b_26748_tn_0,,,radius_1207_s_15889_s_15889,16,,0,0,46637.37079181,1,,,,,2,3,booking_route_497,booking_route_497,,,1,00:03:00,1,00:05:00 -t_299259_b_26748_tn_0,,,radius_1207_s_16094_s_759425,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299259_b_26748_tn_0,,,radius_1207_s_759425_s_771261,2,,0,0,760.214931322142,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299259_b_26748_tn_0,,,radius_1207_s_771261_s_759417,3,,0,0,1678.05047029056,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299259_b_26748_tn_0,,,radius_1207_s_759417_s_16097,4,,0,0,2495.5438233945,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299259_b_26748_tn_0,,,radius_1207_s_16097_s_16070,5,,0,0,3664.24724580665,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299259_b_26748_tn_0,,,radius_1207_s_16070_s_16071,6,,0,0,4515.28441614668,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299259_b_26748_tn_0,,,radius_1207_s_16071_s_16076,7,,0,0,6045.30244834694,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299259_b_26748_tn_0,,,radius_1207_s_16076_s_16075,8,,0,0,7041.3799461871,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299259_b_26748_tn_0,,,radius_1207_s_16075_s_16074,9,,0,0,7708.06175571705,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299259_b_26748_tn_0,,,radius_1207_s_16074_s_16077,10,,0,0,8224.38547247812,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299259_b_26748_tn_0,,,radius_1207_s_16077_s_16077,11,,0,0,9156.27273709,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_15889_s_16200,1,,0,1,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16200_s_2456760,2,,2,3,390.124447144401,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_2456760_s_2455449,3,,2,3,1942.71023257005,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,4,,0,0,2422.62267762865,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_29681_s_16196,5,,0,0,3274.21666796654,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16196_s_781958,6,,2,3,4494.33427254792,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_781958_s_16068,7,,2,3,6021.13767832062,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16068_s_16201,8,,2,3,6747.70023050663,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16201_s_16197,9,,2,3,11779.7874851007,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16197_s_16202,10,,2,3,21615.370013261,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16202_s_16203,11,,0,0,23050.8716339068,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16203_s_16195,12,,2,3,27401.2515905677,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16195_s_16204,13,,2,3,30736.7981805553,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16204_s_16205,14,,2,3,32196.0237533648,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16205_s_16089,15,,2,3,36386.2354670862,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16089_s_781959,16,,2,3,37705.6185146785,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_781959_s_16094,17,,2,3,39746.7124844555,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16094_s_16095,18,,0,0,41627.503762023,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16095_s_16212,19,,2,3,42598.7096685439,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16212_s_16079,20,,2,3,45910.2953032065,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299260_b_26748_tn_0,,,radius_1207_s_16079_s_16079,21,,0,0,47018.95831388,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_15889_s_16200,1,,0,1,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16200_s_2456760,2,,0,0,390.124447144401,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_2456760_s_2455449,3,,2,3,1942.71023257005,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,4,,0,0,2422.62267762865,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_29681_s_16196,5,,0,0,3274.21666796654,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16196_s_781958,6,,2,3,4494.33427254792,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_781958_s_16068,7,,2,3,6021.13767832062,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16068_s_16201,8,,2,3,6747.70023050663,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16201_s_16197,9,,2,3,11779.7874851007,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16197_s_16202,10,,2,3,21615.370013261,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16202_s_16203,11,,0,0,23050.8716339068,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16203_s_16195,12,,0,0,27401.2515905677,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16195_s_16204,13,,0,0,30736.7981805553,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16204_s_16205,14,,2,3,32196.0237533648,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16205_s_16089,15,,2,3,36386.2354670862,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16089_s_781959,16,,0,0,37705.6185146785,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_781959_s_16094,17,,2,3,39746.7124844555,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16094_s_16095,18,,0,0,41627.503762023,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16095_s_2456766,19,,0,0,42598.7096685439,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_2456766_s_16071,20,,0,0,45092.4976364488,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16071_s_16212,21,,0,0,46524.7014916334,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16212_s_16079,22,,2,3,48100.9316569625,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16079_s_16080,23,,0,0,49207.6451476667,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16080_s_16210,24,,0,0,49808.5381113633,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16210_s_16214,25,,2,3,51569.6459203115,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16214_s_16215,26,,0,0,60177.3071557854,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299261_b_26748_tn_0,,,radius_1207_s_16215_s_16215,27,,1,0,63973.65413202,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299262_b_26748_tn_0,,,radius_1207_s_16077_s_759421,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299262_b_26748_tn_0,,,radius_1207_s_759421_s_16079,2,,0,0,1008.12935981895,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299262_b_26748_tn_0,,,radius_1207_s_16079_s_16080,3,,0,0,1646.05038257577,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299262_b_26748_tn_0,,,radius_1207_s_16080_s_16072,4,,0,0,2246.95996830662,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299262_b_26748_tn_0,,,radius_1207_s_16072_s_16081,5,,0,0,3149.36717442244,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299262_b_26748_tn_0,,,radius_1207_s_16081_s_16082,6,,0,0,3886.97801179446,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299262_b_26748_tn_0,,,radius_1207_s_16082_s_759422,7,,0,0,4637.00781068317,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299262_b_26748_tn_0,,,radius_1207_s_759422_s_759423,8,,3,2,6083.91068321656,0,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299262_b_26748_tn_0,,,radius_1207_s_759423_s_759423,9,,0,0,6685.31689049,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16079_s_16080,1,,0,0,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16080_s_16072,2,,0,0,599.788780807444,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16072_s_2455436,3,,2,3,1502.19598692326,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_2455436_s_16082,4,,2,3,2058.98880359718,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16082_s_16084,5,,2,3,2985.15125725273,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16084_s_16185,6,,0,0,4962.50048812641,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16185_s_16087,7,,2,3,7330.56322187532,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16087_s_16088,8,,2,3,9163.36884051011,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16088_s_16189,9,,2,3,10340.6417304673,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16189_s_16188,10,,2,3,14767.3026342335,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16188_s_16187,11,,2,3,16290.5918259553,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16187_s_16211,12,,2,3,19601.6523847976,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16211_s_16192,13,,0,0,23861.8488024789,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16192_s_16190,14,,2,3,25067.7098652451,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16190_s_16191,15,,2,3,33125.5750038428,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16191_s_16025,16,,2,3,35457.8592442364,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16025_s_2455449,17,,2,3,40270.2777022065,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,18,,0,0,43607.8865203141,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_29681_s_16194,19,,0,0,44459.480510652,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_16194_s_15889,20,,2,3,46336.9984266893,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299263_b_26748_tn_0,,,radius_1207_s_15889_s_15889,21,,0,0,47052.54852858,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16069_s_16024,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16024_s_16025,2,,0,0,775.596266212284,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16025_s_16026,3,,0,0,1807.22190535612,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16026_s_2483495,4,,0,0,2766.28482550726,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_2483495_s_29681,5,,0,0,5416.75044306174,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_29681_s_16032,6,,0,0,6436.45201007476,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16032_s_2438933,7,,0,0,7576.71452995217,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_2438933_s_16031,8,,0,0,8240.84195654157,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16031_s_16030,9,,0,0,8527.62288862872,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16030_s_16033,10,,0,0,8932.84679637186,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16033_s_16034,11,,0,0,9165.13404331625,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16034_s_15889,12,,0,0,9628.59060260394,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_15889_s_16039,13,,0,0,10510.9386855591,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16039_s_16040,14,,0,0,11686.4154079233,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16040_s_16042,15,,0,0,12047.7835753043,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16042_s_16043,16,,0,0,12324.4604601439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16043_s_16044,17,,0,0,12526.5458089135,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16044_s_16045,18,,0,0,12886.5424727922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16045_s_15942,19,,0,0,13106.2063391676,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_15942_s_16048,20,,0,0,15282.8820371869,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16048_s_2438934,21,,2,3,17060.1720314054,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_2438934_s_16049,22,,0,0,18604.0056042532,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16049_s_16050,23,,0,0,19098.7301834617,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16050_s_16051,24,,0,0,19388.6880759922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16051_s_16052,25,,0,0,20425.6382579853,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16052_s_16053,26,,0,0,20752.5347065814,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16053_s_833259,27,,0,0,21230.9536762786,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_833259_s_16275,28,,0,0,23127.0336395412,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16275_s_16055,29,,0,0,23551.6916242021,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16055_s_16057,30,,0,0,23808.8722434897,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16057_s_16058,31,,0,0,24487.418244042,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16058_s_16059,32,,0,0,24680.6102514857,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16059_s_16060,33,,0,0,25614.1591340582,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16060_s_16061,34,,0,0,26256.131709164,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16061_s_16062,35,,0,0,27180.643659028,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16062_s_16063,36,,0,0,27686.863698439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16063_s_15890,37,,0,0,28259.1890347633,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_15890_s_2438932,38,,0,0,28886.6228332024,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_2438932_s_16065,39,,2,3,29619.901749005,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16065_s_2483495,40,,0,0,30254.2525223819,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_2483495_s_16066,41,,2,3,30838.8763853997,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16066_s_16068,42,,0,0,32312.2465968761,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16068_s_16069,43,,0,0,34898.4147967777,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299264_b_26748_tn_0,,,radius_1207_s_16069_s_16069,44,,0,0,36360.0641114,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299265_b_26748_tn_0,,,radius_1207_s_16069_s_16024,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299265_b_26748_tn_0,,,radius_1207_s_16024_s_16025,2,,0,0,775.596266212284,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299265_b_26748_tn_0,,,radius_1207_s_16025_s_16026,3,,0,0,1807.22190535612,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299265_b_26748_tn_0,,,radius_1207_s_16026_s_2483495,4,,0,0,2766.28482550726,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299265_b_26748_tn_0,,,radius_1207_s_2483495_s_29681,5,,0,0,5416.75044306174,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299265_b_26748_tn_0,,,radius_1207_s_29681_s_16032,6,,0,0,6436.45201007476,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299265_b_26748_tn_0,,,radius_1207_s_16032_s_2438933,7,,0,0,7576.71452995217,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299265_b_26748_tn_0,,,radius_1207_s_2438933_s_16031,8,,0,0,8240.84195654157,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299265_b_26748_tn_0,,,radius_1207_s_16031_s_16030,9,,0,0,8527.62288862872,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299265_b_26748_tn_0,,,radius_1207_s_16030_s_16033,10,,0,0,8932.84679637186,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299265_b_26748_tn_0,,,radius_1207_s_16033_s_16034,11,,0,0,9165.13404331625,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299265_b_26748_tn_0,,,radius_1207_s_16034_s_15889,12,,0,0,9628.59060260394,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299265_b_26748_tn_0,,,radius_1207_s_15889_s_15889,13,,0,0,10510.93868561,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_16088_s_16089,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_16089_s_759418,2,,0,0,1178.83712246948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_759418_s_759420,3,,0,0,1969.86279603153,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_759420_s_16092,4,,0,0,2927.11341583294,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_16092_s_759419,5,,0,0,3543.01448403495,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_759419_s_16094,6,,0,0,5295.50711835856,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_16094_s_759425,7,,0,0,5812.69004042949,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_759425_s_771261,8,,0,0,6573.62375387002,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_771261_s_759417,9,,0,0,7491.45929283844,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_759417_s_16097,10,,0,0,8308.95264594237,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_16097_s_16070,11,,0,0,9477.65606835453,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_16070_s_16071,12,,0,0,10328.6932386946,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_16071_s_16076,13,,0,0,11858.7112708948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_16076_s_16075,14,,0,0,12854.788768735,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_16075_s_16074,15,,0,0,13521.4705782649,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_16074_s_16077,16,,0,0,14037.794295026,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299266_b_26748_tn_0,,,radius_1207_s_16077_s_16077,17,,0,0,14969.68155963,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299267_b_26748_tn_0,,,radius_1207_s_15889_s_15888,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299267_b_26748_tn_0,,,radius_1207_s_15888_s_15887,2,,0,0,1317.07488036808,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299267_b_26748_tn_0,,,radius_1207_s_15887_s_16060,3,,0,0,2009.36822490283,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299267_b_26748_tn_0,,,radius_1207_s_16060_s_15892,4,,0,0,3915.44513711639,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299267_b_26748_tn_0,,,radius_1207_s_15892_s_15884,5,,0,0,13988.7032003241,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299267_b_26748_tn_0,,,radius_1207_s_15884_s_15882,6,,0,0,14497.8576948654,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299267_b_26748_tn_0,,,radius_1207_s_15882_s_15881,7,,0,0,15033.0163136232,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299267_b_26748_tn_0,,,radius_1207_s_15881_s_16278,8,,0,0,17044.3564195229,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299267_b_26748_tn_0,,,radius_1207_s_16278_s_22287,9,,2,3,20972.2366658974,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299267_b_26748_tn_0,,,radius_1207_s_22287_s_22284,10,,0,0,35397.5902362735,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299267_b_26748_tn_0,,,radius_1207_s_22284_s_22286,11,,2,3,36898.7611236308,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299267_b_26748_tn_0,,,radius_1207_s_22286_s_22283,12,,2,3,37480.2569210987,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299267_b_26748_tn_0,,,radius_1207_s_22283_s_22283,13,,2,3,38384.43787187,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299268_b_26748_tn_0,,,radius_1207_s_15889_s_15888,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299268_b_26748_tn_0,,,radius_1207_s_15888_s_15887,2,,0,0,1317.07488036808,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299268_b_26748_tn_0,,,radius_1207_s_15887_s_16060,3,,0,0,2009.36822490283,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299268_b_26748_tn_0,,,radius_1207_s_16060_s_15892,4,,0,0,3915.44513711639,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299268_b_26748_tn_0,,,radius_1207_s_15892_s_15884,5,,0,0,13988.7032003241,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299268_b_26748_tn_0,,,radius_1207_s_15884_s_15882,6,,0,0,14497.8576948654,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299268_b_26748_tn_0,,,radius_1207_s_15882_s_15881,7,,0,0,15033.0163136232,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299268_b_26748_tn_0,,,radius_1207_s_15881_s_16278,8,,0,0,17044.3564195229,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299268_b_26748_tn_0,,,radius_1207_s_16278_s_22287,9,,2,3,20972.2366658974,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299268_b_26748_tn_0,,,radius_1207_s_22287_s_22287,10,,0,0,35397.5902362,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_16088_s_16089,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_16089_s_759418,2,,0,0,1178.83712246948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_759418_s_759420,3,,0,0,1969.86279603153,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_759420_s_16092,4,,0,0,2927.11341583294,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_16092_s_759419,5,,0,0,3543.01448403495,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_759419_s_16094,6,,0,0,5295.50711835856,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_16094_s_759425,7,,0,0,5812.69004042949,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_759425_s_771261,8,,0,0,6573.62375387002,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_771261_s_759417,9,,0,0,7491.45929283844,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_759417_s_16097,10,,0,0,8308.95264594237,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_16097_s_16070,11,,0,0,9477.65606835453,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_16070_s_16071,12,,0,0,10328.6932386946,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_16071_s_16076,13,,0,0,11858.7112708948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_16076_s_16075,14,,0,0,12854.788768735,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_16075_s_16074,15,,0,0,13521.4705782649,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_16074_s_16077,16,,0,0,14037.794295026,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299269_b_26748_tn_0,,,radius_1207_s_16077_s_16077,17,,0,0,14969.68155963,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_16088_s_16089,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_16089_s_759418,2,,0,0,1178.83712246948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_759418_s_759420,3,,0,0,1969.86279603153,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_759420_s_16092,4,,0,0,2927.11341583294,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_16092_s_759419,5,,0,0,3543.01448403495,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_759419_s_16094,6,,0,0,5295.50711835856,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_16094_s_759425,7,,0,0,5812.69004042949,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_759425_s_771261,8,,0,0,6573.62375387002,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_771261_s_759417,9,,0,0,7491.45929283844,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_759417_s_16097,10,,0,0,8308.95264594237,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_16097_s_16070,11,,0,0,9477.65606835453,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_16070_s_16071,12,,0,0,10328.6932386946,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_16071_s_16076,13,,0,0,11858.7112708948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_16076_s_16075,14,,0,0,12854.788768735,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_16075_s_16074,15,,0,0,13521.4705782649,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_16074_s_16077,16,,0,0,14037.794295026,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299270_b_26748_tn_0,,,radius_1207_s_16077_s_16077,17,,0,0,14969.68155963,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_22284_s_22286,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_22286_s_22283,2,,0,0,580.898703890139,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_22283_s_22285,3,,0,0,1485.07965471661,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_22285_s_16278,4,,0,0,2389.72540975272,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_16278_s_15894,5,,2,3,17038.9069974779,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_15894_s_15882,6,,0,0,20982.6560544094,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_15882_s_15883,7,,0,0,22817.3023837179,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_15883_s_16276,8,,0,0,23629.5651817964,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_16276_s_15885,9,,0,0,23872.2297549312,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_15885_s_15893,10,,0,0,24379.2249071533,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_15893_s_16279,11,,0,0,34442.5528158479,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_16279_s_16275,12,,0,0,36375.0147840304,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_16275_s_15889,13,,0,0,37076.2208086132,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_15889_s_2456760,14,,0,0,37902.6201584632,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299271_b_26748_tn_0,,,radius_1207_s_2456760_s_2456760,15,,2,3,39685.76702734,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299272_b_26748_tn_0,,,radius_1207_s_15889_s_15888,1,,0,0,0,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299272_b_26748_tn_0,,,radius_1207_s_15888_s_15887,2,,0,0,1317.07488036808,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299272_b_26748_tn_0,,,radius_1207_s_15887_s_16060,3,,0,0,2009.36822490283,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299272_b_26748_tn_0,,,radius_1207_s_16060_s_15892,4,,0,0,3915.44513711639,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299272_b_26748_tn_0,,,radius_1207_s_15892_s_15884,5,,0,0,13988.7032003241,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299272_b_26748_tn_0,,,radius_1207_s_15884_s_15882,6,,0,0,14497.8576948654,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299272_b_26748_tn_0,,,radius_1207_s_15882_s_15881,7,,0,0,15033.0163136232,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299272_b_26748_tn_0,,,radius_1207_s_15881_s_16278,8,,0,0,17044.3564195229,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299272_b_26748_tn_0,,,radius_1207_s_16278_s_22287,9,,2,3,20972.2366658974,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299272_b_26748_tn_0,,,radius_1207_s_22287_s_22284,10,,0,0,35397.5902362735,1,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299272_b_26748_tn_0,,,radius_1207_s_22284_s_22286,11,,2,3,36898.7611236308,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299272_b_26748_tn_0,,,radius_1207_s_22286_s_22283,12,,2,3,37480.2569210987,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299272_b_26748_tn_0,,,radius_1207_s_22283_s_22283,13,,2,3,38384.43787187,0,,,,,2,3,booking_route_493,booking_route_493,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_16088_s_16089,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_16089_s_759418,2,,0,0,1178.83712246948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_759418_s_759420,3,,0,0,1969.86279603153,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_759420_s_16092,4,,0,0,2927.11341583294,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_16092_s_759419,5,,0,0,3543.01448403495,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_759419_s_16094,6,,0,0,5295.50711835856,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_16094_s_759425,7,,0,0,5812.69004042949,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_759425_s_771261,8,,0,0,6573.62375387002,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_771261_s_759417,9,,0,0,7491.45929283844,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_759417_s_16097,10,,0,0,8308.95264594237,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_16097_s_16070,11,,0,0,9477.65606835453,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_16070_s_16071,12,,0,0,10328.6932386946,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_16071_s_16076,13,,0,0,11858.7112708948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_16076_s_16075,14,,0,0,12854.788768735,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_16075_s_16074,15,,0,0,13521.4705782649,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_16074_s_16077,16,,0,0,14037.794295026,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299273_b_26748_tn_0,,,radius_1207_s_16077_s_16077,17,,0,0,14969.68155963,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_16088_s_16089,1,,0,0,0,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_16089_s_759418,2,,0,0,1178.83712246948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_759418_s_759420,3,,0,0,1969.86279603153,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_759420_s_16092,4,,0,0,2927.11341583294,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_16092_s_759419,5,,0,0,3543.01448403495,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_759419_s_16094,6,,0,0,5295.50711835856,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_16094_s_759425,7,,0,0,5812.69004042949,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_759425_s_771261,8,,0,0,6573.62375387002,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_771261_s_759417,9,,0,0,7491.45929283844,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_759417_s_16097,10,,0,0,8308.95264594237,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_16097_s_16070,11,,0,0,9477.65606835453,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_16070_s_16071,12,,0,0,10328.6932386946,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_16071_s_16076,13,,0,0,11858.7112708948,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_16076_s_16075,14,,0,0,12854.788768735,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_16075_s_16074,15,,0,0,13521.4705782649,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_16074_s_16077,16,,0,0,14037.794295026,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299274_b_26748_tn_0,,,radius_1207_s_16077_s_16077,17,,0,0,14969.68155963,1,,,,,2,3,booking_route_492,booking_route_492,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16069_s_16024,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16024_s_16025,2,,0,0,775.596266212284,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16025_s_16026,3,,0,0,1807.22190535612,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16026_s_2483495,4,,0,0,2766.28482550726,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_2483495_s_29681,5,,0,0,5416.75044306174,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_29681_s_16032,6,,0,0,6436.45201007476,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16032_s_2438933,7,,0,0,7576.71452995217,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_2438933_s_16031,8,,0,0,8240.84195654157,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16031_s_16030,9,,0,0,8527.62288862872,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16030_s_16033,10,,0,0,8932.84679637186,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16033_s_16034,11,,0,0,9165.13404331625,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16034_s_15889,12,,0,0,9628.59060260394,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_15889_s_16039,13,,0,0,10510.9386855591,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16039_s_16040,14,,0,0,11686.4154079233,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16040_s_16042,15,,0,0,12047.7835753043,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16042_s_16043,16,,0,0,12324.4604601439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16043_s_16044,17,,0,0,12526.5458089135,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16044_s_16045,18,,0,0,12886.5424727922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16045_s_15942,19,,0,0,13106.2063391676,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_15942_s_16048,20,,0,0,15282.8820371869,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16048_s_2438934,21,,2,3,17060.1720314054,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_2438934_s_16049,22,,0,0,18604.0056042532,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16049_s_16050,23,,0,0,19098.7301834617,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16050_s_16051,24,,0,0,19388.6880759922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16051_s_16052,25,,0,0,20425.6382579853,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16052_s_16053,26,,0,0,20752.5347065814,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16053_s_833259,27,,0,0,21230.9536762786,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_833259_s_16275,28,,0,0,23127.0336395412,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16275_s_16055,29,,0,0,23551.6916242021,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16055_s_16057,30,,0,0,23808.8722434897,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16057_s_16058,31,,0,0,24487.418244042,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16058_s_16059,32,,0,0,24680.6102514857,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16059_s_16060,33,,0,0,25614.1591340582,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16060_s_16061,34,,0,0,26256.131709164,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16061_s_16062,35,,0,0,27180.643659028,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16062_s_16063,36,,0,0,27686.863698439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16063_s_15890,37,,0,0,28259.1890347633,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_15890_s_2438932,38,,0,0,28886.6228332024,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_2438932_s_16065,39,,2,3,29619.901749005,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16065_s_2483495,40,,0,0,30254.2525223819,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_2483495_s_16066,41,,2,3,30838.8763853997,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16066_s_16068,42,,0,0,32312.2465968761,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16068_s_16069,43,,0,0,34898.4147967777,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299275_b_26748_tn_0,,,radius_1207_s_16069_s_16069,44,,0,0,36360.0641114,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16069_s_16024,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16024_s_16025,2,,0,0,775.596266212284,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16025_s_16026,3,,0,0,1807.22190535612,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16026_s_2483495,4,,0,0,2766.28482550726,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_2483495_s_29681,5,,0,0,5416.75044306174,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_29681_s_16032,6,,0,0,6436.45201007476,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16032_s_2438933,7,,0,0,7576.71452995217,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_2438933_s_16031,8,,0,0,8240.84195654157,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16031_s_16030,9,,0,0,8527.62288862872,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16030_s_16033,10,,0,0,8932.84679637186,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16033_s_16034,11,,0,0,9165.13404331625,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16034_s_15889,12,,0,0,9628.59060260394,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_15889_s_16039,13,,0,0,10510.9386855591,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16039_s_16040,14,,0,0,11686.4154079233,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16040_s_16042,15,,0,0,12047.7835753043,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16042_s_16043,16,,0,0,12324.4604601439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16043_s_16044,17,,0,0,12526.5458089135,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16044_s_16045,18,,0,0,12886.5424727922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16045_s_15942,19,,0,0,13106.2063391676,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_15942_s_16048,20,,0,0,15282.8820371869,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16048_s_2438934,21,,2,3,17060.1720314054,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_2438934_s_16049,22,,0,0,18604.0056042532,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16049_s_16050,23,,0,0,19098.7301834617,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16050_s_16051,24,,0,0,19388.6880759922,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16051_s_16052,25,,0,0,20425.6382579853,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16052_s_16053,26,,0,0,20752.5347065814,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16053_s_833259,27,,0,0,21230.9536762786,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_833259_s_16275,28,,0,0,23127.0336395412,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16275_s_16055,29,,0,0,23551.6916242021,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16055_s_16057,30,,0,0,23808.8722434897,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16057_s_16058,31,,0,0,24487.418244042,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16058_s_16059,32,,0,0,24680.6102514857,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16059_s_16060,33,,0,0,25614.1591340582,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16060_s_16061,34,,0,0,26256.131709164,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16061_s_16062,35,,0,0,27180.643659028,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16062_s_16063,36,,0,0,27686.863698439,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16063_s_15890,37,,0,0,28259.1890347633,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_15890_s_2438932,38,,0,0,28886.6228332024,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_2438932_s_16065,39,,2,3,29619.901749005,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16065_s_2483495,40,,0,0,30254.2525223819,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_2483495_s_16066,41,,2,3,30838.8763853997,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16066_s_16068,42,,0,0,32312.2465968761,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16068_s_16069,43,,0,0,34898.4147967777,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299276_b_26748_tn_0,,,radius_1207_s_16069_s_16069,44,,0,0,36360.0641114,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16215_s_16183,1,,0,0,0,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16183_s_16184,2,,2,3,6520.50975296256,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16184_s_16079,3,,2,3,11084.1884902035,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16079_s_16080,4,,0,0,13248.1451958165,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16080_s_16072,5,,0,0,13848.9661178394,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16072_s_2455436,6,,0,0,14751.3733239552,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_2455436_s_2456766,7,,2,3,15308.1661406291,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_2456766_s_16071,8,,0,0,15778.6377100029,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16071_s_16082,9,,0,0,17210.8415651875,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16082_s_16084,10,,0,0,19259.2327970833,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16084_s_16094,11,,0,0,21236.5820279569,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16094_s_16185,12,,0,0,22119.5215086519,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16185_s_16087,13,,2,3,24197.4842031251,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16087_s_16088,14,,0,0,26027.3114484316,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16088_s_16189,15,,2,3,27204.5843383888,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16189_s_16188,16,,2,3,31631.2452421551,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16188_s_16187,17,,0,0,33154.5344338769,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16187_s_16211,18,,2,3,36465.5949927191,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16211_s_16192,19,,0,0,40725.7914104004,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16192_s_16190,20,,0,0,41931.6524731666,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16190_s_16191,21,,2,3,49989.5176117643,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16191_s_16025,22,,2,3,52321.8018521579,0,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16025_s_2455449,23,,0,0,57134.220310128,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_2455449_s_29681,24,,0,0,60471.8291282356,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_29681_s_16194,25,,0,0,61323.4231185735,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_16194_s_15889,26,,0,0,63200.9410346108,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299338_b_26748_tn_0,,,radius_1207_s_15889_s_15889,27,,0,0,63916.4911365,1,,,,,2,3,booking_route_495,booking_route_495,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16069_s_16024,1,,0,0,0,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16024_s_16025,2,,0,0,775.596266212284,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16025_s_16026,3,,0,0,1807.22190535612,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16026_s_15893,4,,0,0,2766.28482550726,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_15893_s_16048,5,,0,0,8039.23778038043,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16048_s_16051,6,,2,3,14042.8656821803,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16051_s_16052,7,,0,0,17599.5544296388,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16052_s_16053,8,,0,0,17927.7506832307,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16053_s_833259,9,,0,0,18406.1696529279,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_833259_s_16275,10,,0,0,20302.2496161905,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16275_s_16055,11,,0,0,20726.9076008514,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16055_s_16057,12,,0,0,20984.0882201391,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16057_s_16058,13,,0,0,21662.6342206914,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16058_s_16059,14,,0,0,21855.826228135,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16059_s_16060,15,,0,0,22789.3751107075,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16060_s_16061,16,,0,0,23431.3476858134,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16061_s_16062,17,,0,0,24355.8596356773,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16062_s_16063,18,,0,0,24862.0796750883,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16063_s_15890,19,,0,0,25434.4050114126,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_15890_s_2438932,20,,0,0,26061.8388098517,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_2438932_s_16065,21,,2,3,26795.1177256544,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16065_s_2483495,22,,0,0,27429.4684990313,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_2483495_s_16066,23,,2,3,28014.092362049,0,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16066_s_16068,24,,0,0,29487.4625735254,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16068_s_16069,25,,0,0,32073.6307734271,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_299339_b_26748_tn_0,,,radius_1207_s_16069_s_16069,26,,0,0,33535.28008802,1,,,,,2,3,booking_route_491,booking_route_491,,,1,00:03:00,1,00:05:00 -t_748719_b_26748_tn_0,,,area_271,1,,2,2,0,1,,,,,1,1,booking_route_13317,booking_route_13317,00:00:00,07:30:00,1,00:10:00,1,00:25:00 -t_748719_b_26748_tn_0,,,area_271,2,,2,2,0,1,,,,,1,1,booking_route_13317,booking_route_13317,07:30:00,07:30:00,1,00:10:00,1,00:25:00 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/stops.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/stops.txt deleted file mode 100644 index 0525c8ec11d..00000000000 --- a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/stops.txt +++ /dev/null @@ -1,17 +0,0 @@ -stop_id,stop_code,platform_code,stop_name,stop_desc,stop_lat,stop_lon,zone_id,stop_url,location_type,parent_station,stop_timezone,position,direction,wheelchair_boarding -2456756,517,,3rd Street and Pontiac Street (Yachats Log Church),,44.3116263048855,-124.105422953253,,,0,,America/Los_Angeles,,,0 -2456757,539,,Waldport Clinic,,44.416184,-124.076029,,,0,,America/Los_Angeles,,,0 -2456758,538,,Dollar General,,44.427015,-124.065051,,,0,,America/Los_Angeles,,,0 -2456760,526,,Hwy 101 and NE 17th Street,,44.6506199947377,-124.052895474438,,,0,,America/Los_Angeles,,,0 -2456766,531,,22nd Street at Beach Club,,44.98137,-124.00641,,,0,,America/Los_Angeles,,,0 -2483495,503,,Walmart (Loop Route Only),,44.656229016403,-124.053896609126,,,0,,America/Los_Angeles,,,0 -2483496,525,,Applegate Street and 11th Street,,44.53911,-123.37108,,,0,,America/Los_Angeles,,,0 -2483497,524,,Main Street and 14th Street,,44.54015,-123.36601,,,0,,America/Los_Angeles,,,0 -2483498,523,,26th Street and SW Western Boulevard (Hilton Garden Inn),,44.55767,-123.2788,,,0,,America/Los_Angeles,,,0 -2483499,522,,Corvallis Transit Center,,44.5650440489089,-123.263958606787,,,0,,America/Los_Angeles,,,0 -2483500,521,,"Amtrak Station, Albany",,44.63053,-123.10286,,,0,,America/Los_Angeles,,,0 -2483502,518,,Corvallis Samaritan Hospital,,44.60378,-123.25316,,,0,,America/Los_Angeles,,,0 -2501902,652,,Toledo Park N' Ride,,44.624176,-123.939461,,,0,,America/Los_Angeles,,,0 -2501903,653,,Crystal Creek Loop and Highway 20,,44.628989,-123.768486,,,0,,America/Los_Angeles,,,0 -2501904,655,,South Beach Hatfield MSC,,44.622928,-124.046618,,,0,,America/Los_Angeles,,,0 -2502256,654,,Crystal Creek Loop and Highway 20,,44.6291635407879,-123.768060788296,,,0,,America/Los_Angeles,,,0 diff --git a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/trips.txt b/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/trips.txt deleted file mode 100644 index 0f7ea2c2559..00000000000 --- a/src/ext-test/resources/org/opentripplanner/ext/flex/lincoln-county-flex.gtfs/trips.txt +++ /dev/null @@ -1,57 +0,0 @@ -route_id,service_id,trip_id,trip_short_name,trip_headsign,direction_id,block_id,shape_id,bikes_allowed,wheelchair_accessible,trip_type,drt_max_travel_time,drt_avg_travel_time,drt_advance_book_min,drt_pickup_message,drt_drop_off_message,continuous_pickup_message,continuous_drop_off_message,booking_rule_id -13317,c_15353_b_26748_d_31,t_748719_b_26748_tn_0,,,0,,,,,,,,,,,,, -13317,c_15353_b_26748_d_31,t_1225545_b_26748_tn_0,,,0,,,,,,,,,,,,, -491,c_15353_b_26748_d_127,t_299224_b_26748_tn_0,,Loop,0,1343,p_737,,,,,,,,,,, -491,c_15353_b_26748_d_127,t_299264_b_26748_tn_0,,Loop,0,1343,p_737,,,,,,,,,,, -491,c_15353_b_26748_d_127,t_299265_b_26748_tn_0,,Loop,0,1343,p_736,,,,,,,,,,, -491,c_15353_b_26748_d_127,t_299275_b_26748_tn_0,,Loop,0,1343,p_737,,,,,,,,,,, -491,c_15353_b_26748_d_127,t_299276_b_26748_tn_0,,Loop,0,1343,p_737,,,,,,,,,,, -491,c_15353_b_26748_d_127,t_299223_b_26748_tn_0,,Loop,0,1343,p_737,,,,,,,,,,, -491,c_15353_b_26748_d_127,t_299339_b_26748_tn_0,,Loop,0,1343,p_738,,,,,,,,,,, -491,c_15353_b_26748_d_127,t_299228_b_26748_tn_0,,Loop,0,1343,p_735,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299273_b_26748_tn_0,,DMV,0,1344,p_742,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299274_b_26748_tn_0,,DMV,0,1344,p_742,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299243_b_26748_tn_0,,DMV,0,1344,p_742,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299255_b_26748_tn_0,,DMV,0,1344,p_742,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299259_b_26748_tn_0,,DMV,0,1344,p_743,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299266_b_26748_tn_0,,DMV,0,1344,p_742,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299269_b_26748_tn_0,,DMV,0,1344,p_742,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299270_b_26748_tn_0,,DMV,0,1344,p_742,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299230_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_740,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299225_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_740,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299233_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_740,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299235_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_740,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299236_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_740,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299237_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_740,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299241_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_740,,,,,,,,,,, -492,c_15353_b_26748_d_63,t_299262_b_26748_tn_0,,SW 62nd & Highway 101,1,1344,p_739,,,,,,,,,,, -493,c_15353_b_26748_d_63,t_299240_b_26748_tn_0,,Newport,0,21115,p_179218,,,,,,,,,,, -493,c_15353_b_26748_d_63,t_299271_b_26748_tn_0,,Newport,0,21117,p_179439,,,,,,,,,,, -493,c_15353_b_26748_d_63,t_299245_b_26748_tn_0,,Newport,0,21115,p_178796,,,,,,,,,,, -493,c_15353_b_26748_d_63,t_299242_b_26748_tn_0,,Newport,0,21115,p_178798,,,,,,,,,,, -493,c_15353_b_26748_d_63,t_299234_b_26748_tn_0,,Newport,0,21117,p_179439,,,,,,,,,,, -493,c_15353_b_26748_d_63,t_299226_b_26748_tn_0,,Newport,0,21117,p_178796,,,,,,,,,,, -493,c_15353_b_26748_d_63,t_299248_b_26748_tn_0,,Siletz,1,21117,p_179449,,,,,,,,,,, -493,c_15353_b_26748_d_63,t_299232_b_26748_tn_0,,Siletz,1,21115,p_178801,,,,,,,,,,, -493,c_15353_b_26748_d_63,t_299249_b_26748_tn_0,,Siletz,1,21115,p_179449,,,,,,,,,,, -493,c_15353_b_26748_d_63,t_299267_b_26748_tn_0,,Siletz,1,21117,p_179217,,,,,,,,,,, -493,c_15353_b_26748_d_63,t_299268_b_26748_tn_0,,Siletz,1,21115,p_178800,,,,,,,,,,, -493,c_15353_b_26748_d_63,t_299272_b_26748_tn_0,,Siletz,1,21117,p_179217,,,,,,,,,,, -495,c_15353_b_26748_d_127,t_299261_b_26748_tn_0,,Rose Lodge / Lincoln City ,0,21114,p_178791,,,,,,,,,,, -495,c_15353_b_26748_d_127,t_299227_b_26748_tn_0,,Rose Lodge / Lincoln City ,0,21114,p_178791,,,,,,,,,,, -495,c_15353_b_26748_d_127,t_299247_b_26748_tn_0,,Rose Lodge / Lincoln City ,0,21114,p_178791,,,,,,,,,,, -495,c_15353_b_26748_d_127,t_299250_b_26748_tn_0,,Rose Lodge / Lincoln City ,0,21114,p_178790,,,,,,,,,,, -495,c_15353_b_26748_d_127,t_299246_b_26748_tn_0,,Newport,1,21114,p_178795,,,,,,,,,,, -495,c_15353_b_26748_d_127,t_299238_b_26748_tn_0,,Newport,1,21114,p_178793,,,,,,,,,,, -495,c_15353_b_26748_d_127,t_299229_b_26748_tn_0,,Newport,1,21114,p_178793,,,,,,,,,,, -495,c_15353_b_26748_d_127,t_299338_b_26748_tn_0,,Newport,1,21114,p_178793,,,,,,,,,,, -495,c_15353_b_26748_d_63,t_299260_b_26748_tn_0,,Rose Lodge / Lincoln City ,0,21115,p_178792,,,,,,,,,,, -495,c_15353_b_26748_d_63,t_299263_b_26748_tn_0,,Newport,1,21115,p_178794,,,,,,,,,,, -497,c_15353_b_26748_d_63,t_299257_b_26748_tn_0,,Newport,0,21116,p_4523,,,,,,,,,,, -497,c_15353_b_26748_d_63,t_299258_b_26748_tn_0,,Newport,0,21116,p_4523,,,,,,,,,,, -497,c_15353_b_26748_d_63,t_299251_b_26748_tn_0,,Newport,0,21116,p_4523,,,,,,,,,,, -497,c_15353_b_26748_d_63,t_299256_b_26748_tn_0,,Newport,0,21116,p_4523,,,,,,,,,,, -497,c_15353_b_26748_d_63,t_299254_b_26748_tn_0,,Yachats,1,21116,p_724,,,,,,,,,,, -497,c_15353_b_26748_d_63,t_299231_b_26748_tn_0,,Yachats,1,21116,p_724,,,,,,,,,,, -497,c_15353_b_26748_d_63,t_299244_b_26748_tn_0,,Yachats,1,21116,p_724,,,,,,,,,,, -497,c_15353_b_26748_d_63,t_299239_b_26748_tn_0,,Yachats,1,21116,p_724,,,,,,,,,,, diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java index 8cdd4282e52..a1a03226014 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java @@ -40,11 +40,7 @@ void invalidPolygon() { var gtfsLocation = getLocation("invalid", selfIntersecting); var mapper = new AreaStopMapper(StopModel.of()); - var expectation = assertThrows(IllegalArgumentException.class, () -> mapper.map(gtfsLocation)); - assertEquals( - "Polygon geometry for AreaStop 1:zone-3 is invalid: Self-intersection at (lat: 1.0, lon: 2.0)", - expectation.getMessage() - ); + assertThrows(IllegalArgumentException.class, () -> mapper.map(gtfsLocation)); } private static Location getLocation(String name, Polygon polygon) { diff --git a/src/test/java/org/opentripplanner/transit/model/site/AreaStopTest.java b/src/test/java/org/opentripplanner/transit/model/site/AreaStopTest.java index d80c966aeff..b7a772e0cb5 100644 --- a/src/test/java/org/opentripplanner/transit/model/site/AreaStopTest.java +++ b/src/test/java/org/opentripplanner/transit/model/site/AreaStopTest.java @@ -4,10 +4,12 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; -import org.locationtech.jts.geom.LineString; +import org.locationtech.jts.geom.Geometry; +import org.opentripplanner._support.geometry.Polygons; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; @@ -25,19 +27,21 @@ class AreaStopTest { private static final String ZONE_ID = TransitModelForTest.TIME_ZONE_ID; - private static final LineString GEOMETRY = GeometryUtils.makeLineString(10, 0, 12, 4); + private static final Geometry GEOMETRY = Polygons.OSLO; - private static final WgsCoordinate COORDINATE = new WgsCoordinate(2, 11); + private static final WgsCoordinate COORDINATE = new WgsCoordinate(59.925, 10.7376); - private static final AreaStop subject = StopModel - .of() - .areaStop(TransitModelForTest.id(ID)) - .withName(NAME) - .withDescription(DESCRIPTION) - .withUrl(URL) - .withZoneId(ZONE_ID) - .withGeometry(GEOMETRY) - .build(); + private static final AreaStop subject = areaStopBuilder().withGeometry(GEOMETRY).build(); + + private static AreaStopBuilder areaStopBuilder() { + return StopModel + .of() + .areaStop(TransitModelForTest.id(ID)) + .withName(NAME) + .withDescription(DESCRIPTION) + .withUrl(URL) + .withZoneId(ZONE_ID); + } @Test void copy() { @@ -60,7 +64,7 @@ void copy() { assertEquals(URL, copy.getUrl()); assertEquals(ZONE_ID, copy.getFirstZoneAsString()); assertEquals(GEOMETRY, copy.getGeometry()); - assertEquals(COORDINATE, copy.getCoordinate()); + assertEquals(COORDINATE, copy.getCoordinate().roundToApproximate10m()); assertEquals("v2", copy.getName().toString()); } @@ -78,4 +82,16 @@ void sameAs() { subject.sameAs(subject.copy().withGeometry(GeometryUtils.makeLineString(0, 0, 0, 2)).build()) ); } + + @Test + void invalidGeometry() { + var ex = assertThrows( + IllegalArgumentException.class, + () -> areaStopBuilder().withGeometry(Polygons.SELF_INTERSECTING).build() + ); + assertEquals( + "Polygon geometry for AreaStop F:1 is invalid: Self-intersection at (lat: 1.0, lon: 2.0)", + ex.getMessage() + ); + } } From d88617c897c71b4dd53f228e3256ae59b8b18f1f Mon Sep 17 00:00:00 2001 From: sharhio Date: Mon, 17 Jun 2024 12:32:12 +0300 Subject: [PATCH 026/132] Use vehicleRentalSystemType to return system url --- .../apis/gtfs/datafetchers/RentalVehicleImpl.java | 5 +++-- .../apis/gtfs/generated/GraphQLDataFetchers.java | 3 ++- .../org/opentripplanner/apis/gtfs/schema.graphqls | 9 +++++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java index 84b45270a8b..71dc9ad8fa7 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java @@ -6,6 +6,7 @@ import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.service.vehiclerental.model.RentalVehicleType; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; public class RentalVehicleImpl implements GraphQLDataFetchers.GraphQLRentalVehicle { @@ -62,8 +63,8 @@ public DataFetcher vehicleType() { } @Override - public DataFetcher systemUrl() { - return environment -> getSource(environment).system.url; + public DataFetcher vehicleRentalSystem() { + return environment -> getSource(environment).system; } private VehicleRentalVehicle getSource(DataFetchingEnvironment environment) { diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index 7b35af403cc..fef1c0b35d4 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -58,6 +58,7 @@ import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; import org.opentripplanner.transit.model.basic.Money; import org.opentripplanner.transit.model.network.Route; @@ -858,7 +859,7 @@ public interface GraphQLRentalVehicle { public DataFetcher vehicleType(); - DataFetcher systemUrl(); + DataFetcher vehicleRentalSystem(); } public interface GraphQLRentalVehicleEntityCounts { diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index a4f53553e71..324360e3375 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -743,8 +743,8 @@ type RentalVehicle implements Node & PlaceInterface { """The type of the rental vehicle (scooter, bicycle, car...)""" vehicleType: RentalVehicleType - """The rental vehicle operator's system URL.""" - systemUrl: String! + """The vehicle rental system information.""" + vehicleRentalSystem: VehicleRentalSystemType } type BikeRentalStationUris { @@ -798,6 +798,11 @@ type RentalVehicleType { propulsionType: PropulsionType } +type VehicleRentalSystemType { + """The rental vehicle operator's system URL.""" + url: String +} + enum FormFactor { """A bicycle""" BICYCLE From 6213bb14355977b17086d695e36d53ac57ac25e5 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 17 Jun 2024 12:17:49 +0200 Subject: [PATCH 027/132] Apply suggestions from code review Co-authored-by: Thomas Gran Co-authored-by: Joel Lappalainen --- .../standalone/config/framework/json/ParameterBuilder.java | 2 +- .../standalone/config/routerequest/RouteRequestConfig.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java b/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java index acfc6f31e6c..93847202a1f 100644 --- a/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java +++ b/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java @@ -394,7 +394,7 @@ public Duration asDuration() { * In the documentation it will claim that it only accepts durations as the number is only for * backwards compatibility. */ - public Duration asDurationOrSeconds(Duration dflt) { + public Duration asDurationOrSeconds(Duration defaultValue) { info.withType(DURATION); setInfoOptional(dflt.toString()); var node = build(); diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index 4c6913908f6..6d2eb18f41b 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -209,7 +209,7 @@ private static void mapTransitPreferences(NodeAdapter c, TransitPreferences.Buil This also influences the time it takes to transfer. -Since some modes, like airplanes and subways, need more time than others, this is also configurable +Since some modes, like airplane and subway, need more time than others, this is also configurable per mode with `alightSlackForMode`. """ ) @@ -246,7 +246,7 @@ private static void mapTransitPreferences(NodeAdapter c, TransitPreferences.Buil It is similar to `transferSlack`, except that this also applies to the first transit leg in the trip and `transferSlack` does not. -Some modes, like airplanes or subway, might need more of a slack than others, so this is also +Some modes, like airplane or subway, might need more of a slack than others, so this is also configurable per mode with `boardSlackForMode`. """ ) From 22b5d3655ef7fbe78c11d67e01171f61685000b5 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 17 Jun 2024 12:26:29 +0200 Subject: [PATCH 028/132] Regenerate documentation --- docs/RouteRequest.md | 4 ++-- .../standalone/config/framework/json/ParameterBuilder.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 76ec510a5c7..2e2218b56c2 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -198,7 +198,7 @@ The slack is added to the time after leaving the transit vehicle. This also influences the time it takes to transfer. -Since some modes, like airplanes and subways, need more time than others, this is also configurable +Since some modes, like airplane and subway, need more time than others, this is also configurable per mode with `alightSlackForMode`. @@ -217,7 +217,7 @@ vehicle to another. It is similar to `transferSlack`, except that this also applies to the first transit leg in the trip and `transferSlack` does not. -Some modes, like airplanes or subway, might need more of a slack than others, so this is also +Some modes, like airplane or subway, might need more of a slack than others, so this is also configurable per mode with `boardSlackForMode`. diff --git a/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java b/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java index 93847202a1f..0afca602872 100644 --- a/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java +++ b/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java @@ -396,12 +396,12 @@ public Duration asDuration() { */ public Duration asDurationOrSeconds(Duration defaultValue) { info.withType(DURATION); - setInfoOptional(dflt.toString()); + setInfoOptional(defaultValue.toString()); var node = build(); if (node.isTextual()) { - return asDuration(dflt); + return asDuration(defaultValue); } else { - return Duration.ofSeconds((long) asDouble(dflt.toSeconds())); + return Duration.ofSeconds((long) asDouble(defaultValue.toSeconds())); } } From 657e62597e273bd2c0c181cc62f20c54675ef995 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 17 Jun 2024 12:34:36 +0200 Subject: [PATCH 029/132] Apply review suggestions --- docs/RouteRequest.md | 10 +++++----- .../config/routerequest/RouteRequestConfig.java | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 2e2218b56c2..60dec16d9b8 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -15,9 +15,9 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe | Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | |--------------------------------------------------------------------------------------------------------------|:----------------------:|------------------------------------------------------------------------------------------------------------------------------------------------|:----------:|------------------|:-----:| -| [alightSlack](#rd_alightSlack) | `duration` | The extra time after exiting a public transport vehicle. | *Optional* | `"PT0S"` | 2.0 | +| [alightSlack](#rd_alightSlack) | `duration` | The extra time to exit a public transport vehicle. | *Optional* | `"PT0S"` | 2.0 | | arriveBy | `boolean` | Whether the trip should depart or arrive at the specified date and time. | *Optional* | `false` | 2.0 | -| [boardSlack](#rd_boardSlack) | `duration` | The extra time before boarding a public transport vehicle. | *Optional* | `"PT0S"` | 2.0 | +| [boardSlack](#rd_boardSlack) | `duration` | The extra time to board a public transport vehicle. | *Optional* | `"PT0S"` | 2.0 | | [drivingDirection](#rd_drivingDirection) | `enum` | The driving direction to use in the intersection traversal calculation | *Optional* | `"right"` | 2.2 | | elevatorBoardCost | `integer` | What is the cost of boarding a elevator? | *Optional* | `90` | 2.0 | | elevatorBoardTime | `integer` | How long does it take to get on an elevator, on average. | *Optional* | `90` | 2.0 | @@ -192,9 +192,9 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe **Since version:** `2.0` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT0S"` **Path:** /routingDefaults -The extra time after exiting a public transport vehicle. +The extra time to exit a public transport vehicle. -The slack is added to the time after leaving the transit vehicle. +The slack is added to arrival time of the transit vehicle. This also influences the time it takes to transfer. @@ -207,7 +207,7 @@ per mode with `alightSlackForMode`. **Since version:** `2.0` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT0S"` **Path:** /routingDefaults -The extra time before boarding a public transport vehicle. +The extra time to board a public transport vehicle. The extra time is added to the time when entering a public transport vehicle. This is a useful tool for agencies wanting to add a general buffer time so that passengers are instructed to be diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index 6d2eb18f41b..ddb5d9a3a18 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -202,10 +202,10 @@ private static void mapTransitPreferences(NodeAdapter c, TransitPreferences.Buil c .of("alightSlack") .since(V2_0) - .summary("The extra time after exiting a public transport vehicle.") + .summary("The extra time to exit a public transport vehicle.") .description( """ -The slack is added to the time after leaving the transit vehicle. +The slack is added to arrival time of the transit vehicle. This also influences the time it takes to transfer. @@ -235,7 +235,7 @@ private static void mapTransitPreferences(NodeAdapter c, TransitPreferences.Buil c .of("boardSlack") .since(V2_0) - .summary("The extra time before boarding a public transport vehicle.") + .summary("The extra time to board a public transport vehicle.") .description( """ The extra time is added to the time when entering a public transport vehicle. This is a useful From 814846ee28575380a650e33e52329c6109cc62e0 Mon Sep 17 00:00:00 2001 From: sharhio Date: Mon, 17 Jun 2024 14:24:08 +0300 Subject: [PATCH 030/132] replace name with default if empty --- .../datasources/GbfsGeofencingZoneMapper.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java index 78fa7533d58..c98680d8c35 100644 --- a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java +++ b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java @@ -51,8 +51,10 @@ private GeofencingZone toInternalModel(GBFSFeature f) { LOG.error("Could not convert geofencing zone", e); return null; } - var nameFromData = f.getProperties().getName().isEmpty() ? null : f.getProperties().getName(); - var name = Objects.requireNonNullElseGet(nameFromData, () -> fallbackId(g)); + var name = Objects.requireNonNullElseGet(f.getProperties().getName(), () -> fallbackId(g)); + if (name.isEmpty()) { + name = fallbackId(g); + } var dropOffBanned = !f.getProperties().getRules().get(0).getRideAllowed(); var passThroughBanned = !f.getProperties().getRules().get(0).getRideThroughAllowed(); return new GeofencingZone( From 778d0dee35f3c3d196b689bf60df9440e8a900d6 Mon Sep 17 00:00:00 2001 From: sharhio Date: Mon, 17 Jun 2024 15:19:00 +0300 Subject: [PATCH 031/132] filterByNetwork naming --- .../apis/gtfs/datafetchers/QueryTypeImpl.java | 4 ++-- .../apis/gtfs/generated/GraphQLTypes.java | 12 ++++++------ .../apis/transmodel/TransmodelGraphQLSchema.java | 6 +++--- .../routing/graphfinder/DirectGraphFinder.java | 2 +- .../routing/graphfinder/GraphFinder.java | 2 +- .../graphfinder/PlaceFinderTraverseVisitor.java | 8 ++++---- .../routing/graphfinder/StreetGraphFinder.java | 4 ++-- .../org/opentripplanner/apis/gtfs/schema.graphqls | 2 +- .../opentripplanner/apis/transmodel/schema.graphql | 2 +- .../apis/gtfs/GraphQLIntegrationTest.java | 2 +- 10 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java index d46fa2a8cf1..f187a49d9c7 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java @@ -330,7 +330,7 @@ public DataFetcher> nearest() { List filterByPlaceTypes = args.getGraphQLFilterByPlaceTypes() != null ? args.getGraphQLFilterByPlaceTypes().stream().map(GraphQLUtils::toModel).toList() : DEFAULT_PLACE_TYPES; - List filterByNetworkNames = args.getGraphQLFilterByNetworkNames(); + List filterByNetwork = args.getGraphQLFilterByNetwork(); List places; try { @@ -348,7 +348,7 @@ public DataFetcher> nearest() { filterByStations, filterByRoutes, filterByBikeRentalStations, - filterByNetworkNames, + filterByNetwork, getTransitService(environment) ) ); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java index 0608e97aa77..b191cc0830b 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java @@ -2416,7 +2416,7 @@ public static class GraphQLQueryTypeNearestArgs { private Double lon; private Integer maxDistance; private Integer maxResults; - private List filterByNetworkNames; + private List filterByNetwork; public GraphQLQueryTypeNearestArgs(Map args) { if (args != null) { @@ -2448,7 +2448,7 @@ public GraphQLQueryTypeNearestArgs(Map args) { this.lon = (Double) args.get("lon"); this.maxDistance = (Integer) args.get("maxDistance"); this.maxResults = (Integer) args.get("maxResults"); - this.filterByNetworkNames = (List) args.get("filterByNetworkNames"); + this.filterByNetwork = (List) args.get("filterByNetwork"); } } @@ -2540,12 +2540,12 @@ public void setGraphQLMaxResults(Integer maxResults) { this.maxResults = maxResults; } - public List getGraphQLFilterByNetworkNames() { - return this.filterByNetworkNames; + public List getGraphQLFilterByNetwork() { + return this.filterByNetwork; } - public void setGraphQLFilterByNetworkNames(List networkNames) { - this.filterByNetworkNames = networkNames; + public void setGraphQLFilterByNetwork(List networks) { + this.filterByNetwork = networks; } } diff --git a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java index 455c7400718..af0d9b79bbb 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java @@ -850,7 +850,7 @@ private GraphQLSchema create() { .argument( GraphQLArgument .newArgument() - .name("filterByNetworkNames") + .name("filterByNetwork") .description("Only include places that match one of the given network names.") .type(new GraphQLList(Scalars.GraphQLString)) .build() @@ -945,7 +945,7 @@ private GraphQLSchema create() { if (placeTypes.contains(TransmodelPlaceType.STOP_PLACE)) { maxResults *= 5; } - List filterByNetworkNames = environment.getArgument("filterByNetworkNames"); + List filterByNetwork = environment.getArgument("filterByNetwork"); List places; places = @@ -962,7 +962,7 @@ private GraphQLSchema create() { filterByStations, filterByRoutes, filterByBikeRentalStations, - filterByNetworkNames, + filterByNetwork, GqlUtil.getTransitService(environment) ); diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java b/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java index 7eaf60e38f1..c36efc59e5b 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/DirectGraphFinder.java @@ -63,7 +63,7 @@ public List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, - List filterByNetworkNames, + List filterByNetwork, TransitService transitService ) { throw new UnsupportedOperationException("Not implemented"); diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java b/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java index eecc4f8015a..063ed221dd5 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/GraphFinder.java @@ -69,7 +69,7 @@ List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, - List filterByNetworkNames, + List filterByNetwork, TransitService transitService ); } diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java b/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java index 6b06e358103..41b8ea6cbc4 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java @@ -44,7 +44,7 @@ public class PlaceFinderTraverseVisitor implements TraverseVisitor private final boolean includeStations; private final int maxResults; private final double radiusMeters; - private final Set filterByNetworkNames; + private final Set filterByNetwork; /** * @param transitService A TransitService used in finding information about the @@ -70,7 +70,7 @@ public PlaceFinderTraverseVisitor( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, - List filterByNetworkNames, + List filterByNetwork, int maxResults, double radiusMeters ) { @@ -84,7 +84,7 @@ public PlaceFinderTraverseVisitor( this.filterByStations = toSet(filterByStations); this.filterByRoutes = toSet(filterByRoutes); this.filterByVehicleRental = toSet(filterByBikeRentalStations); - this.filterByNetworkNames = toSet(filterByNetworkNames); + this.filterByNetwork = toSet(filterByNetwork); includeStops = shouldInclude(filterByPlaceTypes, PlaceType.STOP); includePatternAtStops = shouldInclude(filterByPlaceTypes, PlaceType.PATTERN_AT_STOP); @@ -267,7 +267,7 @@ private void handleVehicleRental(VehicleRentalPlace station, double distance) { if (seenVehicleRentalPlaces.contains(station.getId())) { return; } - if (!filterByNetworkNames.isEmpty() && !filterByNetworkNames.contains(station.getNetwork())) { + if (!filterByNetwork.isEmpty() && !filterByNetwork.contains(station.getNetwork())) { return; } seenVehicleRentalPlaces.add(station.getId()); diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java b/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java index 48b4236cd5b..71f65209ddf 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/StreetGraphFinder.java @@ -56,7 +56,7 @@ public List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, - List filterByNetworkNames, + List filterByNetwork, TransitService transitService ) { PlaceFinderTraverseVisitor visitor = new PlaceFinderTraverseVisitor( @@ -67,7 +67,7 @@ public List findClosestPlaces( filterByStations, filterByRoutes, filterByBikeRentalStations, - filterByNetworkNames, + filterByNetwork, maxResults, radiusMeters ); diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 324360e3375..8b872900238 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -3554,7 +3554,7 @@ type QueryType { """ Only include places that match one of the given network names. """ - filterByNetworkNames: [String] + filterByNetwork: [String] """Only include places that match one of the given GTFS ids.""" filterByIds: InputFilters @deprecated(reason: "Not actively maintained") diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 03b97cab376..17f44b5cd97 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -676,7 +676,7 @@ type QueryType { "Only include places that include this mode. Only checked for places with mode i.e. quays, departures." filterByModes: [TransportMode], "Only include places that match one of the given network names." - filterByNetworkNames: [String], + filterByNetwork: [String], "Only include places of given types if set. Default accepts all types" filterByPlaceTypes: [FilterPlaceType] = [quay, stopPlace, bicycleRent, bikePark, carPark], "fetching only the first certain number of nodes" diff --git a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java index cb1d919637e..c73a607b594 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java @@ -448,7 +448,7 @@ public List findClosestPlaces( List filterByStations, List filterByRoutes, List filterByBikeRentalStations, - List filterByNetworkNames, + List filterByNetwork, TransitService transitService ) { return List From fa4627fbaef75da48583722294816315435d4d68 Mon Sep 17 00:00:00 2001 From: sharhio Date: Mon, 17 Jun 2024 17:25:00 +0300 Subject: [PATCH 032/132] removed network hiding option in maplayers --- .../layers/vehiclerental/VehicleRentalLayerBuilder.java | 3 --- .../opentripplanner/inspector/vector/LayerParameters.java | 7 ------- 2 files changed, 10 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java index 24d922bffb3..0869aeb2ba8 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java @@ -18,7 +18,6 @@ abstract class VehicleRentalLayerBuilder extends LayerBuilder { private final VehicleRentalService service; - private final List hideNetworks; public VehicleRentalLayerBuilder( VehicleRentalService service, @@ -31,7 +30,6 @@ public VehicleRentalLayerBuilder( layerParameters.expansionFactor() ); this.service = service; - this.hideNetworks = layerParameters.hideNetworks(); } @Override @@ -41,7 +39,6 @@ protected List getGeometries(Envelope query) { } return getVehicleRentalPlaces(service) .stream() - .filter(rental -> !hideNetworks.contains(rental.getNetwork())) .map(rental -> { Coordinate coordinate = new Coordinate(rental.getLongitude(), rental.getLatitude()); Point point = GeometryUtils.getGeometryFactory().createPoint(coordinate); diff --git a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java index 0348cf0265e..0d6a4b23d6b 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java +++ b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java @@ -56,11 +56,4 @@ default int cacheMaxSeconds() { default double expansionFactor() { return EXPANSION_FACTOR; } - - /** - * A list of networks to hide from the results. - */ - default List hideNetworks() { - return HIDE_NETWORKS; - } } From 5ef5fb518007e8ac40e0202b947860be2f284077 Mon Sep 17 00:00:00 2001 From: sharhio Date: Mon, 17 Jun 2024 18:48:33 +0300 Subject: [PATCH 033/132] filterByNetwork description --- .../apis/transmodel/TransmodelGraphQLSchema.java | 4 +++- .../resources/org/opentripplanner/apis/gtfs/schema.graphqls | 2 +- .../org/opentripplanner/apis/transmodel/schema.graphql | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java index af0d9b79bbb..7d6e5750627 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java @@ -851,7 +851,9 @@ private GraphQLSchema create() { GraphQLArgument .newArgument() .name("filterByNetwork") - .description("Only include places that match one of the given network names.") + .description( + "Only include vehicle rental networks that match one of the given network names." + ) .type(new GraphQLList(Scalars.GraphQLString)) .build() ) diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 8b872900238..36fa16a632c 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -3552,7 +3552,7 @@ type QueryType { filterByModes: [Mode] """ - Only include places that match one of the given network names. + Only include vehicle rental networks that match one of the given network names. """ filterByNetwork: [String] diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 17f44b5cd97..46ee3305259 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -675,7 +675,7 @@ type QueryType { filterByInUse: Boolean = false, "Only include places that include this mode. Only checked for places with mode i.e. quays, departures." filterByModes: [TransportMode], - "Only include places that match one of the given network names." + "Only include vehicle rental networks that match one of the given network names." filterByNetwork: [String], "Only include places of given types if set. Default accepts all types" filterByPlaceTypes: [FilterPlaceType] = [quay, stopPlace, bicycleRent, bikePark, carPark], From e6603e1854b5e767c9c49f2204c92afa8843de2b Mon Sep 17 00:00:00 2001 From: sharhio Date: Tue, 18 Jun 2024 11:48:26 +0300 Subject: [PATCH 034/132] Fixed vehiclerentalsystem --- .../apis/gtfs/datafetchers/RentalVehicleImpl.java | 2 +- .../apis/gtfs/datafetchers/VehicleRentalStationImpl.java | 6 ++++++ .../apis/gtfs/generated/GraphQLDataFetchers.java | 2 ++ .../apis/gtfs/generated/graphql-codegen.yml | 1 + .../service/vehiclerental/model/VehicleRentalPlace.java | 3 +++ .../service/vehiclerental/model/VehicleRentalStation.java | 5 +++++ .../service/vehiclerental/model/VehicleRentalVehicle.java | 5 +++++ .../org/opentripplanner/apis/gtfs/schema.graphqls | 7 +++++-- 8 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java index 71dc9ad8fa7..1449c44e315 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java @@ -64,7 +64,7 @@ public DataFetcher vehicleType() { @Override public DataFetcher vehicleRentalSystem() { - return environment -> getSource(environment).system; + return environment -> getSource(environment).getVehicleRentalSystem(); } private VehicleRentalVehicle getSource(DataFetchingEnvironment environment) { diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java index dc60a7c76e8..117061b988e 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java @@ -7,6 +7,7 @@ import org.opentripplanner.service.vehiclerental.model.RentalVehicleEntityCounts; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; public class VehicleRentalStationImpl implements GraphQLDataFetchers.GraphQLVehicleRentalStation { @@ -107,6 +108,11 @@ public DataFetcher availableSpaces() { return environment -> getSource(environment).getVehicleSpaceCounts(); } + @Override + public DataFetcher vehicleRentalSystem() { + return environment -> getSource(environment).getVehicleRentalSystem(); + } + private VehicleRentalStation getSource(DataFetchingEnvironment environment) { return environment.getSource(); } diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index fef1c0b35d4..c956eddd954 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -1303,6 +1303,8 @@ public interface GraphQLVehicleRentalStation { public DataFetcher rentalUris(); + public DataFetcher vehicleRentalSystem(); + public DataFetcher spacesAvailable(); public DataFetcher stationId(); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml b/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml index ff9af6f6aa0..6e5cbf7bd71 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml @@ -47,6 +47,7 @@ config: BikeRentalStation: org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace#VehicleRentalPlace BikeRentalStationUris: org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris#VehicleRentalStationUris VehicleRentalStation: org.opentripplanner.service.vehiclerental.model.VehicleRentalStation#VehicleRentalStation + VehicleRentalSystem: org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem#VehicleRentalSystem RentalVehicleEntityCounts: org.opentripplanner.service.vehiclerental.model.RentalVehicleEntityCounts#RentalVehicleEntityCounts RentalVehicleTypeCount: org.opentripplanner.service.vehiclerental.model.RentalVehicleTypeCount#RentalVehicleTypeCount RentalVehicle: org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle#VehicleRentalVehicle diff --git a/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalPlace.java b/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalPlace.java index 1725e7df2dd..cd806603c9d 100644 --- a/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalPlace.java +++ b/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalPlace.java @@ -80,6 +80,9 @@ public interface VehicleRentalPlace { /** Deep links for this rental station or individual vehicle */ VehicleRentalStationUris getRentalUris(); + /** System information for the vehicle rental provider */ + VehicleRentalSystem getVehicleRentalSystem(); + default boolean networkIsNotAllowed(VehicleRentalPreferences preferences) { if ( getNetwork() == null && diff --git a/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalStation.java b/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalStation.java index a31e5e88a0e..d6e72023a31 100644 --- a/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalStation.java +++ b/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalStation.java @@ -172,6 +172,11 @@ public VehicleRentalStationUris getRentalUris() { return rentalUris; } + @Override + public VehicleRentalSystem getVehicleRentalSystem() { + return system; + } + @Override public String toString() { return String.format( diff --git a/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalVehicle.java b/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalVehicle.java index 7dba5e714b4..042e608c88f 100644 --- a/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalVehicle.java +++ b/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalVehicle.java @@ -128,4 +128,9 @@ public boolean isRealTimeData() { public VehicleRentalStationUris getRentalUris() { return rentalUris; } + + @Override + public VehicleRentalSystem getVehicleRentalSystem() { + return system; + } } diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 36fa16a632c..bbb02b73f33 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -687,6 +687,9 @@ type VehicleRentalStation implements Node & PlaceInterface { If true, station is on and in service. """ operative: Boolean + + """The vehicle rental system information.""" + vehicleRentalSystem: VehicleRentalSystem } type RentalVehicleEntityCounts { @@ -744,7 +747,7 @@ type RentalVehicle implements Node & PlaceInterface { vehicleType: RentalVehicleType """The vehicle rental system information.""" - vehicleRentalSystem: VehicleRentalSystemType + vehicleRentalSystem: VehicleRentalSystem } type BikeRentalStationUris { @@ -798,7 +801,7 @@ type RentalVehicleType { propulsionType: PropulsionType } -type VehicleRentalSystemType { +type VehicleRentalSystem { """The rental vehicle operator's system URL.""" url: String } From aa8d4ae6150addb7dff2921f426b2e91f02cecc3 Mon Sep 17 00:00:00 2001 From: sharhio Date: Tue, 18 Jun 2024 13:24:03 +0300 Subject: [PATCH 035/132] no network filtering in transmodel --- .../apis/transmodel/TransmodelGraphQLSchema.java | 12 +----------- .../opentripplanner/apis/transmodel/schema.graphql | 2 -- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java index 7d6e5750627..cc3c6cdbcea 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java @@ -847,16 +847,6 @@ private GraphQLSchema create() { .type(Scalars.GraphQLInt) .build() ) - .argument( - GraphQLArgument - .newArgument() - .name("filterByNetwork") - .description( - "Only include vehicle rental networks that match one of the given network names." - ) - .type(new GraphQLList(Scalars.GraphQLString)) - .build() - ) .argument( GraphQLArgument .newArgument() @@ -915,6 +905,7 @@ private GraphQLSchema create() { List filterByBikeRentalStations = null; List filterByBikeParks = null; List filterByCarParks = null; + List filterByNetwork = null; @SuppressWarnings("rawtypes") Map filterByIds = environment.getArgument("filterByIds"); if (filterByIds != null) { @@ -947,7 +938,6 @@ private GraphQLSchema create() { if (placeTypes.contains(TransmodelPlaceType.STOP_PLACE)) { maxResults *= 5; } - List filterByNetwork = environment.getArgument("filterByNetwork"); List places; places = diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 46ee3305259..fbaa2418d7e 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -675,8 +675,6 @@ type QueryType { filterByInUse: Boolean = false, "Only include places that include this mode. Only checked for places with mode i.e. quays, departures." filterByModes: [TransportMode], - "Only include vehicle rental networks that match one of the given network names." - filterByNetwork: [String], "Only include places of given types if set. Default accepts all types" filterByPlaceTypes: [FilterPlaceType] = [quay, stopPlace, bicycleRent, bikePark, carPark], "fetching only the first certain number of nodes" From 8a77828cff450d7ac7ac49debd41125b3fd2ee46 Mon Sep 17 00:00:00 2001 From: sharhio <113033056+sharhio@users.noreply.github.com> Date: Wed, 19 Jun 2024 12:03:28 +0300 Subject: [PATCH 036/132] Update src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java Co-authored-by: Leonard Ehrenfried --- .../vehicle_rental/datasources/GbfsGeofencingZoneMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java index c98680d8c35..0a79d45d4ee 100644 --- a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java +++ b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java @@ -52,7 +52,7 @@ private GeofencingZone toInternalModel(GBFSFeature f) { return null; } var name = Objects.requireNonNullElseGet(f.getProperties().getName(), () -> fallbackId(g)); - if (name.isEmpty()) { + if (StringUtils.hasValue(name)) { name = fallbackId(g); } var dropOffBanned = !f.getProperties().getRules().get(0).getRideAllowed(); From 98588b8d8baa1eb846700a1d83f0bb17652a938b Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 19 Jun 2024 11:08:49 +0200 Subject: [PATCH 037/132] Convert exception into data import issue --- .../graph_builder/issue/api/Issue.java | 11 ++++++++ .../gtfs/mapping/AreaStopMapper.java | 24 +++++++++++++++-- .../GTFSToOtpTransitServiceMapper.java | 2 +- .../transit/model/site/AreaStop.java | 13 +-------- .../gtfs/mapping/AreaStopMapperTest.java | 27 +++++++++++++++---- .../gtfs/mapping/LocationGroupMapperTest.java | 3 ++- .../gtfs/mapping/StopAreaMapperTest.java | 3 ++- .../gtfs/mapping/StopTimeMapperTest.java | 5 +++- .../gtfs/mapping/TransferMapperTest.java | 5 +++- .../transit/model/site/AreaStopTest.java | 13 --------- 10 files changed, 69 insertions(+), 37 deletions(-) diff --git a/src/main/java/org/opentripplanner/graph_builder/issue/api/Issue.java b/src/main/java/org/opentripplanner/graph_builder/issue/api/Issue.java index 794d9785934..24beb48e845 100644 --- a/src/main/java/org/opentripplanner/graph_builder/issue/api/Issue.java +++ b/src/main/java/org/opentripplanner/graph_builder/issue/api/Issue.java @@ -1,5 +1,7 @@ package org.opentripplanner.graph_builder.issue.api; +import org.opentripplanner.framework.tostring.ToStringBuilder; + /** * Generic issue type, which can be used to create issues. */ @@ -32,4 +34,13 @@ public String getType() { public String getMessage() { return String.format(message, arguments); } + + @Override + public String toString() { + return ToStringBuilder + .of(this.getClass()) + .addStr("type", type) + .addStr("message", getMessage()) + .toString(); + } } diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/AreaStopMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/AreaStopMapper.java index e42d7414620..b2d66bdb5c4 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/AreaStopMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/AreaStopMapper.java @@ -6,11 +6,14 @@ import java.util.HashMap; import java.util.Map; import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.operation.valid.IsValidOp; import org.onebusaway.gtfs.model.Location; import org.opentripplanner.framework.collection.MapUtils; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.geometry.UnsupportedGeometryException; import org.opentripplanner.framework.i18n.NonLocalizedString; +import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; +import org.opentripplanner.graph_builder.issue.api.Issue; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.service.StopModelBuilder; @@ -19,9 +22,11 @@ public class AreaStopMapper { private final Map mappedLocations = new HashMap<>(); private final StopModelBuilder stopModelBuilder; + private final DataImportIssueStore issueStore; - public AreaStopMapper(StopModelBuilder stopModelBuilder) { + public AreaStopMapper(StopModelBuilder stopModelBuilder, DataImportIssueStore issueStore) { this.stopModelBuilder = stopModelBuilder; + this.issueStore = issueStore; } Collection map(Collection allLocations) { @@ -36,9 +41,24 @@ AreaStop map(Location orginal) { private AreaStop doMap(Location gtfsLocation) { var name = NonLocalizedString.ofNullable(gtfsLocation.getName()); try { + var id = mapAgencyAndId(gtfsLocation.getId()); Geometry geometry = GeometryUtils.convertGeoJsonToJtsGeometry(gtfsLocation.getGeometry()); + var isValidOp = new IsValidOp(geometry); + if (!isValidOp.isValid()) { + var error = isValidOp.getValidationError(); + issueStore.add( + Issue.issue( + "InvalidFlexAreaGeometry", + "GTFS flex location %s has an invalid geometry: %s at (lat: %s, lon: %s)", + id, + error.getMessage(), + error.getCoordinate().y, + error.getCoordinate().x + ) + ); + } return stopModelBuilder - .areaStop(mapAgencyAndId(gtfsLocation.getId())) + .areaStop(id) .withName(name) .withUrl(NonLocalizedString.ofNullable(gtfsLocation.getUrl())) .withDescription(NonLocalizedString.ofNullable(gtfsLocation.getDescription())) diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java index 88a32c0f95e..afbb105aa27 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java @@ -110,7 +110,7 @@ public GTFSToOtpTransitServiceMapper( entranceMapper = new EntranceMapper(translationHelper, stationLookup); pathwayNodeMapper = new PathwayNodeMapper(translationHelper, stationLookup); boardingAreaMapper = new BoardingAreaMapper(translationHelper, stopLookup); - areaStopMapper = new AreaStopMapper(builder.stopModel()); + areaStopMapper = new AreaStopMapper(builder.stopModel(), issueStore); locationGroupMapper = new LocationGroupMapper(stopMapper, areaStopMapper, builder.stopModel()); // the use of stop areas were reverted in the spec // this code will go away, please migrate now! diff --git a/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java b/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java index cf0ac3d0b3f..64fafcb58b3 100644 --- a/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java +++ b/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java @@ -6,7 +6,6 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.locationtech.jts.geom.Geometry; -import org.locationtech.jts.operation.valid.IsValidOp; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; @@ -53,17 +52,7 @@ public class AreaStop this.url = builder.url(); this.zoneId = builder.zoneId(); this.geometry = builder.geometry(); - if (!this.geometry.isValid()) { - var error = new IsValidOp(this.geometry).getValidationError(); - throw new IllegalArgumentException( - "Polygon geometry for AreaStop %s is invalid: %s at (lat: %s, lon: %s)".formatted( - getId(), - error.getMessage(), - error.getCoordinate().y, - error.getCoordinate().x - ) - ); - } + this.centroid = Objects.requireNonNull(builder.centroid()); } diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java index a1a03226014..a5df87bc4ce 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java @@ -2,8 +2,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertThrows; +import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -13,6 +13,9 @@ import org.onebusaway.gtfs.model.AgencyAndId; import org.onebusaway.gtfs.model.Location; import org.opentripplanner._support.geometry.Polygons; +import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; +import org.opentripplanner.graph_builder.issue.api.Issue; +import org.opentripplanner.graph_builder.issue.service.DefaultDataImportIssueStore; import org.opentripplanner.transit.service.StopModel; class AreaStopMapperTest { @@ -24,9 +27,9 @@ static Stream testCases() { @ParameterizedTest(name = "a name of <{0}> should set bogusName={1}") @MethodSource("testCases") void testMapping(String name, boolean isBogusName) { - final var gtfsLocation = getLocation(name, Polygons.OSLO); + var gtfsLocation = getLocation(name, Polygons.OSLO); - var mapper = new AreaStopMapper(StopModel.of()); + var mapper = new AreaStopMapper(StopModel.of(), DataImportIssueStore.NOOP); var flexLocation = mapper.map(gtfsLocation); assertEquals(isBogusName, flexLocation.hasFallbackName()); @@ -39,8 +42,22 @@ void invalidPolygon() { var gtfsLocation = getLocation("invalid", selfIntersecting); - var mapper = new AreaStopMapper(StopModel.of()); - assertThrows(IllegalArgumentException.class, () -> mapper.map(gtfsLocation)); + var issueStore = new DefaultDataImportIssueStore(); + var mapper = new AreaStopMapper(StopModel.of(), issueStore); + + mapper.map(gtfsLocation); + + assertEquals( + List + .of( + Issue.issue( + "InvalidFlexAreaGeometry", + "GTFS flex location 1:zone-3 has an invalid geometry: Self-intersection at (lat: 1.0, lon: 2.0)" + ) + ) + .toString(), + issueStore.listIssues().toString() + ); } private static Location getLocation(String name, Polygon polygon) { diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java index 513c96edd13..20cc574c383 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java @@ -9,6 +9,7 @@ import org.onebusaway.gtfs.model.AgencyAndId; import org.onebusaway.gtfs.model.LocationGroup; import org.onebusaway.gtfs.model.Stop; +import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.StopModel; @@ -22,7 +23,7 @@ void map() { var builder = StopModel.of(); var mapper = new LocationGroupMapper( new StopMapper(new TranslationHelper(), id -> null, builder), - new AreaStopMapper(builder), + new AreaStopMapper(builder, DataImportIssueStore.NOOP), builder ); diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java index d96d447ca5e..a68a9682371 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java @@ -1,6 +1,7 @@ package org.opentripplanner.gtfs.mapping; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.opentripplanner.graph_builder.issue.api.DataImportIssueStore.NOOP; import java.util.Set; import java.util.stream.Collectors; @@ -23,7 +24,7 @@ class StopAreaMapperTest { void map() { var stopModel = StopModel.of(); var stopMapper = new StopMapper(new TranslationHelper(), ignored -> null, stopModel); - var locationMapper = new AreaStopMapper(stopModel); + var locationMapper = new AreaStopMapper(stopModel, NOOP); var mapper = new StopAreaMapper(stopMapper, locationMapper, stopModel); var area = new Area(); diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java index ebeaccbda6a..413a7f651a2 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java @@ -76,7 +76,10 @@ public class StopTimeMapperTest { stopModelBuilder ); private final BookingRuleMapper bookingRuleMapper = new BookingRuleMapper(); - private final AreaStopMapper areaStopMapper = new AreaStopMapper(stopModelBuilder); + private final AreaStopMapper areaStopMapper = new AreaStopMapper( + stopModelBuilder, + DataImportIssueStore.NOOP + ); private final LocationGroupMapper locationGroupMapper = new LocationGroupMapper( stopMapper, areaStopMapper, diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java index f58355dbd84..bace306745b 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java @@ -46,7 +46,10 @@ public class TransferMapperTest { ); private static final BookingRuleMapper BOOKING_RULE_MAPPER = new BookingRuleMapper(); - private static final AreaStopMapper LOCATION_MAPPER = new AreaStopMapper(STOP_MODEL_BUILDER); + private static final AreaStopMapper LOCATION_MAPPER = new AreaStopMapper( + STOP_MODEL_BUILDER, + ISSUE_STORE + ); private static final LocationGroupMapper LOCATION_GROUP_MAPPER = new LocationGroupMapper( STOP_MAPPER, diff --git a/src/test/java/org/opentripplanner/transit/model/site/AreaStopTest.java b/src/test/java/org/opentripplanner/transit/model/site/AreaStopTest.java index b7a772e0cb5..a36b6611368 100644 --- a/src/test/java/org/opentripplanner/transit/model/site/AreaStopTest.java +++ b/src/test/java/org/opentripplanner/transit/model/site/AreaStopTest.java @@ -4,7 +4,6 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertSame; -import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; @@ -82,16 +81,4 @@ void sameAs() { subject.sameAs(subject.copy().withGeometry(GeometryUtils.makeLineString(0, 0, 0, 2)).build()) ); } - - @Test - void invalidGeometry() { - var ex = assertThrows( - IllegalArgumentException.class, - () -> areaStopBuilder().withGeometry(Polygons.SELF_INTERSECTING).build() - ); - assertEquals( - "Polygon geometry for AreaStop F:1 is invalid: Self-intersection at (lat: 1.0, lon: 2.0)", - ex.getMessage() - ); - } } From 3ba6c8c51dbe8fd3960d5939fa207530b6770f1a Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 19 Jun 2024 11:20:06 +0200 Subject: [PATCH 038/132] Rename back to LocationMapper --- .../gtfs/mapping/GTFSToOtpTransitServiceMapper.java | 12 ++++++------ .../gtfs/mapping/LocationGroupMapper.java | 8 ++++---- .../{AreaStopMapper.java => LocationMapper.java} | 4 ++-- .../opentripplanner/gtfs/mapping/StopAreaMapper.java | 8 ++++---- .../opentripplanner/gtfs/mapping/StopTimeMapper.java | 8 ++++---- .../opentripplanner/transit/model/site/AreaStop.java | 1 - .../gtfs/mapping/LocationGroupMapperTest.java | 2 +- ...eaStopMapperTest.java => LocationMapperTest.java} | 6 +++--- .../gtfs/mapping/StopAreaMapperTest.java | 2 +- .../gtfs/mapping/StopTimeMapperTest.java | 8 ++++---- .../gtfs/mapping/TransferMapperTest.java | 2 +- 11 files changed, 30 insertions(+), 31 deletions(-) rename src/main/java/org/opentripplanner/gtfs/mapping/{AreaStopMapper.java => LocationMapper.java} (96%) rename src/test/java/org/opentripplanner/gtfs/mapping/{AreaStopMapperTest.java => LocationMapperTest.java} (93%) diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java index afbb105aa27..d58410741f9 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/GTFSToOtpTransitServiceMapper.java @@ -38,7 +38,7 @@ public class GTFSToOtpTransitServiceMapper { private final BoardingAreaMapper boardingAreaMapper; - private final AreaStopMapper areaStopMapper; + private final LocationMapper locationMapper; private final LocationGroupMapper locationGroupMapper; @@ -110,11 +110,11 @@ public GTFSToOtpTransitServiceMapper( entranceMapper = new EntranceMapper(translationHelper, stationLookup); pathwayNodeMapper = new PathwayNodeMapper(translationHelper, stationLookup); boardingAreaMapper = new BoardingAreaMapper(translationHelper, stopLookup); - areaStopMapper = new AreaStopMapper(builder.stopModel(), issueStore); - locationGroupMapper = new LocationGroupMapper(stopMapper, areaStopMapper, builder.stopModel()); + locationMapper = new LocationMapper(builder.stopModel(), issueStore); + locationGroupMapper = new LocationGroupMapper(stopMapper, locationMapper, builder.stopModel()); // the use of stop areas were reverted in the spec // this code will go away, please migrate now! - stopAreaMapper = new StopAreaMapper(stopMapper, areaStopMapper, builder.stopModel()); + stopAreaMapper = new StopAreaMapper(stopMapper, locationMapper, builder.stopModel()); pathwayMapper = new PathwayMapper(stopMapper, entranceMapper, pathwayNodeMapper, boardingAreaMapper); routeMapper = new RouteMapper(agencyMapper, issueStore, translationHelper); @@ -124,7 +124,7 @@ public GTFSToOtpTransitServiceMapper( stopTimeMapper = new StopTimeMapper( stopMapper, - areaStopMapper, + locationMapper, locationGroupMapper, stopAreaMapper, tripMapper, @@ -164,7 +164,7 @@ public void mapStopTripAndRouteDataIntoBuilder() { if (OTPFeature.FlexRouting.isOn()) { // Stop areas and Stop groups are only used in FLEX routes - builder.stopModel().withAreaStops(areaStopMapper.map(data.getAllLocations())); + builder.stopModel().withAreaStops(locationMapper.map(data.getAllLocations())); builder.stopModel().withGroupStops(locationGroupMapper.map(data.getAllLocationGroups())); builder.stopModel().withGroupStops(stopAreaMapper.map(data.getAllStopAreas())); } diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java index 25193185271..591a59c492e 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/LocationGroupMapper.java @@ -18,18 +18,18 @@ public class LocationGroupMapper { private final StopMapper stopMapper; - private final AreaStopMapper areaStopMapper; + private final LocationMapper locationMapper; private final StopModelBuilder stopModelBuilder; private final Map mappedLocationGroups = new HashMap<>(); public LocationGroupMapper( StopMapper stopMapper, - AreaStopMapper areaStopMapper, + LocationMapper locationMapper, StopModelBuilder stopModelBuilder ) { this.stopMapper = stopMapper; - this.areaStopMapper = areaStopMapper; + this.locationMapper = locationMapper; this.stopModelBuilder = stopModelBuilder; } @@ -54,7 +54,7 @@ private GroupStop doMap(LocationGroup element) { ); switch (location) { case Stop stop -> groupStopBuilder.addLocation(stopMapper.map(stop)); - case Location loc -> groupStopBuilder.addLocation(areaStopMapper.map(loc)); + case Location loc -> groupStopBuilder.addLocation(locationMapper.map(loc)); case LocationGroup ignored -> throw new RuntimeException( "Nested GroupStops are not allowed" ); diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/AreaStopMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/LocationMapper.java similarity index 96% rename from src/main/java/org/opentripplanner/gtfs/mapping/AreaStopMapper.java rename to src/main/java/org/opentripplanner/gtfs/mapping/LocationMapper.java index b2d66bdb5c4..79a28ac0f61 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/AreaStopMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/LocationMapper.java @@ -18,13 +18,13 @@ import org.opentripplanner.transit.service.StopModelBuilder; /** Responsible for mapping GTFS Location into the OTP model. */ -public class AreaStopMapper { +public class LocationMapper { private final Map mappedLocations = new HashMap<>(); private final StopModelBuilder stopModelBuilder; private final DataImportIssueStore issueStore; - public AreaStopMapper(StopModelBuilder stopModelBuilder, DataImportIssueStore issueStore) { + public LocationMapper(StopModelBuilder stopModelBuilder, DataImportIssueStore issueStore) { this.stopModelBuilder = stopModelBuilder; this.issueStore = issueStore; } diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/StopAreaMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/StopAreaMapper.java index a69a303d913..55c836aa458 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/StopAreaMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/StopAreaMapper.java @@ -25,18 +25,18 @@ public class StopAreaMapper { private final StopMapper stopMapper; - private final AreaStopMapper areaStopMapper; + private final LocationMapper locationMapper; private final Map mappedStopAreas = new HashMap<>(); private final StopModelBuilder stopModel; public StopAreaMapper( StopMapper stopMapper, - AreaStopMapper areaStopMapper, + LocationMapper locationMapper, StopModelBuilder stopModel ) { this.stopMapper = stopMapper; - this.areaStopMapper = areaStopMapper; + this.locationMapper = locationMapper; this.stopModel = stopModel; } @@ -57,7 +57,7 @@ private GroupStop doMap(org.onebusaway.gtfs.model.StopArea element) { for (org.onebusaway.gtfs.model.StopLocation location : element.getLocations()) { switch (location) { case Stop stop -> groupStopBuilder.addLocation(stopMapper.map(stop)); - case Location loc -> groupStopBuilder.addLocation(areaStopMapper.map(loc)); + case Location loc -> groupStopBuilder.addLocation(locationMapper.map(loc)); case org.onebusaway.gtfs.model.StopArea ignored -> throw new RuntimeException( "Nested GroupStops are not allowed" ); diff --git a/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java b/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java index e6b908d9442..67b250c5061 100644 --- a/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java +++ b/src/main/java/org/opentripplanner/gtfs/mapping/StopTimeMapper.java @@ -19,7 +19,7 @@ class StopTimeMapper { private final StopMapper stopMapper; - private final AreaStopMapper areaStopMapper; + private final LocationMapper locationMapper; private final LocationGroupMapper locationGroupMapper; private final StopAreaMapper stopAreaMapper; @@ -33,7 +33,7 @@ class StopTimeMapper { StopTimeMapper( StopMapper stopMapper, - AreaStopMapper areaStopMapper, + LocationMapper locationMapper, LocationGroupMapper locationGroupMapper, StopAreaMapper stopAreaMapper, TripMapper tripMapper, @@ -41,7 +41,7 @@ class StopTimeMapper { TranslationHelper translationHelper ) { this.stopMapper = stopMapper; - this.areaStopMapper = areaStopMapper; + this.locationMapper = locationMapper; this.locationGroupMapper = locationGroupMapper; this.stopAreaMapper = stopAreaMapper; this.tripMapper = tripMapper; @@ -69,7 +69,7 @@ private StopTime doMap(org.onebusaway.gtfs.model.StopTime rhs) { ); switch (stopLocation) { case Stop stop -> lhs.setStop(stopMapper.map(stop)); - case Location location -> lhs.setStop(areaStopMapper.map(location)); + case Location location -> lhs.setStop(locationMapper.map(location)); case LocationGroup locGroup -> lhs.setStop(locationGroupMapper.map(locGroup)); // TODO: only here for backwards compatibility, this will be removed in the future case StopArea area -> lhs.setStop(stopAreaMapper.map(area)); diff --git a/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java b/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java index 64fafcb58b3..35576e0c42f 100644 --- a/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java +++ b/src/main/java/org/opentripplanner/transit/model/site/AreaStop.java @@ -52,7 +52,6 @@ public class AreaStop this.url = builder.url(); this.zoneId = builder.zoneId(); this.geometry = builder.geometry(); - this.centroid = Objects.requireNonNull(builder.centroid()); } diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java index 20cc574c383..3a3c3f28649 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/LocationGroupMapperTest.java @@ -23,7 +23,7 @@ void map() { var builder = StopModel.of(); var mapper = new LocationGroupMapper( new StopMapper(new TranslationHelper(), id -> null, builder), - new AreaStopMapper(builder, DataImportIssueStore.NOOP), + new LocationMapper(builder, DataImportIssueStore.NOOP), builder ); diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java similarity index 93% rename from src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java rename to src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java index a5df87bc4ce..ab8bd66a810 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/AreaStopMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/LocationMapperTest.java @@ -18,7 +18,7 @@ import org.opentripplanner.graph_builder.issue.service.DefaultDataImportIssueStore; import org.opentripplanner.transit.service.StopModel; -class AreaStopMapperTest { +class LocationMapperTest { static Stream testCases() { return Stream.of(Arguments.of(null, true), Arguments.of("a name", false)); @@ -29,7 +29,7 @@ static Stream testCases() { void testMapping(String name, boolean isBogusName) { var gtfsLocation = getLocation(name, Polygons.OSLO); - var mapper = new AreaStopMapper(StopModel.of(), DataImportIssueStore.NOOP); + var mapper = new LocationMapper(StopModel.of(), DataImportIssueStore.NOOP); var flexLocation = mapper.map(gtfsLocation); assertEquals(isBogusName, flexLocation.hasFallbackName()); @@ -43,7 +43,7 @@ void invalidPolygon() { var gtfsLocation = getLocation("invalid", selfIntersecting); var issueStore = new DefaultDataImportIssueStore(); - var mapper = new AreaStopMapper(StopModel.of(), issueStore); + var mapper = new LocationMapper(StopModel.of(), issueStore); mapper.map(gtfsLocation); diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java index a68a9682371..d58bcfcdd31 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/StopAreaMapperTest.java @@ -24,7 +24,7 @@ class StopAreaMapperTest { void map() { var stopModel = StopModel.of(); var stopMapper = new StopMapper(new TranslationHelper(), ignored -> null, stopModel); - var locationMapper = new AreaStopMapper(stopModel, NOOP); + var locationMapper = new LocationMapper(stopModel, NOOP); var mapper = new StopAreaMapper(stopMapper, locationMapper, stopModel); var area = new Area(); diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java index 413a7f651a2..e45f7a8ff0d 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/StopTimeMapperTest.java @@ -76,24 +76,24 @@ public class StopTimeMapperTest { stopModelBuilder ); private final BookingRuleMapper bookingRuleMapper = new BookingRuleMapper(); - private final AreaStopMapper areaStopMapper = new AreaStopMapper( + private final LocationMapper locationMapper = new LocationMapper( stopModelBuilder, DataImportIssueStore.NOOP ); private final LocationGroupMapper locationGroupMapper = new LocationGroupMapper( stopMapper, - areaStopMapper, + locationMapper, stopModelBuilder ); private final StopAreaMapper stopAreaMapper = new StopAreaMapper( stopMapper, - areaStopMapper, + locationMapper, stopModelBuilder ); private final TranslationHelper translationHelper = new TranslationHelper(); private final StopTimeMapper subject = new StopTimeMapper( stopMapper, - areaStopMapper, + locationMapper, locationGroupMapper, stopAreaMapper, new TripMapper( diff --git a/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java b/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java index bace306745b..3581cca9ac8 100644 --- a/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java +++ b/src/test/java/org/opentripplanner/gtfs/mapping/TransferMapperTest.java @@ -46,7 +46,7 @@ public class TransferMapperTest { ); private static final BookingRuleMapper BOOKING_RULE_MAPPER = new BookingRuleMapper(); - private static final AreaStopMapper LOCATION_MAPPER = new AreaStopMapper( + private static final LocationMapper LOCATION_MAPPER = new LocationMapper( STOP_MODEL_BUILDER, ISSUE_STORE ); From f70c31d383bca32982ff2fa737a2a19e64ba06b8 Mon Sep 17 00:00:00 2001 From: sharhio Date: Wed, 19 Jun 2024 12:33:39 +0300 Subject: [PATCH 039/132] import fixed --- .../vehicle_rental/datasources/GbfsGeofencingZoneMapper.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java index 0a79d45d4ee..32d428ee14d 100644 --- a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java +++ b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java @@ -10,6 +10,7 @@ import org.mobilitydata.gbfs.v2_3.geofencing_zones.GBFSGeofencingZones; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.geometry.UnsupportedGeometryException; +import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.service.vehiclerental.model.GeofencingZone; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.slf4j.Logger; From 8523e34937a772a2232470a57fd21b0364d872f7 Mon Sep 17 00:00:00 2001 From: sharhio Date: Wed, 19 Jun 2024 13:52:33 +0300 Subject: [PATCH 040/132] mapper class, fix name check --- .../apis/gtfs/GtfsGraphQLIndex.java | 2 ++ .../datafetchers/VehicleRentalSystemImpl.java | 18 ++++++++++++++++++ .../gtfs/generated/GraphQLDataFetchers.java | 4 ++++ .../datasources/GbfsGeofencingZoneMapper.java | 2 +- 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalSystemImpl.java diff --git a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java index 9175d3486e1..4f6060a47e0 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java @@ -76,6 +76,7 @@ import org.opentripplanner.apis.gtfs.datafetchers.VehicleParkingImpl; import org.opentripplanner.apis.gtfs.datafetchers.VehiclePositionImpl; import org.opentripplanner.apis.gtfs.datafetchers.VehicleRentalStationImpl; +import org.opentripplanner.apis.gtfs.datafetchers.VehicleRentalSystemImpl; import org.opentripplanner.apis.gtfs.datafetchers.debugOutputImpl; import org.opentripplanner.apis.gtfs.datafetchers.elevationProfileComponentImpl; import org.opentripplanner.apis.gtfs.datafetchers.placeAtDistanceImpl; @@ -165,6 +166,7 @@ protected static GraphQLSchema buildSchema() { .type(typeWiring.build(BookingTimeImpl.class)) .type(typeWiring.build(BookingInfoImpl.class)) .type(typeWiring.build(VehicleRentalStationImpl.class)) + .type(typeWiring.build(VehicleRentalSystemImpl.class)) .type(typeWiring.build(RentalVehicleImpl.class)) .type(typeWiring.build(RentalVehicleTypeImpl.class)) .type(typeWiring.build(StopOnRouteImpl.class)) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalSystemImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalSystemImpl.java new file mode 100644 index 00000000000..7256ab5aaa3 --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalSystemImpl.java @@ -0,0 +1,18 @@ +package org.opentripplanner.apis.gtfs.datafetchers; + +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; +import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; + +public class VehicleRentalSystemImpl implements GraphQLDataFetchers.GraphQLVehicleRentalSystem { + + @Override + public DataFetcher url() { + return environment -> getSource(environment).url; + } + + private VehicleRentalSystem getSource(DataFetchingEnvironment environment) { + return environment.getSource(); + } +} diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index c956eddd954..be74354e284 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -1312,6 +1312,10 @@ public interface GraphQLVehicleRentalStation { public DataFetcher vehiclesAvailable(); } + public interface GraphQLVehicleRentalSystem { + public DataFetcher url(); + } + public interface GraphQLVehicleRentalUris { public DataFetcher android(); diff --git a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java index 32d428ee14d..22a4131f338 100644 --- a/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java +++ b/src/main/java/org/opentripplanner/updater/vehicle_rental/datasources/GbfsGeofencingZoneMapper.java @@ -53,7 +53,7 @@ private GeofencingZone toInternalModel(GBFSFeature f) { return null; } var name = Objects.requireNonNullElseGet(f.getProperties().getName(), () -> fallbackId(g)); - if (StringUtils.hasValue(name)) { + if (!StringUtils.hasValue(name)) { name = fallbackId(g); } var dropOffBanned = !f.getProperties().getRules().get(0).getRideAllowed(); From 52c2c555b39b063440b78f59eee4d7182f628c0a Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 19 Jun 2024 17:09:36 +0200 Subject: [PATCH 041/132] Apply code review feedback --- .../transmodel/model/plan/TripPlanTimePenaltyDto.java | 10 +++++----- .../request/framework/TimeAndCostPenaltyForEnum.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDto.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDto.java index b834b711327..9217ed5b437 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDto.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDto.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.Objects; import java.util.stream.Stream; +import javax.annotation.Nullable; import org.opentripplanner.framework.model.TimeAndCost; import org.opentripplanner.model.plan.Itinerary; @@ -13,17 +14,16 @@ */ public record TripPlanTimePenaltyDto(String appliesTo, TimeAndCost penalty) { static List of(Itinerary itinerary) { - // This check for null to be robust - in case of a mistake in the future. - // The check is redundant on purpose. - if (itinerary == null) { - return List.of(); - } return Stream .of(of("access", itinerary.getAccessPenalty()), of("egress", itinerary.getEgressPenalty())) .filter(Objects::nonNull) .toList(); } + /** + * Package local to be unit-testable. + */ + @Nullable static TripPlanTimePenaltyDto of(String appliedTo, TimeAndCost penalty) { return penalty == null || penalty.isZero() ? null diff --git a/src/main/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyForEnum.java b/src/main/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyForEnum.java index c45fc3e33a8..2f439801cb5 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyForEnum.java +++ b/src/main/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyForEnum.java @@ -112,7 +112,7 @@ public static class Builder> { private final TimeAndCostPenaltyForEnum original; private final EnumMap values; - Builder(TimeAndCostPenaltyForEnum original) { + private Builder(TimeAndCostPenaltyForEnum original) { this.original = original; this.values = original.copyValues(); } From 94c19f5f135647db2db6a0dbd7cb224d8ea2899c Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 19 Jun 2024 17:20:17 +0200 Subject: [PATCH 042/132] Code review: Cleanup naming in Transmodel API --- .../model/plan/TripPatternTimePenaltyType.java | 18 +++++++++--------- .../model/plan/TripPlanTimePenaltyDto.java | 6 +++--- .../apis/transmodel/schema.graphql | 18 +++++++++--------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternTimePenaltyType.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternTimePenaltyType.java index 1a6e7310697..744113929c7 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternTimePenaltyType.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPatternTimePenaltyType.java @@ -11,11 +11,11 @@ public class TripPatternTimePenaltyType { public static GraphQLObjectType create() { return GraphQLObjectType .newObject() - .name("TimePenalty") + .name("TimePenaltyWithCost") .description( """ The time-penalty is applied to either the access-legs and/or egress-legs. Both access and - egress may contain more than one leg; Hence, the penalty is not a field on leg. + egress may contain more than one leg; Hence, the penalty is not a field on leg. Note! This is for debugging only. This type can change without notice. """ @@ -55,15 +55,15 @@ public static GraphQLObjectType create() { .field( GraphQLFieldDefinition .newFieldDefinition() - .name("generalizedCostPenalty") + .name("generalizedCostDelta") .description( """ - The time-penalty does also propagate to the `generalizedCost` But, while the - arrival-/departure-times listed is not affected, the generalized-cost is. In some cases - the time-penalty-cost is excluded when comparing itineraries - that happens if one of - the itineraries is a "direct/street-only" itinerary. Time-penalty can not be set for - direct searches, so it needs to be excluded from such comparison to be fair. The unit - is transit-seconds. + The time-penalty does also propagate to the `generalizedCost`. As a result of the given + time-penalty, the generalized-cost also increased by the given amount. This delta is + included in the itinerary generalized-cost. In some cases the generalized-cost-delta is + excluded when comparing itineraries - that happens if one of the itineraries is a + "direct/street-only" itinerary. Time-penalty can not be set for direct searches, so it + needs to be excluded from such comparison to be fair. The unit is transit-seconds. """ ) .type(Scalars.GraphQLInt) diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDto.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDto.java index 9217ed5b437..0e83384157f 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDto.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDto.java @@ -20,9 +20,9 @@ static List of(Itinerary itinerary) { .toList(); } - /** - * Package local to be unit-testable. - */ + /** + * Package local to be unit-testable. + */ @Nullable static TripPlanTimePenaltyDto of(String appliedTo, TimeAndCost penalty) { return penalty == null || penalty.isZero() diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index b521a5f6ff0..5c1912df4e6 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -1221,7 +1221,7 @@ egress may contain more than one leg; Hence, the penalty is not a field on leg. Note! This is for debugging only. This type can change without notice. """ -type TimePenalty { +type TimePenaltyWithCost { """ The time-penalty is applied to either the access-legs and/or egress-legs. Both access and egress may contain more than one leg; Hence, the penalty is not a field on leg. The @@ -1229,14 +1229,14 @@ type TimePenalty { """ appliedTo: String """ - The time-penalty does also propagate to the `generalizedCost` But, while the - arrival-/departure-times listed is not affected, the generalized-cost is. In some cases - the time-penalty-cost is excluded when comparing itineraries - that happens if one of - the itineraries is a "direct/street-only" itinerary. Time-penalty can not be set for - direct searches, so it needs to be excluded from such comparison to be fair. The unit - is transit-seconds. + The time-penalty does also propagate to the `generalizedCost`. As a result of the given + time-penalty, the generalized-cost also increased by the given amount. This delta is + included in the itinerary generalized-cost. In some cases the generalized-cost-delta is + excluded when comparing itineraries - that happens if one of the itineraries is a + "direct/street-only" itinerary. Time-penalty can not be set for direct searches, so it + needs to be excluded from such comparison to be fair. The unit is transit-seconds. """ - generalizedCostPenalty: Int + generalizedCostDelta: Int """ The time-penalty added to the actual time/duration when comparing the itinerary with other itineraries. This is used to decide witch is the best option, but is not visible @@ -1346,7 +1346,7 @@ type TripPattern { Note! This field is meant for debugging only. The field can be removed without notice in the future. """ - timePenalty: [TimePenalty!]! + timePenalty: [TimePenaltyWithCost!]! "A cost calculated to favor transfer with higher priority. This field is meant for debugging only." transferPriorityCost: Int "A cost calculated to distribute wait-time and avoid very short transfers. This field is meant for debugging only." From 7f5ba09d13d261eeda69d3c799f9162d7570ea0e Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Thu, 20 Jun 2024 10:05:48 +0200 Subject: [PATCH 043/132] test: Fix broken unit-test TripPlanTimePenaltyDtoTest --- .../apis/transmodel/model/plan/TripPlanTimePenaltyDtoTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDtoTest.java b/src/test/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDtoTest.java index 9ea6016324b..579f9b73761 100644 --- a/src/test/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDtoTest.java +++ b/src/test/java/org/opentripplanner/apis/transmodel/model/plan/TripPlanTimePenaltyDtoTest.java @@ -37,7 +37,6 @@ void testCreateFromSingeEntry() { @Test void testCreateFromItineraryWithNoPenalty() { var i = itinerary(); - assertEquals(List.of(), TripPlanTimePenaltyDto.of(null)); assertEquals(List.of(), TripPlanTimePenaltyDto.of(i)); } From 7e49edf11497091c01efd19bc2c15e68e292bc5c Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 21 Jun 2024 10:05:26 +0200 Subject: [PATCH 044/132] Swap old and new debug client --- .github/workflows/debug-client.yml | 4 +- client-next/vite.config.ts | 2 +- src/client/WEB-INF/web_client.xml | 4 +- src/client/{ => classic-debug}/i18n/babel.cfg | 0 src/client/{ => classic-debug}/i18n/ca_ES.po | 0 src/client/{ => classic-debug}/i18n/de.po | 0 src/client/{ => classic-debug}/i18n/en.po | 0 src/client/{ => classic-debug}/i18n/es.po | 0 src/client/{ => classic-debug}/i18n/fr.po | 0 src/client/{ => classic-debug}/i18n/hu.po | 0 src/client/{ => classic-debug}/i18n/it.po | 0 .../{ => classic-debug}/i18n/messages.pot | 0 src/client/{ => classic-debug}/i18n/no.po | 0 src/client/{ => classic-debug}/i18n/pl.po | 0 src/client/{ => classic-debug}/i18n/pt.po | 0 src/client/{ => classic-debug}/i18n/sl.po | 0 .../images/agency_logo.png | Bin .../{ => classic-debug}/images/alert.png | Bin .../images/bicycle_green.png | Bin .../images/bicycle_green_small.png | Bin .../images/bicycle_red.png | Bin .../images/bicycle_red_small.png | Bin .../images/directions/circle_clockwise.png | Bin .../directions/circle_counterclockwise.png | Bin .../images/directions/clear.png | Bin .../images/directions/continue.png | Bin .../images/directions/depart.png | Bin .../images/directions/direction_icons.svg | 0 .../images/directions/elevator.png | Bin .../images/directions/enter_station.png | Bin .../images/directions/exit_left.png | Bin .../images/directions/exit_right.png | Bin .../images/directions/exit_station.png | Bin .../images/directions/follow_signs.png | Bin .../images/directions/hard_left.png | Bin .../images/directions/hard_right.png | Bin .../images/directions/left.png | Bin .../images/directions/merge.png | Bin .../images/directions/right.png | Bin .../images/directions/slightly_left.png | Bin .../images/directions/slightly_right.png | Bin .../images/directions/turn_left.png | Bin .../images/directions/turn_right.png | Bin .../images/directions/uturn_left.png | Bin .../images/directions/uturn_right.png | Bin .../images/flag_marker_green.png | Bin .../images/flag_marker_red.png | Bin .../{ => classic-debug}/images/gear.svg | 0 .../images/language_icon.png | Bin .../images/language_icon.svg | 0 .../images/marker-0pct.png | Bin .../images/marker-100pct.png | Bin .../images/marker-25pct.png | Bin .../images/marker-50pct.png | Bin .../images/marker-75pct.png | Bin .../images/marker-bike-green-shadowed.png | Bin .../images/marker-bike-green.png | Bin .../images/marker-bike-red-shadowed.png | Bin .../images/marker-bike-red.png | Bin .../images/marker-bike-shadow.png | Bin .../images/marker-blue-med.png | Bin .../images/marker-blue-nub.png | Bin .../images/marker-blue-sm.png | Bin .../images/marker-flag-end-shadowed.png | Bin .../images/marker-flag-end.png | Bin .../images/marker-flag-shadow.png | Bin .../images/marker-flag-start-shadowed.png | Bin .../images/marker-flag-start.png | Bin .../images/marker-med-0pct.png | Bin .../images/marker-med-100pct.png | Bin .../images/marker-med-25pct.png | Bin .../images/marker-med-50pct.png | Bin .../images/marker-med-75pct.png | Bin .../images/marker-sm-0pct.png | Bin .../images/marker-sm-100pct.png | Bin .../images/marker-sm-25pct.png | Bin .../images/marker-sm-50pct.png | Bin .../images/marker-sm-75pct.png | Bin .../images/mode/airplane.png | Bin .../images/mode/arrow-left.png | Bin .../{ => classic-debug}/images/mode/arrow.png | Bin .../images/mode/bicycle.png | Bin .../images/mode/bicycle_darkbg.png | Bin .../{ => classic-debug}/images/mode/bus.png | Bin .../images/mode/bus_darkbg.png | Bin .../images/mode/cable_car.png | Bin .../{ => classic-debug}/images/mode/car.png | Bin .../images/mode/car_darkbg.png | Bin .../images/mode/carpool.png | Bin .../images/mode/carpool_darkbg.png | Bin .../{ => classic-debug}/images/mode/coach.png | Bin .../{ => classic-debug}/images/mode/ferry.png | Bin .../images/mode/ferry_darkbg.png | Bin .../images/mode/funicular.png | Bin .../images/mode/gondola.png | Bin .../images/mode/gondola_darkbg.png | Bin .../images/mode/mode_bubble.psd | Bin .../images/mode/mode_bubble_ne.png | Bin .../images/mode/mode_bubble_ne_highlight.png | Bin .../images/mode/mode_bubble_nw.png | Bin .../images/mode/mode_bubble_nw_highlight.png | Bin .../images/mode/mode_bubble_se.png | Bin .../images/mode/mode_bubble_se_highlight.png | Bin .../images/mode/mode_bubble_sw.png | Bin .../images/mode/mode_bubble_sw_highlight.png | Bin .../images/mode/monorail.png | Bin .../{ => classic-debug}/images/mode/rail.png | Bin .../images/mode/rail_darkbg.png | Bin .../images/mode/scooter.png | Bin .../images/mode/subway.png | Bin .../images/mode/subway_darkbg.png | Bin .../{ => classic-debug}/images/mode/taxi.png | Bin .../{ => classic-debug}/images/mode/tram.png | Bin .../images/mode/tram_darkbg.png | Bin .../images/mode/trolleybus.png | Bin .../{ => classic-debug}/images/mode/walk.png | Bin .../images/mode/walk_darkbg.png | Bin .../images/openplans-logo-20x20.png | Bin .../images/openplans-logo-40x40.png | Bin .../images/openplans-logo-gray.gif | Bin .../images/otp_logo_40px.png | Bin .../images/otp_logo_darkbg_40px.png | Bin .../{ => classic-debug}/images/reverse.png | Bin .../{ => classic-debug}/images/shadow.png | Bin .../{ => classic-debug}/images/spinner.gif | Bin .../{ => classic-debug}/images/stop20.png | Bin .../images/widget-trip-stop-first.png | Bin .../images/widget-trip-stop-last.png | Bin .../images/widget-trip-stop-middle.png | Bin src/client/classic-debug/index.html | 220 +++++++++++++++++ .../{ => classic-debug}/js/lib/ICanHaz.js | 0 .../js/lib/backbone-min.js | 0 .../{ => classic-debug}/js/lib/backbone.js | 0 .../js/lib/i18next-1.7.3.min.js | 0 .../jquery-ui/addons/jquery-ui-timepicker.css | 0 .../jquery-ui/addons/jquery-ui-timepicker.js | 0 .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin .../images/ui-bg_flat_75_ffffff_40x100.png | Bin .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin .../images/ui-bg_glass_65_ffffff_1x400.png | Bin .../images/ui-bg_glass_75_dadada_1x400.png | Bin .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin .../images/ui-icons_222222_256x240.png | Bin .../images/ui-icons_2e83ff_256x240.png | Bin .../images/ui-icons_454545_256x240.png | Bin .../images/ui-icons_888888_256x240.png | Bin .../images/ui-icons_cd0a0a_256x240.png | Bin .../css/smoothness/jquery-ui-1.9.1.custom.css | 0 .../smoothness/jquery-ui-1.9.1.custom.min.css | 0 .../jquery-ui/i18n/jquery.ui.datepicker-ca.js | 0 .../jquery-ui/i18n/jquery.ui.datepicker-de.js | 0 .../jquery-ui/i18n/jquery.ui.datepicker-es.js | 0 .../jquery-ui/i18n/jquery.ui.datepicker-fr.js | 0 .../jquery-ui/i18n/jquery.ui.datepicker-hu.js | 0 .../jquery-ui/i18n/jquery.ui.datepicker-it.js | 0 .../jquery-ui/i18n/jquery.ui.datepicker-no.js | 0 .../jquery-ui/i18n/jquery.ui.datepicker-pl.js | 0 .../jquery-ui/i18n/jquery.ui.datepicker-pt.js | 0 .../jquery-ui/i18n/jquery.ui.datepicker-sl.js | 0 .../js/lib/jquery-ui/js/jquery-1.8.2.js | 0 .../jquery-ui/js/jquery-ui-1.9.1.custom.js | 0 .../js/jquery-ui-1.9.1.custom.min.js | 0 .../{ => classic-debug}/js/otp/config.js | 0 .../js/otp/core/ContextMenu.js | 0 .../js/otp/core/Geocoder.js | 0 .../js/otp/core/GeocoderBag.js | 0 .../js/otp/core/GeocoderBuiltin.js | 0 .../js/otp/core/IndexApi.js | 0 .../{ => classic-debug}/js/otp/core/Map.js | 0 .../js/otp/core/MapContextMenu.js | 0 .../js/otp/core/PopupMenu.js | 0 .../js/otp/core/QueryLogger.js | 0 .../js/otp/core/SOLRGeocoder.js | 0 .../js/otp/core/TransitIndex.js | 0 .../js/otp/core/TripPlan.js | 0 .../{ => classic-debug}/js/otp/core/Webapp.js | 0 .../js/otp/core/WidgetManagerMenu.js | 0 .../{ => classic-debug}/js/otp/debug.js | 0 .../js/otp/layers/AreaStopsLayer.js | 0 .../js/otp/layers/GeofencingZonesLayer.js | 0 .../js/otp/layers/StopsLayer.js | 0 .../js/otp/layers/layers-templates.html | 0 .../js/otp/locale/Catalan.js | 0 .../js/otp/locale/English.js | 0 .../js/otp/locale/French.js | 0 .../js/otp/locale/German.js | 0 .../js/otp/locale/Hungarian.js | 0 .../js/otp/locale/Italian.js | 0 .../js/otp/locale/Norwegian.js | 0 .../js/otp/locale/Polish.js | 0 .../js/otp/locale/Portuguese.js | 0 .../js/otp/locale/Slovenian.js | 0 .../js/otp/locale/Spanish.js | 0 .../js/otp/locale/ca_ES.json | 0 .../{ => classic-debug}/js/otp/locale/de.json | 0 .../{ => classic-debug}/js/otp/locale/en.json | 0 .../{ => classic-debug}/js/otp/locale/es.json | 0 .../{ => classic-debug}/js/otp/locale/fr.json | 0 .../{ => classic-debug}/js/otp/locale/hu.json | 0 .../{ => classic-debug}/js/otp/locale/it.json | 0 .../{ => classic-debug}/js/otp/locale/no.json | 0 .../{ => classic-debug}/js/otp/locale/pl.json | 0 .../{ => classic-debug}/js/otp/locale/pt.json | 0 .../{ => classic-debug}/js/otp/locale/sl.json | 0 .../js/otp/modules/Module.js | 0 .../otp/modules/bikeshare/BikeShareModule.js | 0 .../modules/bikeshare/BikeStationsWidget.js | 0 .../otp/modules/bikeshare/bikeshare-style.css | 0 .../multimodal/MultimodalPlannerModule.js | 0 .../modules/multimodal/multimodal-style.css | 0 .../js/otp/modules/planner/IconFactory.js | 0 .../otp/modules/planner/ItinerariesWidget.js | 0 .../js/otp/modules/planner/Itinerary.js | 0 .../js/otp/modules/planner/PlannerModule.js | 0 .../js/otp/modules/planner/TripPlan.js | 0 .../planner/images/mode/mode_bubble.psd | Bin .../planner/images/mode/mode_bubble_ne.png | Bin .../images/mode/mode_bubble_ne_highlight.png | Bin .../planner/images/mode/mode_bubble_nw.png | Bin .../images/mode/mode_bubble_nw_highlight.png | Bin .../planner/images/mode/mode_bubble_se.png | Bin .../images/mode/mode_bubble_se_highlight.png | Bin .../planner/images/mode/mode_bubble_sw.png | Bin .../images/mode/mode_bubble_sw_highlight.png | Bin .../otp/modules/planner/images/user_icon.png | Bin .../js/otp/modules/planner/planner-style.css | 0 .../modules/planner/planner-templates.html | 0 src/client/{ => classic-debug}/js/otp/otp.js | 0 .../{ => classic-debug}/js/otp/templates.js | 0 .../js/otp/util/DataStorage.js | 0 .../{ => classic-debug}/js/otp/util/Geo.js | 0 .../js/otp/util/Imperial.js | 0 .../{ => classic-debug}/js/otp/util/Itin.js | 0 .../{ => classic-debug}/js/otp/util/Logger.js | 0 .../{ => classic-debug}/js/otp/util/Text.js | 0 .../{ => classic-debug}/js/otp/util/Time.js | 0 .../js/otp/widgets/Dialogs.js | 0 .../js/otp/widgets/InfoWidget.js | 0 .../js/otp/widgets/Widget.js | 0 .../js/otp/widgets/WidgetManager.js | 0 .../otp/widgets/transit/RouteBasedWidget.js | 0 .../otp/widgets/transit/StopFinderWidget.js | 0 .../otp/widgets/transit/StopViewerWidget.js | 0 .../otp/widgets/transit/TripViewerWidget.js | 0 .../widgets/transit/widgets-transit-style.css | 0 .../transit/widgets-transit-templates.html | 0 .../widgets/tripoptions/BikeTrianglePanel.js | 0 .../tripoptions/RoutesSelectorWidget.js | 0 .../widgets/tripoptions/TripOptionsWidget.js | 0 .../widgets/tripoptions/tripoptions-style.css | 0 .../tripoptions/tripoptions-templates.html | 0 .../js/otp/widgets/widget-style.css | 0 .../js/otp/widgets/widget-templates.html | 0 src/client/{ => classic-debug}/style.css | 0 src/client/debug-client-preview/index.html | 14 -- src/client/index.html | 232 +----------------- 258 files changed, 238 insertions(+), 238 deletions(-) rename src/client/{ => classic-debug}/i18n/babel.cfg (100%) rename src/client/{ => classic-debug}/i18n/ca_ES.po (100%) rename src/client/{ => classic-debug}/i18n/de.po (100%) rename src/client/{ => classic-debug}/i18n/en.po (100%) rename src/client/{ => classic-debug}/i18n/es.po (100%) rename src/client/{ => classic-debug}/i18n/fr.po (100%) rename src/client/{ => classic-debug}/i18n/hu.po (100%) rename src/client/{ => classic-debug}/i18n/it.po (100%) rename src/client/{ => classic-debug}/i18n/messages.pot (100%) rename src/client/{ => classic-debug}/i18n/no.po (100%) rename src/client/{ => classic-debug}/i18n/pl.po (100%) rename src/client/{ => classic-debug}/i18n/pt.po (100%) rename src/client/{ => classic-debug}/i18n/sl.po (100%) rename src/client/{ => classic-debug}/images/agency_logo.png (100%) rename src/client/{ => classic-debug}/images/alert.png (100%) rename src/client/{ => classic-debug}/images/bicycle_green.png (100%) rename src/client/{ => classic-debug}/images/bicycle_green_small.png (100%) rename src/client/{ => classic-debug}/images/bicycle_red.png (100%) rename src/client/{ => classic-debug}/images/bicycle_red_small.png (100%) rename src/client/{ => classic-debug}/images/directions/circle_clockwise.png (100%) rename src/client/{ => classic-debug}/images/directions/circle_counterclockwise.png (100%) rename src/client/{ => classic-debug}/images/directions/clear.png (100%) rename src/client/{ => classic-debug}/images/directions/continue.png (100%) rename src/client/{ => classic-debug}/images/directions/depart.png (100%) rename src/client/{ => classic-debug}/images/directions/direction_icons.svg (100%) rename src/client/{ => classic-debug}/images/directions/elevator.png (100%) rename src/client/{ => classic-debug}/images/directions/enter_station.png (100%) rename src/client/{ => classic-debug}/images/directions/exit_left.png (100%) rename src/client/{ => classic-debug}/images/directions/exit_right.png (100%) rename src/client/{ => classic-debug}/images/directions/exit_station.png (100%) rename src/client/{ => classic-debug}/images/directions/follow_signs.png (100%) rename src/client/{ => classic-debug}/images/directions/hard_left.png (100%) rename src/client/{ => classic-debug}/images/directions/hard_right.png (100%) rename src/client/{ => classic-debug}/images/directions/left.png (100%) rename src/client/{ => classic-debug}/images/directions/merge.png (100%) rename src/client/{ => classic-debug}/images/directions/right.png (100%) rename src/client/{ => classic-debug}/images/directions/slightly_left.png (100%) rename src/client/{ => classic-debug}/images/directions/slightly_right.png (100%) rename src/client/{ => classic-debug}/images/directions/turn_left.png (100%) rename src/client/{ => classic-debug}/images/directions/turn_right.png (100%) rename src/client/{ => classic-debug}/images/directions/uturn_left.png (100%) rename src/client/{ => classic-debug}/images/directions/uturn_right.png (100%) rename src/client/{ => classic-debug}/images/flag_marker_green.png (100%) rename src/client/{ => classic-debug}/images/flag_marker_red.png (100%) rename src/client/{ => classic-debug}/images/gear.svg (100%) rename src/client/{ => classic-debug}/images/language_icon.png (100%) rename src/client/{ => classic-debug}/images/language_icon.svg (100%) rename src/client/{ => classic-debug}/images/marker-0pct.png (100%) rename src/client/{ => classic-debug}/images/marker-100pct.png (100%) rename src/client/{ => classic-debug}/images/marker-25pct.png (100%) rename src/client/{ => classic-debug}/images/marker-50pct.png (100%) rename src/client/{ => classic-debug}/images/marker-75pct.png (100%) rename src/client/{ => classic-debug}/images/marker-bike-green-shadowed.png (100%) rename src/client/{ => classic-debug}/images/marker-bike-green.png (100%) rename src/client/{ => classic-debug}/images/marker-bike-red-shadowed.png (100%) rename src/client/{ => classic-debug}/images/marker-bike-red.png (100%) rename src/client/{ => classic-debug}/images/marker-bike-shadow.png (100%) rename src/client/{ => classic-debug}/images/marker-blue-med.png (100%) rename src/client/{ => classic-debug}/images/marker-blue-nub.png (100%) rename src/client/{ => classic-debug}/images/marker-blue-sm.png (100%) rename src/client/{ => classic-debug}/images/marker-flag-end-shadowed.png (100%) rename src/client/{ => classic-debug}/images/marker-flag-end.png (100%) rename src/client/{ => classic-debug}/images/marker-flag-shadow.png (100%) rename src/client/{ => classic-debug}/images/marker-flag-start-shadowed.png (100%) rename src/client/{ => classic-debug}/images/marker-flag-start.png (100%) rename src/client/{ => classic-debug}/images/marker-med-0pct.png (100%) rename src/client/{ => classic-debug}/images/marker-med-100pct.png (100%) rename src/client/{ => classic-debug}/images/marker-med-25pct.png (100%) rename src/client/{ => classic-debug}/images/marker-med-50pct.png (100%) rename src/client/{ => classic-debug}/images/marker-med-75pct.png (100%) rename src/client/{ => classic-debug}/images/marker-sm-0pct.png (100%) rename src/client/{ => classic-debug}/images/marker-sm-100pct.png (100%) rename src/client/{ => classic-debug}/images/marker-sm-25pct.png (100%) rename src/client/{ => classic-debug}/images/marker-sm-50pct.png (100%) rename src/client/{ => classic-debug}/images/marker-sm-75pct.png (100%) rename src/client/{ => classic-debug}/images/mode/airplane.png (100%) rename src/client/{ => classic-debug}/images/mode/arrow-left.png (100%) rename src/client/{ => classic-debug}/images/mode/arrow.png (100%) rename src/client/{ => classic-debug}/images/mode/bicycle.png (100%) rename src/client/{ => classic-debug}/images/mode/bicycle_darkbg.png (100%) rename src/client/{ => classic-debug}/images/mode/bus.png (100%) rename src/client/{ => classic-debug}/images/mode/bus_darkbg.png (100%) rename src/client/{ => classic-debug}/images/mode/cable_car.png (100%) rename src/client/{ => classic-debug}/images/mode/car.png (100%) rename src/client/{ => classic-debug}/images/mode/car_darkbg.png (100%) rename src/client/{ => classic-debug}/images/mode/carpool.png (100%) rename src/client/{ => classic-debug}/images/mode/carpool_darkbg.png (100%) rename src/client/{ => classic-debug}/images/mode/coach.png (100%) rename src/client/{ => classic-debug}/images/mode/ferry.png (100%) rename src/client/{ => classic-debug}/images/mode/ferry_darkbg.png (100%) rename src/client/{ => classic-debug}/images/mode/funicular.png (100%) rename src/client/{ => classic-debug}/images/mode/gondola.png (100%) rename src/client/{ => classic-debug}/images/mode/gondola_darkbg.png (100%) rename src/client/{ => classic-debug}/images/mode/mode_bubble.psd (100%) rename src/client/{ => classic-debug}/images/mode/mode_bubble_ne.png (100%) rename src/client/{ => classic-debug}/images/mode/mode_bubble_ne_highlight.png (100%) rename src/client/{ => classic-debug}/images/mode/mode_bubble_nw.png (100%) rename src/client/{ => classic-debug}/images/mode/mode_bubble_nw_highlight.png (100%) rename src/client/{ => classic-debug}/images/mode/mode_bubble_se.png (100%) rename src/client/{ => classic-debug}/images/mode/mode_bubble_se_highlight.png (100%) rename src/client/{ => classic-debug}/images/mode/mode_bubble_sw.png (100%) rename src/client/{ => classic-debug}/images/mode/mode_bubble_sw_highlight.png (100%) rename src/client/{ => classic-debug}/images/mode/monorail.png (100%) rename src/client/{ => classic-debug}/images/mode/rail.png (100%) rename src/client/{ => classic-debug}/images/mode/rail_darkbg.png (100%) rename src/client/{ => classic-debug}/images/mode/scooter.png (100%) rename src/client/{ => classic-debug}/images/mode/subway.png (100%) rename src/client/{ => classic-debug}/images/mode/subway_darkbg.png (100%) rename src/client/{ => classic-debug}/images/mode/taxi.png (100%) rename src/client/{ => classic-debug}/images/mode/tram.png (100%) rename src/client/{ => classic-debug}/images/mode/tram_darkbg.png (100%) rename src/client/{ => classic-debug}/images/mode/trolleybus.png (100%) rename src/client/{ => classic-debug}/images/mode/walk.png (100%) rename src/client/{ => classic-debug}/images/mode/walk_darkbg.png (100%) rename src/client/{ => classic-debug}/images/openplans-logo-20x20.png (100%) rename src/client/{ => classic-debug}/images/openplans-logo-40x40.png (100%) rename src/client/{ => classic-debug}/images/openplans-logo-gray.gif (100%) rename src/client/{ => classic-debug}/images/otp_logo_40px.png (100%) rename src/client/{ => classic-debug}/images/otp_logo_darkbg_40px.png (100%) rename src/client/{ => classic-debug}/images/reverse.png (100%) rename src/client/{ => classic-debug}/images/shadow.png (100%) rename src/client/{ => classic-debug}/images/spinner.gif (100%) rename src/client/{ => classic-debug}/images/stop20.png (100%) rename src/client/{ => classic-debug}/images/widget-trip-stop-first.png (100%) rename src/client/{ => classic-debug}/images/widget-trip-stop-last.png (100%) rename src/client/{ => classic-debug}/images/widget-trip-stop-middle.png (100%) create mode 100644 src/client/classic-debug/index.html rename src/client/{ => classic-debug}/js/lib/ICanHaz.js (100%) rename src/client/{ => classic-debug}/js/lib/backbone-min.js (100%) rename src/client/{ => classic-debug}/js/lib/backbone.js (100%) rename src/client/{ => classic-debug}/js/lib/i18next-1.7.3.min.js (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/addons/jquery-ui-timepicker.css (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/addons/jquery-ui-timepicker.js (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/jquery-ui-1.9.1.custom.css (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/css/smoothness/jquery-ui-1.9.1.custom.min.css (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/i18n/jquery.ui.datepicker-ca.js (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/i18n/jquery.ui.datepicker-de.js (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/i18n/jquery.ui.datepicker-es.js (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/i18n/jquery.ui.datepicker-fr.js (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/i18n/jquery.ui.datepicker-hu.js (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/i18n/jquery.ui.datepicker-it.js (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/i18n/jquery.ui.datepicker-no.js (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/i18n/jquery.ui.datepicker-pl.js (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/i18n/jquery.ui.datepicker-pt.js (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/i18n/jquery.ui.datepicker-sl.js (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/js/jquery-1.8.2.js (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/js/jquery-ui-1.9.1.custom.js (100%) rename src/client/{ => classic-debug}/js/lib/jquery-ui/js/jquery-ui-1.9.1.custom.min.js (100%) rename src/client/{ => classic-debug}/js/otp/config.js (100%) rename src/client/{ => classic-debug}/js/otp/core/ContextMenu.js (100%) rename src/client/{ => classic-debug}/js/otp/core/Geocoder.js (100%) rename src/client/{ => classic-debug}/js/otp/core/GeocoderBag.js (100%) rename src/client/{ => classic-debug}/js/otp/core/GeocoderBuiltin.js (100%) rename src/client/{ => classic-debug}/js/otp/core/IndexApi.js (100%) rename src/client/{ => classic-debug}/js/otp/core/Map.js (100%) rename src/client/{ => classic-debug}/js/otp/core/MapContextMenu.js (100%) rename src/client/{ => classic-debug}/js/otp/core/PopupMenu.js (100%) rename src/client/{ => classic-debug}/js/otp/core/QueryLogger.js (100%) rename src/client/{ => classic-debug}/js/otp/core/SOLRGeocoder.js (100%) rename src/client/{ => classic-debug}/js/otp/core/TransitIndex.js (100%) rename src/client/{ => classic-debug}/js/otp/core/TripPlan.js (100%) rename src/client/{ => classic-debug}/js/otp/core/Webapp.js (100%) rename src/client/{ => classic-debug}/js/otp/core/WidgetManagerMenu.js (100%) rename src/client/{ => classic-debug}/js/otp/debug.js (100%) rename src/client/{ => classic-debug}/js/otp/layers/AreaStopsLayer.js (100%) rename src/client/{ => classic-debug}/js/otp/layers/GeofencingZonesLayer.js (100%) rename src/client/{ => classic-debug}/js/otp/layers/StopsLayer.js (100%) rename src/client/{ => classic-debug}/js/otp/layers/layers-templates.html (100%) rename src/client/{ => classic-debug}/js/otp/locale/Catalan.js (100%) rename src/client/{ => classic-debug}/js/otp/locale/English.js (100%) rename src/client/{ => classic-debug}/js/otp/locale/French.js (100%) rename src/client/{ => classic-debug}/js/otp/locale/German.js (100%) rename src/client/{ => classic-debug}/js/otp/locale/Hungarian.js (100%) rename src/client/{ => classic-debug}/js/otp/locale/Italian.js (100%) rename src/client/{ => classic-debug}/js/otp/locale/Norwegian.js (100%) rename src/client/{ => classic-debug}/js/otp/locale/Polish.js (100%) rename src/client/{ => classic-debug}/js/otp/locale/Portuguese.js (100%) rename src/client/{ => classic-debug}/js/otp/locale/Slovenian.js (100%) rename src/client/{ => classic-debug}/js/otp/locale/Spanish.js (100%) rename src/client/{ => classic-debug}/js/otp/locale/ca_ES.json (100%) rename src/client/{ => classic-debug}/js/otp/locale/de.json (100%) rename src/client/{ => classic-debug}/js/otp/locale/en.json (100%) rename src/client/{ => classic-debug}/js/otp/locale/es.json (100%) rename src/client/{ => classic-debug}/js/otp/locale/fr.json (100%) rename src/client/{ => classic-debug}/js/otp/locale/hu.json (100%) rename src/client/{ => classic-debug}/js/otp/locale/it.json (100%) rename src/client/{ => classic-debug}/js/otp/locale/no.json (100%) rename src/client/{ => classic-debug}/js/otp/locale/pl.json (100%) rename src/client/{ => classic-debug}/js/otp/locale/pt.json (100%) rename src/client/{ => classic-debug}/js/otp/locale/sl.json (100%) rename src/client/{ => classic-debug}/js/otp/modules/Module.js (100%) rename src/client/{ => classic-debug}/js/otp/modules/bikeshare/BikeShareModule.js (100%) rename src/client/{ => classic-debug}/js/otp/modules/bikeshare/BikeStationsWidget.js (100%) rename src/client/{ => classic-debug}/js/otp/modules/bikeshare/bikeshare-style.css (100%) rename src/client/{ => classic-debug}/js/otp/modules/multimodal/MultimodalPlannerModule.js (100%) rename src/client/{ => classic-debug}/js/otp/modules/multimodal/multimodal-style.css (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/IconFactory.js (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/ItinerariesWidget.js (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/Itinerary.js (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/PlannerModule.js (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/TripPlan.js (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/images/mode/mode_bubble.psd (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/images/mode/mode_bubble_ne.png (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/images/mode/mode_bubble_ne_highlight.png (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/images/mode/mode_bubble_nw.png (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/images/mode/mode_bubble_nw_highlight.png (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/images/mode/mode_bubble_se.png (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/images/mode/mode_bubble_se_highlight.png (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/images/mode/mode_bubble_sw.png (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/images/mode/mode_bubble_sw_highlight.png (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/images/user_icon.png (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/planner-style.css (100%) rename src/client/{ => classic-debug}/js/otp/modules/planner/planner-templates.html (100%) rename src/client/{ => classic-debug}/js/otp/otp.js (100%) rename src/client/{ => classic-debug}/js/otp/templates.js (100%) rename src/client/{ => classic-debug}/js/otp/util/DataStorage.js (100%) rename src/client/{ => classic-debug}/js/otp/util/Geo.js (100%) rename src/client/{ => classic-debug}/js/otp/util/Imperial.js (100%) rename src/client/{ => classic-debug}/js/otp/util/Itin.js (100%) rename src/client/{ => classic-debug}/js/otp/util/Logger.js (100%) rename src/client/{ => classic-debug}/js/otp/util/Text.js (100%) rename src/client/{ => classic-debug}/js/otp/util/Time.js (100%) rename src/client/{ => classic-debug}/js/otp/widgets/Dialogs.js (100%) rename src/client/{ => classic-debug}/js/otp/widgets/InfoWidget.js (100%) rename src/client/{ => classic-debug}/js/otp/widgets/Widget.js (100%) rename src/client/{ => classic-debug}/js/otp/widgets/WidgetManager.js (100%) rename src/client/{ => classic-debug}/js/otp/widgets/transit/RouteBasedWidget.js (100%) rename src/client/{ => classic-debug}/js/otp/widgets/transit/StopFinderWidget.js (100%) rename src/client/{ => classic-debug}/js/otp/widgets/transit/StopViewerWidget.js (100%) rename src/client/{ => classic-debug}/js/otp/widgets/transit/TripViewerWidget.js (100%) rename src/client/{ => classic-debug}/js/otp/widgets/transit/widgets-transit-style.css (100%) rename src/client/{ => classic-debug}/js/otp/widgets/transit/widgets-transit-templates.html (100%) rename src/client/{ => classic-debug}/js/otp/widgets/tripoptions/BikeTrianglePanel.js (100%) rename src/client/{ => classic-debug}/js/otp/widgets/tripoptions/RoutesSelectorWidget.js (100%) rename src/client/{ => classic-debug}/js/otp/widgets/tripoptions/TripOptionsWidget.js (100%) rename src/client/{ => classic-debug}/js/otp/widgets/tripoptions/tripoptions-style.css (100%) rename src/client/{ => classic-debug}/js/otp/widgets/tripoptions/tripoptions-templates.html (100%) rename src/client/{ => classic-debug}/js/otp/widgets/widget-style.css (100%) rename src/client/{ => classic-debug}/js/otp/widgets/widget-templates.html (100%) rename src/client/{ => classic-debug}/style.css (100%) delete mode 100644 src/client/debug-client-preview/index.html diff --git a/.github/workflows/debug-client.yml b/.github/workflows/debug-client.yml index 56304db88f2..15d495e6454 100644 --- a/.github/workflows/debug-client.yml +++ b/.github/workflows/debug-client.yml @@ -76,8 +76,8 @@ jobs: git checkout dev-2.x git pull --rebase - CLIENT_HTML_OUTPUT=src/client/debug-client-preview/index.html - mkdir -p src/client/debug-client-preview/ + CLIENT_HTML_OUTPUT=src/client/index.html + mkdir -p src/client/ cp client-next/output/index.html ${CLIENT_HTML_OUTPUT} # just to debug diff --git a/client-next/vite.config.ts b/client-next/vite.config.ts index 69bfec7f396..af49d327516 100644 --- a/client-next/vite.config.ts +++ b/client-next/vite.config.ts @@ -4,7 +4,7 @@ import react from '@vitejs/plugin-react'; // https://vitejs.dev/config/ export default defineConfig({ plugins: [react()], - base: '/debug-client-preview/', + base: '/', build: { outDir: 'output', emptyOutDir: true, diff --git a/src/client/WEB-INF/web_client.xml b/src/client/WEB-INF/web_client.xml index d46bb48d151..7fa042e3de9 100644 --- a/src/client/WEB-INF/web_client.xml +++ b/src/client/WEB-INF/web_client.xml @@ -3,9 +3,9 @@ "http://java.sun.com/dtd/web-app_2_3.dtd" > - OTP Leaflet Client + OTP Client js - application/x-javascript + application/javascript diff --git a/src/client/i18n/babel.cfg b/src/client/classic-debug/i18n/babel.cfg similarity index 100% rename from src/client/i18n/babel.cfg rename to src/client/classic-debug/i18n/babel.cfg diff --git a/src/client/i18n/ca_ES.po b/src/client/classic-debug/i18n/ca_ES.po similarity index 100% rename from src/client/i18n/ca_ES.po rename to src/client/classic-debug/i18n/ca_ES.po diff --git a/src/client/i18n/de.po b/src/client/classic-debug/i18n/de.po similarity index 100% rename from src/client/i18n/de.po rename to src/client/classic-debug/i18n/de.po diff --git a/src/client/i18n/en.po b/src/client/classic-debug/i18n/en.po similarity index 100% rename from src/client/i18n/en.po rename to src/client/classic-debug/i18n/en.po diff --git a/src/client/i18n/es.po b/src/client/classic-debug/i18n/es.po similarity index 100% rename from src/client/i18n/es.po rename to src/client/classic-debug/i18n/es.po diff --git a/src/client/i18n/fr.po b/src/client/classic-debug/i18n/fr.po similarity index 100% rename from src/client/i18n/fr.po rename to src/client/classic-debug/i18n/fr.po diff --git a/src/client/i18n/hu.po b/src/client/classic-debug/i18n/hu.po similarity index 100% rename from src/client/i18n/hu.po rename to src/client/classic-debug/i18n/hu.po diff --git a/src/client/i18n/it.po b/src/client/classic-debug/i18n/it.po similarity index 100% rename from src/client/i18n/it.po rename to src/client/classic-debug/i18n/it.po diff --git a/src/client/i18n/messages.pot b/src/client/classic-debug/i18n/messages.pot similarity index 100% rename from src/client/i18n/messages.pot rename to src/client/classic-debug/i18n/messages.pot diff --git a/src/client/i18n/no.po b/src/client/classic-debug/i18n/no.po similarity index 100% rename from src/client/i18n/no.po rename to src/client/classic-debug/i18n/no.po diff --git a/src/client/i18n/pl.po b/src/client/classic-debug/i18n/pl.po similarity index 100% rename from src/client/i18n/pl.po rename to src/client/classic-debug/i18n/pl.po diff --git a/src/client/i18n/pt.po b/src/client/classic-debug/i18n/pt.po similarity index 100% rename from src/client/i18n/pt.po rename to src/client/classic-debug/i18n/pt.po diff --git a/src/client/i18n/sl.po b/src/client/classic-debug/i18n/sl.po similarity index 100% rename from src/client/i18n/sl.po rename to src/client/classic-debug/i18n/sl.po diff --git a/src/client/images/agency_logo.png b/src/client/classic-debug/images/agency_logo.png similarity index 100% rename from src/client/images/agency_logo.png rename to src/client/classic-debug/images/agency_logo.png diff --git a/src/client/images/alert.png b/src/client/classic-debug/images/alert.png similarity index 100% rename from src/client/images/alert.png rename to src/client/classic-debug/images/alert.png diff --git a/src/client/images/bicycle_green.png b/src/client/classic-debug/images/bicycle_green.png similarity index 100% rename from src/client/images/bicycle_green.png rename to src/client/classic-debug/images/bicycle_green.png diff --git a/src/client/images/bicycle_green_small.png b/src/client/classic-debug/images/bicycle_green_small.png similarity index 100% rename from src/client/images/bicycle_green_small.png rename to src/client/classic-debug/images/bicycle_green_small.png diff --git a/src/client/images/bicycle_red.png b/src/client/classic-debug/images/bicycle_red.png similarity index 100% rename from src/client/images/bicycle_red.png rename to src/client/classic-debug/images/bicycle_red.png diff --git a/src/client/images/bicycle_red_small.png b/src/client/classic-debug/images/bicycle_red_small.png similarity index 100% rename from src/client/images/bicycle_red_small.png rename to src/client/classic-debug/images/bicycle_red_small.png diff --git a/src/client/images/directions/circle_clockwise.png b/src/client/classic-debug/images/directions/circle_clockwise.png similarity index 100% rename from src/client/images/directions/circle_clockwise.png rename to src/client/classic-debug/images/directions/circle_clockwise.png diff --git a/src/client/images/directions/circle_counterclockwise.png b/src/client/classic-debug/images/directions/circle_counterclockwise.png similarity index 100% rename from src/client/images/directions/circle_counterclockwise.png rename to src/client/classic-debug/images/directions/circle_counterclockwise.png diff --git a/src/client/images/directions/clear.png b/src/client/classic-debug/images/directions/clear.png similarity index 100% rename from src/client/images/directions/clear.png rename to src/client/classic-debug/images/directions/clear.png diff --git a/src/client/images/directions/continue.png b/src/client/classic-debug/images/directions/continue.png similarity index 100% rename from src/client/images/directions/continue.png rename to src/client/classic-debug/images/directions/continue.png diff --git a/src/client/images/directions/depart.png b/src/client/classic-debug/images/directions/depart.png similarity index 100% rename from src/client/images/directions/depart.png rename to src/client/classic-debug/images/directions/depart.png diff --git a/src/client/images/directions/direction_icons.svg b/src/client/classic-debug/images/directions/direction_icons.svg similarity index 100% rename from src/client/images/directions/direction_icons.svg rename to src/client/classic-debug/images/directions/direction_icons.svg diff --git a/src/client/images/directions/elevator.png b/src/client/classic-debug/images/directions/elevator.png similarity index 100% rename from src/client/images/directions/elevator.png rename to src/client/classic-debug/images/directions/elevator.png diff --git a/src/client/images/directions/enter_station.png b/src/client/classic-debug/images/directions/enter_station.png similarity index 100% rename from src/client/images/directions/enter_station.png rename to src/client/classic-debug/images/directions/enter_station.png diff --git a/src/client/images/directions/exit_left.png b/src/client/classic-debug/images/directions/exit_left.png similarity index 100% rename from src/client/images/directions/exit_left.png rename to src/client/classic-debug/images/directions/exit_left.png diff --git a/src/client/images/directions/exit_right.png b/src/client/classic-debug/images/directions/exit_right.png similarity index 100% rename from src/client/images/directions/exit_right.png rename to src/client/classic-debug/images/directions/exit_right.png diff --git a/src/client/images/directions/exit_station.png b/src/client/classic-debug/images/directions/exit_station.png similarity index 100% rename from src/client/images/directions/exit_station.png rename to src/client/classic-debug/images/directions/exit_station.png diff --git a/src/client/images/directions/follow_signs.png b/src/client/classic-debug/images/directions/follow_signs.png similarity index 100% rename from src/client/images/directions/follow_signs.png rename to src/client/classic-debug/images/directions/follow_signs.png diff --git a/src/client/images/directions/hard_left.png b/src/client/classic-debug/images/directions/hard_left.png similarity index 100% rename from src/client/images/directions/hard_left.png rename to src/client/classic-debug/images/directions/hard_left.png diff --git a/src/client/images/directions/hard_right.png b/src/client/classic-debug/images/directions/hard_right.png similarity index 100% rename from src/client/images/directions/hard_right.png rename to src/client/classic-debug/images/directions/hard_right.png diff --git a/src/client/images/directions/left.png b/src/client/classic-debug/images/directions/left.png similarity index 100% rename from src/client/images/directions/left.png rename to src/client/classic-debug/images/directions/left.png diff --git a/src/client/images/directions/merge.png b/src/client/classic-debug/images/directions/merge.png similarity index 100% rename from src/client/images/directions/merge.png rename to src/client/classic-debug/images/directions/merge.png diff --git a/src/client/images/directions/right.png b/src/client/classic-debug/images/directions/right.png similarity index 100% rename from src/client/images/directions/right.png rename to src/client/classic-debug/images/directions/right.png diff --git a/src/client/images/directions/slightly_left.png b/src/client/classic-debug/images/directions/slightly_left.png similarity index 100% rename from src/client/images/directions/slightly_left.png rename to src/client/classic-debug/images/directions/slightly_left.png diff --git a/src/client/images/directions/slightly_right.png b/src/client/classic-debug/images/directions/slightly_right.png similarity index 100% rename from src/client/images/directions/slightly_right.png rename to src/client/classic-debug/images/directions/slightly_right.png diff --git a/src/client/images/directions/turn_left.png b/src/client/classic-debug/images/directions/turn_left.png similarity index 100% rename from src/client/images/directions/turn_left.png rename to src/client/classic-debug/images/directions/turn_left.png diff --git a/src/client/images/directions/turn_right.png b/src/client/classic-debug/images/directions/turn_right.png similarity index 100% rename from src/client/images/directions/turn_right.png rename to src/client/classic-debug/images/directions/turn_right.png diff --git a/src/client/images/directions/uturn_left.png b/src/client/classic-debug/images/directions/uturn_left.png similarity index 100% rename from src/client/images/directions/uturn_left.png rename to src/client/classic-debug/images/directions/uturn_left.png diff --git a/src/client/images/directions/uturn_right.png b/src/client/classic-debug/images/directions/uturn_right.png similarity index 100% rename from src/client/images/directions/uturn_right.png rename to src/client/classic-debug/images/directions/uturn_right.png diff --git a/src/client/images/flag_marker_green.png b/src/client/classic-debug/images/flag_marker_green.png similarity index 100% rename from src/client/images/flag_marker_green.png rename to src/client/classic-debug/images/flag_marker_green.png diff --git a/src/client/images/flag_marker_red.png b/src/client/classic-debug/images/flag_marker_red.png similarity index 100% rename from src/client/images/flag_marker_red.png rename to src/client/classic-debug/images/flag_marker_red.png diff --git a/src/client/images/gear.svg b/src/client/classic-debug/images/gear.svg similarity index 100% rename from src/client/images/gear.svg rename to src/client/classic-debug/images/gear.svg diff --git a/src/client/images/language_icon.png b/src/client/classic-debug/images/language_icon.png similarity index 100% rename from src/client/images/language_icon.png rename to src/client/classic-debug/images/language_icon.png diff --git a/src/client/images/language_icon.svg b/src/client/classic-debug/images/language_icon.svg similarity index 100% rename from src/client/images/language_icon.svg rename to src/client/classic-debug/images/language_icon.svg diff --git a/src/client/images/marker-0pct.png b/src/client/classic-debug/images/marker-0pct.png similarity index 100% rename from src/client/images/marker-0pct.png rename to src/client/classic-debug/images/marker-0pct.png diff --git a/src/client/images/marker-100pct.png b/src/client/classic-debug/images/marker-100pct.png similarity index 100% rename from src/client/images/marker-100pct.png rename to src/client/classic-debug/images/marker-100pct.png diff --git a/src/client/images/marker-25pct.png b/src/client/classic-debug/images/marker-25pct.png similarity index 100% rename from src/client/images/marker-25pct.png rename to src/client/classic-debug/images/marker-25pct.png diff --git a/src/client/images/marker-50pct.png b/src/client/classic-debug/images/marker-50pct.png similarity index 100% rename from src/client/images/marker-50pct.png rename to src/client/classic-debug/images/marker-50pct.png diff --git a/src/client/images/marker-75pct.png b/src/client/classic-debug/images/marker-75pct.png similarity index 100% rename from src/client/images/marker-75pct.png rename to src/client/classic-debug/images/marker-75pct.png diff --git a/src/client/images/marker-bike-green-shadowed.png b/src/client/classic-debug/images/marker-bike-green-shadowed.png similarity index 100% rename from src/client/images/marker-bike-green-shadowed.png rename to src/client/classic-debug/images/marker-bike-green-shadowed.png diff --git a/src/client/images/marker-bike-green.png b/src/client/classic-debug/images/marker-bike-green.png similarity index 100% rename from src/client/images/marker-bike-green.png rename to src/client/classic-debug/images/marker-bike-green.png diff --git a/src/client/images/marker-bike-red-shadowed.png b/src/client/classic-debug/images/marker-bike-red-shadowed.png similarity index 100% rename from src/client/images/marker-bike-red-shadowed.png rename to src/client/classic-debug/images/marker-bike-red-shadowed.png diff --git a/src/client/images/marker-bike-red.png b/src/client/classic-debug/images/marker-bike-red.png similarity index 100% rename from src/client/images/marker-bike-red.png rename to src/client/classic-debug/images/marker-bike-red.png diff --git a/src/client/images/marker-bike-shadow.png b/src/client/classic-debug/images/marker-bike-shadow.png similarity index 100% rename from src/client/images/marker-bike-shadow.png rename to src/client/classic-debug/images/marker-bike-shadow.png diff --git a/src/client/images/marker-blue-med.png b/src/client/classic-debug/images/marker-blue-med.png similarity index 100% rename from src/client/images/marker-blue-med.png rename to src/client/classic-debug/images/marker-blue-med.png diff --git a/src/client/images/marker-blue-nub.png b/src/client/classic-debug/images/marker-blue-nub.png similarity index 100% rename from src/client/images/marker-blue-nub.png rename to src/client/classic-debug/images/marker-blue-nub.png diff --git a/src/client/images/marker-blue-sm.png b/src/client/classic-debug/images/marker-blue-sm.png similarity index 100% rename from src/client/images/marker-blue-sm.png rename to src/client/classic-debug/images/marker-blue-sm.png diff --git a/src/client/images/marker-flag-end-shadowed.png b/src/client/classic-debug/images/marker-flag-end-shadowed.png similarity index 100% rename from src/client/images/marker-flag-end-shadowed.png rename to src/client/classic-debug/images/marker-flag-end-shadowed.png diff --git a/src/client/images/marker-flag-end.png b/src/client/classic-debug/images/marker-flag-end.png similarity index 100% rename from src/client/images/marker-flag-end.png rename to src/client/classic-debug/images/marker-flag-end.png diff --git a/src/client/images/marker-flag-shadow.png b/src/client/classic-debug/images/marker-flag-shadow.png similarity index 100% rename from src/client/images/marker-flag-shadow.png rename to src/client/classic-debug/images/marker-flag-shadow.png diff --git a/src/client/images/marker-flag-start-shadowed.png b/src/client/classic-debug/images/marker-flag-start-shadowed.png similarity index 100% rename from src/client/images/marker-flag-start-shadowed.png rename to src/client/classic-debug/images/marker-flag-start-shadowed.png diff --git a/src/client/images/marker-flag-start.png b/src/client/classic-debug/images/marker-flag-start.png similarity index 100% rename from src/client/images/marker-flag-start.png rename to src/client/classic-debug/images/marker-flag-start.png diff --git a/src/client/images/marker-med-0pct.png b/src/client/classic-debug/images/marker-med-0pct.png similarity index 100% rename from src/client/images/marker-med-0pct.png rename to src/client/classic-debug/images/marker-med-0pct.png diff --git a/src/client/images/marker-med-100pct.png b/src/client/classic-debug/images/marker-med-100pct.png similarity index 100% rename from src/client/images/marker-med-100pct.png rename to src/client/classic-debug/images/marker-med-100pct.png diff --git a/src/client/images/marker-med-25pct.png b/src/client/classic-debug/images/marker-med-25pct.png similarity index 100% rename from src/client/images/marker-med-25pct.png rename to src/client/classic-debug/images/marker-med-25pct.png diff --git a/src/client/images/marker-med-50pct.png b/src/client/classic-debug/images/marker-med-50pct.png similarity index 100% rename from src/client/images/marker-med-50pct.png rename to src/client/classic-debug/images/marker-med-50pct.png diff --git a/src/client/images/marker-med-75pct.png b/src/client/classic-debug/images/marker-med-75pct.png similarity index 100% rename from src/client/images/marker-med-75pct.png rename to src/client/classic-debug/images/marker-med-75pct.png diff --git a/src/client/images/marker-sm-0pct.png b/src/client/classic-debug/images/marker-sm-0pct.png similarity index 100% rename from src/client/images/marker-sm-0pct.png rename to src/client/classic-debug/images/marker-sm-0pct.png diff --git a/src/client/images/marker-sm-100pct.png b/src/client/classic-debug/images/marker-sm-100pct.png similarity index 100% rename from src/client/images/marker-sm-100pct.png rename to src/client/classic-debug/images/marker-sm-100pct.png diff --git a/src/client/images/marker-sm-25pct.png b/src/client/classic-debug/images/marker-sm-25pct.png similarity index 100% rename from src/client/images/marker-sm-25pct.png rename to src/client/classic-debug/images/marker-sm-25pct.png diff --git a/src/client/images/marker-sm-50pct.png b/src/client/classic-debug/images/marker-sm-50pct.png similarity index 100% rename from src/client/images/marker-sm-50pct.png rename to src/client/classic-debug/images/marker-sm-50pct.png diff --git a/src/client/images/marker-sm-75pct.png b/src/client/classic-debug/images/marker-sm-75pct.png similarity index 100% rename from src/client/images/marker-sm-75pct.png rename to src/client/classic-debug/images/marker-sm-75pct.png diff --git a/src/client/images/mode/airplane.png b/src/client/classic-debug/images/mode/airplane.png similarity index 100% rename from src/client/images/mode/airplane.png rename to src/client/classic-debug/images/mode/airplane.png diff --git a/src/client/images/mode/arrow-left.png b/src/client/classic-debug/images/mode/arrow-left.png similarity index 100% rename from src/client/images/mode/arrow-left.png rename to src/client/classic-debug/images/mode/arrow-left.png diff --git a/src/client/images/mode/arrow.png b/src/client/classic-debug/images/mode/arrow.png similarity index 100% rename from src/client/images/mode/arrow.png rename to src/client/classic-debug/images/mode/arrow.png diff --git a/src/client/images/mode/bicycle.png b/src/client/classic-debug/images/mode/bicycle.png similarity index 100% rename from src/client/images/mode/bicycle.png rename to src/client/classic-debug/images/mode/bicycle.png diff --git a/src/client/images/mode/bicycle_darkbg.png b/src/client/classic-debug/images/mode/bicycle_darkbg.png similarity index 100% rename from src/client/images/mode/bicycle_darkbg.png rename to src/client/classic-debug/images/mode/bicycle_darkbg.png diff --git a/src/client/images/mode/bus.png b/src/client/classic-debug/images/mode/bus.png similarity index 100% rename from src/client/images/mode/bus.png rename to src/client/classic-debug/images/mode/bus.png diff --git a/src/client/images/mode/bus_darkbg.png b/src/client/classic-debug/images/mode/bus_darkbg.png similarity index 100% rename from src/client/images/mode/bus_darkbg.png rename to src/client/classic-debug/images/mode/bus_darkbg.png diff --git a/src/client/images/mode/cable_car.png b/src/client/classic-debug/images/mode/cable_car.png similarity index 100% rename from src/client/images/mode/cable_car.png rename to src/client/classic-debug/images/mode/cable_car.png diff --git a/src/client/images/mode/car.png b/src/client/classic-debug/images/mode/car.png similarity index 100% rename from src/client/images/mode/car.png rename to src/client/classic-debug/images/mode/car.png diff --git a/src/client/images/mode/car_darkbg.png b/src/client/classic-debug/images/mode/car_darkbg.png similarity index 100% rename from src/client/images/mode/car_darkbg.png rename to src/client/classic-debug/images/mode/car_darkbg.png diff --git a/src/client/images/mode/carpool.png b/src/client/classic-debug/images/mode/carpool.png similarity index 100% rename from src/client/images/mode/carpool.png rename to src/client/classic-debug/images/mode/carpool.png diff --git a/src/client/images/mode/carpool_darkbg.png b/src/client/classic-debug/images/mode/carpool_darkbg.png similarity index 100% rename from src/client/images/mode/carpool_darkbg.png rename to src/client/classic-debug/images/mode/carpool_darkbg.png diff --git a/src/client/images/mode/coach.png b/src/client/classic-debug/images/mode/coach.png similarity index 100% rename from src/client/images/mode/coach.png rename to src/client/classic-debug/images/mode/coach.png diff --git a/src/client/images/mode/ferry.png b/src/client/classic-debug/images/mode/ferry.png similarity index 100% rename from src/client/images/mode/ferry.png rename to src/client/classic-debug/images/mode/ferry.png diff --git a/src/client/images/mode/ferry_darkbg.png b/src/client/classic-debug/images/mode/ferry_darkbg.png similarity index 100% rename from src/client/images/mode/ferry_darkbg.png rename to src/client/classic-debug/images/mode/ferry_darkbg.png diff --git a/src/client/images/mode/funicular.png b/src/client/classic-debug/images/mode/funicular.png similarity index 100% rename from src/client/images/mode/funicular.png rename to src/client/classic-debug/images/mode/funicular.png diff --git a/src/client/images/mode/gondola.png b/src/client/classic-debug/images/mode/gondola.png similarity index 100% rename from src/client/images/mode/gondola.png rename to src/client/classic-debug/images/mode/gondola.png diff --git a/src/client/images/mode/gondola_darkbg.png b/src/client/classic-debug/images/mode/gondola_darkbg.png similarity index 100% rename from src/client/images/mode/gondola_darkbg.png rename to src/client/classic-debug/images/mode/gondola_darkbg.png diff --git a/src/client/images/mode/mode_bubble.psd b/src/client/classic-debug/images/mode/mode_bubble.psd similarity index 100% rename from src/client/images/mode/mode_bubble.psd rename to src/client/classic-debug/images/mode/mode_bubble.psd diff --git a/src/client/images/mode/mode_bubble_ne.png b/src/client/classic-debug/images/mode/mode_bubble_ne.png similarity index 100% rename from src/client/images/mode/mode_bubble_ne.png rename to src/client/classic-debug/images/mode/mode_bubble_ne.png diff --git a/src/client/images/mode/mode_bubble_ne_highlight.png b/src/client/classic-debug/images/mode/mode_bubble_ne_highlight.png similarity index 100% rename from src/client/images/mode/mode_bubble_ne_highlight.png rename to src/client/classic-debug/images/mode/mode_bubble_ne_highlight.png diff --git a/src/client/images/mode/mode_bubble_nw.png b/src/client/classic-debug/images/mode/mode_bubble_nw.png similarity index 100% rename from src/client/images/mode/mode_bubble_nw.png rename to src/client/classic-debug/images/mode/mode_bubble_nw.png diff --git a/src/client/images/mode/mode_bubble_nw_highlight.png b/src/client/classic-debug/images/mode/mode_bubble_nw_highlight.png similarity index 100% rename from src/client/images/mode/mode_bubble_nw_highlight.png rename to src/client/classic-debug/images/mode/mode_bubble_nw_highlight.png diff --git a/src/client/images/mode/mode_bubble_se.png b/src/client/classic-debug/images/mode/mode_bubble_se.png similarity index 100% rename from src/client/images/mode/mode_bubble_se.png rename to src/client/classic-debug/images/mode/mode_bubble_se.png diff --git a/src/client/images/mode/mode_bubble_se_highlight.png b/src/client/classic-debug/images/mode/mode_bubble_se_highlight.png similarity index 100% rename from src/client/images/mode/mode_bubble_se_highlight.png rename to src/client/classic-debug/images/mode/mode_bubble_se_highlight.png diff --git a/src/client/images/mode/mode_bubble_sw.png b/src/client/classic-debug/images/mode/mode_bubble_sw.png similarity index 100% rename from src/client/images/mode/mode_bubble_sw.png rename to src/client/classic-debug/images/mode/mode_bubble_sw.png diff --git a/src/client/images/mode/mode_bubble_sw_highlight.png b/src/client/classic-debug/images/mode/mode_bubble_sw_highlight.png similarity index 100% rename from src/client/images/mode/mode_bubble_sw_highlight.png rename to src/client/classic-debug/images/mode/mode_bubble_sw_highlight.png diff --git a/src/client/images/mode/monorail.png b/src/client/classic-debug/images/mode/monorail.png similarity index 100% rename from src/client/images/mode/monorail.png rename to src/client/classic-debug/images/mode/monorail.png diff --git a/src/client/images/mode/rail.png b/src/client/classic-debug/images/mode/rail.png similarity index 100% rename from src/client/images/mode/rail.png rename to src/client/classic-debug/images/mode/rail.png diff --git a/src/client/images/mode/rail_darkbg.png b/src/client/classic-debug/images/mode/rail_darkbg.png similarity index 100% rename from src/client/images/mode/rail_darkbg.png rename to src/client/classic-debug/images/mode/rail_darkbg.png diff --git a/src/client/images/mode/scooter.png b/src/client/classic-debug/images/mode/scooter.png similarity index 100% rename from src/client/images/mode/scooter.png rename to src/client/classic-debug/images/mode/scooter.png diff --git a/src/client/images/mode/subway.png b/src/client/classic-debug/images/mode/subway.png similarity index 100% rename from src/client/images/mode/subway.png rename to src/client/classic-debug/images/mode/subway.png diff --git a/src/client/images/mode/subway_darkbg.png b/src/client/classic-debug/images/mode/subway_darkbg.png similarity index 100% rename from src/client/images/mode/subway_darkbg.png rename to src/client/classic-debug/images/mode/subway_darkbg.png diff --git a/src/client/images/mode/taxi.png b/src/client/classic-debug/images/mode/taxi.png similarity index 100% rename from src/client/images/mode/taxi.png rename to src/client/classic-debug/images/mode/taxi.png diff --git a/src/client/images/mode/tram.png b/src/client/classic-debug/images/mode/tram.png similarity index 100% rename from src/client/images/mode/tram.png rename to src/client/classic-debug/images/mode/tram.png diff --git a/src/client/images/mode/tram_darkbg.png b/src/client/classic-debug/images/mode/tram_darkbg.png similarity index 100% rename from src/client/images/mode/tram_darkbg.png rename to src/client/classic-debug/images/mode/tram_darkbg.png diff --git a/src/client/images/mode/trolleybus.png b/src/client/classic-debug/images/mode/trolleybus.png similarity index 100% rename from src/client/images/mode/trolleybus.png rename to src/client/classic-debug/images/mode/trolleybus.png diff --git a/src/client/images/mode/walk.png b/src/client/classic-debug/images/mode/walk.png similarity index 100% rename from src/client/images/mode/walk.png rename to src/client/classic-debug/images/mode/walk.png diff --git a/src/client/images/mode/walk_darkbg.png b/src/client/classic-debug/images/mode/walk_darkbg.png similarity index 100% rename from src/client/images/mode/walk_darkbg.png rename to src/client/classic-debug/images/mode/walk_darkbg.png diff --git a/src/client/images/openplans-logo-20x20.png b/src/client/classic-debug/images/openplans-logo-20x20.png similarity index 100% rename from src/client/images/openplans-logo-20x20.png rename to src/client/classic-debug/images/openplans-logo-20x20.png diff --git a/src/client/images/openplans-logo-40x40.png b/src/client/classic-debug/images/openplans-logo-40x40.png similarity index 100% rename from src/client/images/openplans-logo-40x40.png rename to src/client/classic-debug/images/openplans-logo-40x40.png diff --git a/src/client/images/openplans-logo-gray.gif b/src/client/classic-debug/images/openplans-logo-gray.gif similarity index 100% rename from src/client/images/openplans-logo-gray.gif rename to src/client/classic-debug/images/openplans-logo-gray.gif diff --git a/src/client/images/otp_logo_40px.png b/src/client/classic-debug/images/otp_logo_40px.png similarity index 100% rename from src/client/images/otp_logo_40px.png rename to src/client/classic-debug/images/otp_logo_40px.png diff --git a/src/client/images/otp_logo_darkbg_40px.png b/src/client/classic-debug/images/otp_logo_darkbg_40px.png similarity index 100% rename from src/client/images/otp_logo_darkbg_40px.png rename to src/client/classic-debug/images/otp_logo_darkbg_40px.png diff --git a/src/client/images/reverse.png b/src/client/classic-debug/images/reverse.png similarity index 100% rename from src/client/images/reverse.png rename to src/client/classic-debug/images/reverse.png diff --git a/src/client/images/shadow.png b/src/client/classic-debug/images/shadow.png similarity index 100% rename from src/client/images/shadow.png rename to src/client/classic-debug/images/shadow.png diff --git a/src/client/images/spinner.gif b/src/client/classic-debug/images/spinner.gif similarity index 100% rename from src/client/images/spinner.gif rename to src/client/classic-debug/images/spinner.gif diff --git a/src/client/images/stop20.png b/src/client/classic-debug/images/stop20.png similarity index 100% rename from src/client/images/stop20.png rename to src/client/classic-debug/images/stop20.png diff --git a/src/client/images/widget-trip-stop-first.png b/src/client/classic-debug/images/widget-trip-stop-first.png similarity index 100% rename from src/client/images/widget-trip-stop-first.png rename to src/client/classic-debug/images/widget-trip-stop-first.png diff --git a/src/client/images/widget-trip-stop-last.png b/src/client/classic-debug/images/widget-trip-stop-last.png similarity index 100% rename from src/client/images/widget-trip-stop-last.png rename to src/client/classic-debug/images/widget-trip-stop-last.png diff --git a/src/client/images/widget-trip-stop-middle.png b/src/client/classic-debug/images/widget-trip-stop-middle.png similarity index 100% rename from src/client/images/widget-trip-stop-middle.png rename to src/client/classic-debug/images/widget-trip-stop-middle.png diff --git a/src/client/classic-debug/index.html b/src/client/classic-debug/index.html new file mode 100644 index 00000000000..a005e624693 --- /dev/null +++ b/src/client/classic-debug/index.html @@ -0,0 +1,220 @@ + + + + + + + + +OpenTripPlanner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + diff --git a/src/client/js/lib/ICanHaz.js b/src/client/classic-debug/js/lib/ICanHaz.js similarity index 100% rename from src/client/js/lib/ICanHaz.js rename to src/client/classic-debug/js/lib/ICanHaz.js diff --git a/src/client/js/lib/backbone-min.js b/src/client/classic-debug/js/lib/backbone-min.js similarity index 100% rename from src/client/js/lib/backbone-min.js rename to src/client/classic-debug/js/lib/backbone-min.js diff --git a/src/client/js/lib/backbone.js b/src/client/classic-debug/js/lib/backbone.js similarity index 100% rename from src/client/js/lib/backbone.js rename to src/client/classic-debug/js/lib/backbone.js diff --git a/src/client/js/lib/i18next-1.7.3.min.js b/src/client/classic-debug/js/lib/i18next-1.7.3.min.js similarity index 100% rename from src/client/js/lib/i18next-1.7.3.min.js rename to src/client/classic-debug/js/lib/i18next-1.7.3.min.js diff --git a/src/client/js/lib/jquery-ui/addons/jquery-ui-timepicker.css b/src/client/classic-debug/js/lib/jquery-ui/addons/jquery-ui-timepicker.css similarity index 100% rename from src/client/js/lib/jquery-ui/addons/jquery-ui-timepicker.css rename to src/client/classic-debug/js/lib/jquery-ui/addons/jquery-ui-timepicker.css diff --git a/src/client/js/lib/jquery-ui/addons/jquery-ui-timepicker.js b/src/client/classic-debug/js/lib/jquery-ui/addons/jquery-ui-timepicker.js similarity index 100% rename from src/client/js/lib/jquery-ui/addons/jquery-ui-timepicker.js rename to src/client/classic-debug/js/lib/jquery-ui/addons/jquery-ui-timepicker.js diff --git a/src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png diff --git a/src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png diff --git a/src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png diff --git a/src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png diff --git a/src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png diff --git a/src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png diff --git a/src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png diff --git a/src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png diff --git a/src/client/js/lib/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png diff --git a/src/client/js/lib/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png diff --git a/src/client/js/lib/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png diff --git a/src/client/js/lib/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png diff --git a/src/client/js/lib/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png diff --git a/src/client/js/lib/jquery-ui/css/smoothness/jquery-ui-1.9.1.custom.css b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/jquery-ui-1.9.1.custom.css similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/jquery-ui-1.9.1.custom.css rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/jquery-ui-1.9.1.custom.css diff --git a/src/client/js/lib/jquery-ui/css/smoothness/jquery-ui-1.9.1.custom.min.css b/src/client/classic-debug/js/lib/jquery-ui/css/smoothness/jquery-ui-1.9.1.custom.min.css similarity index 100% rename from src/client/js/lib/jquery-ui/css/smoothness/jquery-ui-1.9.1.custom.min.css rename to src/client/classic-debug/js/lib/jquery-ui/css/smoothness/jquery-ui-1.9.1.custom.min.css diff --git a/src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-ca.js b/src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-ca.js similarity index 100% rename from src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-ca.js rename to src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-ca.js diff --git a/src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-de.js b/src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-de.js similarity index 100% rename from src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-de.js rename to src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-de.js diff --git a/src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-es.js b/src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-es.js similarity index 100% rename from src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-es.js rename to src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-es.js diff --git a/src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-fr.js b/src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-fr.js similarity index 100% rename from src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-fr.js rename to src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-fr.js diff --git a/src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-hu.js b/src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-hu.js similarity index 100% rename from src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-hu.js rename to src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-hu.js diff --git a/src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-it.js b/src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-it.js similarity index 100% rename from src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-it.js rename to src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-it.js diff --git a/src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-no.js b/src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-no.js similarity index 100% rename from src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-no.js rename to src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-no.js diff --git a/src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-pl.js b/src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-pl.js similarity index 100% rename from src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-pl.js rename to src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-pl.js diff --git a/src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-pt.js b/src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-pt.js similarity index 100% rename from src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-pt.js rename to src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-pt.js diff --git a/src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-sl.js b/src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-sl.js similarity index 100% rename from src/client/js/lib/jquery-ui/i18n/jquery.ui.datepicker-sl.js rename to src/client/classic-debug/js/lib/jquery-ui/i18n/jquery.ui.datepicker-sl.js diff --git a/src/client/js/lib/jquery-ui/js/jquery-1.8.2.js b/src/client/classic-debug/js/lib/jquery-ui/js/jquery-1.8.2.js similarity index 100% rename from src/client/js/lib/jquery-ui/js/jquery-1.8.2.js rename to src/client/classic-debug/js/lib/jquery-ui/js/jquery-1.8.2.js diff --git a/src/client/js/lib/jquery-ui/js/jquery-ui-1.9.1.custom.js b/src/client/classic-debug/js/lib/jquery-ui/js/jquery-ui-1.9.1.custom.js similarity index 100% rename from src/client/js/lib/jquery-ui/js/jquery-ui-1.9.1.custom.js rename to src/client/classic-debug/js/lib/jquery-ui/js/jquery-ui-1.9.1.custom.js diff --git a/src/client/js/lib/jquery-ui/js/jquery-ui-1.9.1.custom.min.js b/src/client/classic-debug/js/lib/jquery-ui/js/jquery-ui-1.9.1.custom.min.js similarity index 100% rename from src/client/js/lib/jquery-ui/js/jquery-ui-1.9.1.custom.min.js rename to src/client/classic-debug/js/lib/jquery-ui/js/jquery-ui-1.9.1.custom.min.js diff --git a/src/client/js/otp/config.js b/src/client/classic-debug/js/otp/config.js similarity index 100% rename from src/client/js/otp/config.js rename to src/client/classic-debug/js/otp/config.js diff --git a/src/client/js/otp/core/ContextMenu.js b/src/client/classic-debug/js/otp/core/ContextMenu.js similarity index 100% rename from src/client/js/otp/core/ContextMenu.js rename to src/client/classic-debug/js/otp/core/ContextMenu.js diff --git a/src/client/js/otp/core/Geocoder.js b/src/client/classic-debug/js/otp/core/Geocoder.js similarity index 100% rename from src/client/js/otp/core/Geocoder.js rename to src/client/classic-debug/js/otp/core/Geocoder.js diff --git a/src/client/js/otp/core/GeocoderBag.js b/src/client/classic-debug/js/otp/core/GeocoderBag.js similarity index 100% rename from src/client/js/otp/core/GeocoderBag.js rename to src/client/classic-debug/js/otp/core/GeocoderBag.js diff --git a/src/client/js/otp/core/GeocoderBuiltin.js b/src/client/classic-debug/js/otp/core/GeocoderBuiltin.js similarity index 100% rename from src/client/js/otp/core/GeocoderBuiltin.js rename to src/client/classic-debug/js/otp/core/GeocoderBuiltin.js diff --git a/src/client/js/otp/core/IndexApi.js b/src/client/classic-debug/js/otp/core/IndexApi.js similarity index 100% rename from src/client/js/otp/core/IndexApi.js rename to src/client/classic-debug/js/otp/core/IndexApi.js diff --git a/src/client/js/otp/core/Map.js b/src/client/classic-debug/js/otp/core/Map.js similarity index 100% rename from src/client/js/otp/core/Map.js rename to src/client/classic-debug/js/otp/core/Map.js diff --git a/src/client/js/otp/core/MapContextMenu.js b/src/client/classic-debug/js/otp/core/MapContextMenu.js similarity index 100% rename from src/client/js/otp/core/MapContextMenu.js rename to src/client/classic-debug/js/otp/core/MapContextMenu.js diff --git a/src/client/js/otp/core/PopupMenu.js b/src/client/classic-debug/js/otp/core/PopupMenu.js similarity index 100% rename from src/client/js/otp/core/PopupMenu.js rename to src/client/classic-debug/js/otp/core/PopupMenu.js diff --git a/src/client/js/otp/core/QueryLogger.js b/src/client/classic-debug/js/otp/core/QueryLogger.js similarity index 100% rename from src/client/js/otp/core/QueryLogger.js rename to src/client/classic-debug/js/otp/core/QueryLogger.js diff --git a/src/client/js/otp/core/SOLRGeocoder.js b/src/client/classic-debug/js/otp/core/SOLRGeocoder.js similarity index 100% rename from src/client/js/otp/core/SOLRGeocoder.js rename to src/client/classic-debug/js/otp/core/SOLRGeocoder.js diff --git a/src/client/js/otp/core/TransitIndex.js b/src/client/classic-debug/js/otp/core/TransitIndex.js similarity index 100% rename from src/client/js/otp/core/TransitIndex.js rename to src/client/classic-debug/js/otp/core/TransitIndex.js diff --git a/src/client/js/otp/core/TripPlan.js b/src/client/classic-debug/js/otp/core/TripPlan.js similarity index 100% rename from src/client/js/otp/core/TripPlan.js rename to src/client/classic-debug/js/otp/core/TripPlan.js diff --git a/src/client/js/otp/core/Webapp.js b/src/client/classic-debug/js/otp/core/Webapp.js similarity index 100% rename from src/client/js/otp/core/Webapp.js rename to src/client/classic-debug/js/otp/core/Webapp.js diff --git a/src/client/js/otp/core/WidgetManagerMenu.js b/src/client/classic-debug/js/otp/core/WidgetManagerMenu.js similarity index 100% rename from src/client/js/otp/core/WidgetManagerMenu.js rename to src/client/classic-debug/js/otp/core/WidgetManagerMenu.js diff --git a/src/client/js/otp/debug.js b/src/client/classic-debug/js/otp/debug.js similarity index 100% rename from src/client/js/otp/debug.js rename to src/client/classic-debug/js/otp/debug.js diff --git a/src/client/js/otp/layers/AreaStopsLayer.js b/src/client/classic-debug/js/otp/layers/AreaStopsLayer.js similarity index 100% rename from src/client/js/otp/layers/AreaStopsLayer.js rename to src/client/classic-debug/js/otp/layers/AreaStopsLayer.js diff --git a/src/client/js/otp/layers/GeofencingZonesLayer.js b/src/client/classic-debug/js/otp/layers/GeofencingZonesLayer.js similarity index 100% rename from src/client/js/otp/layers/GeofencingZonesLayer.js rename to src/client/classic-debug/js/otp/layers/GeofencingZonesLayer.js diff --git a/src/client/js/otp/layers/StopsLayer.js b/src/client/classic-debug/js/otp/layers/StopsLayer.js similarity index 100% rename from src/client/js/otp/layers/StopsLayer.js rename to src/client/classic-debug/js/otp/layers/StopsLayer.js diff --git a/src/client/js/otp/layers/layers-templates.html b/src/client/classic-debug/js/otp/layers/layers-templates.html similarity index 100% rename from src/client/js/otp/layers/layers-templates.html rename to src/client/classic-debug/js/otp/layers/layers-templates.html diff --git a/src/client/js/otp/locale/Catalan.js b/src/client/classic-debug/js/otp/locale/Catalan.js similarity index 100% rename from src/client/js/otp/locale/Catalan.js rename to src/client/classic-debug/js/otp/locale/Catalan.js diff --git a/src/client/js/otp/locale/English.js b/src/client/classic-debug/js/otp/locale/English.js similarity index 100% rename from src/client/js/otp/locale/English.js rename to src/client/classic-debug/js/otp/locale/English.js diff --git a/src/client/js/otp/locale/French.js b/src/client/classic-debug/js/otp/locale/French.js similarity index 100% rename from src/client/js/otp/locale/French.js rename to src/client/classic-debug/js/otp/locale/French.js diff --git a/src/client/js/otp/locale/German.js b/src/client/classic-debug/js/otp/locale/German.js similarity index 100% rename from src/client/js/otp/locale/German.js rename to src/client/classic-debug/js/otp/locale/German.js diff --git a/src/client/js/otp/locale/Hungarian.js b/src/client/classic-debug/js/otp/locale/Hungarian.js similarity index 100% rename from src/client/js/otp/locale/Hungarian.js rename to src/client/classic-debug/js/otp/locale/Hungarian.js diff --git a/src/client/js/otp/locale/Italian.js b/src/client/classic-debug/js/otp/locale/Italian.js similarity index 100% rename from src/client/js/otp/locale/Italian.js rename to src/client/classic-debug/js/otp/locale/Italian.js diff --git a/src/client/js/otp/locale/Norwegian.js b/src/client/classic-debug/js/otp/locale/Norwegian.js similarity index 100% rename from src/client/js/otp/locale/Norwegian.js rename to src/client/classic-debug/js/otp/locale/Norwegian.js diff --git a/src/client/js/otp/locale/Polish.js b/src/client/classic-debug/js/otp/locale/Polish.js similarity index 100% rename from src/client/js/otp/locale/Polish.js rename to src/client/classic-debug/js/otp/locale/Polish.js diff --git a/src/client/js/otp/locale/Portuguese.js b/src/client/classic-debug/js/otp/locale/Portuguese.js similarity index 100% rename from src/client/js/otp/locale/Portuguese.js rename to src/client/classic-debug/js/otp/locale/Portuguese.js diff --git a/src/client/js/otp/locale/Slovenian.js b/src/client/classic-debug/js/otp/locale/Slovenian.js similarity index 100% rename from src/client/js/otp/locale/Slovenian.js rename to src/client/classic-debug/js/otp/locale/Slovenian.js diff --git a/src/client/js/otp/locale/Spanish.js b/src/client/classic-debug/js/otp/locale/Spanish.js similarity index 100% rename from src/client/js/otp/locale/Spanish.js rename to src/client/classic-debug/js/otp/locale/Spanish.js diff --git a/src/client/js/otp/locale/ca_ES.json b/src/client/classic-debug/js/otp/locale/ca_ES.json similarity index 100% rename from src/client/js/otp/locale/ca_ES.json rename to src/client/classic-debug/js/otp/locale/ca_ES.json diff --git a/src/client/js/otp/locale/de.json b/src/client/classic-debug/js/otp/locale/de.json similarity index 100% rename from src/client/js/otp/locale/de.json rename to src/client/classic-debug/js/otp/locale/de.json diff --git a/src/client/js/otp/locale/en.json b/src/client/classic-debug/js/otp/locale/en.json similarity index 100% rename from src/client/js/otp/locale/en.json rename to src/client/classic-debug/js/otp/locale/en.json diff --git a/src/client/js/otp/locale/es.json b/src/client/classic-debug/js/otp/locale/es.json similarity index 100% rename from src/client/js/otp/locale/es.json rename to src/client/classic-debug/js/otp/locale/es.json diff --git a/src/client/js/otp/locale/fr.json b/src/client/classic-debug/js/otp/locale/fr.json similarity index 100% rename from src/client/js/otp/locale/fr.json rename to src/client/classic-debug/js/otp/locale/fr.json diff --git a/src/client/js/otp/locale/hu.json b/src/client/classic-debug/js/otp/locale/hu.json similarity index 100% rename from src/client/js/otp/locale/hu.json rename to src/client/classic-debug/js/otp/locale/hu.json diff --git a/src/client/js/otp/locale/it.json b/src/client/classic-debug/js/otp/locale/it.json similarity index 100% rename from src/client/js/otp/locale/it.json rename to src/client/classic-debug/js/otp/locale/it.json diff --git a/src/client/js/otp/locale/no.json b/src/client/classic-debug/js/otp/locale/no.json similarity index 100% rename from src/client/js/otp/locale/no.json rename to src/client/classic-debug/js/otp/locale/no.json diff --git a/src/client/js/otp/locale/pl.json b/src/client/classic-debug/js/otp/locale/pl.json similarity index 100% rename from src/client/js/otp/locale/pl.json rename to src/client/classic-debug/js/otp/locale/pl.json diff --git a/src/client/js/otp/locale/pt.json b/src/client/classic-debug/js/otp/locale/pt.json similarity index 100% rename from src/client/js/otp/locale/pt.json rename to src/client/classic-debug/js/otp/locale/pt.json diff --git a/src/client/js/otp/locale/sl.json b/src/client/classic-debug/js/otp/locale/sl.json similarity index 100% rename from src/client/js/otp/locale/sl.json rename to src/client/classic-debug/js/otp/locale/sl.json diff --git a/src/client/js/otp/modules/Module.js b/src/client/classic-debug/js/otp/modules/Module.js similarity index 100% rename from src/client/js/otp/modules/Module.js rename to src/client/classic-debug/js/otp/modules/Module.js diff --git a/src/client/js/otp/modules/bikeshare/BikeShareModule.js b/src/client/classic-debug/js/otp/modules/bikeshare/BikeShareModule.js similarity index 100% rename from src/client/js/otp/modules/bikeshare/BikeShareModule.js rename to src/client/classic-debug/js/otp/modules/bikeshare/BikeShareModule.js diff --git a/src/client/js/otp/modules/bikeshare/BikeStationsWidget.js b/src/client/classic-debug/js/otp/modules/bikeshare/BikeStationsWidget.js similarity index 100% rename from src/client/js/otp/modules/bikeshare/BikeStationsWidget.js rename to src/client/classic-debug/js/otp/modules/bikeshare/BikeStationsWidget.js diff --git a/src/client/js/otp/modules/bikeshare/bikeshare-style.css b/src/client/classic-debug/js/otp/modules/bikeshare/bikeshare-style.css similarity index 100% rename from src/client/js/otp/modules/bikeshare/bikeshare-style.css rename to src/client/classic-debug/js/otp/modules/bikeshare/bikeshare-style.css diff --git a/src/client/js/otp/modules/multimodal/MultimodalPlannerModule.js b/src/client/classic-debug/js/otp/modules/multimodal/MultimodalPlannerModule.js similarity index 100% rename from src/client/js/otp/modules/multimodal/MultimodalPlannerModule.js rename to src/client/classic-debug/js/otp/modules/multimodal/MultimodalPlannerModule.js diff --git a/src/client/js/otp/modules/multimodal/multimodal-style.css b/src/client/classic-debug/js/otp/modules/multimodal/multimodal-style.css similarity index 100% rename from src/client/js/otp/modules/multimodal/multimodal-style.css rename to src/client/classic-debug/js/otp/modules/multimodal/multimodal-style.css diff --git a/src/client/js/otp/modules/planner/IconFactory.js b/src/client/classic-debug/js/otp/modules/planner/IconFactory.js similarity index 100% rename from src/client/js/otp/modules/planner/IconFactory.js rename to src/client/classic-debug/js/otp/modules/planner/IconFactory.js diff --git a/src/client/js/otp/modules/planner/ItinerariesWidget.js b/src/client/classic-debug/js/otp/modules/planner/ItinerariesWidget.js similarity index 100% rename from src/client/js/otp/modules/planner/ItinerariesWidget.js rename to src/client/classic-debug/js/otp/modules/planner/ItinerariesWidget.js diff --git a/src/client/js/otp/modules/planner/Itinerary.js b/src/client/classic-debug/js/otp/modules/planner/Itinerary.js similarity index 100% rename from src/client/js/otp/modules/planner/Itinerary.js rename to src/client/classic-debug/js/otp/modules/planner/Itinerary.js diff --git a/src/client/js/otp/modules/planner/PlannerModule.js b/src/client/classic-debug/js/otp/modules/planner/PlannerModule.js similarity index 100% rename from src/client/js/otp/modules/planner/PlannerModule.js rename to src/client/classic-debug/js/otp/modules/planner/PlannerModule.js diff --git a/src/client/js/otp/modules/planner/TripPlan.js b/src/client/classic-debug/js/otp/modules/planner/TripPlan.js similarity index 100% rename from src/client/js/otp/modules/planner/TripPlan.js rename to src/client/classic-debug/js/otp/modules/planner/TripPlan.js diff --git a/src/client/js/otp/modules/planner/images/mode/mode_bubble.psd b/src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble.psd similarity index 100% rename from src/client/js/otp/modules/planner/images/mode/mode_bubble.psd rename to src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble.psd diff --git a/src/client/js/otp/modules/planner/images/mode/mode_bubble_ne.png b/src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_ne.png similarity index 100% rename from src/client/js/otp/modules/planner/images/mode/mode_bubble_ne.png rename to src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_ne.png diff --git a/src/client/js/otp/modules/planner/images/mode/mode_bubble_ne_highlight.png b/src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_ne_highlight.png similarity index 100% rename from src/client/js/otp/modules/planner/images/mode/mode_bubble_ne_highlight.png rename to src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_ne_highlight.png diff --git a/src/client/js/otp/modules/planner/images/mode/mode_bubble_nw.png b/src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_nw.png similarity index 100% rename from src/client/js/otp/modules/planner/images/mode/mode_bubble_nw.png rename to src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_nw.png diff --git a/src/client/js/otp/modules/planner/images/mode/mode_bubble_nw_highlight.png b/src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_nw_highlight.png similarity index 100% rename from src/client/js/otp/modules/planner/images/mode/mode_bubble_nw_highlight.png rename to src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_nw_highlight.png diff --git a/src/client/js/otp/modules/planner/images/mode/mode_bubble_se.png b/src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_se.png similarity index 100% rename from src/client/js/otp/modules/planner/images/mode/mode_bubble_se.png rename to src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_se.png diff --git a/src/client/js/otp/modules/planner/images/mode/mode_bubble_se_highlight.png b/src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_se_highlight.png similarity index 100% rename from src/client/js/otp/modules/planner/images/mode/mode_bubble_se_highlight.png rename to src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_se_highlight.png diff --git a/src/client/js/otp/modules/planner/images/mode/mode_bubble_sw.png b/src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_sw.png similarity index 100% rename from src/client/js/otp/modules/planner/images/mode/mode_bubble_sw.png rename to src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_sw.png diff --git a/src/client/js/otp/modules/planner/images/mode/mode_bubble_sw_highlight.png b/src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_sw_highlight.png similarity index 100% rename from src/client/js/otp/modules/planner/images/mode/mode_bubble_sw_highlight.png rename to src/client/classic-debug/js/otp/modules/planner/images/mode/mode_bubble_sw_highlight.png diff --git a/src/client/js/otp/modules/planner/images/user_icon.png b/src/client/classic-debug/js/otp/modules/planner/images/user_icon.png similarity index 100% rename from src/client/js/otp/modules/planner/images/user_icon.png rename to src/client/classic-debug/js/otp/modules/planner/images/user_icon.png diff --git a/src/client/js/otp/modules/planner/planner-style.css b/src/client/classic-debug/js/otp/modules/planner/planner-style.css similarity index 100% rename from src/client/js/otp/modules/planner/planner-style.css rename to src/client/classic-debug/js/otp/modules/planner/planner-style.css diff --git a/src/client/js/otp/modules/planner/planner-templates.html b/src/client/classic-debug/js/otp/modules/planner/planner-templates.html similarity index 100% rename from src/client/js/otp/modules/planner/planner-templates.html rename to src/client/classic-debug/js/otp/modules/planner/planner-templates.html diff --git a/src/client/js/otp/otp.js b/src/client/classic-debug/js/otp/otp.js similarity index 100% rename from src/client/js/otp/otp.js rename to src/client/classic-debug/js/otp/otp.js diff --git a/src/client/js/otp/templates.js b/src/client/classic-debug/js/otp/templates.js similarity index 100% rename from src/client/js/otp/templates.js rename to src/client/classic-debug/js/otp/templates.js diff --git a/src/client/js/otp/util/DataStorage.js b/src/client/classic-debug/js/otp/util/DataStorage.js similarity index 100% rename from src/client/js/otp/util/DataStorage.js rename to src/client/classic-debug/js/otp/util/DataStorage.js diff --git a/src/client/js/otp/util/Geo.js b/src/client/classic-debug/js/otp/util/Geo.js similarity index 100% rename from src/client/js/otp/util/Geo.js rename to src/client/classic-debug/js/otp/util/Geo.js diff --git a/src/client/js/otp/util/Imperial.js b/src/client/classic-debug/js/otp/util/Imperial.js similarity index 100% rename from src/client/js/otp/util/Imperial.js rename to src/client/classic-debug/js/otp/util/Imperial.js diff --git a/src/client/js/otp/util/Itin.js b/src/client/classic-debug/js/otp/util/Itin.js similarity index 100% rename from src/client/js/otp/util/Itin.js rename to src/client/classic-debug/js/otp/util/Itin.js diff --git a/src/client/js/otp/util/Logger.js b/src/client/classic-debug/js/otp/util/Logger.js similarity index 100% rename from src/client/js/otp/util/Logger.js rename to src/client/classic-debug/js/otp/util/Logger.js diff --git a/src/client/js/otp/util/Text.js b/src/client/classic-debug/js/otp/util/Text.js similarity index 100% rename from src/client/js/otp/util/Text.js rename to src/client/classic-debug/js/otp/util/Text.js diff --git a/src/client/js/otp/util/Time.js b/src/client/classic-debug/js/otp/util/Time.js similarity index 100% rename from src/client/js/otp/util/Time.js rename to src/client/classic-debug/js/otp/util/Time.js diff --git a/src/client/js/otp/widgets/Dialogs.js b/src/client/classic-debug/js/otp/widgets/Dialogs.js similarity index 100% rename from src/client/js/otp/widgets/Dialogs.js rename to src/client/classic-debug/js/otp/widgets/Dialogs.js diff --git a/src/client/js/otp/widgets/InfoWidget.js b/src/client/classic-debug/js/otp/widgets/InfoWidget.js similarity index 100% rename from src/client/js/otp/widgets/InfoWidget.js rename to src/client/classic-debug/js/otp/widgets/InfoWidget.js diff --git a/src/client/js/otp/widgets/Widget.js b/src/client/classic-debug/js/otp/widgets/Widget.js similarity index 100% rename from src/client/js/otp/widgets/Widget.js rename to src/client/classic-debug/js/otp/widgets/Widget.js diff --git a/src/client/js/otp/widgets/WidgetManager.js b/src/client/classic-debug/js/otp/widgets/WidgetManager.js similarity index 100% rename from src/client/js/otp/widgets/WidgetManager.js rename to src/client/classic-debug/js/otp/widgets/WidgetManager.js diff --git a/src/client/js/otp/widgets/transit/RouteBasedWidget.js b/src/client/classic-debug/js/otp/widgets/transit/RouteBasedWidget.js similarity index 100% rename from src/client/js/otp/widgets/transit/RouteBasedWidget.js rename to src/client/classic-debug/js/otp/widgets/transit/RouteBasedWidget.js diff --git a/src/client/js/otp/widgets/transit/StopFinderWidget.js b/src/client/classic-debug/js/otp/widgets/transit/StopFinderWidget.js similarity index 100% rename from src/client/js/otp/widgets/transit/StopFinderWidget.js rename to src/client/classic-debug/js/otp/widgets/transit/StopFinderWidget.js diff --git a/src/client/js/otp/widgets/transit/StopViewerWidget.js b/src/client/classic-debug/js/otp/widgets/transit/StopViewerWidget.js similarity index 100% rename from src/client/js/otp/widgets/transit/StopViewerWidget.js rename to src/client/classic-debug/js/otp/widgets/transit/StopViewerWidget.js diff --git a/src/client/js/otp/widgets/transit/TripViewerWidget.js b/src/client/classic-debug/js/otp/widgets/transit/TripViewerWidget.js similarity index 100% rename from src/client/js/otp/widgets/transit/TripViewerWidget.js rename to src/client/classic-debug/js/otp/widgets/transit/TripViewerWidget.js diff --git a/src/client/js/otp/widgets/transit/widgets-transit-style.css b/src/client/classic-debug/js/otp/widgets/transit/widgets-transit-style.css similarity index 100% rename from src/client/js/otp/widgets/transit/widgets-transit-style.css rename to src/client/classic-debug/js/otp/widgets/transit/widgets-transit-style.css diff --git a/src/client/js/otp/widgets/transit/widgets-transit-templates.html b/src/client/classic-debug/js/otp/widgets/transit/widgets-transit-templates.html similarity index 100% rename from src/client/js/otp/widgets/transit/widgets-transit-templates.html rename to src/client/classic-debug/js/otp/widgets/transit/widgets-transit-templates.html diff --git a/src/client/js/otp/widgets/tripoptions/BikeTrianglePanel.js b/src/client/classic-debug/js/otp/widgets/tripoptions/BikeTrianglePanel.js similarity index 100% rename from src/client/js/otp/widgets/tripoptions/BikeTrianglePanel.js rename to src/client/classic-debug/js/otp/widgets/tripoptions/BikeTrianglePanel.js diff --git a/src/client/js/otp/widgets/tripoptions/RoutesSelectorWidget.js b/src/client/classic-debug/js/otp/widgets/tripoptions/RoutesSelectorWidget.js similarity index 100% rename from src/client/js/otp/widgets/tripoptions/RoutesSelectorWidget.js rename to src/client/classic-debug/js/otp/widgets/tripoptions/RoutesSelectorWidget.js diff --git a/src/client/js/otp/widgets/tripoptions/TripOptionsWidget.js b/src/client/classic-debug/js/otp/widgets/tripoptions/TripOptionsWidget.js similarity index 100% rename from src/client/js/otp/widgets/tripoptions/TripOptionsWidget.js rename to src/client/classic-debug/js/otp/widgets/tripoptions/TripOptionsWidget.js diff --git a/src/client/js/otp/widgets/tripoptions/tripoptions-style.css b/src/client/classic-debug/js/otp/widgets/tripoptions/tripoptions-style.css similarity index 100% rename from src/client/js/otp/widgets/tripoptions/tripoptions-style.css rename to src/client/classic-debug/js/otp/widgets/tripoptions/tripoptions-style.css diff --git a/src/client/js/otp/widgets/tripoptions/tripoptions-templates.html b/src/client/classic-debug/js/otp/widgets/tripoptions/tripoptions-templates.html similarity index 100% rename from src/client/js/otp/widgets/tripoptions/tripoptions-templates.html rename to src/client/classic-debug/js/otp/widgets/tripoptions/tripoptions-templates.html diff --git a/src/client/js/otp/widgets/widget-style.css b/src/client/classic-debug/js/otp/widgets/widget-style.css similarity index 100% rename from src/client/js/otp/widgets/widget-style.css rename to src/client/classic-debug/js/otp/widgets/widget-style.css diff --git a/src/client/js/otp/widgets/widget-templates.html b/src/client/classic-debug/js/otp/widgets/widget-templates.html similarity index 100% rename from src/client/js/otp/widgets/widget-templates.html rename to src/client/classic-debug/js/otp/widgets/widget-templates.html diff --git a/src/client/style.css b/src/client/classic-debug/style.css similarity index 100% rename from src/client/style.css rename to src/client/classic-debug/style.css diff --git a/src/client/debug-client-preview/index.html b/src/client/debug-client-preview/index.html deleted file mode 100644 index 77fc8ebbe8d..00000000000 --- a/src/client/debug-client-preview/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - OTP Debug Client - - - - -
- - diff --git a/src/client/index.html b/src/client/index.html index 5f35b46a432..77fc8ebbe8d 100644 --- a/src/client/index.html +++ b/src/client/index.html @@ -1,220 +1,14 @@ - - - - - - - - -OpenTripPlanner - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- - + + + + + + + OTP Debug Client + + + + +
+ From f86c2b8fd3bc66a8b35b5eb77c11b37460eb7541 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 21 Jun 2024 10:26:19 +0200 Subject: [PATCH 045/132] Swap old and new debug client --- .../apis/vectortiles/DebugStyleSpec.java | 7 +++-- .../apis/vectortiles/DebugStyleSpecTest.java | 27 ++++++++++++++++--- .../test/support/JsonAssertions.java | 9 +++---- .../test/support/ResourceLoader.java | 5 ++-- .../apis/vectortiles/style.json | 20 +++++++++++--- 5 files changed, 52 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index da612c5ea20..7741a7a58cb 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -147,9 +147,12 @@ static StyleSpec build( .ofId("regular-stop") .typeCircle() .vectorSourceLayer(regularStops) - .circleStroke(BLACK, 2) + .circleStroke( + BLACK, + new ZoomDependentNumber(1, List.of(new ZoomStop(11, 0.5f), new ZoomStop(MAX_ZOOM, 5))) + ) .circleRadius( - new ZoomDependentNumber(1, List.of(new ZoomStop(11, 1), new ZoomStop(MAX_ZOOM, 10))) + new ZoomDependentNumber(1, List.of(new ZoomStop(11, 0.5f), new ZoomStop(MAX_ZOOM, 10))) ) .circleColor("#fcf9fa") .minZoom(10) diff --git a/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java b/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java index d971cefe2e2..6a60490a07f 100644 --- a/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java +++ b/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java @@ -2,10 +2,14 @@ import static org.opentripplanner.test.support.JsonAssertions.assertEqualJson; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import org.junit.jupiter.api.Test; import org.opentripplanner.apis.vectortiles.model.TileSource.VectorSource; import org.opentripplanner.apis.vectortiles.model.VectorSourceLayer; import org.opentripplanner.framework.json.ObjectMappers; +import org.opentripplanner.standalone.config.framework.json.JsonSupport; import org.opentripplanner.test.support.ResourceLoader; class DebugStyleSpecTest { @@ -13,7 +17,7 @@ class DebugStyleSpecTest { private final ResourceLoader RESOURCES = ResourceLoader.of(this); @Test - void spec() { + void spec() throws IOException { var vectorSource = new VectorSource("vectorSource", "https://example.com"); var regularStops = new VectorSourceLayer(vectorSource, "stops"); var areaStops = new VectorSourceLayer(vectorSource, "stops"); @@ -23,7 +27,24 @@ void spec() { var spec = DebugStyleSpec.build(regularStops, areaStops, groupStops, edges, vertices); var json = ObjectMappers.ignoringExtraFields().valueToTree(spec); - var expectation = RESOURCES.fileToString("style.json"); - assertEqualJson(expectation, json); + try { + var expectation = RESOURCES.fileToString("style.json"); + assertEqualJson(expectation, json); + } catch (IllegalArgumentException e) { + Files.writeString( + Path.of( + "src", + "test", + "resources", + "org", + "opentripplanner", + "apis", + "vectortiles", + "style.json" + ), + JsonSupport.prettyPrint(json) + ); + throw new AssertionError("style.json not found. Writing a new version to file system."); + } } } diff --git a/src/test/java/org/opentripplanner/test/support/JsonAssertions.java b/src/test/java/org/opentripplanner/test/support/JsonAssertions.java index 1fe87268eee..e836ace81fd 100644 --- a/src/test/java/org/opentripplanner/test/support/JsonAssertions.java +++ b/src/test/java/org/opentripplanner/test/support/JsonAssertions.java @@ -32,11 +32,10 @@ public static void assertEqualJson(String expected, JsonNode actual) { assertEquals( exp, actualNode, - () -> - "Expected '%s' but actual was '%s'".formatted( - JsonSupport.prettyPrint(exp), - JsonSupport.prettyPrint(actualNode) - ) + "Expected '%s' but actual was '%s'".formatted( + JsonSupport.prettyPrint(exp), + JsonSupport.prettyPrint(actualNode) + ) ); } catch (JsonProcessingException e) { throw new RuntimeException(e); diff --git a/src/test/java/org/opentripplanner/test/support/ResourceLoader.java b/src/test/java/org/opentripplanner/test/support/ResourceLoader.java index 5eb51cac55a..5670a49fab7 100644 --- a/src/test/java/org/opentripplanner/test/support/ResourceLoader.java +++ b/src/test/java/org/opentripplanner/test/support/ResourceLoader.java @@ -1,6 +1,5 @@ package org.opentripplanner.test.support; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; @@ -72,7 +71,9 @@ public String fileToString(String p) { public URL url(String name) { var resource = clazz.getResource(name); var msg = "Resource '%s' not found in package '%s'".formatted(name, clazz.getPackageName()); - assertNotNull(resource, msg); + if (resource == null) { + throw new IllegalArgumentException(msg); + } return resource; } diff --git a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json index d0aed828f6f..ccb0dfb8869 100644 --- a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json +++ b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json @@ -226,13 +226,25 @@ "maxzoom" : 23, "paint" : { "circle-stroke-color" : "#140d0e", - "circle-stroke-width" : 2, + "circle-stroke-width" : { + "base" : 1.0, + "stops" : [ + [ + 11, + 0.5 + ], + [ + 23, + 2.0 + ] + ] + }, "circle-radius" : { "base" : 1.0, "stops" : [ [ 11, - 1.0 + 0.5 ], [ 23, @@ -244,6 +256,6 @@ } } ], - "glyphs" : "https://cdn.jsdelivr.net/gh/klokantech/klokantech-gl-fonts@master/{fontstack}/{range}.pbf", - "version" : 8 + "version" : 8, + "glyphs" : "https://cdn.jsdelivr.net/gh/klokantech/klokantech-gl-fonts@master/{fontstack}/{range}.pbf" } \ No newline at end of file From e754f3c39904a73d29856c0c6349384bc9709962 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 21 Jun 2024 11:35:17 +0200 Subject: [PATCH 046/132] Update assertion --- .../resources/org/opentripplanner/apis/vectortiles/style.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json index ccb0dfb8869..6f981b7f67d 100644 --- a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json +++ b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json @@ -235,7 +235,7 @@ ], [ 23, - 2.0 + 5.0 ] ] }, From 82b0a694e2f5e64e7cb8d8dedd9d04c86b2ea208 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 21 Jun 2024 11:41:57 +0200 Subject: [PATCH 047/132] Update documentation --- client-next/README.md | 2 +- docs/Frontends.md | 26 ++++++++++++++++++++------ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/client-next/README.md b/client-next/README.md index a6c8e76cfad..d3a7d87629b 100644 --- a/client-next/README.md +++ b/client-next/README.md @@ -34,7 +34,7 @@ Then npm run dev -The debug client will now be available at `http://localhost:5173/debug-client-preview`. It has +The debug client will now be available at `http://localhost:5173/`. It has hot reloading enabled, so you don't have to restart it when you save files. If you change graphql code during development you can issue the following command: diff --git a/docs/Frontends.md b/docs/Frontends.md index e7946102ea1..7eb85050024 100644 --- a/docs/Frontends.md +++ b/docs/Frontends.md @@ -16,17 +16,30 @@ On the other hand, **production frontends** are intended to be a component of la ## Debug Frontends -The main OpenTripPlanner repository currently contains two debug web frontends: the original one in [`/src/client`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/src/client) and a newer one currently under development at [`/client-next`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/client-next). +The main OpenTripPlanner repository currently contains two debug web frontends: -The **original debug client** is a jQuery and Backbone based UI whose history can be traced back over a decade to the first days of the OTP project. It connects to the OTP Java backend via a REST API using the GTFS vocabulary. Historically this was the default OTP interface, and it continues to be available by default on any running OTP instance at the root URL. +- new one currently under development at [`/client-next`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/client-next). +- the original one in [`/src/client/classic-debug/`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/src/client/classic-debug) -The **new debug client** is a React/TypeScript Single Page App (SPA) that can be served locally or accessed over a content delivery network (CDN). Unlike the original debug client, it connects to the OTP Java backend via the GraphQL API using the Transmodel vocabulary. It is currently under development, but expected to replace the original debug client once it reaches effective feature parity. +The **new debug client** is a React/TypeScript Single Page App (SPA) that can be served locally or accessed over a content delivery network (CDN). +Unlike the original debug client, it connects to the OTP Java backend via the GraphQL API using the Transmodel vocabulary. -There is a third piece of software that might qualify as an OTP client: a Java Swing application making use of the Processing visualization library, located in the [GraphVisualizer class](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java). While it would not be accurate to call this a "native" desktop application (as it's cross-platform Java) it is not a web app. This very developer-centric UI is also over a decade old and has been very sparsely maintained, but continues to exist because it can visualize the progress of searches through the street network, providing some insight into the internals of the routing algorithms that are not otherwise visible. +The **original debug client** is a jQuery and Backbone based UI whose history can be traced back over a decade to the first days of the OTP project. +It connects to the OTP Java backend via a REST API using the GTFS vocabulary. Historically this was the default OTP interface, and for now it continues to be +available on any running OTP instance at the root URL. + +There is a third piece of software that might qualify as an OTP client: a Java Swing application making use of the Processing visualization library, +located in the [GraphVisualizer class](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java). +While it would not be accurate to call this a "native" desktop application (as it's cross-platform Java) it is not a web app. This very developer-centric +UI is also over a decade old and has been very sparsely maintained, but continues to exist because it can visualize the progress of searches through the +street network, providing some insight into the internals of the routing algorithms that are not otherwise visible. ## Working with Debug Frontends -While the "classic" (i.e. old) debug frontend is enabled by default as of this writing, it may not be in the future, or you may wish to disable it if you've chosen to use a different frontend. Also, to get full use of the existing debug frontends you may want to enable OTP's built-in simple testing geocoder which performs fuzzy searches for transit stops by name, supplying their coordinates to the routing engine. Without it, you will be limited to origins and destinations selected on a map or specified in terms of latitude and longitude coordinates. The debug frontend and the geocoder can be toggled in `otp-config.json`: +While the two debug frontends are enabled by default as of this writing, it may not be in the future, or you may wish to disable it if you've chosen to use a different frontend. +Also, to get full use of the existing debug frontends you may want to enable OTP's built-in simple testing geocoder which performs fuzzy searches for +transit stops by name, supplying their coordinates to the routing engine. Without it, you will be limited to origins and destinations selected on a map or +specified in terms of latitude and longitude coordinates. The debug frontend and the geocoder can be toggled in `otp-config.json`: ```json5 // otp-config.json @@ -73,4 +86,5 @@ The history of the more widely used OpenTripPlanner interfaces is roughly as fol - In the late 2010s people started developing a new React-based UI as a more modular, modern interface for public consumption. This project is located at https://github.com/opentripplanner/otp-react-redux under the OpenTripPlanner Github organization, and is developed and maintainted by Arcadis IBI. - Some React components were factored out of that UI project, allowing them to be integrated in different ways with different OTP deployments. This component library is in a separate repository at https://github.com/opentripplanner/otp-ui. Likewise, it is developed and maintained by Arcadis IBI. - Meanwhile, starting in 2014, HSL (the Helsinki Regional Transport Authority) and Finntrafic (the Finnish national transportation authority) began the Digitransit project, a set of open-source microservices to replace their existing national and regional scale trip planners. This includes a Javascript web UI module. In addition to Finland, the Digitransit system has been deployed in various places around the world including Germany. -- As of 2024, a completely new debug UI (again, intended for developer use rather than public consumption) is being developed in the main OpenTripPlanner repository under `src/debug-client-preview`. This new UI follows a more conventional contemporary Javascript development style, and uses the most recent OpenTripPlanner GraphQL API which is expected to fully replace the older REST API. +- As of 2024, a completely new debug UI (again, intended for developer use rather than public consumption) is being developed in the main OpenTripPlanner repository under `src/client-next`. This new UI follows a more conventional contemporary Javascript development style, and uses the most recent OpenTripPlanner GraphQL API which is expected to fully replace the older REST API. +- In June 2024, the default was swapped and the new GraphQL-based one is now the default with the old one being available at `http://localhost:8080/classic-debug/` \ No newline at end of file From a5b829f0c7900038252997a168d1da3c4166b130 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 21 Jun 2024 12:05:47 +0200 Subject: [PATCH 048/132] Rename folder from 'client-next' to 'client' --- .github/workflows/debug-client.yml | 10 +++++----- {client-next => client}/.env | 0 {client-next => client}/.env.development | 0 {client-next => client}/.eslintrc.cjs | 0 {client-next => client}/.gitignore | 0 {client-next => client}/.npmrc | 0 {client-next => client}/.prettierignore | 0 {client-next => client}/.prettierrc.cjs | 0 {client-next => client}/README-vite.md | 0 {client-next => client}/README.md | 4 ++-- {client-next => client}/codegen.ts | 0 {client-next => client}/index.html | 0 {client-next => client}/package-lock.json | 4 ++-- {client-next => client}/package.json | 2 +- .../components/ItineraryList/ItineraryDetails.tsx | 0 .../ItineraryList/ItineraryHeaderContent.tsx | 0 .../ItineraryList/ItineraryHeaderLegContent.tsx | 0 .../ItineraryList/ItineraryLegDetails.tsx | 0 .../components/ItineraryList/ItineraryList.test.tsx | 0 .../ItineraryList/ItineraryListContainer.tsx | 0 .../ItineraryList/ItineraryPaginationControl.tsx | 0 .../src/components/ItineraryList/LegTime.tsx | 0 .../components/ItineraryList/useContainerWidth.ts | 0 .../ItineraryList/useEarliestAndLatestTimes.ts | 0 .../useHeaderContentStyleCalculations.ts | 0 .../useHeaderLegContentStyleCalculations.ts | 0 .../src/components/MapView/ContextMenuPopup.tsx | 0 .../components/MapView/GeometryPropertyPopup.tsx | 0 .../src/components/MapView/LayerControl.tsx | 0 .../src/components/MapView/LegLines.tsx | 0 .../src/components/MapView/MapView.tsx | 0 .../src/components/MapView/NavigationMarkers.tsx | 0 .../src/components/MapView/useMapDoubleClick.ts | 0 .../src/components/SearchBar/AccessSelect.tsx | 0 .../src/components/SearchBar/DateInputField.tsx | 0 .../components/SearchBar/DepartureArrivalSelect.tsx | 0 .../src/components/SearchBar/DirectModeSelect.tsx | 0 .../src/components/SearchBar/EgressSelect.tsx | 0 .../SearchBar/ItineraryFilterDebugSelect.tsx | 0 .../src/components/SearchBar/LocationInputField.tsx | 0 .../components/SearchBar/MultiSelectDropdown.tsx | 0 .../components/SearchBar/NumTripPatternsInput.tsx | 0 .../src/components/SearchBar/SearchBar.test.tsx | 0 .../src/components/SearchBar/SearchBar.tsx | 0 .../src/components/SearchBar/SearchWindowInput.tsx | 0 .../src/components/SearchBar/ServerInfoTooltip.tsx | 0 .../src/components/SearchBar/TimeInputField.tsx | 0 .../src/components/SearchBar/TransitModeSelect.tsx | 0 .../src/components/SearchBar/constants.ts | 0 {client-next => client}/src/hooks/useServerInfo.ts | 0 {client-next => client}/src/hooks/useTripQuery.ts | 0 .../src/hooks/useTripQueryVariables.ts | 0 {client-next => client}/src/main.tsx | 0 {client-next => client}/src/screens/App.tsx | 0 .../src/static/img/marker-flag-end-shadowed.png | Bin .../src/static/img/marker-flag-start-shadowed.png | Bin {client-next => client}/src/static/img/mode/air.png | Bin .../src/static/img/mode/bicycle.png | Bin {client-next => client}/src/static/img/mode/bus.png | Bin .../src/static/img/mode/cableway.png | Bin {client-next => client}/src/static/img/mode/car.png | Bin .../src/static/img/mode/coach.png | Bin .../src/static/img/mode/foot.png | Bin .../src/static/img/mode/funicular.png | Bin .../src/static/img/mode/metro.png | Bin .../src/static/img/mode/monorail.png | Bin .../src/static/img/mode/rail.png | Bin .../src/static/img/mode/taxi.png | Bin .../src/static/img/mode/tram.png | Bin .../src/static/img/mode/trolleybus.png | Bin .../src/static/img/mode/water.png | Bin {client-next => client}/src/static/img/otp-logo.svg | 0 {client-next => client}/src/style.css | 0 {client-next => client}/src/util/formatDistance.ts | 0 {client-next => client}/src/util/formatDuration.ts | 0 {client-next => client}/src/util/formatTime.ts | 0 .../src/util/generateTextColor.ts | 0 {client-next => client}/src/util/getApiUrl.ts | 0 {client-next => client}/src/util/getColorForMode.ts | 0 {client-next => client}/src/util/isTransitMode.ts | 0 {client-next => client}/src/vite-env.d.ts | 0 {client-next => client}/tsconfig.json | 0 {client-next => client}/tsconfig.node.json | 0 {client-next => client}/vite.config.ts | 0 docs/Frontends.md | 4 ++-- renovate.json5 | 4 ++-- 86 files changed, 14 insertions(+), 14 deletions(-) rename {client-next => client}/.env (100%) rename {client-next => client}/.env.development (100%) rename {client-next => client}/.eslintrc.cjs (100%) rename {client-next => client}/.gitignore (100%) rename {client-next => client}/.npmrc (100%) rename {client-next => client}/.prettierignore (100%) rename {client-next => client}/.prettierrc.cjs (100%) rename {client-next => client}/README-vite.md (100%) rename {client-next => client}/README.md (94%) rename {client-next => client}/codegen.ts (100%) rename {client-next => client}/index.html (100%) rename {client-next => client}/package-lock.json (99%) rename {client-next => client}/package.json (98%) rename {client-next => client}/src/components/ItineraryList/ItineraryDetails.tsx (100%) rename {client-next => client}/src/components/ItineraryList/ItineraryHeaderContent.tsx (100%) rename {client-next => client}/src/components/ItineraryList/ItineraryHeaderLegContent.tsx (100%) rename {client-next => client}/src/components/ItineraryList/ItineraryLegDetails.tsx (100%) rename {client-next => client}/src/components/ItineraryList/ItineraryList.test.tsx (100%) rename {client-next => client}/src/components/ItineraryList/ItineraryListContainer.tsx (100%) rename {client-next => client}/src/components/ItineraryList/ItineraryPaginationControl.tsx (100%) rename {client-next => client}/src/components/ItineraryList/LegTime.tsx (100%) rename {client-next => client}/src/components/ItineraryList/useContainerWidth.ts (100%) rename {client-next => client}/src/components/ItineraryList/useEarliestAndLatestTimes.ts (100%) rename {client-next => client}/src/components/ItineraryList/useHeaderContentStyleCalculations.ts (100%) rename {client-next => client}/src/components/ItineraryList/useHeaderLegContentStyleCalculations.ts (100%) rename {client-next => client}/src/components/MapView/ContextMenuPopup.tsx (100%) rename {client-next => client}/src/components/MapView/GeometryPropertyPopup.tsx (100%) rename {client-next => client}/src/components/MapView/LayerControl.tsx (100%) rename {client-next => client}/src/components/MapView/LegLines.tsx (100%) rename {client-next => client}/src/components/MapView/MapView.tsx (100%) rename {client-next => client}/src/components/MapView/NavigationMarkers.tsx (100%) rename {client-next => client}/src/components/MapView/useMapDoubleClick.ts (100%) rename {client-next => client}/src/components/SearchBar/AccessSelect.tsx (100%) rename {client-next => client}/src/components/SearchBar/DateInputField.tsx (100%) rename {client-next => client}/src/components/SearchBar/DepartureArrivalSelect.tsx (100%) rename {client-next => client}/src/components/SearchBar/DirectModeSelect.tsx (100%) rename {client-next => client}/src/components/SearchBar/EgressSelect.tsx (100%) rename {client-next => client}/src/components/SearchBar/ItineraryFilterDebugSelect.tsx (100%) rename {client-next => client}/src/components/SearchBar/LocationInputField.tsx (100%) rename {client-next => client}/src/components/SearchBar/MultiSelectDropdown.tsx (100%) rename {client-next => client}/src/components/SearchBar/NumTripPatternsInput.tsx (100%) rename {client-next => client}/src/components/SearchBar/SearchBar.test.tsx (100%) rename {client-next => client}/src/components/SearchBar/SearchBar.tsx (100%) rename {client-next => client}/src/components/SearchBar/SearchWindowInput.tsx (100%) rename {client-next => client}/src/components/SearchBar/ServerInfoTooltip.tsx (100%) rename {client-next => client}/src/components/SearchBar/TimeInputField.tsx (100%) rename {client-next => client}/src/components/SearchBar/TransitModeSelect.tsx (100%) rename {client-next => client}/src/components/SearchBar/constants.ts (100%) rename {client-next => client}/src/hooks/useServerInfo.ts (100%) rename {client-next => client}/src/hooks/useTripQuery.ts (100%) rename {client-next => client}/src/hooks/useTripQueryVariables.ts (100%) rename {client-next => client}/src/main.tsx (100%) rename {client-next => client}/src/screens/App.tsx (100%) rename {client-next => client}/src/static/img/marker-flag-end-shadowed.png (100%) rename {client-next => client}/src/static/img/marker-flag-start-shadowed.png (100%) rename {client-next => client}/src/static/img/mode/air.png (100%) rename {client-next => client}/src/static/img/mode/bicycle.png (100%) rename {client-next => client}/src/static/img/mode/bus.png (100%) rename {client-next => client}/src/static/img/mode/cableway.png (100%) rename {client-next => client}/src/static/img/mode/car.png (100%) rename {client-next => client}/src/static/img/mode/coach.png (100%) rename {client-next => client}/src/static/img/mode/foot.png (100%) rename {client-next => client}/src/static/img/mode/funicular.png (100%) rename {client-next => client}/src/static/img/mode/metro.png (100%) rename {client-next => client}/src/static/img/mode/monorail.png (100%) rename {client-next => client}/src/static/img/mode/rail.png (100%) rename {client-next => client}/src/static/img/mode/taxi.png (100%) rename {client-next => client}/src/static/img/mode/tram.png (100%) rename {client-next => client}/src/static/img/mode/trolleybus.png (100%) rename {client-next => client}/src/static/img/mode/water.png (100%) rename {client-next => client}/src/static/img/otp-logo.svg (100%) rename {client-next => client}/src/style.css (100%) rename {client-next => client}/src/util/formatDistance.ts (100%) rename {client-next => client}/src/util/formatDuration.ts (100%) rename {client-next => client}/src/util/formatTime.ts (100%) rename {client-next => client}/src/util/generateTextColor.ts (100%) rename {client-next => client}/src/util/getApiUrl.ts (100%) rename {client-next => client}/src/util/getColorForMode.ts (100%) rename {client-next => client}/src/util/isTransitMode.ts (100%) rename {client-next => client}/src/vite-env.d.ts (100%) rename {client-next => client}/tsconfig.json (100%) rename {client-next => client}/tsconfig.node.json (100%) rename {client-next => client}/vite.config.ts (100%) diff --git a/.github/workflows/debug-client.yml b/.github/workflows/debug-client.yml index 15d495e6454..6857b56b161 100644 --- a/.github/workflows/debug-client.yml +++ b/.github/workflows/debug-client.yml @@ -3,10 +3,10 @@ name: Debug client on: push: paths: - - 'client-next/**' + - 'client/**' pull_request: paths: - - 'client-next/**' + - 'client/**' # to avoid conflicts, make sure that only one workflow pushes to Github at the same time concurrency: @@ -38,7 +38,7 @@ jobs: run: echo "VERSION=`date +%Y/%m/%Y-%m-%dT%H:%M`" >> $GITHUB_ENV - name: Build debug client - working-directory: client-next + working-directory: client run: | npm install npm run build -- --base https://cdn.jsdelivr.net/gh/opentripplanner/debug-client-assets@main/${VERSION}/ @@ -65,7 +65,7 @@ jobs: # Copy the compiled output to a versioned folder mkdir -p $VERSION - rsync -r client-next/output/* ./$VERSION/ + rsync -r client/output/* ./$VERSION/ git add $VERSION git commit -am "Add version ${VERSION} of debug client" @@ -78,7 +78,7 @@ jobs: CLIENT_HTML_OUTPUT=src/client/index.html mkdir -p src/client/ - cp client-next/output/index.html ${CLIENT_HTML_OUTPUT} + cp client/output/index.html ${CLIENT_HTML_OUTPUT} # just to debug cat ${CLIENT_HTML_OUTPUT} diff --git a/client-next/.env b/client/.env similarity index 100% rename from client-next/.env rename to client/.env diff --git a/client-next/.env.development b/client/.env.development similarity index 100% rename from client-next/.env.development rename to client/.env.development diff --git a/client-next/.eslintrc.cjs b/client/.eslintrc.cjs similarity index 100% rename from client-next/.eslintrc.cjs rename to client/.eslintrc.cjs diff --git a/client-next/.gitignore b/client/.gitignore similarity index 100% rename from client-next/.gitignore rename to client/.gitignore diff --git a/client-next/.npmrc b/client/.npmrc similarity index 100% rename from client-next/.npmrc rename to client/.npmrc diff --git a/client-next/.prettierignore b/client/.prettierignore similarity index 100% rename from client-next/.prettierignore rename to client/.prettierignore diff --git a/client-next/.prettierrc.cjs b/client/.prettierrc.cjs similarity index 100% rename from client-next/.prettierrc.cjs rename to client/.prettierrc.cjs diff --git a/client-next/README-vite.md b/client/README-vite.md similarity index 100% rename from client-next/README-vite.md rename to client/README-vite.md diff --git a/client-next/README.md b/client/README.md similarity index 94% rename from client-next/README.md rename to client/README.md index d3a7d87629b..54971062971 100644 --- a/client-next/README.md +++ b/client/README.md @@ -26,7 +26,7 @@ The dev and production builds require graphql schema to be present at ## Getting started (development) -Change directory to `client-next` (current) if you haven't already. +Change directory to `client` (current) if you haven't already. npm install @@ -45,7 +45,7 @@ You don't have to restart the development server for the changes to take effect. ## Build for production -Change directory to `client-next` (current) if you haven't already. +Change directory to `client` (current) if you haven't already. npm install diff --git a/client-next/codegen.ts b/client/codegen.ts similarity index 100% rename from client-next/codegen.ts rename to client/codegen.ts diff --git a/client-next/index.html b/client/index.html similarity index 100% rename from client-next/index.html rename to client/index.html diff --git a/client-next/package-lock.json b/client/package-lock.json similarity index 99% rename from client-next/package-lock.json rename to client/package-lock.json index 38a6cbfd4dc..d57d763b59c 100644 --- a/client-next/package-lock.json +++ b/client/package-lock.json @@ -1,11 +1,11 @@ { - "name": "otp-debug-client-next", + "name": "otp-debug-client", "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "otp-debug-client-next", + "name": "otp-debug-client", "version": "0.0.0", "dependencies": { "@googlemaps/polyline-codec": "1.0.28", diff --git a/client-next/package.json b/client/package.json similarity index 98% rename from client-next/package.json rename to client/package.json index b9acd846af2..84c0e314dad 100644 --- a/client-next/package.json +++ b/client/package.json @@ -1,5 +1,5 @@ { - "name": "otp-debug-client-next", + "name": "otp-debug-client", "private": true, "version": "0.0.0", "type": "module", diff --git a/client-next/src/components/ItineraryList/ItineraryDetails.tsx b/client/src/components/ItineraryList/ItineraryDetails.tsx similarity index 100% rename from client-next/src/components/ItineraryList/ItineraryDetails.tsx rename to client/src/components/ItineraryList/ItineraryDetails.tsx diff --git a/client-next/src/components/ItineraryList/ItineraryHeaderContent.tsx b/client/src/components/ItineraryList/ItineraryHeaderContent.tsx similarity index 100% rename from client-next/src/components/ItineraryList/ItineraryHeaderContent.tsx rename to client/src/components/ItineraryList/ItineraryHeaderContent.tsx diff --git a/client-next/src/components/ItineraryList/ItineraryHeaderLegContent.tsx b/client/src/components/ItineraryList/ItineraryHeaderLegContent.tsx similarity index 100% rename from client-next/src/components/ItineraryList/ItineraryHeaderLegContent.tsx rename to client/src/components/ItineraryList/ItineraryHeaderLegContent.tsx diff --git a/client-next/src/components/ItineraryList/ItineraryLegDetails.tsx b/client/src/components/ItineraryList/ItineraryLegDetails.tsx similarity index 100% rename from client-next/src/components/ItineraryList/ItineraryLegDetails.tsx rename to client/src/components/ItineraryList/ItineraryLegDetails.tsx diff --git a/client-next/src/components/ItineraryList/ItineraryList.test.tsx b/client/src/components/ItineraryList/ItineraryList.test.tsx similarity index 100% rename from client-next/src/components/ItineraryList/ItineraryList.test.tsx rename to client/src/components/ItineraryList/ItineraryList.test.tsx diff --git a/client-next/src/components/ItineraryList/ItineraryListContainer.tsx b/client/src/components/ItineraryList/ItineraryListContainer.tsx similarity index 100% rename from client-next/src/components/ItineraryList/ItineraryListContainer.tsx rename to client/src/components/ItineraryList/ItineraryListContainer.tsx diff --git a/client-next/src/components/ItineraryList/ItineraryPaginationControl.tsx b/client/src/components/ItineraryList/ItineraryPaginationControl.tsx similarity index 100% rename from client-next/src/components/ItineraryList/ItineraryPaginationControl.tsx rename to client/src/components/ItineraryList/ItineraryPaginationControl.tsx diff --git a/client-next/src/components/ItineraryList/LegTime.tsx b/client/src/components/ItineraryList/LegTime.tsx similarity index 100% rename from client-next/src/components/ItineraryList/LegTime.tsx rename to client/src/components/ItineraryList/LegTime.tsx diff --git a/client-next/src/components/ItineraryList/useContainerWidth.ts b/client/src/components/ItineraryList/useContainerWidth.ts similarity index 100% rename from client-next/src/components/ItineraryList/useContainerWidth.ts rename to client/src/components/ItineraryList/useContainerWidth.ts diff --git a/client-next/src/components/ItineraryList/useEarliestAndLatestTimes.ts b/client/src/components/ItineraryList/useEarliestAndLatestTimes.ts similarity index 100% rename from client-next/src/components/ItineraryList/useEarliestAndLatestTimes.ts rename to client/src/components/ItineraryList/useEarliestAndLatestTimes.ts diff --git a/client-next/src/components/ItineraryList/useHeaderContentStyleCalculations.ts b/client/src/components/ItineraryList/useHeaderContentStyleCalculations.ts similarity index 100% rename from client-next/src/components/ItineraryList/useHeaderContentStyleCalculations.ts rename to client/src/components/ItineraryList/useHeaderContentStyleCalculations.ts diff --git a/client-next/src/components/ItineraryList/useHeaderLegContentStyleCalculations.ts b/client/src/components/ItineraryList/useHeaderLegContentStyleCalculations.ts similarity index 100% rename from client-next/src/components/ItineraryList/useHeaderLegContentStyleCalculations.ts rename to client/src/components/ItineraryList/useHeaderLegContentStyleCalculations.ts diff --git a/client-next/src/components/MapView/ContextMenuPopup.tsx b/client/src/components/MapView/ContextMenuPopup.tsx similarity index 100% rename from client-next/src/components/MapView/ContextMenuPopup.tsx rename to client/src/components/MapView/ContextMenuPopup.tsx diff --git a/client-next/src/components/MapView/GeometryPropertyPopup.tsx b/client/src/components/MapView/GeometryPropertyPopup.tsx similarity index 100% rename from client-next/src/components/MapView/GeometryPropertyPopup.tsx rename to client/src/components/MapView/GeometryPropertyPopup.tsx diff --git a/client-next/src/components/MapView/LayerControl.tsx b/client/src/components/MapView/LayerControl.tsx similarity index 100% rename from client-next/src/components/MapView/LayerControl.tsx rename to client/src/components/MapView/LayerControl.tsx diff --git a/client-next/src/components/MapView/LegLines.tsx b/client/src/components/MapView/LegLines.tsx similarity index 100% rename from client-next/src/components/MapView/LegLines.tsx rename to client/src/components/MapView/LegLines.tsx diff --git a/client-next/src/components/MapView/MapView.tsx b/client/src/components/MapView/MapView.tsx similarity index 100% rename from client-next/src/components/MapView/MapView.tsx rename to client/src/components/MapView/MapView.tsx diff --git a/client-next/src/components/MapView/NavigationMarkers.tsx b/client/src/components/MapView/NavigationMarkers.tsx similarity index 100% rename from client-next/src/components/MapView/NavigationMarkers.tsx rename to client/src/components/MapView/NavigationMarkers.tsx diff --git a/client-next/src/components/MapView/useMapDoubleClick.ts b/client/src/components/MapView/useMapDoubleClick.ts similarity index 100% rename from client-next/src/components/MapView/useMapDoubleClick.ts rename to client/src/components/MapView/useMapDoubleClick.ts diff --git a/client-next/src/components/SearchBar/AccessSelect.tsx b/client/src/components/SearchBar/AccessSelect.tsx similarity index 100% rename from client-next/src/components/SearchBar/AccessSelect.tsx rename to client/src/components/SearchBar/AccessSelect.tsx diff --git a/client-next/src/components/SearchBar/DateInputField.tsx b/client/src/components/SearchBar/DateInputField.tsx similarity index 100% rename from client-next/src/components/SearchBar/DateInputField.tsx rename to client/src/components/SearchBar/DateInputField.tsx diff --git a/client-next/src/components/SearchBar/DepartureArrivalSelect.tsx b/client/src/components/SearchBar/DepartureArrivalSelect.tsx similarity index 100% rename from client-next/src/components/SearchBar/DepartureArrivalSelect.tsx rename to client/src/components/SearchBar/DepartureArrivalSelect.tsx diff --git a/client-next/src/components/SearchBar/DirectModeSelect.tsx b/client/src/components/SearchBar/DirectModeSelect.tsx similarity index 100% rename from client-next/src/components/SearchBar/DirectModeSelect.tsx rename to client/src/components/SearchBar/DirectModeSelect.tsx diff --git a/client-next/src/components/SearchBar/EgressSelect.tsx b/client/src/components/SearchBar/EgressSelect.tsx similarity index 100% rename from client-next/src/components/SearchBar/EgressSelect.tsx rename to client/src/components/SearchBar/EgressSelect.tsx diff --git a/client-next/src/components/SearchBar/ItineraryFilterDebugSelect.tsx b/client/src/components/SearchBar/ItineraryFilterDebugSelect.tsx similarity index 100% rename from client-next/src/components/SearchBar/ItineraryFilterDebugSelect.tsx rename to client/src/components/SearchBar/ItineraryFilterDebugSelect.tsx diff --git a/client-next/src/components/SearchBar/LocationInputField.tsx b/client/src/components/SearchBar/LocationInputField.tsx similarity index 100% rename from client-next/src/components/SearchBar/LocationInputField.tsx rename to client/src/components/SearchBar/LocationInputField.tsx diff --git a/client-next/src/components/SearchBar/MultiSelectDropdown.tsx b/client/src/components/SearchBar/MultiSelectDropdown.tsx similarity index 100% rename from client-next/src/components/SearchBar/MultiSelectDropdown.tsx rename to client/src/components/SearchBar/MultiSelectDropdown.tsx diff --git a/client-next/src/components/SearchBar/NumTripPatternsInput.tsx b/client/src/components/SearchBar/NumTripPatternsInput.tsx similarity index 100% rename from client-next/src/components/SearchBar/NumTripPatternsInput.tsx rename to client/src/components/SearchBar/NumTripPatternsInput.tsx diff --git a/client-next/src/components/SearchBar/SearchBar.test.tsx b/client/src/components/SearchBar/SearchBar.test.tsx similarity index 100% rename from client-next/src/components/SearchBar/SearchBar.test.tsx rename to client/src/components/SearchBar/SearchBar.test.tsx diff --git a/client-next/src/components/SearchBar/SearchBar.tsx b/client/src/components/SearchBar/SearchBar.tsx similarity index 100% rename from client-next/src/components/SearchBar/SearchBar.tsx rename to client/src/components/SearchBar/SearchBar.tsx diff --git a/client-next/src/components/SearchBar/SearchWindowInput.tsx b/client/src/components/SearchBar/SearchWindowInput.tsx similarity index 100% rename from client-next/src/components/SearchBar/SearchWindowInput.tsx rename to client/src/components/SearchBar/SearchWindowInput.tsx diff --git a/client-next/src/components/SearchBar/ServerInfoTooltip.tsx b/client/src/components/SearchBar/ServerInfoTooltip.tsx similarity index 100% rename from client-next/src/components/SearchBar/ServerInfoTooltip.tsx rename to client/src/components/SearchBar/ServerInfoTooltip.tsx diff --git a/client-next/src/components/SearchBar/TimeInputField.tsx b/client/src/components/SearchBar/TimeInputField.tsx similarity index 100% rename from client-next/src/components/SearchBar/TimeInputField.tsx rename to client/src/components/SearchBar/TimeInputField.tsx diff --git a/client-next/src/components/SearchBar/TransitModeSelect.tsx b/client/src/components/SearchBar/TransitModeSelect.tsx similarity index 100% rename from client-next/src/components/SearchBar/TransitModeSelect.tsx rename to client/src/components/SearchBar/TransitModeSelect.tsx diff --git a/client-next/src/components/SearchBar/constants.ts b/client/src/components/SearchBar/constants.ts similarity index 100% rename from client-next/src/components/SearchBar/constants.ts rename to client/src/components/SearchBar/constants.ts diff --git a/client-next/src/hooks/useServerInfo.ts b/client/src/hooks/useServerInfo.ts similarity index 100% rename from client-next/src/hooks/useServerInfo.ts rename to client/src/hooks/useServerInfo.ts diff --git a/client-next/src/hooks/useTripQuery.ts b/client/src/hooks/useTripQuery.ts similarity index 100% rename from client-next/src/hooks/useTripQuery.ts rename to client/src/hooks/useTripQuery.ts diff --git a/client-next/src/hooks/useTripQueryVariables.ts b/client/src/hooks/useTripQueryVariables.ts similarity index 100% rename from client-next/src/hooks/useTripQueryVariables.ts rename to client/src/hooks/useTripQueryVariables.ts diff --git a/client-next/src/main.tsx b/client/src/main.tsx similarity index 100% rename from client-next/src/main.tsx rename to client/src/main.tsx diff --git a/client-next/src/screens/App.tsx b/client/src/screens/App.tsx similarity index 100% rename from client-next/src/screens/App.tsx rename to client/src/screens/App.tsx diff --git a/client-next/src/static/img/marker-flag-end-shadowed.png b/client/src/static/img/marker-flag-end-shadowed.png similarity index 100% rename from client-next/src/static/img/marker-flag-end-shadowed.png rename to client/src/static/img/marker-flag-end-shadowed.png diff --git a/client-next/src/static/img/marker-flag-start-shadowed.png b/client/src/static/img/marker-flag-start-shadowed.png similarity index 100% rename from client-next/src/static/img/marker-flag-start-shadowed.png rename to client/src/static/img/marker-flag-start-shadowed.png diff --git a/client-next/src/static/img/mode/air.png b/client/src/static/img/mode/air.png similarity index 100% rename from client-next/src/static/img/mode/air.png rename to client/src/static/img/mode/air.png diff --git a/client-next/src/static/img/mode/bicycle.png b/client/src/static/img/mode/bicycle.png similarity index 100% rename from client-next/src/static/img/mode/bicycle.png rename to client/src/static/img/mode/bicycle.png diff --git a/client-next/src/static/img/mode/bus.png b/client/src/static/img/mode/bus.png similarity index 100% rename from client-next/src/static/img/mode/bus.png rename to client/src/static/img/mode/bus.png diff --git a/client-next/src/static/img/mode/cableway.png b/client/src/static/img/mode/cableway.png similarity index 100% rename from client-next/src/static/img/mode/cableway.png rename to client/src/static/img/mode/cableway.png diff --git a/client-next/src/static/img/mode/car.png b/client/src/static/img/mode/car.png similarity index 100% rename from client-next/src/static/img/mode/car.png rename to client/src/static/img/mode/car.png diff --git a/client-next/src/static/img/mode/coach.png b/client/src/static/img/mode/coach.png similarity index 100% rename from client-next/src/static/img/mode/coach.png rename to client/src/static/img/mode/coach.png diff --git a/client-next/src/static/img/mode/foot.png b/client/src/static/img/mode/foot.png similarity index 100% rename from client-next/src/static/img/mode/foot.png rename to client/src/static/img/mode/foot.png diff --git a/client-next/src/static/img/mode/funicular.png b/client/src/static/img/mode/funicular.png similarity index 100% rename from client-next/src/static/img/mode/funicular.png rename to client/src/static/img/mode/funicular.png diff --git a/client-next/src/static/img/mode/metro.png b/client/src/static/img/mode/metro.png similarity index 100% rename from client-next/src/static/img/mode/metro.png rename to client/src/static/img/mode/metro.png diff --git a/client-next/src/static/img/mode/monorail.png b/client/src/static/img/mode/monorail.png similarity index 100% rename from client-next/src/static/img/mode/monorail.png rename to client/src/static/img/mode/monorail.png diff --git a/client-next/src/static/img/mode/rail.png b/client/src/static/img/mode/rail.png similarity index 100% rename from client-next/src/static/img/mode/rail.png rename to client/src/static/img/mode/rail.png diff --git a/client-next/src/static/img/mode/taxi.png b/client/src/static/img/mode/taxi.png similarity index 100% rename from client-next/src/static/img/mode/taxi.png rename to client/src/static/img/mode/taxi.png diff --git a/client-next/src/static/img/mode/tram.png b/client/src/static/img/mode/tram.png similarity index 100% rename from client-next/src/static/img/mode/tram.png rename to client/src/static/img/mode/tram.png diff --git a/client-next/src/static/img/mode/trolleybus.png b/client/src/static/img/mode/trolleybus.png similarity index 100% rename from client-next/src/static/img/mode/trolleybus.png rename to client/src/static/img/mode/trolleybus.png diff --git a/client-next/src/static/img/mode/water.png b/client/src/static/img/mode/water.png similarity index 100% rename from client-next/src/static/img/mode/water.png rename to client/src/static/img/mode/water.png diff --git a/client-next/src/static/img/otp-logo.svg b/client/src/static/img/otp-logo.svg similarity index 100% rename from client-next/src/static/img/otp-logo.svg rename to client/src/static/img/otp-logo.svg diff --git a/client-next/src/style.css b/client/src/style.css similarity index 100% rename from client-next/src/style.css rename to client/src/style.css diff --git a/client-next/src/util/formatDistance.ts b/client/src/util/formatDistance.ts similarity index 100% rename from client-next/src/util/formatDistance.ts rename to client/src/util/formatDistance.ts diff --git a/client-next/src/util/formatDuration.ts b/client/src/util/formatDuration.ts similarity index 100% rename from client-next/src/util/formatDuration.ts rename to client/src/util/formatDuration.ts diff --git a/client-next/src/util/formatTime.ts b/client/src/util/formatTime.ts similarity index 100% rename from client-next/src/util/formatTime.ts rename to client/src/util/formatTime.ts diff --git a/client-next/src/util/generateTextColor.ts b/client/src/util/generateTextColor.ts similarity index 100% rename from client-next/src/util/generateTextColor.ts rename to client/src/util/generateTextColor.ts diff --git a/client-next/src/util/getApiUrl.ts b/client/src/util/getApiUrl.ts similarity index 100% rename from client-next/src/util/getApiUrl.ts rename to client/src/util/getApiUrl.ts diff --git a/client-next/src/util/getColorForMode.ts b/client/src/util/getColorForMode.ts similarity index 100% rename from client-next/src/util/getColorForMode.ts rename to client/src/util/getColorForMode.ts diff --git a/client-next/src/util/isTransitMode.ts b/client/src/util/isTransitMode.ts similarity index 100% rename from client-next/src/util/isTransitMode.ts rename to client/src/util/isTransitMode.ts diff --git a/client-next/src/vite-env.d.ts b/client/src/vite-env.d.ts similarity index 100% rename from client-next/src/vite-env.d.ts rename to client/src/vite-env.d.ts diff --git a/client-next/tsconfig.json b/client/tsconfig.json similarity index 100% rename from client-next/tsconfig.json rename to client/tsconfig.json diff --git a/client-next/tsconfig.node.json b/client/tsconfig.node.json similarity index 100% rename from client-next/tsconfig.node.json rename to client/tsconfig.node.json diff --git a/client-next/vite.config.ts b/client/vite.config.ts similarity index 100% rename from client-next/vite.config.ts rename to client/vite.config.ts diff --git a/docs/Frontends.md b/docs/Frontends.md index 7eb85050024..b8134d4cf7c 100644 --- a/docs/Frontends.md +++ b/docs/Frontends.md @@ -18,7 +18,7 @@ On the other hand, **production frontends** are intended to be a component of la The main OpenTripPlanner repository currently contains two debug web frontends: -- new one currently under development at [`/client-next`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/client-next). +- new one currently under development at [`/client`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/client). - the original one in [`/src/client/classic-debug/`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/src/client/classic-debug) The **new debug client** is a React/TypeScript Single Page App (SPA) that can be served locally or accessed over a content delivery network (CDN). @@ -86,5 +86,5 @@ The history of the more widely used OpenTripPlanner interfaces is roughly as fol - In the late 2010s people started developing a new React-based UI as a more modular, modern interface for public consumption. This project is located at https://github.com/opentripplanner/otp-react-redux under the OpenTripPlanner Github organization, and is developed and maintainted by Arcadis IBI. - Some React components were factored out of that UI project, allowing them to be integrated in different ways with different OTP deployments. This component library is in a separate repository at https://github.com/opentripplanner/otp-ui. Likewise, it is developed and maintained by Arcadis IBI. - Meanwhile, starting in 2014, HSL (the Helsinki Regional Transport Authority) and Finntrafic (the Finnish national transportation authority) began the Digitransit project, a set of open-source microservices to replace their existing national and regional scale trip planners. This includes a Javascript web UI module. In addition to Finland, the Digitransit system has been deployed in various places around the world including Germany. -- As of 2024, a completely new debug UI (again, intended for developer use rather than public consumption) is being developed in the main OpenTripPlanner repository under `src/client-next`. This new UI follows a more conventional contemporary Javascript development style, and uses the most recent OpenTripPlanner GraphQL API which is expected to fully replace the older REST API. +- As of 2024, a completely new debug UI (again, intended for developer use rather than public consumption) is being developed in the main OpenTripPlanner repository under `src/client`. This new UI follows a more conventional contemporary Javascript development style, and uses the most recent OpenTripPlanner GraphQL API which is expected to fully replace the older REST API. - In June 2024, the default was swapped and the new GraphQL-based one is now the default with the old one being available at `http://localhost:8080/classic-debug/` \ No newline at end of file diff --git a/renovate.json5 b/renovate.json5 index 466bc36a94a..7b957c577e3 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -31,14 +31,14 @@ "enabled": false }, { - "matchFiles": ["client-next/package.json"], + "matchFiles": ["client/package.json"], "matchUpdateTypes": ["patch", "minor"], "groupName": "Debug UI dependencies (non-major)", "schedule": ["on the first day of the week"], "reviewers": ["testower"] }, { - "matchFiles": ["client-next/package.json"], + "matchFiles": ["client/package.json"], "matchUpdateTypes": ["major"], "reviewers": ["testower"] }, From 6fda1a8b76682c3e68881dfe671b15607c82c019 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Mon, 24 Jun 2024 12:05:00 +0200 Subject: [PATCH 049/132] Update Siri Google PubSub updater documentation --- .../sandbox/siri/SiriGooglePubSubUpdater.md | 29 +++++ docs/RouterConfiguration.md | 11 ++ docs/examples/entur/router-config.json | 3 +- docs/sandbox/VehicleParking.md | 18 +-- docs/sandbox/siri/SiriGooglePubSubUpdater.md | 118 ++++++++++++++++++ .../SiriETGooglePubsubUpdaterParameters.java | 20 +-- .../SiriETGooglePubsubUpdaterConfig.java | 79 ++++++++++-- .../doc/SiriGooglePubSubConfigDocTest.java | 101 +++++++++++++++ .../generate/doc/UpdaterConfigDocTest.java | 1 + .../standalone/config/router-config.json | 12 ++ 10 files changed, 353 insertions(+), 39 deletions(-) create mode 100644 doc-templates/sandbox/siri/SiriGooglePubSubUpdater.md create mode 100644 docs/sandbox/siri/SiriGooglePubSubUpdater.md create mode 100644 src/test/java/org/opentripplanner/generate/doc/SiriGooglePubSubConfigDocTest.java diff --git a/doc-templates/sandbox/siri/SiriGooglePubSubUpdater.md b/doc-templates/sandbox/siri/SiriGooglePubSubUpdater.md new file mode 100644 index 00000000000..09fd3996bef --- /dev/null +++ b/doc-templates/sandbox/siri/SiriGooglePubSubUpdater.md @@ -0,0 +1,29 @@ +# Siri-ET Google PubSub Updater + +Support for consuming SIRI-ET messages over a Google Cloud PubSub subscription. +Similarly to the SIRI-ET HTTP updater, this updater is developed to support the Nordic SIRI profile +which is a subset of the SIRI specification. + +## Contact Info +Entur, Norway +https://entur.no/ + +## Documentation + +This updater consumes SIRI real time information over an asynchronous publisher/subscriber feed +provided by a Google Cloud PubSub topic. + +For more documentation see +the [Entur Real-Time Data](https://developer.entur.org/pages-real-time-intro) documentation and +the [Norwegian SIRI profile](https://enturas.atlassian.net/wiki/spaces/PUBLIC/pages/637370420/Norwegian+SIRI+profile) +. + +## Configuration + +To enable the SIRI-ET Google PubSub updater you need to add it to the updaters section +of the `router-config.json`. + +### Siri-ET via Google PubSub + + + diff --git a/docs/RouterConfiguration.md b/docs/RouterConfiguration.md index 19a70c44d0f..0891bf6d20d 100644 --- a/docs/RouterConfiguration.md +++ b/docs/RouterConfiguration.md @@ -859,6 +859,17 @@ Used to group requests when monitoring OTP. "timeout" : 300000 } }, + { + "type" : "siri-et-google-pubsub-updater", + "feedId" : "feed_id", + "reconnectPeriod" : "5s", + "initialGetDataTimeout" : "1m20s", + "topicProjectName" : "google_pubsub_topic_project_name", + "subscriptionProjectName" : "google_pubsub_subscription_project_name", + "topicName" : "estimated_timetables", + "dataInitializationUrl" : "https://example.com/some/path", + "fuzzyTripMatching" : true + }, { "type" : "vehicle-parking", "feedId" : "bikeep", diff --git a/docs/examples/entur/router-config.json b/docs/examples/entur/router-config.json index 0cbded8bc85..a54e40eb44d 100644 --- a/docs/examples/entur/router-config.json +++ b/docs/examples/entur/router-config.json @@ -123,8 +123,9 @@ { "type": "siri-et-google-pubsub-updater", "feedId": "EN", - "projectName": "entur-ror", + "topicProjectName": "entur-anshar", "topicName": "estimated_timetables", + "subscriptionProjectName": "entur-otp2", "dataInitializationUrl": "https://example.com" }, // SIRI ET updater diff --git a/docs/sandbox/VehicleParking.md b/docs/sandbox/VehicleParking.md index 8d9e4942440..a5adde1d4c2 100644 --- a/docs/sandbox/VehicleParking.md +++ b/docs/sandbox/VehicleParking.md @@ -320,36 +320,36 @@ HTTP headers to add to the request. Any header key, value can be inserted. | Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | |----------------------------------|:---------------:|------------------------------------------------------------------------------|:----------:|---------------|:-----:| | type = "vehicle-parking" | `enum` | The type of the updater. | *Required* | | 1.5 | -| [feedId](#u__13__feedId) | `string` | The id of the data source, which will be the prefix of the parking lot's id. | *Required* | | 2.2 | +| [feedId](#u__14__feedId) | `string` | The id of the data source, which will be the prefix of the parking lot's id. | *Required* | | 2.2 | | frequency | `duration` | How often to update the source. | *Optional* | `"PT1M"` | 2.6 | -| [sourceType](#u__13__sourceType) | `enum` | The source of the vehicle updates. | *Required* | | 2.2 | +| [sourceType](#u__14__sourceType) | `enum` | The source of the vehicle updates. | *Required* | | 2.2 | | url | `uri` | URL of the locations endpoint. | *Required* | | 2.6 | -| [headers](#u__13__headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.6 | +| [headers](#u__14__headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.6 | #### Details -

feedId

+

feedId

**Since version:** `2.2` ∙ **Type:** `string` ∙ **Cardinality:** `Required` -**Path:** /updaters/[13] +**Path:** /updaters/[14] The id of the data source, which will be the prefix of the parking lot's id. This will end up in the API responses as the feed id of of the parking lot. -

sourceType

+

sourceType

**Since version:** `2.2` ∙ **Type:** `enum` ∙ **Cardinality:** `Required` -**Path:** /updaters/[13] +**Path:** /updaters/[14] **Enum values:** `park-api` | `bicycle-park-api` | `hsl-park` | `bikely` | `noi-open-data-hub` | `bikeep` The source of the vehicle updates. -

headers

+

headers

**Since version:** `2.6` ∙ **Type:** `map of string` ∙ **Cardinality:** `Optional` -**Path:** /updaters/[13] +**Path:** /updaters/[14] HTTP headers to add to the request. Any header key, value can be inserted. diff --git a/docs/sandbox/siri/SiriGooglePubSubUpdater.md b/docs/sandbox/siri/SiriGooglePubSubUpdater.md new file mode 100644 index 00000000000..9eee17c5900 --- /dev/null +++ b/docs/sandbox/siri/SiriGooglePubSubUpdater.md @@ -0,0 +1,118 @@ +# Siri-ET Google PubSub Updater + +Support for consuming SIRI-ET messages over a Google Cloud PubSub subscription. +Similarly to the SIRI-ET HTTP updater, this updater is developed to support the Nordic SIRI profile +which is a subset of the SIRI specification. + +## Contact Info +Entur, Norway +https://entur.no/ + +## Documentation + +This updater consumes SIRI real time information over an asynchronous publisher/subscriber feed +provided by a Google Cloud PubSub topic. + +For more documentation see +the [Entur Real-Time Data](https://developer.entur.org/pages-real-time-intro) documentation and +the [Norwegian SIRI profile](https://enturas.atlassian.net/wiki/spaces/PUBLIC/pages/637370420/Norwegian+SIRI+profile) +. + +## Configuration + +To enable the SIRI-ET Google PubSub updater you need to add it to the updaters section +of the `router-config.json`. + +### Siri-ET via Google PubSub + + + + +| Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | +|------------------------------------------------------------|:----------:|----------------------------------------------------------------------------------|:----------:|---------------|:-----:| +| type = "siri-et-google-pubsub-updater" | `enum` | The type of the updater. | *Required* | | 1.5 | +| [dataInitializationUrl](#u__13__dataInitializationUrl) | `string` | URL used to download over HTTP the recent history of SIRI-ET messages. | *Optional* | | na | +| feedId | `string` | The ID of the feed to apply the updates to. | *Optional* | | na | +| fuzzyTripMatching | `boolean` | If the trips should be matched fuzzily. | *Optional* | `false` | na | +| [initialGetDataTimeout](#u__13__initialGetDataTimeout) | `duration` | Timeout for retrieving the recent history of SIRI-ET messages. | *Optional* | `"PT30S"` | na | +| [reconnectPeriod](#u__13__reconnectPeriod) | `duration` | Wait this amount of time before trying to reconnect to the PubSub subscription. | *Optional* | `"PT30S"` | na | +| [subscriptionProjectName](#u__13__subscriptionProjectName) | `string` | The Google Cloud project that hosts the PubSub subscription. | *Required* | | na | +| topicName | `string` | The name of the PubSub topic that publishes the updates. | *Required* | | na | +| topicProjectName | `string` | The Google Cloud project that hosts the PubSub topic that publishes the updates. | *Required* | | na | + + +##### Parameter details + +

dataInitializationUrl

+ +**Since version:** `na` ∙ **Type:** `string` ∙ **Cardinality:** `Optional` +**Path:** /updaters/[13] + +URL used to download over HTTP the recent history of SIRI-ET messages. + +Optionally the updater can download the recent history of SIRI-ET messages from this URL. +If this parameter is set, the updater will be marked as initialized (primed) only when +the message history is fully downloaded and applied. + + +

initialGetDataTimeout

+ +**Since version:** `na` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT30S"` +**Path:** /updaters/[13] + +Timeout for retrieving the recent history of SIRI-ET messages. + +When trying to fetch the message history over HTTP, the updater will wait this amount +of time for the connection to be established. +If the connection times out, the updater will retry indefinitely with exponential backoff. + + +

reconnectPeriod

+ +**Since version:** `na` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT30S"` +**Path:** /updaters/[13] + +Wait this amount of time before trying to reconnect to the PubSub subscription. + +In case of a network error, the updater will try periodically to reconnect to the +Google PubSub subscription. + + +

subscriptionProjectName

+ +**Since version:** `na` ∙ **Type:** `string` ∙ **Cardinality:** `Required` +**Path:** /updaters/[13] + +The Google Cloud project that hosts the PubSub subscription. + +During startup, the updater creates a PubSub subscription that listens +to the PubSub topic that publishes SIRI-ET updates. +This parameter specifies in which Google Cloud project the subscription will be created. +The topic and the subscription can be hosted in two different projects. + + + + +##### Example configuration + +```JSON +// router-config.json +{ + "updaters" : [ + { + "type" : "siri-et-google-pubsub-updater", + "feedId" : "feed_id", + "reconnectPeriod" : "5s", + "initialGetDataTimeout" : "1m20s", + "topicProjectName" : "google_pubsub_topic_project_name", + "subscriptionProjectName" : "google_pubsub_subscription_project_name", + "topicName" : "estimated_timetables", + "dataInitializationUrl" : "https://example.com/some/path", + "fuzzyTripMatching" : true + } + ] +} +``` + + + diff --git a/src/ext/java/org/opentripplanner/ext/siri/updater/google/SiriETGooglePubsubUpdaterParameters.java b/src/ext/java/org/opentripplanner/ext/siri/updater/google/SiriETGooglePubsubUpdaterParameters.java index 24ff12f6bd4..c9e070311c6 100644 --- a/src/ext/java/org/opentripplanner/ext/siri/updater/google/SiriETGooglePubsubUpdaterParameters.java +++ b/src/ext/java/org/opentripplanner/ext/siri/updater/google/SiriETGooglePubsubUpdaterParameters.java @@ -10,15 +10,12 @@ public record SiriETGooglePubsubUpdaterParameters( @Nonnull String configRef, @Nullable String feedId, - String type, - @Deprecated String projectName, String subscriptionProjectName, String topicProjectName, String topicName, @Nullable String dataInitializationUrl, Duration reconnectPeriod, Duration initialGetDataTimeout, - boolean purgeExpiredData, boolean fuzzyTripMatching ) implements UrlUpdaterParameters { @@ -26,16 +23,6 @@ public record SiriETGooglePubsubUpdaterParameters( public static Duration INITIAL_GET_DATA_TIMEOUT = Duration.ofSeconds(30); public SiriETGooglePubsubUpdaterParameters { - Objects.requireNonNull(type); - - if (subscriptionProjectName == null && topicProjectName == null) { - // New config-parameters not yet in use - // TODO: Remove deprecated `projectName` when config is updated - Objects.requireNonNull(projectName); - subscriptionProjectName = projectName; - topicProjectName = projectName; - } - Objects.requireNonNull(subscriptionProjectName); Objects.requireNonNull(topicProjectName); Objects.requireNonNull(topicName); @@ -50,14 +37,11 @@ public String toString() { .of(SiriETGooglePubsubUpdaterParameters.class) .addObj("configRef", configRef, null) .addObj("feedId", feedId, null) - .addObj("type", type) - .addObj("projectName", projectName) - .addObj("subscriptionProjectName", subscriptionProjectName, projectName) - .addObj("topicProjectName", topicProjectName, projectName) + .addObj("subscriptionProjectName", subscriptionProjectName) + .addObj("topicProjectName", topicProjectName) .addObj("topicName", topicName) .addDuration("reconnectPeriod", reconnectPeriod, RECONNECT_PERIOD) .addDuration("initialGetDataTimeout", initialGetDataTimeout, INITIAL_GET_DATA_TIMEOUT) - .addBoolIfTrue("purgeExpiredData", purgeExpiredData) .addBoolIfTrue("fuzzyTripMatching", fuzzyTripMatching) .addObj("dataInitializationUrl", dataInitializationUrl, null) .toString(); diff --git a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETGooglePubsubUpdaterConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETGooglePubsubUpdaterConfig.java index 45221785109..25fbd235cd3 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETGooglePubsubUpdaterConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETGooglePubsubUpdaterConfig.java @@ -12,17 +12,74 @@ public class SiriETGooglePubsubUpdaterConfig { public static SiriETGooglePubsubUpdaterParameters create(String configRef, NodeAdapter c) { return new SiriETGooglePubsubUpdaterParameters( configRef, - c.of("feedId").since(NA).summary("TODO").asString(null), - c.of("type").since(NA).summary("TODO").asString(), - c.of("projectName").since(NA).summary("TODO").asString(null), // TODO: Remove (deprecated) - c.of("subscriptionProjectName").since(NA).summary("TODO").asString(null), // TODO: Set as required - c.of("topicProjectName").since(NA).summary("TODO").asString(null), // TODO: Set as required - c.of("topicName").since(NA).summary("TODO").asString(), - c.of("dataInitializationUrl").since(NA).summary("TODO").asString(null), - c.of("reconnectPeriod").since(NA).summary("TODO").asDuration(RECONNECT_PERIOD), - c.of("initialGetDataTimeout").since(NA).summary("TODO").asDuration(INITIAL_GET_DATA_TIMEOUT), - c.of("purgeExpiredData").since(NA).summary("TODO").asBoolean(false), - c.of("fuzzyTripMatching").since(NA).summary("TODO").asBoolean(false) + c + .of("feedId") + .since(NA) + .summary("The ID of the feed to apply the updates to.") + .asString(null), + c + .of("subscriptionProjectName") + .since(NA) + .summary("The Google Cloud project that hosts the PubSub subscription.") + .description( + """ + During startup, the updater creates a PubSub subscription that listens + to the PubSub topic that publishes SIRI-ET updates. + This parameter specifies in which Google Cloud project the subscription will be created. + The topic and the subscription can be hosted in two different projects. + """ + ) + .asString(), + c + .of("topicProjectName") + .since(NA) + .summary("The Google Cloud project that hosts the PubSub topic that publishes the updates.") + .asString(), + c + .of("topicName") + .since(NA) + .summary("The name of the PubSub topic that publishes the updates.") + .asString(), + c + .of("dataInitializationUrl") + .since(NA) + .summary("URL used to download over HTTP the recent history of SIRI-ET messages.") + .description( + """ + Optionally the updater can download the recent history of SIRI-ET messages from this URL. + If this parameter is set, the updater will be marked as initialized (primed) only when + the message history is fully downloaded and applied. + """ + ) + .asString(null), + c + .of("reconnectPeriod") + .since(NA) + .summary("Wait this amount of time before trying to reconnect to the PubSub subscription.") + .description( + """ + In case of a network error, the updater will try periodically to reconnect to the + Google PubSub subscription. + """ + ) + .asDuration(RECONNECT_PERIOD), + c + .of("initialGetDataTimeout") + .since(NA) + .summary("Timeout for retrieving the recent history of SIRI-ET messages.") + .description( + """ + When trying to fetch the message history over HTTP, the updater will wait this amount + of time for the connection to be established. + If the connection times out, the updater will retry indefinitely with exponential backoff. + """ + ) + .asDuration(INITIAL_GET_DATA_TIMEOUT), + c + .of("fuzzyTripMatching") + .since(NA) + .summary("If the trips should be matched fuzzily.") + .asBoolean(false) ); } } diff --git a/src/test/java/org/opentripplanner/generate/doc/SiriGooglePubSubConfigDocTest.java b/src/test/java/org/opentripplanner/generate/doc/SiriGooglePubSubConfigDocTest.java new file mode 100644 index 00000000000..f5aa3e130ed --- /dev/null +++ b/src/test/java/org/opentripplanner/generate/doc/SiriGooglePubSubConfigDocTest.java @@ -0,0 +1,101 @@ +package org.opentripplanner.generate.doc; + +import static org.opentripplanner.framework.application.OtpFileNames.ROUTER_CONFIG_FILENAME; +import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; +import static org.opentripplanner.framework.io.FileUtils.readFile; +import static org.opentripplanner.framework.io.FileUtils.writeFile; +import static org.opentripplanner.framework.text.MarkdownFormatter.HEADER_4; +import static org.opentripplanner.generate.doc.framework.DocsTestConstants.DOCS_ROOT; +import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_ROOT; +import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; +import static org.opentripplanner.standalone.config.framework.json.JsonSupport.jsonNodeFromResource; + +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.File; +import java.util.Set; +import org.junit.jupiter.api.Test; +import org.opentripplanner.generate.doc.framework.DocBuilder; +import org.opentripplanner.generate.doc.framework.GeneratesDocumentation; +import org.opentripplanner.generate.doc.framework.ParameterDetailsList; +import org.opentripplanner.generate.doc.framework.ParameterSummaryTable; +import org.opentripplanner.generate.doc.framework.SkipNodes; +import org.opentripplanner.standalone.config.RouterConfig; +import org.opentripplanner.standalone.config.framework.json.NodeAdapter; + +@GeneratesDocumentation +public class SiriGooglePubSubConfigDocTest { + + private static final File TEMPLATE = new File( + TEMPLATE_ROOT, + "sandbox/siri/SiriGooglePubSubUpdater.md" + ); + private static final File OUT_FILE = new File( + DOCS_ROOT, + "sandbox/siri/SiriGooglePubSubUpdater.md" + ); + + private static final String ROUTER_CONFIG_PATH = "standalone/config/" + ROUTER_CONFIG_FILENAME; + private static final Set INCLUDE_UPDATERS = Set.of("siri-et-google-pubsub-updater"); + private static final SkipNodes SKIP_NODES = SkipNodes.of().build(); + public static final ObjectMapper mapper = new ObjectMapper(); + + /** + * NOTE! This test updates the {@code docs/sandbox/SiriGooglePubSubUpdater.md} document based on the latest + * version of the code. + */ + @Test + public void updateSiriDoc() { + NodeAdapter node = readUpdaterConfig(); + + // Read and close input file (same as output file) + String template = readFile(TEMPLATE); + String original = readFile(OUT_FILE); + + for (String childName : node.listChildrenByName()) { + var child = node.child(childName); + var type = child.typeQualifier(); + + if (INCLUDE_UPDATERS.contains(type)) { + template = replaceSection(template, type, updaterDoc(child)); + } + } + + writeFile(OUT_FILE, template); + assertFileEquals(original, OUT_FILE); + } + + private NodeAdapter readUpdaterConfig() { + var json = jsonNodeFromResource(ROUTER_CONFIG_PATH); + var conf = new RouterConfig(json, ROUTER_CONFIG_PATH, false); + return conf.asNodeAdapter().child("updaters"); + } + + private String updaterDoc(NodeAdapter node) { + DocBuilder buf = new DocBuilder(); + addParameterSummaryTable(buf, node); + addDetailsSection(buf, node); + addExample(buf, node); + return buf.toString(); + } + + private void addParameterSummaryTable(DocBuilder buf, NodeAdapter node) { + buf.addSection(new ParameterSummaryTable(SKIP_NODES).createTable(node).toMarkdownTable()); + } + + private void addDetailsSection(DocBuilder buf, NodeAdapter node) { + String details = getParameterDetailsTable(node); + + if (!details.isBlank()) { + buf.header(5, "Parameter details", null).addSection(details); + } + } + + private String getParameterDetailsTable(NodeAdapter node) { + return ParameterDetailsList.listParametersWithDetails(node, SKIP_NODES, HEADER_4); + } + + private void addExample(DocBuilder buf, NodeAdapter node) { + buf.addSection("##### Example configuration"); + buf.addUpdaterExample(ROUTER_CONFIG_FILENAME, node.rawNode()); + } +} diff --git a/src/test/java/org/opentripplanner/generate/doc/UpdaterConfigDocTest.java b/src/test/java/org/opentripplanner/generate/doc/UpdaterConfigDocTest.java index 4bdfe782615..264d0d6850a 100644 --- a/src/test/java/org/opentripplanner/generate/doc/UpdaterConfigDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/UpdaterConfigDocTest.java @@ -34,6 +34,7 @@ public class UpdaterConfigDocTest { "siri-azure-et-updater", "vehicle-parking", "siri-et-updater", + "siri-et-google-pubsub-updater", "siri-sx-updater" ); private static final SkipNodes SKIP_NODES = SkipNodes.of().build(); diff --git a/src/test/resources/standalone/config/router-config.json b/src/test/resources/standalone/config/router-config.json index cee86fafa2e..e6285a77d41 100644 --- a/src/test/resources/standalone/config/router-config.json +++ b/src/test/resources/standalone/config/router-config.json @@ -421,6 +421,18 @@ "timeout": 300000 } }, + // SIRI ET Google Pubsub updater + { + "type": "siri-et-google-pubsub-updater", + "feedId": "feed_id", + "reconnectPeriod": "5s", + "initialGetDataTimeout": "1m20s", + "topicProjectName": "google_pubsub_topic_project_name", + "subscriptionProjectName": "google_pubsub_subscription_project_name", + "topicName": "estimated_timetables", + "dataInitializationUrl": "https://example.com/some/path", + "fuzzyTripMatching": true + }, { "type": "vehicle-parking", "feedId": "bikeep", From fc497ca9f1277905fe428ded9eb50215cc096e77 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Tue, 25 Jun 2024 15:04:59 +0200 Subject: [PATCH 050/132] Apply review suggestions --- docs/sandbox/siri/SiriGooglePubSubUpdater.md | 24 +++++++++---------- .../SiriETGooglePubsubUpdaterConfig.java | 18 +++++++------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/sandbox/siri/SiriGooglePubSubUpdater.md b/docs/sandbox/siri/SiriGooglePubSubUpdater.md index 9eee17c5900..74dfc4a4238 100644 --- a/docs/sandbox/siri/SiriGooglePubSubUpdater.md +++ b/docs/sandbox/siri/SiriGooglePubSubUpdater.md @@ -31,21 +31,21 @@ of the `router-config.json`. | Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | |------------------------------------------------------------|:----------:|----------------------------------------------------------------------------------|:----------:|---------------|:-----:| | type = "siri-et-google-pubsub-updater" | `enum` | The type of the updater. | *Required* | | 1.5 | -| [dataInitializationUrl](#u__13__dataInitializationUrl) | `string` | URL used to download over HTTP the recent history of SIRI-ET messages. | *Optional* | | na | -| feedId | `string` | The ID of the feed to apply the updates to. | *Optional* | | na | -| fuzzyTripMatching | `boolean` | If the trips should be matched fuzzily. | *Optional* | `false` | na | -| [initialGetDataTimeout](#u__13__initialGetDataTimeout) | `duration` | Timeout for retrieving the recent history of SIRI-ET messages. | *Optional* | `"PT30S"` | na | -| [reconnectPeriod](#u__13__reconnectPeriod) | `duration` | Wait this amount of time before trying to reconnect to the PubSub subscription. | *Optional* | `"PT30S"` | na | -| [subscriptionProjectName](#u__13__subscriptionProjectName) | `string` | The Google Cloud project that hosts the PubSub subscription. | *Required* | | na | -| topicName | `string` | The name of the PubSub topic that publishes the updates. | *Required* | | na | -| topicProjectName | `string` | The Google Cloud project that hosts the PubSub topic that publishes the updates. | *Required* | | na | +| [dataInitializationUrl](#u__13__dataInitializationUrl) | `string` | URL used to download over HTTP the recent history of SIRI-ET messages. | *Optional* | | 2.1 | +| feedId | `string` | The ID of the feed to apply the updates to. | *Optional* | | 2.1 | +| fuzzyTripMatching | `boolean` | If the trips should be matched fuzzily. | *Optional* | `false` | 2.1 | +| [initialGetDataTimeout](#u__13__initialGetDataTimeout) | `duration` | Timeout for retrieving the recent history of SIRI-ET messages. | *Optional* | `"PT30S"` | 2.1 | +| [reconnectPeriod](#u__13__reconnectPeriod) | `duration` | Wait this amount of time before trying to reconnect to the PubSub subscription. | *Optional* | `"PT30S"` | 2.1 | +| [subscriptionProjectName](#u__13__subscriptionProjectName) | `string` | The Google Cloud project that hosts the PubSub subscription. | *Required* | | 2.1 | +| topicName | `string` | The name of the PubSub topic that publishes the updates. | *Required* | | 2.1 | +| topicProjectName | `string` | The Google Cloud project that hosts the PubSub topic that publishes the updates. | *Required* | | 2.1 | ##### Parameter details

dataInitializationUrl

-**Since version:** `na` ∙ **Type:** `string` ∙ **Cardinality:** `Optional` +**Since version:** `2.1` ∙ **Type:** `string` ∙ **Cardinality:** `Optional` **Path:** /updaters/[13] URL used to download over HTTP the recent history of SIRI-ET messages. @@ -57,7 +57,7 @@ the message history is fully downloaded and applied.

initialGetDataTimeout

-**Since version:** `na` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT30S"` +**Since version:** `2.1` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT30S"` **Path:** /updaters/[13] Timeout for retrieving the recent history of SIRI-ET messages. @@ -69,7 +69,7 @@ If the connection times out, the updater will retry indefinitely with exponentia

reconnectPeriod

-**Since version:** `na` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT30S"` +**Since version:** `2.1` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT30S"` **Path:** /updaters/[13] Wait this amount of time before trying to reconnect to the PubSub subscription. @@ -80,7 +80,7 @@ Google PubSub subscription.

subscriptionProjectName

-**Since version:** `na` ∙ **Type:** `string` ∙ **Cardinality:** `Required` +**Since version:** `2.1` ∙ **Type:** `string` ∙ **Cardinality:** `Required` **Path:** /updaters/[13] The Google Cloud project that hosts the PubSub subscription. diff --git a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETGooglePubsubUpdaterConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETGooglePubsubUpdaterConfig.java index 25fbd235cd3..75ade008070 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETGooglePubsubUpdaterConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/SiriETGooglePubsubUpdaterConfig.java @@ -2,7 +2,7 @@ import static org.opentripplanner.ext.siri.updater.google.SiriETGooglePubsubUpdaterParameters.INITIAL_GET_DATA_TIMEOUT; import static org.opentripplanner.ext.siri.updater.google.SiriETGooglePubsubUpdaterParameters.RECONNECT_PERIOD; -import static org.opentripplanner.standalone.config.framework.json.OtpVersion.NA; +import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_1; import org.opentripplanner.ext.siri.updater.google.SiriETGooglePubsubUpdaterParameters; import org.opentripplanner.standalone.config.framework.json.NodeAdapter; @@ -14,12 +14,12 @@ public static SiriETGooglePubsubUpdaterParameters create(String configRef, NodeA configRef, c .of("feedId") - .since(NA) + .since(V2_1) .summary("The ID of the feed to apply the updates to.") .asString(null), c .of("subscriptionProjectName") - .since(NA) + .since(V2_1) .summary("The Google Cloud project that hosts the PubSub subscription.") .description( """ @@ -32,17 +32,17 @@ public static SiriETGooglePubsubUpdaterParameters create(String configRef, NodeA .asString(), c .of("topicProjectName") - .since(NA) + .since(V2_1) .summary("The Google Cloud project that hosts the PubSub topic that publishes the updates.") .asString(), c .of("topicName") - .since(NA) + .since(V2_1) .summary("The name of the PubSub topic that publishes the updates.") .asString(), c .of("dataInitializationUrl") - .since(NA) + .since(V2_1) .summary("URL used to download over HTTP the recent history of SIRI-ET messages.") .description( """ @@ -54,7 +54,7 @@ If this parameter is set, the updater will be marked as initialized (primed) onl .asString(null), c .of("reconnectPeriod") - .since(NA) + .since(V2_1) .summary("Wait this amount of time before trying to reconnect to the PubSub subscription.") .description( """ @@ -65,7 +65,7 @@ If this parameter is set, the updater will be marked as initialized (primed) onl .asDuration(RECONNECT_PERIOD), c .of("initialGetDataTimeout") - .since(NA) + .since(V2_1) .summary("Timeout for retrieving the recent history of SIRI-ET messages.") .description( """ @@ -77,7 +77,7 @@ If this parameter is set, the updater will be marked as initialized (primed) onl .asDuration(INITIAL_GET_DATA_TIMEOUT), c .of("fuzzyTripMatching") - .since(NA) + .since(V2_1) .summary("If the trips should be matched fuzzily.") .asBoolean(false) ); From e1c02b221a22e1ba278973e16144050abc5962b9 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Tue, 25 Jun 2024 16:13:09 +0200 Subject: [PATCH 051/132] Add GraphQL data fetcher error logging --- .../LoggingDataFetcherExceptionHandler.java | 21 +++++++++++++++++++ .../apis/transmodel/TransmodelGraph.java | 1 + ...UnprocessableRequestExecutionStrategy.java | 5 +++++ src/main/resources/logback.xml | 6 +++++- 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/opentripplanner/apis/transmodel/LoggingDataFetcherExceptionHandler.java diff --git a/src/main/java/org/opentripplanner/apis/transmodel/LoggingDataFetcherExceptionHandler.java b/src/main/java/org/opentripplanner/apis/transmodel/LoggingDataFetcherExceptionHandler.java new file mode 100644 index 00000000000..42bd8fd35eb --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/transmodel/LoggingDataFetcherExceptionHandler.java @@ -0,0 +1,21 @@ +package org.opentripplanner.apis.transmodel; + +import graphql.ExceptionWhileDataFetching; +import graphql.execution.SimpleDataFetcherExceptionHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Log a warning message when an exception occurs in a data fetcher. + */ +public class LoggingDataFetcherExceptionHandler extends SimpleDataFetcherExceptionHandler { + + private static final Logger LOG = LoggerFactory.getLogger( + LoggingDataFetcherExceptionHandler.class + ); + + @Override + protected void logException(ExceptionWhileDataFetching error, Throwable exception) { + LOG.warn(error.getMessage(), exception); + } +} diff --git a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraph.java b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraph.java index d755c509989..b2bff3416c0 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraph.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraph.java @@ -130,6 +130,7 @@ private GraphQL createGraphQL( .newGraphQL(indexSchema) .instrumentation(instrumentation) .queryExecutionStrategy(executionStrategy) + .defaultDataFetcherExceptionHandler(new LoggingDataFetcherExceptionHandler()) .build(); } diff --git a/src/main/java/org/opentripplanner/apis/transmodel/support/AbortOnUnprocessableRequestExecutionStrategy.java b/src/main/java/org/opentripplanner/apis/transmodel/support/AbortOnUnprocessableRequestExecutionStrategy.java index a8a664fc18d..4da0bb926ff 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/support/AbortOnUnprocessableRequestExecutionStrategy.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/support/AbortOnUnprocessableRequestExecutionStrategy.java @@ -5,6 +5,7 @@ import graphql.schema.DataFetchingEnvironment; import java.io.Closeable; import java.util.concurrent.CompletableFuture; +import org.opentripplanner.apis.transmodel.LoggingDataFetcherExceptionHandler; import org.opentripplanner.apis.transmodel.ResponseTooLargeException; import org.opentripplanner.framework.application.OTPRequestTimeoutException; import org.opentripplanner.framework.logging.ProgressTracker; @@ -31,6 +32,10 @@ public class AbortOnUnprocessableRequestExecutionStrategy -1 ); + public AbortOnUnprocessableRequestExecutionStrategy() { + super(new LoggingDataFetcherExceptionHandler()); + } + @Override protected CompletableFuture handleFetchingException( DataFetchingEnvironment environment, diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index e71ba4aae49..2c0276cd11b 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -83,7 +83,6 @@ - @@ -95,6 +94,11 @@ + + + From f06ec46bd1cd19f6fb0bc40f1417fc61f9c53817 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Tue, 25 Jun 2024 14:24:19 +0000 Subject: [PATCH 052/132] Add changelog entry for #5927 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 8cdfb231eb3..7d524a77258 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -35,6 +35,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Remove TravelTime API [#5890](https://github.com/opentripplanner/OpenTripPlanner/pull/5890) - Improve cancellation of large response in TransModel API [#5908](https://github.com/opentripplanner/OpenTripPlanner/pull/5908) - Refactor SIRI-ET updaters [#5904](https://github.com/opentripplanner/OpenTripPlanner/pull/5904) +- Update Google Pubsub updater configuration [#5927](https://github.com/opentripplanner/OpenTripPlanner/pull/5927) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From 858637651006b45e11f4ae3a3e457b1ccb74197c Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Tue, 25 Jun 2024 16:40:56 +0200 Subject: [PATCH 053/132] Add support for GraphQL error logging in GTFS API --- .../org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java | 7 ++++++- .../graphql}/LoggingDataFetcherExceptionHandler.java | 2 +- .../opentripplanner/apis/transmodel/TransmodelGraph.java | 1 + .../AbortOnUnprocessableRequestExecutionStrategy.java | 2 +- src/main/resources/logback.xml | 4 ++-- 5 files changed, 11 insertions(+), 5 deletions(-) rename src/main/java/org/opentripplanner/apis/{transmodel => support/graphql}/LoggingDataFetcherExceptionHandler.java (92%) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java index 9175d3486e1..e309346339b 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java @@ -83,6 +83,7 @@ import org.opentripplanner.apis.gtfs.datafetchers.stepImpl; import org.opentripplanner.apis.gtfs.datafetchers.stopAtDistanceImpl; import org.opentripplanner.apis.gtfs.model.StopPosition; +import org.opentripplanner.apis.support.graphql.LoggingDataFetcherExceptionHandler; import org.opentripplanner.ext.actuator.MicrometerGraphQLInstrumentation; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.concurrent.OtpRequestThreadFactory; @@ -210,7 +211,11 @@ static ExecutionResult getGraphQLExecutionResult( ); } - GraphQL graphQL = GraphQL.newGraphQL(indexSchema).instrumentation(instrumentation).build(); + GraphQL graphQL = GraphQL + .newGraphQL(indexSchema) + .instrumentation(instrumentation) + .defaultDataFetcherExceptionHandler(new LoggingDataFetcherExceptionHandler()) + .build(); if (variables == null) { variables = new HashMap<>(); diff --git a/src/main/java/org/opentripplanner/apis/transmodel/LoggingDataFetcherExceptionHandler.java b/src/main/java/org/opentripplanner/apis/support/graphql/LoggingDataFetcherExceptionHandler.java similarity index 92% rename from src/main/java/org/opentripplanner/apis/transmodel/LoggingDataFetcherExceptionHandler.java rename to src/main/java/org/opentripplanner/apis/support/graphql/LoggingDataFetcherExceptionHandler.java index 42bd8fd35eb..1394a847ed6 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/LoggingDataFetcherExceptionHandler.java +++ b/src/main/java/org/opentripplanner/apis/support/graphql/LoggingDataFetcherExceptionHandler.java @@ -1,4 +1,4 @@ -package org.opentripplanner.apis.transmodel; +package org.opentripplanner.apis.support.graphql; import graphql.ExceptionWhileDataFetching; import graphql.execution.SimpleDataFetcherExceptionHandler; diff --git a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraph.java b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraph.java index b2bff3416c0..79e767b1fea 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraph.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraph.java @@ -16,6 +16,7 @@ import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import org.opentripplanner.apis.support.graphql.LoggingDataFetcherExceptionHandler; import org.opentripplanner.apis.transmodel.support.AbortOnUnprocessableRequestExecutionStrategy; import org.opentripplanner.apis.transmodel.support.ExecutionResultMapper; import org.opentripplanner.ext.actuator.MicrometerGraphQLInstrumentation; diff --git a/src/main/java/org/opentripplanner/apis/transmodel/support/AbortOnUnprocessableRequestExecutionStrategy.java b/src/main/java/org/opentripplanner/apis/transmodel/support/AbortOnUnprocessableRequestExecutionStrategy.java index 4da0bb926ff..c395d359131 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/support/AbortOnUnprocessableRequestExecutionStrategy.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/support/AbortOnUnprocessableRequestExecutionStrategy.java @@ -5,7 +5,7 @@ import graphql.schema.DataFetchingEnvironment; import java.io.Closeable; import java.util.concurrent.CompletableFuture; -import org.opentripplanner.apis.transmodel.LoggingDataFetcherExceptionHandler; +import org.opentripplanner.apis.support.graphql.LoggingDataFetcherExceptionHandler; import org.opentripplanner.apis.transmodel.ResponseTooLargeException; import org.opentripplanner.framework.application.OTPRequestTimeoutException; import org.opentripplanner.framework.logging.ProgressTracker; diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 2c0276cd11b..7ff48379a7d 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -94,10 +94,10 @@ - - + From f00e907777bd586cec393a57f2721ae93e328dcd Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 25 Jun 2024 17:45:34 +0200 Subject: [PATCH 054/132] Document integration with OSM --- doc-templates/OsmMapper.md | 17 + docs/osm/Atlanta.md | 1270 +++++++++++++ docs/osm/Default.md | 1254 +++++++++++++ docs/osm/Finland.md | 1607 +++++++++++++++++ docs/osm/Germany.md | 1337 ++++++++++++++ docs/osm/Hamburg.md | 217 +++ docs/osm/Houston.md | 1262 +++++++++++++ docs/osm/Norway.md | 428 +++++ docs/osm/Portland.md | 1275 +++++++++++++ docs/osm/UK.md | 1366 ++++++++++++++ mkdocs.yml | 9 + .../tagmapping/NorwayMapper.java | 78 +- .../tagmapping/OsmTagMapperSource.java | 4 + .../wayproperty/SafetyFeatures.java | 4 + .../specifier/BestMatchSpecifier.java | 7 + .../wayproperty/specifier/Condition.java | 46 +- .../specifier/ExactMatchSpecifier.java | 6 + .../specifier/LogicalOrSpecifier.java | 10 +- .../wayproperty/specifier/OsmSpecifier.java | 2 + .../generate/doc/OsmMapperDocTest.java | 141 ++ .../wayproperty/specifier/ConditionTest.java | 6 +- 21 files changed, 10297 insertions(+), 49 deletions(-) create mode 100644 doc-templates/OsmMapper.md create mode 100644 docs/osm/Atlanta.md create mode 100644 docs/osm/Default.md create mode 100644 docs/osm/Finland.md create mode 100644 docs/osm/Germany.md create mode 100644 docs/osm/Hamburg.md create mode 100644 docs/osm/Houston.md create mode 100644 docs/osm/Norway.md create mode 100644 docs/osm/Portland.md create mode 100644 docs/osm/UK.md create mode 100644 src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java diff --git a/doc-templates/OsmMapper.md b/doc-templates/OsmMapper.md new file mode 100644 index 00000000000..555805f0c8d --- /dev/null +++ b/doc-templates/OsmMapper.md @@ -0,0 +1,17 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + diff --git a/docs/osm/Atlanta.md b/docs/osm/Atlanta.md new file mode 100644 index 00000000000..da8caa3b433 --- /dev/null +++ b/docs/osm/Atlanta.md @@ -0,0 +1,1270 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|---------------------------------------------------------|------------------------|--------| +| `highway=trunk_link` | ALL | 🚴 | +| `highway=trunk` | ALL | 🚴 | +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + + + + +

Rule #0

+ +**Specifier:** `highway=trunk_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `highway=trunk` +**Permission:** ALL +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `mtb:scale=3` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `mtb:scale=4` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `mtb:scale=5` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `mtb:scale=6` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `highway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `railway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #13

+ +**Specifier:** `mtb:scale=1` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #14

+ +**Specifier:** `mtb:scale=2` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `mtb:scale=0` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #16

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #17

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #18

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #22

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #23

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #27

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #29

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #30

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #31

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #32

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #33

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #34

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #35

+ +**Specifier:** `highway=trunk_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #36

+ +**Specifier:** `highway=motorway_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #37

+ +**Specifier:** `highway=trunk` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #38

+ +**Specifier:** `highway=motorway` +**Permission:** CAR +**Bike safety factor:** forward: 8.0, back: 8.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #39

+ +**Specifier:** `present(highway); cycleway=lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #40

+ +**Specifier:** `highway=service; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #41

+ +**Specifier:** `highway=residential; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #42

+ +**Specifier:** `highway=residential_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `highway=tertiary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #44

+ +**Specifier:** `highway=tertiary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #45

+ +**Specifier:** `highway=secondary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #46

+ +**Specifier:** `highway=secondary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #47

+ +**Specifier:** `highway=primary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #48

+ +**Specifier:** `highway=primary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #49

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #50

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #51

+ +**Specifier:** `highway=motorway; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #52

+ +**Specifier:** `highway=motorway_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #53

+ +**Specifier:** `present(highway); cycleway=share_busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #54

+ +**Specifier:** `highway=service; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #55

+ +**Specifier:** `highway=residential; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #56

+ +**Specifier:** `highway=residential_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #57

+ +**Specifier:** `highway=tertiary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #58

+ +**Specifier:** `highway=tertiary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #59

+ +**Specifier:** `highway=secondary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #60

+ +**Specifier:** `highway=secondary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #61

+ +**Specifier:** `highway=primary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #62

+ +**Specifier:** `highway=primary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #63

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #64

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #65

+ +**Specifier:** `highway=motorway; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #66

+ +**Specifier:** `highway=motorway_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #67

+ +**Specifier:** `present(highway); cycleway=opposite_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #68

+ +**Specifier:** `highway=service; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #69

+ +**Specifier:** `highway=residential; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #70

+ +**Specifier:** `highway=residential_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #71

+ +**Specifier:** `highway=tertiary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #72

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #73

+ +**Specifier:** `highway=secondary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #74

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #75

+ +**Specifier:** `highway=primary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #76

+ +**Specifier:** `highway=primary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #77

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #78

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #79

+ +**Specifier:** `present(highway); cycleway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #80

+ +**Specifier:** `highway=service; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #81

+ +**Specifier:** `highway=residential; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #82

+ +**Specifier:** `highway=residential_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #83

+ +**Specifier:** `highway=tertiary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #84

+ +**Specifier:** `highway=tertiary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #85

+ +**Specifier:** `highway=secondary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #86

+ +**Specifier:** `highway=secondary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #87

+ +**Specifier:** `highway=primary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #88

+ +**Specifier:** `highway=primary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #89

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #90

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #91

+ +**Specifier:** `present(highway); cycleway=opposite_track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #92

+ +**Specifier:** `highway=service; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #93

+ +**Specifier:** `highway=residential; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #94

+ +**Specifier:** `highway=residential_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #95

+ +**Specifier:** `highway=tertiary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #96

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #97

+ +**Specifier:** `highway=secondary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #98

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #99

+ +**Specifier:** `highway=primary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #100

+ +**Specifier:** `highway=primary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #101

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #102

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #103

+ +**Specifier:** `present(highway); cycleway=shared_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #104

+ +**Specifier:** `highway=service; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.73, back: 0.73 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #105

+ +**Specifier:** `highway=residential; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #106

+ +**Specifier:** `highway=residential_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #107

+ +**Specifier:** `highway=tertiary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #108

+ +**Specifier:** `highway=tertiary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #109

+ +**Specifier:** `highway=secondary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #110

+ +**Specifier:** `highway=secondary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #111

+ +**Specifier:** `highway=primary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #112

+ +**Specifier:** `highway=primary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #113

+ +**Specifier:** `present(highway); cycleway=opposite` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.4 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #114

+ +**Specifier:** `highway=service; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #115

+ +**Specifier:** `highway=residential; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #116

+ +**Specifier:** `highway=residential_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #117

+ +**Specifier:** `highway=tertiary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #118

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #119

+ +**Specifier:** `highway=secondary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #120

+ +**Specifier:** `highway=secondary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #121

+ +**Specifier:** `highway=primary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #122

+ +**Specifier:** `highway=primary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #123

+ +**Specifier:** `highway=path; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #124

+ +**Specifier:** `highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #125

+ +**Specifier:** `highway=footway; bicycle=yes; area=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #126

+ +**Specifier:** `highway=pedestrian; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #127

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #128

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #129

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #130

+ +**Specifier:** `highway=footway; footway=crossing; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #131

+ +**Specifier:** `highway=track; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #132

+ +**Specifier:** `highway=track; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #133

+ +**Specifier:** `highway=track; bicycle=yes; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #134

+ +**Specifier:** `highway=track; bicycle=designated; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #135

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #136

+ +**Specifier:** `present(highway); bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #137

+ +**Specifier:** `highway=service; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.84, back: 0.84 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #138

+ +**Specifier:** `highway=residential; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #139

+ +**Specifier:** `highway=unclassified; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #140

+ +**Specifier:** `highway=residential_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #141

+ +**Specifier:** `highway=tertiary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #142

+ +**Specifier:** `highway=tertiary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #143

+ +**Specifier:** `highway=secondary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #144

+ +**Specifier:** `highway=secondary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #145

+ +**Specifier:** `highway=primary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #146

+ +**Specifier:** `highway=primary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #147

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #148

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #149

+ +**Specifier:** `highway=motorway; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.76, back: 7.76 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #150

+ +**Specifier:** `highway=motorway_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/docs/osm/Default.md b/docs/osm/Default.md new file mode 100644 index 00000000000..fe2b8895b23 --- /dev/null +++ b/docs/osm/Default.md @@ -0,0 +1,1254 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|---------------------------------------------------------|------------------------|--------| +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + + + + +

Rule #0

+ +**Specifier:** `mtb:scale=3` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `mtb:scale=4` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `mtb:scale=5` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `mtb:scale=6` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `highway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `railway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `mtb:scale=1` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `mtb:scale=2` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #13

+ +**Specifier:** `mtb:scale=0` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #14

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #16

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #17

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #18

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #22

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #23

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #27

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #29

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #30

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #31

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #32

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #33

+ +**Specifier:** `highway=trunk_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #34

+ +**Specifier:** `highway=motorway_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #35

+ +**Specifier:** `highway=trunk` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #36

+ +**Specifier:** `highway=motorway` +**Permission:** CAR +**Bike safety factor:** forward: 8.0, back: 8.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #37

+ +**Specifier:** `present(highway); cycleway=lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #38

+ +**Specifier:** `highway=service; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #39

+ +**Specifier:** `highway=residential; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #40

+ +**Specifier:** `highway=residential_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #41

+ +**Specifier:** `highway=tertiary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #42

+ +**Specifier:** `highway=tertiary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `highway=secondary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #44

+ +**Specifier:** `highway=secondary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #45

+ +**Specifier:** `highway=primary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #46

+ +**Specifier:** `highway=primary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #47

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #48

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #49

+ +**Specifier:** `highway=motorway; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #50

+ +**Specifier:** `highway=motorway_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #51

+ +**Specifier:** `present(highway); cycleway=share_busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #52

+ +**Specifier:** `highway=service; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #53

+ +**Specifier:** `highway=residential; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #54

+ +**Specifier:** `highway=residential_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #55

+ +**Specifier:** `highway=tertiary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #56

+ +**Specifier:** `highway=tertiary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #57

+ +**Specifier:** `highway=secondary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #58

+ +**Specifier:** `highway=secondary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #59

+ +**Specifier:** `highway=primary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #60

+ +**Specifier:** `highway=primary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #61

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #62

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #63

+ +**Specifier:** `highway=motorway; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #64

+ +**Specifier:** `highway=motorway_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #65

+ +**Specifier:** `present(highway); cycleway=opposite_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #66

+ +**Specifier:** `highway=service; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #67

+ +**Specifier:** `highway=residential; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #68

+ +**Specifier:** `highway=residential_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #69

+ +**Specifier:** `highway=tertiary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #70

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #71

+ +**Specifier:** `highway=secondary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #72

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #73

+ +**Specifier:** `highway=primary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #74

+ +**Specifier:** `highway=primary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #75

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #76

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #77

+ +**Specifier:** `present(highway); cycleway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #78

+ +**Specifier:** `highway=service; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #79

+ +**Specifier:** `highway=residential; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #80

+ +**Specifier:** `highway=residential_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #81

+ +**Specifier:** `highway=tertiary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #82

+ +**Specifier:** `highway=tertiary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #83

+ +**Specifier:** `highway=secondary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #84

+ +**Specifier:** `highway=secondary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #85

+ +**Specifier:** `highway=primary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #86

+ +**Specifier:** `highway=primary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #87

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #88

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #89

+ +**Specifier:** `present(highway); cycleway=opposite_track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #90

+ +**Specifier:** `highway=service; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #91

+ +**Specifier:** `highway=residential; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #92

+ +**Specifier:** `highway=residential_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #93

+ +**Specifier:** `highway=tertiary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #94

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #95

+ +**Specifier:** `highway=secondary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #96

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #97

+ +**Specifier:** `highway=primary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #98

+ +**Specifier:** `highway=primary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #99

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #100

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #101

+ +**Specifier:** `present(highway); cycleway=shared_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #102

+ +**Specifier:** `highway=service; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.73, back: 0.73 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #103

+ +**Specifier:** `highway=residential; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #104

+ +**Specifier:** `highway=residential_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #105

+ +**Specifier:** `highway=tertiary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #106

+ +**Specifier:** `highway=tertiary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #107

+ +**Specifier:** `highway=secondary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #108

+ +**Specifier:** `highway=secondary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #109

+ +**Specifier:** `highway=primary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #110

+ +**Specifier:** `highway=primary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #111

+ +**Specifier:** `present(highway); cycleway=opposite` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.4 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #112

+ +**Specifier:** `highway=service; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #113

+ +**Specifier:** `highway=residential; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #114

+ +**Specifier:** `highway=residential_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #115

+ +**Specifier:** `highway=tertiary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #116

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #117

+ +**Specifier:** `highway=secondary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #118

+ +**Specifier:** `highway=secondary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #119

+ +**Specifier:** `highway=primary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #120

+ +**Specifier:** `highway=primary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #121

+ +**Specifier:** `highway=path; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #122

+ +**Specifier:** `highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #123

+ +**Specifier:** `highway=footway; bicycle=yes; area=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #124

+ +**Specifier:** `highway=pedestrian; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #125

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #126

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #127

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #128

+ +**Specifier:** `highway=footway; footway=crossing; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #129

+ +**Specifier:** `highway=track; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #130

+ +**Specifier:** `highway=track; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #131

+ +**Specifier:** `highway=track; bicycle=yes; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #132

+ +**Specifier:** `highway=track; bicycle=designated; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #133

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #134

+ +**Specifier:** `present(highway); bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #135

+ +**Specifier:** `highway=service; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.84, back: 0.84 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #136

+ +**Specifier:** `highway=residential; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #137

+ +**Specifier:** `highway=unclassified; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #138

+ +**Specifier:** `highway=residential_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #139

+ +**Specifier:** `highway=tertiary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #140

+ +**Specifier:** `highway=tertiary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #141

+ +**Specifier:** `highway=secondary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #142

+ +**Specifier:** `highway=secondary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #143

+ +**Specifier:** `highway=primary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #144

+ +**Specifier:** `highway=primary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #145

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #146

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #147

+ +**Specifier:** `highway=motorway; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.76, back: 7.76 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #148

+ +**Specifier:** `highway=motorway_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/docs/osm/Finland.md b/docs/osm/Finland.md new file mode 100644 index 00000000000..2cd77be22ea --- /dev/null +++ b/docs/osm/Finland.md @@ -0,0 +1,1607 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|---------------------------------------------------------------------------------|------------------------|--------| +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | ALL | 🚴 | +| `highway=trunk` | ALL | 🚴 | +| `highway=trunk; tunnel=yes` | CAR | 🚴 | +| `motorroad=yes` | CAR | 🚴 | +| `present(highway); informal=yes` | NONE | | +| `highway=service; access=private` | NONE | | +| `highway=trail` | NONE | | +| `present(highway); seasonal=winter` | NONE | | +| `present(highway); ice_road=yes` | NONE | | +| `present(highway); winter_road=yes` | NONE | | +| `highway=footway` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `highway=cycleway; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=footway; bridge=yes` | PEDESTRIAN | | +| `highway=footway; tunnel=yes` | PEDESTRIAN | | +| `highway=cycleway; bridge=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=cycleway; tunnel=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; crossing=traffic_signals` | PEDESTRIAN | 🚶 | +| `highway=footway; footway=crossing` | PEDESTRIAN | 🚶 | +| `highway=cycleway; cycleway=crossing; segregated=yes; crossing=traffic_signals` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; footway=crossing; segregated=yes; crossing=traffic_signals` | PEDESTRIAN | 🚴 🚶 | +| `highway=cycleway; cycleway=crossing; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; footway=crossing; segregated=yes` | PEDESTRIAN | 🚴 🚶 | +| `highway=cycleway; cycleway=crossing; crossing=traffic_signals` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; footway=crossing; crossing=traffic_signals` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; cycleway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; tunnel=yes; access=destination` | NONE | | +| `highway=service; access=destination` | ALL | 🚴 | +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + + + + +

Rule #0

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #13

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #14

+ +**Specifier:** `highway=trunk_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `highway=trunk` +**Permission:** ALL +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #16

+ +**Specifier:** `highway=trunk; tunnel=yes` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #17

+ +**Specifier:** `motorroad=yes` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #18

+ +**Specifier:** `present(highway); informal=yes` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `highway=service; access=private` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `highway=trail` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `present(highway); seasonal=winter` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #22

+ +**Specifier:** `present(highway); ice_road=yes` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #23

+ +**Specifier:** `present(highway); winter_road=yes` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `highway=cycleway; segregated=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.1, back: 1.1 + +

Rule #27

+ +**Specifier:** `highway=footway; bridge=yes` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=footway; tunnel=yes` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #29

+ +**Specifier:** `highway=cycleway; bridge=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #30

+ +**Specifier:** `highway=cycleway; tunnel=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #31

+ +**Specifier:** `highway=footway; footway=crossing; crossing=traffic_signals` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.1, back: 1.1 + +

Rule #32

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.2, back: 1.2 + +

Rule #33

+ +**Specifier:** `highway=cycleway; cycleway=crossing; segregated=yes; crossing=traffic_signals` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.1, back: 1.1 + +

Rule #34

+ +**Specifier:** `highway=cycleway; footway=crossing; segregated=yes; crossing=traffic_signals` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.1, back: 1.1 + +

Rule #35

+ +**Specifier:** `highway=cycleway; cycleway=crossing; segregated=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.2, back: 1.2 +**Walk safety factor:** forward: 1.2, back: 1.2 + +

Rule #36

+ +**Specifier:** `highway=cycleway; footway=crossing; segregated=yes` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.2, back: 1.2 +**Walk safety factor:** forward: 1.2, back: 1.2 + +

Rule #37

+ +**Specifier:** `highway=cycleway; cycleway=crossing; crossing=traffic_signals` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.15, back: 1.15 + +

Rule #38

+ +**Specifier:** `highway=cycleway; footway=crossing; crossing=traffic_signals` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.15, back: 1.15 + +

Rule #39

+ +**Specifier:** `highway=cycleway; cycleway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.2, back: 1.2 +**Walk safety factor:** forward: 1.25, back: 1.25 + +

Rule #40

+ +**Specifier:** `highway=cycleway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.2, back: 1.2 +**Walk safety factor:** forward: 1.25, back: 1.25 + +

Rule #41

+ +**Specifier:** `highway=cycleway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #42

+ +**Specifier:** `highway=service; tunnel=yes; access=destination` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `highway=service; access=destination` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #44

+ +**Specifier:** `mtb:scale=3` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #45

+ +**Specifier:** `mtb:scale=4` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #46

+ +**Specifier:** `mtb:scale=5` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #47

+ +**Specifier:** `mtb:scale=6` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #48

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #49

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #50

+ +**Specifier:** `highway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #51

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #52

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #53

+ +**Specifier:** `railway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #54

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #55

+ +**Specifier:** `mtb:scale=1` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #56

+ +**Specifier:** `mtb:scale=2` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #57

+ +**Specifier:** `mtb:scale=0` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #58

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #59

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #60

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #61

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #62

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #63

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #64

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #65

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #66

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #67

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #68

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #69

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #70

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #71

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #72

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #73

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #74

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #75

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #76

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #77

+ +**Specifier:** `highway=trunk_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #78

+ +**Specifier:** `highway=motorway_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #79

+ +**Specifier:** `highway=trunk` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #80

+ +**Specifier:** `highway=motorway` +**Permission:** CAR +**Bike safety factor:** forward: 8.0, back: 8.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #81

+ +**Specifier:** `present(highway); cycleway=lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #82

+ +**Specifier:** `highway=service; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #83

+ +**Specifier:** `highway=residential; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #84

+ +**Specifier:** `highway=residential_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #85

+ +**Specifier:** `highway=tertiary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #86

+ +**Specifier:** `highway=tertiary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #87

+ +**Specifier:** `highway=secondary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #88

+ +**Specifier:** `highway=secondary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #89

+ +**Specifier:** `highway=primary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #90

+ +**Specifier:** `highway=primary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #91

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #92

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #93

+ +**Specifier:** `highway=motorway; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #94

+ +**Specifier:** `highway=motorway_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #95

+ +**Specifier:** `present(highway); cycleway=share_busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #96

+ +**Specifier:** `highway=service; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #97

+ +**Specifier:** `highway=residential; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #98

+ +**Specifier:** `highway=residential_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #99

+ +**Specifier:** `highway=tertiary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #100

+ +**Specifier:** `highway=tertiary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #101

+ +**Specifier:** `highway=secondary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #102

+ +**Specifier:** `highway=secondary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #103

+ +**Specifier:** `highway=primary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #104

+ +**Specifier:** `highway=primary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #105

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #106

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #107

+ +**Specifier:** `highway=motorway; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #108

+ +**Specifier:** `highway=motorway_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #109

+ +**Specifier:** `present(highway); cycleway=opposite_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #110

+ +**Specifier:** `highway=service; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #111

+ +**Specifier:** `highway=residential; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #112

+ +**Specifier:** `highway=residential_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #113

+ +**Specifier:** `highway=tertiary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #114

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #115

+ +**Specifier:** `highway=secondary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #116

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #117

+ +**Specifier:** `highway=primary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #118

+ +**Specifier:** `highway=primary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #119

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #120

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #121

+ +**Specifier:** `present(highway); cycleway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #122

+ +**Specifier:** `highway=service; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #123

+ +**Specifier:** `highway=residential; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #124

+ +**Specifier:** `highway=residential_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #125

+ +**Specifier:** `highway=tertiary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #126

+ +**Specifier:** `highway=tertiary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #127

+ +**Specifier:** `highway=secondary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #128

+ +**Specifier:** `highway=secondary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #129

+ +**Specifier:** `highway=primary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #130

+ +**Specifier:** `highway=primary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #131

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #132

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #133

+ +**Specifier:** `present(highway); cycleway=opposite_track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #134

+ +**Specifier:** `highway=service; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #135

+ +**Specifier:** `highway=residential; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #136

+ +**Specifier:** `highway=residential_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #137

+ +**Specifier:** `highway=tertiary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #138

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #139

+ +**Specifier:** `highway=secondary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #140

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #141

+ +**Specifier:** `highway=primary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #142

+ +**Specifier:** `highway=primary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #143

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #144

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #145

+ +**Specifier:** `present(highway); cycleway=shared_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #146

+ +**Specifier:** `highway=service; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.73, back: 0.73 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #147

+ +**Specifier:** `highway=residential; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #148

+ +**Specifier:** `highway=residential_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #149

+ +**Specifier:** `highway=tertiary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #150

+ +**Specifier:** `highway=tertiary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #151

+ +**Specifier:** `highway=secondary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #152

+ +**Specifier:** `highway=secondary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #153

+ +**Specifier:** `highway=primary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #154

+ +**Specifier:** `highway=primary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #155

+ +**Specifier:** `present(highway); cycleway=opposite` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.4 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #156

+ +**Specifier:** `highway=service; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #157

+ +**Specifier:** `highway=residential; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #158

+ +**Specifier:** `highway=residential_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #159

+ +**Specifier:** `highway=tertiary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #160

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #161

+ +**Specifier:** `highway=secondary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #162

+ +**Specifier:** `highway=secondary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #163

+ +**Specifier:** `highway=primary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #164

+ +**Specifier:** `highway=primary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #165

+ +**Specifier:** `highway=path; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #166

+ +**Specifier:** `highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #167

+ +**Specifier:** `highway=footway; bicycle=yes; area=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #168

+ +**Specifier:** `highway=pedestrian; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #169

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #170

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #171

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #172

+ +**Specifier:** `highway=footway; footway=crossing; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #173

+ +**Specifier:** `highway=track; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #174

+ +**Specifier:** `highway=track; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #175

+ +**Specifier:** `highway=track; bicycle=yes; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #176

+ +**Specifier:** `highway=track; bicycle=designated; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #177

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #178

+ +**Specifier:** `present(highway); bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #179

+ +**Specifier:** `highway=service; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.84, back: 0.84 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #180

+ +**Specifier:** `highway=residential; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #181

+ +**Specifier:** `highway=unclassified; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #182

+ +**Specifier:** `highway=residential_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #183

+ +**Specifier:** `highway=tertiary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #184

+ +**Specifier:** `highway=tertiary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #185

+ +**Specifier:** `highway=secondary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #186

+ +**Specifier:** `highway=secondary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #187

+ +**Specifier:** `highway=primary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #188

+ +**Specifier:** `highway=primary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #189

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #190

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #191

+ +**Specifier:** `highway=motorway; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.76, back: 7.76 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #192

+ +**Specifier:** `highway=motorway_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `bicycle=use_sidepath` | 🚶 | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/docs/osm/Germany.md b/docs/osm/Germany.md new file mode 100644 index 00000000000..b6d218f95e7 --- /dev/null +++ b/docs/osm/Germany.md @@ -0,0 +1,1337 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|---------------------------------------------------------|------------------------|--------| +| `highway=track` | PEDESTRIAN_AND_BICYCLE | | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | | +| `highway=residential; junction=roundabout` | ALL | 🚴 | +| `present(highway); junction=roundabout` | BICYCLE_AND_CAR | | +| `highway=pedestrian` | PEDESTRIAN | | +| `highway=residential; maxspeed=30` | ALL | 🚴 | +| `highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=unclassified; cycleway=lane` | ALL | 🚴 | +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + + + + +

Rule #0

+ +**Specifier:** `highway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `highway=residential; junction=roundabout` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `present(highway); junction=roundabout` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `highway=residential; maxspeed=30` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.2, back: 1.2 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `highway=unclassified; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `mtb:scale=3` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `mtb:scale=4` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `mtb:scale=5` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `mtb:scale=6` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #13

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #14

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `highway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #16

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #17

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #18

+ +**Specifier:** `railway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `mtb:scale=1` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `mtb:scale=2` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #22

+ +**Specifier:** `mtb:scale=0` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #23

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #27

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #29

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #30

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #31

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #32

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #33

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #34

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #35

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #36

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #37

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #38

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #39

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #40

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #41

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #42

+ +**Specifier:** `highway=trunk_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `highway=motorway_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #44

+ +**Specifier:** `highway=trunk` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #45

+ +**Specifier:** `highway=motorway` +**Permission:** CAR +**Bike safety factor:** forward: 8.0, back: 8.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #46

+ +**Specifier:** `present(highway); cycleway=lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #47

+ +**Specifier:** `highway=service; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #48

+ +**Specifier:** `highway=residential; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #49

+ +**Specifier:** `highway=residential_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #50

+ +**Specifier:** `highway=tertiary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #51

+ +**Specifier:** `highway=tertiary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #52

+ +**Specifier:** `highway=secondary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #53

+ +**Specifier:** `highway=secondary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #54

+ +**Specifier:** `highway=primary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #55

+ +**Specifier:** `highway=primary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #56

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #57

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #58

+ +**Specifier:** `highway=motorway; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #59

+ +**Specifier:** `highway=motorway_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #60

+ +**Specifier:** `present(highway); cycleway=share_busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #61

+ +**Specifier:** `highway=service; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #62

+ +**Specifier:** `highway=residential; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #63

+ +**Specifier:** `highway=residential_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #64

+ +**Specifier:** `highway=tertiary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #65

+ +**Specifier:** `highway=tertiary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #66

+ +**Specifier:** `highway=secondary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #67

+ +**Specifier:** `highway=secondary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #68

+ +**Specifier:** `highway=primary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #69

+ +**Specifier:** `highway=primary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #70

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #71

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #72

+ +**Specifier:** `highway=motorway; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #73

+ +**Specifier:** `highway=motorway_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #74

+ +**Specifier:** `present(highway); cycleway=opposite_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #75

+ +**Specifier:** `highway=service; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #76

+ +**Specifier:** `highway=residential; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #77

+ +**Specifier:** `highway=residential_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #78

+ +**Specifier:** `highway=tertiary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #79

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #80

+ +**Specifier:** `highway=secondary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #81

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #82

+ +**Specifier:** `highway=primary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #83

+ +**Specifier:** `highway=primary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #84

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #85

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #86

+ +**Specifier:** `present(highway); cycleway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #87

+ +**Specifier:** `highway=service; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #88

+ +**Specifier:** `highway=residential; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #89

+ +**Specifier:** `highway=residential_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #90

+ +**Specifier:** `highway=tertiary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #91

+ +**Specifier:** `highway=tertiary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #92

+ +**Specifier:** `highway=secondary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #93

+ +**Specifier:** `highway=secondary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #94

+ +**Specifier:** `highway=primary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #95

+ +**Specifier:** `highway=primary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #96

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #97

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #98

+ +**Specifier:** `present(highway); cycleway=opposite_track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #99

+ +**Specifier:** `highway=service; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #100

+ +**Specifier:** `highway=residential; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #101

+ +**Specifier:** `highway=residential_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #102

+ +**Specifier:** `highway=tertiary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #103

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #104

+ +**Specifier:** `highway=secondary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #105

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #106

+ +**Specifier:** `highway=primary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #107

+ +**Specifier:** `highway=primary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #108

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #109

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #110

+ +**Specifier:** `present(highway); cycleway=shared_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #111

+ +**Specifier:** `highway=service; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.73, back: 0.73 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #112

+ +**Specifier:** `highway=residential; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #113

+ +**Specifier:** `highway=residential_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #114

+ +**Specifier:** `highway=tertiary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #115

+ +**Specifier:** `highway=tertiary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #116

+ +**Specifier:** `highway=secondary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #117

+ +**Specifier:** `highway=secondary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #118

+ +**Specifier:** `highway=primary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #119

+ +**Specifier:** `highway=primary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #120

+ +**Specifier:** `present(highway); cycleway=opposite` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.4 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #121

+ +**Specifier:** `highway=service; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #122

+ +**Specifier:** `highway=residential; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #123

+ +**Specifier:** `highway=residential_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #124

+ +**Specifier:** `highway=tertiary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #125

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #126

+ +**Specifier:** `highway=secondary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #127

+ +**Specifier:** `highway=secondary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #128

+ +**Specifier:** `highway=primary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #129

+ +**Specifier:** `highway=primary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #130

+ +**Specifier:** `highway=path; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #131

+ +**Specifier:** `highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #132

+ +**Specifier:** `highway=footway; bicycle=yes; area=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #133

+ +**Specifier:** `highway=pedestrian; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #134

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #135

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #136

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #137

+ +**Specifier:** `highway=footway; footway=crossing; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #138

+ +**Specifier:** `highway=track; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #139

+ +**Specifier:** `highway=track; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #140

+ +**Specifier:** `highway=track; bicycle=yes; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #141

+ +**Specifier:** `highway=track; bicycle=designated; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #142

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #143

+ +**Specifier:** `present(highway); bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #144

+ +**Specifier:** `highway=service; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.84, back: 0.84 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #145

+ +**Specifier:** `highway=residential; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #146

+ +**Specifier:** `highway=unclassified; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #147

+ +**Specifier:** `highway=residential_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #148

+ +**Specifier:** `highway=tertiary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #149

+ +**Specifier:** `highway=tertiary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #150

+ +**Specifier:** `highway=secondary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #151

+ +**Specifier:** `highway=secondary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #152

+ +**Specifier:** `highway=primary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #153

+ +**Specifier:** `highway=primary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #154

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #155

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #156

+ +**Specifier:** `highway=motorway; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.76, back: 7.76 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #157

+ +**Specifier:** `highway=motorway_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `highway=tertiary` | 🚴 | +| `maxspeed=70` | 🚴 | +| `maxspeed=80` | 🚴 | +| `maxspeed=90` | 🚴 | +| `maxspeed=100` | 🚴 | +| `tracktype=grade1` | | +| `tracktype=grade2` | 🚴 | +| `tracktype=grade3` | 🚴 | +| `tracktype=grade4` | 🚴 | +| `tracktype=grade5` | 🚴 | +| `lit=no` | 🚴 | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/docs/osm/Hamburg.md b/docs/osm/Hamburg.md new file mode 100644 index 00000000000..2cdd3068ca6 --- /dev/null +++ b/docs/osm/Hamburg.md @@ -0,0 +1,217 @@ +## OSM tag mapping + + + + +| matcher | permission | safety | +|---------------------------------------------------------|------------------------|--------| +| `highway=track` | PEDESTRIAN_AND_BICYCLE | | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | | +| `highway=residential; junction=roundabout` | ALL | 🚴 | +| `present(highway); junction=roundabout` | BICYCLE_AND_CAR | | +| `highway=pedestrian` | PEDESTRIAN | | +| `highway=residential; maxspeed=30` | ALL | 🚴 | +| `highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=unclassified; cycleway=lane` | ALL | 🚴 | +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + +### Bicycle and walking safety mixins + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `highway=tertiary` | 🚴 | +| `maxspeed=70` | 🚴 | +| `maxspeed=80` | 🚴 | +| `maxspeed=90` | 🚴 | +| `maxspeed=100` | 🚴 | +| `tracktype=grade1` | | +| `tracktype=grade2` | 🚴 | +| `tracktype=grade3` | 🚴 | +| `tracktype=grade4` | 🚴 | +| `tracktype=grade5` | 🚴 | +| `lit=no` | 🚴 | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/docs/osm/Houston.md b/docs/osm/Houston.md new file mode 100644 index 00000000000..8071d9a0a8a --- /dev/null +++ b/docs/osm/Houston.md @@ -0,0 +1,1262 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|---------------------------------------------------------|------------------------|--------| +| `highway=footway; layer=-1; tunnel=yes; indoor=yes` | NONE | | +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + + + + +

Rule #0

+ +**Specifier:** `highway=footway; layer=-1; tunnel=yes; indoor=yes` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `mtb:scale=3` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `mtb:scale=4` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `mtb:scale=5` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `mtb:scale=6` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `highway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `railway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `mtb:scale=1` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #13

+ +**Specifier:** `mtb:scale=2` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #14

+ +**Specifier:** `mtb:scale=0` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #16

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #17

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #18

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #22

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #23

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #27

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #29

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #30

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #31

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #32

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #33

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #34

+ +**Specifier:** `highway=trunk_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #35

+ +**Specifier:** `highway=motorway_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #36

+ +**Specifier:** `highway=trunk` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #37

+ +**Specifier:** `highway=motorway` +**Permission:** CAR +**Bike safety factor:** forward: 8.0, back: 8.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #38

+ +**Specifier:** `present(highway); cycleway=lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #39

+ +**Specifier:** `highway=service; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #40

+ +**Specifier:** `highway=residential; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #41

+ +**Specifier:** `highway=residential_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #42

+ +**Specifier:** `highway=tertiary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `highway=tertiary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #44

+ +**Specifier:** `highway=secondary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #45

+ +**Specifier:** `highway=secondary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #46

+ +**Specifier:** `highway=primary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #47

+ +**Specifier:** `highway=primary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #48

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #49

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #50

+ +**Specifier:** `highway=motorway; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #51

+ +**Specifier:** `highway=motorway_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #52

+ +**Specifier:** `present(highway); cycleway=share_busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #53

+ +**Specifier:** `highway=service; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #54

+ +**Specifier:** `highway=residential; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #55

+ +**Specifier:** `highway=residential_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #56

+ +**Specifier:** `highway=tertiary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #57

+ +**Specifier:** `highway=tertiary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #58

+ +**Specifier:** `highway=secondary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #59

+ +**Specifier:** `highway=secondary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #60

+ +**Specifier:** `highway=primary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #61

+ +**Specifier:** `highway=primary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #62

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #63

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #64

+ +**Specifier:** `highway=motorway; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #65

+ +**Specifier:** `highway=motorway_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #66

+ +**Specifier:** `present(highway); cycleway=opposite_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #67

+ +**Specifier:** `highway=service; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #68

+ +**Specifier:** `highway=residential; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #69

+ +**Specifier:** `highway=residential_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #70

+ +**Specifier:** `highway=tertiary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #71

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #72

+ +**Specifier:** `highway=secondary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #73

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #74

+ +**Specifier:** `highway=primary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #75

+ +**Specifier:** `highway=primary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #76

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #77

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #78

+ +**Specifier:** `present(highway); cycleway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #79

+ +**Specifier:** `highway=service; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #80

+ +**Specifier:** `highway=residential; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #81

+ +**Specifier:** `highway=residential_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #82

+ +**Specifier:** `highway=tertiary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #83

+ +**Specifier:** `highway=tertiary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #84

+ +**Specifier:** `highway=secondary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #85

+ +**Specifier:** `highway=secondary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #86

+ +**Specifier:** `highway=primary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #87

+ +**Specifier:** `highway=primary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #88

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #89

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #90

+ +**Specifier:** `present(highway); cycleway=opposite_track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #91

+ +**Specifier:** `highway=service; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #92

+ +**Specifier:** `highway=residential; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #93

+ +**Specifier:** `highway=residential_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #94

+ +**Specifier:** `highway=tertiary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #95

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #96

+ +**Specifier:** `highway=secondary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #97

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #98

+ +**Specifier:** `highway=primary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #99

+ +**Specifier:** `highway=primary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #100

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #101

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #102

+ +**Specifier:** `present(highway); cycleway=shared_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #103

+ +**Specifier:** `highway=service; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.73, back: 0.73 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #104

+ +**Specifier:** `highway=residential; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #105

+ +**Specifier:** `highway=residential_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #106

+ +**Specifier:** `highway=tertiary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #107

+ +**Specifier:** `highway=tertiary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #108

+ +**Specifier:** `highway=secondary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #109

+ +**Specifier:** `highway=secondary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #110

+ +**Specifier:** `highway=primary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #111

+ +**Specifier:** `highway=primary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #112

+ +**Specifier:** `present(highway); cycleway=opposite` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.4 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #113

+ +**Specifier:** `highway=service; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #114

+ +**Specifier:** `highway=residential; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #115

+ +**Specifier:** `highway=residential_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #116

+ +**Specifier:** `highway=tertiary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #117

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #118

+ +**Specifier:** `highway=secondary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #119

+ +**Specifier:** `highway=secondary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #120

+ +**Specifier:** `highway=primary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #121

+ +**Specifier:** `highway=primary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #122

+ +**Specifier:** `highway=path; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #123

+ +**Specifier:** `highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #124

+ +**Specifier:** `highway=footway; bicycle=yes; area=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #125

+ +**Specifier:** `highway=pedestrian; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #126

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #127

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #128

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #129

+ +**Specifier:** `highway=footway; footway=crossing; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #130

+ +**Specifier:** `highway=track; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #131

+ +**Specifier:** `highway=track; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #132

+ +**Specifier:** `highway=track; bicycle=yes; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #133

+ +**Specifier:** `highway=track; bicycle=designated; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #134

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #135

+ +**Specifier:** `present(highway); bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #136

+ +**Specifier:** `highway=service; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.84, back: 0.84 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #137

+ +**Specifier:** `highway=residential; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #138

+ +**Specifier:** `highway=unclassified; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #139

+ +**Specifier:** `highway=residential_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #140

+ +**Specifier:** `highway=tertiary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #141

+ +**Specifier:** `highway=tertiary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #142

+ +**Specifier:** `highway=secondary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #143

+ +**Specifier:** `highway=secondary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #144

+ +**Specifier:** `highway=primary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #145

+ +**Specifier:** `highway=primary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #146

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #147

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #148

+ +**Specifier:** `highway=motorway; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.76, back: 7.76 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #149

+ +**Specifier:** `highway=motorway_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/docs/osm/Norway.md b/docs/osm/Norway.md new file mode 100644 index 00000000000..00ba1b4bf51 --- /dev/null +++ b/docs/osm/Norway.md @@ -0,0 +1,428 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|--------| +| `highway one of [motorway, motorway_link]` | CAR | | +| `highway one of [trunk, trunk_link, primary, primary_link]; motorroad=yes` | CAR | | +| `highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | ALL | | +| `cycleway=track; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | ALL | | +| `cycleway=lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` | ALL | 🚴 | +| `cycleway=lane; maxspeed < 50; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` | ALL | 🚴 | +| `cycleway=lane; highway one of [unclassified, residential]` | ALL | 🚴 | +| `highway=service` | ALL | | +| `highway=service; service=parking_aisle` | ALL | 🚴 | +| `highway=service; service=drive-through` | ALL | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=busway` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=service; bus one of [yes, designated]` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; lanes > 1` | PEDESTRIAN_AND_BICYCLE | 🚶 | +| `highway=cycleway; oneway=yes` | PEDESTRIAN_AND_BICYCLE | 🚶 | +| `highway=cycleway; sidewalk one of [yes, left, right, both]` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=cycleway; lanes > 1; sidewalk one of [yes, left, right, both]` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway; oneway=yes; sidewalk one of [yes, left, right, both]` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway; foot=designated; segregated=no` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=path; foot=designated; bicycle=designated; segregated=no` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; foot=designated; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path; foot=designated; bicycle=designated; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=cycleway; foot=designated; segregated=yes; lanes > 1` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway; foot=designated; present(segregated); motor_vehicle=destination` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path; foot=designated; bicycle=designated; present(segregated); motor_vehicle=destination` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=sidewalk` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=cycleway; cycleway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | +| `highway=track` | PEDESTRIAN_AND_BICYCLE | | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | | +| `highway=steps` | PEDESTRIAN | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=footway; indoor=yes` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `trail_visibility one of [bad, low, poor, horrible, no]; highway=path` | NONE | | +| `sac_scale one of [demanding_mountain_hiking, alpine_hiking, demanding_alpine_hiking, difficult_alpine_hiking]; highway one of [path, steps]` | NONE | | +| `smoothness one of [horrible, very_horrible]; highway one of [path, bridleway, track]` | PEDESTRIAN | 🚶 | +| `smoothness=impassable; highway one of [path, bridleway, track]` | NONE | | +| `1 > mtb:scale < 2; highway one of [path, bridleway, track]` | PEDESTRIAN | 🚶 | +| `mtb:scale > 2; highway one of [path, bridleway, track]` | NONE | | + + + + + + +

Rule #0

+ +**Specifier:** `highway one of [motorway, motorway_link]` +**Permission:** CAR +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `highway one of [trunk, trunk_link, primary, primary_link]; motorroad=yes` +**Permission:** CAR +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `cycleway=track; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `cycleway=lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` +**Permission:** ALL +**Bike safety factor:** forward: 1.27, back: 1.27 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `cycleway=lane; maxspeed < 50; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `cycleway=lane; highway one of [unclassified, residential]` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `highway=service; service=parking_aisle` +**Permission:** ALL +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `highway=service; service=drive-through` +**Permission:** ALL +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 1.83, back: 1.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.2, back: 1.2 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `highway=busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.37, back: 2.37 +**Walk safety factor:** forward: 1.9, back: 1.9 + +

Rule #13

+ +**Specifier:** `highway=service; bus one of [yes, designated]` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.37, back: 2.37 +**Walk safety factor:** forward: 1.9, back: 1.9 + +

Rule #14

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.42, back: 1.42 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.05, back: 1.05 +**Walk safety factor:** forward: 1.4, back: 1.4 + +

Rule #16

+ +**Specifier:** `highway=cycleway; lanes > 1` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.4, back: 1.4 + +

Rule #17

+ +**Specifier:** `highway=cycleway; oneway=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.4, back: 1.4 + +

Rule #18

+ +**Specifier:** `highway=cycleway; sidewalk one of [yes, left, right, both]` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.05, back: 1.05 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `highway=cycleway; lanes > 1; sidewalk one of [yes, left, right, both]` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `highway=cycleway; oneway=yes; sidewalk one of [yes, left, right, both]` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `highway=cycleway; foot=designated; segregated=no` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.05, back: 1.05 +**Walk safety factor:** forward: 1.15, back: 1.15 + +

Rule #22

+ +**Specifier:** `highway=path; foot=designated; bicycle=designated; segregated=no` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.05, back: 1.05 +**Walk safety factor:** forward: 1.15, back: 1.15 + +

Rule #23

+ +**Specifier:** `highway=cycleway; foot=designated; segregated=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.05, back: 1.05 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `highway=path; foot=designated; bicycle=designated; segregated=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.05, back: 1.05 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `highway=cycleway; foot=designated; segregated=yes; lanes > 1` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `highway=cycleway; foot=designated; present(segregated); motor_vehicle=destination` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.57, back: 1.57 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #27

+ +**Specifier:** `highway=path; foot=designated; bicycle=designated; present(segregated); motor_vehicle=destination` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.57, back: 1.57 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=footway; footway=sidewalk` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.93, back: 1.93 +**Walk safety factor:** forward: 1.1, back: 1.1 + +

Rule #29

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.33, back: 2.33 +**Walk safety factor:** forward: 1.35, back: 1.35 + +

Rule #30

+ +**Specifier:** `highway=cycleway; cycleway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.33, back: 2.33 +**Walk safety factor:** forward: 1.35, back: 1.35 + +

Rule #31

+ +**Specifier:** `highway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #32

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #33

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #34

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #35

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #36

+ +**Specifier:** `highway=footway; indoor=yes` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #37

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #38

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #39

+ +**Specifier:** `trail_visibility one of [bad, low, poor, horrible, no]; highway=path` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #40

+ +**Specifier:** `sac_scale one of [demanding_mountain_hiking, alpine_hiking, demanding_alpine_hiking, difficult_alpine_hiking]; highway one of [path, steps]` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #41

+ +**Specifier:** `smoothness one of [horrible, very_horrible]; highway one of [path, bridleway, track]` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.15, back: 1.15 + +

Rule #42

+ +**Specifier:** `smoothness=impassable; highway one of [path, bridleway, track]` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `1 > mtb:scale < 2; highway one of [path, bridleway, track]` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.15, back: 1.15 + +

Rule #44

+ +**Specifier:** `mtb:scale > 2; highway one of [path, bridleway, track]` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------| +| `cycleway=shared_lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | 🚴 | +| `lcn=yes¦rcn=yes¦ncn=yes` | 🚴 | +| `oneway=yes; cycleway not one of [no, none] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | 🚴 | +| `embedded_rails one of [tram, light_rail, disused]` | 🚴 | +| `tunnel=yes; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]` | 🚶 | +| `bridge=yes; sidewalk not one of [no, separate] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]¦verge=no; sidewalk not one of [no, separate] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]` | 🚶 | +| `junction=roundabout; sidewalk not one of [no, separate] or absent` | 🚶 | +| `surface=grass_paver` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=metal_grid` | 🚴 | +| `surface=metal` | 🚴 | +| `smoothness=intermediate; surface one of [asfalt, concrete, paving_stones, paved, wood]` | 🚴 | +| `smoothness=bad; surface one of [asfalt, concrete, paving_stones, paved, wood]` | 🚴 🚶 | +| `surface=unpaved; !tracktype` | 🚴 🚶 | +| `surface=compacted` | 🚴 🚶 | +| `surface=fine_gravel` | 🚴 🚶 | +| `surface=pebblestone` | 🚴 🚶 | +| `surface=gravel` | 🚴 🚶 | +| `surface=woodchip` | 🚴 🚶 | +| `surface=ground` | 🚴 🚶 | +| `surface=dirt` | 🚴 🚶 | +| `surface=earth` | 🚴 🚶 | +| `surface=grass` | 🚴 🚶 | +| `surface=mud` | 🚴 🚶 | +| `surface=sand` | 🚴 🚶 | +| `!tracktype; surface not one of [unpaved] or absent; highway one of [track, bridleway]` | 🚴 🚶 | +| `tracktype=grade2; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | +| `tracktype=grade3; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | +| `tracktype=grade4; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | +| `tracktype=grade5; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | +| `surface not one of [no, none] or absent; highway=path` | 🚴 🚶 | +| `sac_scale=mountain_hiking` | 🚶 | +| `trail_visibility=intermediate` | 🚶 | + + diff --git a/docs/osm/Portland.md b/docs/osm/Portland.md new file mode 100644 index 00000000000..7f7baed3d8b --- /dev/null +++ b/docs/osm/Portland.md @@ -0,0 +1,1275 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|---------------------------------------------------------|------------------------|--------| +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + + + + +

Rule #0

+ +**Specifier:** `mtb:scale=3` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `mtb:scale=4` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `mtb:scale=5` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `mtb:scale=6` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `highway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `railway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `mtb:scale=1` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `mtb:scale=2` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #13

+ +**Specifier:** `mtb:scale=0` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #14

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #16

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #17

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #18

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #22

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #23

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #27

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #29

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #30

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #31

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #32

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #33

+ +**Specifier:** `highway=trunk_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #34

+ +**Specifier:** `highway=motorway_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #35

+ +**Specifier:** `highway=trunk` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #36

+ +**Specifier:** `highway=motorway` +**Permission:** CAR +**Bike safety factor:** forward: 8.0, back: 8.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #37

+ +**Specifier:** `present(highway); cycleway=lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #38

+ +**Specifier:** `highway=service; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #39

+ +**Specifier:** `highway=residential; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #40

+ +**Specifier:** `highway=residential_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #41

+ +**Specifier:** `highway=tertiary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #42

+ +**Specifier:** `highway=tertiary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `highway=secondary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #44

+ +**Specifier:** `highway=secondary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #45

+ +**Specifier:** `highway=primary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #46

+ +**Specifier:** `highway=primary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #47

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #48

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #49

+ +**Specifier:** `highway=motorway; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #50

+ +**Specifier:** `highway=motorway_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #51

+ +**Specifier:** `present(highway); cycleway=share_busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #52

+ +**Specifier:** `highway=service; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #53

+ +**Specifier:** `highway=residential; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #54

+ +**Specifier:** `highway=residential_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #55

+ +**Specifier:** `highway=tertiary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #56

+ +**Specifier:** `highway=tertiary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #57

+ +**Specifier:** `highway=secondary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #58

+ +**Specifier:** `highway=secondary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #59

+ +**Specifier:** `highway=primary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #60

+ +**Specifier:** `highway=primary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #61

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #62

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #63

+ +**Specifier:** `highway=motorway; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #64

+ +**Specifier:** `highway=motorway_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #65

+ +**Specifier:** `present(highway); cycleway=opposite_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #66

+ +**Specifier:** `highway=service; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #67

+ +**Specifier:** `highway=residential; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #68

+ +**Specifier:** `highway=residential_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #69

+ +**Specifier:** `highway=tertiary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #70

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #71

+ +**Specifier:** `highway=secondary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #72

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #73

+ +**Specifier:** `highway=primary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #74

+ +**Specifier:** `highway=primary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #75

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #76

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #77

+ +**Specifier:** `present(highway); cycleway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #78

+ +**Specifier:** `highway=service; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #79

+ +**Specifier:** `highway=residential; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #80

+ +**Specifier:** `highway=residential_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #81

+ +**Specifier:** `highway=tertiary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #82

+ +**Specifier:** `highway=tertiary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #83

+ +**Specifier:** `highway=secondary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #84

+ +**Specifier:** `highway=secondary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #85

+ +**Specifier:** `highway=primary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #86

+ +**Specifier:** `highway=primary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #87

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #88

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #89

+ +**Specifier:** `present(highway); cycleway=opposite_track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #90

+ +**Specifier:** `highway=service; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #91

+ +**Specifier:** `highway=residential; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #92

+ +**Specifier:** `highway=residential_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #93

+ +**Specifier:** `highway=tertiary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #94

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #95

+ +**Specifier:** `highway=secondary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #96

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #97

+ +**Specifier:** `highway=primary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #98

+ +**Specifier:** `highway=primary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #99

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #100

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #101

+ +**Specifier:** `present(highway); cycleway=shared_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #102

+ +**Specifier:** `highway=service; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.73, back: 0.73 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #103

+ +**Specifier:** `highway=residential; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #104

+ +**Specifier:** `highway=residential_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #105

+ +**Specifier:** `highway=tertiary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #106

+ +**Specifier:** `highway=tertiary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #107

+ +**Specifier:** `highway=secondary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #108

+ +**Specifier:** `highway=secondary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #109

+ +**Specifier:** `highway=primary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #110

+ +**Specifier:** `highway=primary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #111

+ +**Specifier:** `present(highway); cycleway=opposite` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.4 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #112

+ +**Specifier:** `highway=service; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #113

+ +**Specifier:** `highway=residential; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #114

+ +**Specifier:** `highway=residential_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #115

+ +**Specifier:** `highway=tertiary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #116

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #117

+ +**Specifier:** `highway=secondary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #118

+ +**Specifier:** `highway=secondary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #119

+ +**Specifier:** `highway=primary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #120

+ +**Specifier:** `highway=primary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #121

+ +**Specifier:** `highway=path; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #122

+ +**Specifier:** `highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #123

+ +**Specifier:** `highway=footway; bicycle=yes; area=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #124

+ +**Specifier:** `highway=pedestrian; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #125

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #126

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #127

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #128

+ +**Specifier:** `highway=footway; footway=crossing; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #129

+ +**Specifier:** `highway=track; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #130

+ +**Specifier:** `highway=track; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #131

+ +**Specifier:** `highway=track; bicycle=yes; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #132

+ +**Specifier:** `highway=track; bicycle=designated; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #133

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #134

+ +**Specifier:** `present(highway); bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #135

+ +**Specifier:** `highway=service; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.84, back: 0.84 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #136

+ +**Specifier:** `highway=residential; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #137

+ +**Specifier:** `highway=unclassified; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #138

+ +**Specifier:** `highway=residential_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #139

+ +**Specifier:** `highway=tertiary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #140

+ +**Specifier:** `highway=tertiary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #141

+ +**Specifier:** `highway=secondary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #142

+ +**Specifier:** `highway=secondary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #143

+ +**Specifier:** `highway=primary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #144

+ +**Specifier:** `highway=primary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #145

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #146

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #147

+ +**Specifier:** `highway=motorway; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.76, back: 7.76 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #148

+ +**Specifier:** `highway=motorway_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `footway=sidewalk` | 🚶 | +| `!name` | 🚶 | +| `highway=trunk` | 🚶 | +| `highway=trunk_link` | 🚶 | +| `highway=primary` | 🚶 | +| `highway=primary_link` | 🚶 | +| `highway=secondary` | 🚶 | +| `highway=secondary_link` | 🚶 | +| `highway=tertiary` | 🚶 | +| `highway=tertiary_link` | 🚶 | +| `lanes > 4` | 🚶 | +| `sidewalk=both` | 🚶 | +| `sidewalk=left` | 🚶 | +| `sidewalk=right` | 🚶 | +| `surface=unpaved` | 🚶 | +| `sidewalk=no; maxspeed=55 mph` | 🚶 | +| `sidewalk=no; maxspeed=50 mph` | 🚶 | +| `sidewalk=no; maxspeed=45 mph` | 🚶 | +| `sidewalk=no; maxspeed=40 mph` | 🚶 | +| `sidewalk=no; maxspeed=35 mph` | 🚶 | +| `sidewalk=no; maxspeed=30 mph` | 🚶 | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/docs/osm/UK.md b/docs/osm/UK.md new file mode 100644 index 00000000000..9a1f7388228 --- /dev/null +++ b/docs/osm/UK.md @@ -0,0 +1,1366 @@ +## OSM tag mapping + +### Way properties + +Way properties set a way's permission and optionally influences its walk and bicycle safety factors. +These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. + + + + +| specifier | permission | safety | +|---------------------------------------------------------|------------------------|--------| +| `highway=trunk_link` | ALL | 🚴 | +| `highway=trunk` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | ALL | 🚴 | +| `highway=trunk_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | ALL | 🚴 | +| `highway=trunk_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | ALL | 🚴 | +| `highway=trunk_link; bicycle=designated` | ALL | 🚴 | +| `mtb:scale=3` | NONE | | +| `mtb:scale=4` | NONE | | +| `mtb:scale=5` | NONE | | +| `mtb:scale=6` | NONE | | +| `highway=corridor` | PEDESTRIAN | | +| `highway=steps` | PEDESTRIAN | | +| `highway=crossing` | PEDESTRIAN | | +| `highway=platform` | PEDESTRIAN | | +| `public_transport=platform` | PEDESTRIAN | | +| `railway=platform` | PEDESTRIAN | | +| `footway=sidewalk; highway=footway` | PEDESTRIAN | | +| `mtb:scale=1` | PEDESTRIAN | | +| `mtb:scale=2` | PEDESTRIAN | | +| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | +| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=living_street` | ALL | 🚴 | +| `highway=unclassified` | ALL | | +| `highway=road` | ALL | | +| `highway=byway` | ALL | 🚴 | +| `highway=track` | ALL | 🚴 | +| `highway=service` | ALL | 🚴 | +| `highway=residential` | ALL | 🚴 | +| `highway=residential_link` | ALL | 🚴 | +| `highway=tertiary` | ALL | | +| `highway=tertiary_link` | ALL | | +| `highway=secondary` | ALL | 🚴 | +| `highway=secondary_link` | ALL | 🚴 | +| `highway=primary` | ALL | 🚴 | +| `highway=primary_link` | ALL | 🚴 | +| `highway=trunk_link` | CAR | 🚴 | +| `highway=motorway_link` | CAR | 🚴 | +| `highway=trunk` | CAR | 🚴 | +| `highway=motorway` | CAR | 🚴 | +| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=lane` | ALL | 🚴 | +| `highway=residential; cycleway=lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | +| `highway=secondary; cycleway=lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | +| `highway=primary; cycleway=lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=lane` | ALL | 🚴 | +| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential; cycleway=share_busway` | ALL | 🚴 | +| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | +| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary; cycleway=share_busway` | ALL | 🚴 | +| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | +| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=track` | ALL | 🚴 | +| `highway=residential; cycleway=track` | ALL | 🚴 | +| `highway=residential_link; cycleway=track` | ALL | 🚴 | +| `highway=tertiary; cycleway=track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | +| `highway=secondary; cycleway=track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=track` | ALL | 🚴 | +| `highway=primary; cycleway=track` | ALL | 🚴 | +| `highway=primary_link; cycleway=track` | ALL | 🚴 | +| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | +| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | +| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | +| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | +| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | +| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=service; cycleway=opposite` | ALL | 🚴 | +| `highway=residential; cycleway=opposite` | ALL | 🚴 | +| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | +| `highway=tertiary; cycleway=opposite` | ALL | | +| `highway=tertiary_link; cycleway=opposite` | ALL | | +| `highway=secondary; cycleway=opposite` | ALL | 🚴 | +| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=primary; cycleway=opposite` | ALL | 🚴 | +| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | +| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | +| `present(highway); bicycle=designated` | ALL | 🚴 | +| `highway=service; bicycle=designated` | ALL | 🚴 | +| `highway=residential; bicycle=designated` | ALL | 🚴 | +| `highway=unclassified; bicycle=designated` | ALL | 🚴 | +| `highway=residential_link; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary; bicycle=designated` | ALL | 🚴 | +| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | +| `highway=secondary; bicycle=designated` | ALL | 🚴 | +| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | +| `highway=primary; bicycle=designated` | ALL | 🚴 | +| `highway=primary_link; bicycle=designated` | ALL | 🚴 | +| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | + + + + + + +

Rule #0

+ +**Specifier:** `highway=trunk_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #1

+ +**Specifier:** `highway=trunk` +**Permission:** ALL +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #2

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #3

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #4

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #5

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #6

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #7

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #8

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #9

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #10

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #11

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #12

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #13

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #14

+ +**Specifier:** `mtb:scale=3` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #15

+ +**Specifier:** `mtb:scale=4` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #16

+ +**Specifier:** `mtb:scale=5` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #17

+ +**Specifier:** `mtb:scale=6` +**Permission:** NONE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #18

+ +**Specifier:** `highway=corridor` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #19

+ +**Specifier:** `highway=steps` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #20

+ +**Specifier:** `highway=crossing` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #21

+ +**Specifier:** `highway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #22

+ +**Specifier:** `public_transport=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #23

+ +**Specifier:** `railway=platform` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #24

+ +**Specifier:** `footway=sidewalk; highway=footway` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #25

+ +**Specifier:** `mtb:scale=1` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #26

+ +**Specifier:** `mtb:scale=2` +**Permission:** PEDESTRIAN +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #27

+ +**Specifier:** `mtb:scale=0` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #28

+ +**Specifier:** `highway=cycleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #29

+ +**Specifier:** `highway=path` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #30

+ +**Specifier:** `highway=pedestrian` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #31

+ +**Specifier:** `highway=footway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #32

+ +**Specifier:** `highway=bridleway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #33

+ +**Specifier:** `highway=living_street` +**Permission:** ALL +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #34

+ +**Specifier:** `highway=unclassified` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #35

+ +**Specifier:** `highway=road` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #36

+ +**Specifier:** `highway=byway` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #37

+ +**Specifier:** `highway=track` +**Permission:** ALL +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #38

+ +**Specifier:** `highway=service` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #39

+ +**Specifier:** `highway=residential` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #40

+ +**Specifier:** `highway=residential_link` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #41

+ +**Specifier:** `highway=tertiary` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #42

+ +**Specifier:** `highway=tertiary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #43

+ +**Specifier:** `highway=secondary` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #44

+ +**Specifier:** `highway=secondary_link` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #45

+ +**Specifier:** `highway=primary` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #46

+ +**Specifier:** `highway=primary_link` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #47

+ +**Specifier:** `highway=trunk_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #48

+ +**Specifier:** `highway=motorway_link` +**Permission:** CAR +**Bike safety factor:** forward: 2.06, back: 2.06 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #49

+ +**Specifier:** `highway=trunk` +**Permission:** CAR +**Bike safety factor:** forward: 7.47, back: 7.47 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #50

+ +**Specifier:** `highway=motorway` +**Permission:** CAR +**Bike safety factor:** forward: 8.0, back: 8.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #51

+ +**Specifier:** `present(highway); cycleway=lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #52

+ +**Specifier:** `highway=service; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #53

+ +**Specifier:** `highway=residential; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #54

+ +**Specifier:** `highway=residential_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #55

+ +**Specifier:** `highway=tertiary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #56

+ +**Specifier:** `highway=tertiary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.87, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #57

+ +**Specifier:** `highway=secondary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #58

+ +**Specifier:** `highway=secondary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.96, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #59

+ +**Specifier:** `highway=primary; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #60

+ +**Specifier:** `highway=primary_link; cycleway=lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #61

+ +**Specifier:** `highway=trunk; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.5, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #62

+ +**Specifier:** `highway=trunk_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #63

+ +**Specifier:** `highway=motorway; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #64

+ +**Specifier:** `highway=motorway_link; cycleway=lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.15, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #65

+ +**Specifier:** `present(highway); cycleway=share_busway` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #66

+ +**Specifier:** `highway=service; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #67

+ +**Specifier:** `highway=residential; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #68

+ +**Specifier:** `highway=residential_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #69

+ +**Specifier:** `highway=tertiary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #70

+ +**Specifier:** `highway=tertiary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.92, back: 0.92 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #71

+ +**Specifier:** `highway=secondary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #72

+ +**Specifier:** `highway=secondary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #73

+ +**Specifier:** `highway=primary; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #74

+ +**Specifier:** `highway=primary_link; cycleway=share_busway` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #75

+ +**Specifier:** `highway=trunk; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #76

+ +**Specifier:** `highway=trunk_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #77

+ +**Specifier:** `highway=motorway; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #78

+ +**Specifier:** `highway=motorway_link; cycleway=share_busway` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #79

+ +**Specifier:** `present(highway); cycleway=opposite_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #80

+ +**Specifier:** `highway=service; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #81

+ +**Specifier:** `highway=residential; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #82

+ +**Specifier:** `highway=residential_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #83

+ +**Specifier:** `highway=tertiary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #84

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.87 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #85

+ +**Specifier:** `highway=secondary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #86

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.96 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #87

+ +**Specifier:** `highway=primary; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #88

+ +**Specifier:** `highway=primary_link; cycleway=opposite_lane` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #89

+ +**Specifier:** `highway=trunk; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 1.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #90

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_lane` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 1.15 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #91

+ +**Specifier:** `present(highway); cycleway=track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #92

+ +**Specifier:** `highway=service; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #93

+ +**Specifier:** `highway=residential; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #94

+ +**Specifier:** `highway=residential_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.65, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #95

+ +**Specifier:** `highway=tertiary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #96

+ +**Specifier:** `highway=tertiary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #97

+ +**Specifier:** `highway=secondary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #98

+ +**Specifier:** `highway=secondary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.8, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #99

+ +**Specifier:** `highway=primary; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #100

+ +**Specifier:** `highway=primary_link; cycleway=track` +**Permission:** ALL +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #101

+ +**Specifier:** `highway=trunk; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #102

+ +**Specifier:** `highway=trunk_link; cycleway=track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 0.85, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #103

+ +**Specifier:** `present(highway); cycleway=opposite_track` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #104

+ +**Specifier:** `highway=service; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #105

+ +**Specifier:** `highway=residential; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #106

+ +**Specifier:** `highway=residential_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.65 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #107

+ +**Specifier:** `highway=tertiary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #108

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #109

+ +**Specifier:** `highway=secondary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #110

+ +**Specifier:** `highway=secondary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 0.8 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #111

+ +**Specifier:** `highway=primary; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #112

+ +**Specifier:** `highway=primary_link; cycleway=opposite_track` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #113

+ +**Specifier:** `highway=trunk; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.47, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #114

+ +**Specifier:** `highway=trunk_link; cycleway=opposite_track` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.06, back: 0.85 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #115

+ +**Specifier:** `present(highway); cycleway=shared_lane` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #116

+ +**Specifier:** `highway=service; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.73, back: 0.73 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #117

+ +**Specifier:** `highway=residential; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #118

+ +**Specifier:** `highway=residential_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.77, back: 0.77 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #119

+ +**Specifier:** `highway=tertiary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #120

+ +**Specifier:** `highway=tertiary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 0.83, back: 0.83 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #121

+ +**Specifier:** `highway=secondary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #122

+ +**Specifier:** `highway=secondary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.25, back: 1.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #123

+ +**Specifier:** `highway=primary; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #124

+ +**Specifier:** `highway=primary_link; cycleway=shared_lane` +**Permission:** ALL +**Bike safety factor:** forward: 1.75, back: 1.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #125

+ +**Specifier:** `present(highway); cycleway=opposite` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.0, back: 1.4 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #126

+ +**Specifier:** `highway=service; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #127

+ +**Specifier:** `highway=residential; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #128

+ +**Specifier:** `highway=residential_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 0.98, back: 0.98 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #129

+ +**Specifier:** `highway=tertiary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #130

+ +**Specifier:** `highway=tertiary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.0, back: 1.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #131

+ +**Specifier:** `highway=secondary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #132

+ +**Specifier:** `highway=secondary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 1.5, back: 1.71 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #133

+ +**Specifier:** `highway=primary; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #134

+ +**Specifier:** `highway=primary_link; cycleway=opposite` +**Permission:** ALL +**Bike safety factor:** forward: 2.06, back: 2.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #135

+ +**Specifier:** `highway=path; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.6, back: 0.6 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #136

+ +**Specifier:** `highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #137

+ +**Specifier:** `highway=footway; bicycle=yes; area=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.9, back: 0.9 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #138

+ +**Specifier:** `highway=pedestrian; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.75, back: 0.75 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #139

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #140

+ +**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #141

+ +**Specifier:** `highway=footway; footway=crossing` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 2.5, back: 2.5 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #142

+ +**Specifier:** `highway=footway; footway=crossing; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.1, back: 1.1 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #143

+ +**Specifier:** `highway=track; bicycle=yes` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #144

+ +**Specifier:** `highway=track; bicycle=designated` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #145

+ +**Specifier:** `highway=track; bicycle=yes; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.18, back: 1.18 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #146

+ +**Specifier:** `highway=track; bicycle=designated; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 0.99, back: 0.99 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #147

+ +**Specifier:** `highway=track; present(surface)` +**Permission:** PEDESTRIAN_AND_BICYCLE +**Bike safety factor:** forward: 1.3, back: 1.3 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #148

+ +**Specifier:** `present(highway); bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #149

+ +**Specifier:** `highway=service; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.84, back: 0.84 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #150

+ +**Specifier:** `highway=residential; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #151

+ +**Specifier:** `highway=unclassified; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #152

+ +**Specifier:** `highway=residential_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.95, back: 0.95 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #153

+ +**Specifier:** `highway=tertiary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #154

+ +**Specifier:** `highway=tertiary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 0.97, back: 0.97 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #155

+ +**Specifier:** `highway=secondary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #156

+ +**Specifier:** `highway=secondary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 1.46, back: 1.46 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #157

+ +**Specifier:** `highway=primary; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #158

+ +**Specifier:** `highway=primary_link; bicycle=designated` +**Permission:** ALL +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #159

+ +**Specifier:** `highway=trunk; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.25, back: 7.25 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #160

+ +**Specifier:** `highway=trunk_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #161

+ +**Specifier:** `highway=motorway; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 7.76, back: 7.76 +**Walk safety factor:** forward: 1.0, back: 1.0 + +

Rule #162

+ +**Specifier:** `highway=motorway_link; bicycle=designated` +**Permission:** BICYCLE_AND_CAR +**Bike safety factor:** forward: 2.0, back: 2.0 +**Walk safety factor:** forward: 1.0, back: 1.0 + + + + +### Bicycle and walking safety mixins + +Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the +permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. + + + + +| matcher | modifications | +|------------------------------------------------------------|---------------| +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | +| `surface=unpaved` | 🚴 | +| `surface=compacted` | 🚴 | +| `surface=wood` | 🚴 | +| `surface=cobblestone` | 🚴 | +| `surface=sett` | 🚴 | +| `surface=unhewn_cobblestone` | 🚴 | +| `surface=grass_paver` | 🚴 | +| `surface=pebblestone` | 🚴 | +| `surface=metal` | 🚴 | +| `surface=ground` | 🚴 | +| `surface=dirt` | 🚴 | +| `surface=earth` | 🚴 | +| `surface=grass` | 🚴 | +| `surface=mud` | 🚴 | +| `surface=woodchip` | 🚴 | +| `surface=gravel` | 🚴 | +| `surface=artifical_turf` | 🚴 | +| `surface=sand` | 🚴 | +| `rlis:bicycle=caution_area` | 🚴 | +| `rlis:bicycle:right=caution_area` | 🚴 | +| `rlis:bicycle:left=caution_area` | 🚴 | +| `ccgis:bicycle=caution_area` | 🚴 | +| `ccgis:bicycle:right=caution_area` | 🚴 | +| `ccgis:bicycle:left=caution_area` | 🚴 | +| `foot=discouraged` | 🚶 | +| `bicycle=discouraged` | 🚴 | +| `foot=use_sidepath` | 🚶 | +| `bicycle=use_sidepath` | 🚴 | + + diff --git a/mkdocs.yml b/mkdocs.yml index b8c257ceb7d..1a380e0fe9b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -73,6 +73,15 @@ nav: - Configuration: - Introduction: 'Configuration.md' - Build: 'BuildConfiguration.md' + - OSM Tag Mapping: + - Default: 'osm/Default.md' + - Norway: 'osm/Norway.md' + - Germany: 'osm/Germany.md' + - Finland: 'osm/Finland.md' + - UK: 'osm/Finland.md' + - Atlanta: 'osm/Atlanta.md' + - Portland: 'osm/Portland.md' + - Houston: 'osm/Houston.md' - Router: 'RouterConfiguration.md' - "Route Request": 'RouteRequest.md' - "Realtime Updaters": 'UpdaterConfig.md' diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/NorwayMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/NorwayMapper.java index 9de824a145b..efe7850f08b 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/NorwayMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/NorwayMapper.java @@ -30,7 +30,7 @@ class NorwayMapper implements OsmTagMapper { @Override public void populateProperties(WayPropertySet props) { - var hasSidewalk = new Condition.EqualsAnyIn("sidewalk", "yes", "left", "right", "both"); + var hasSidewalk = new Condition.OneOf("sidewalk", "yes", "left", "right", "both"); var hasPrefixSidewalk = new Condition.Equals("sidewalk", "yes"); // e.g sidewalk:left=yes props.setDefaultWalkSafetyForPermission((permission, speedLimit, way) -> switch (permission) { @@ -74,16 +74,16 @@ else if (speedLimit >= 11.1f) { var cycleSafetyLowTraffic = 1.83; var cycleSafetyVeryLowTraffic = 1.57; - var isTrunkOrPrimary = new Condition.EqualsAnyIn( + var isTrunkOrPrimary = new Condition.OneOf( "highway", "trunk", "trunk_link", "primary", "primary_link" ); - var isSecondaryHighway = new Condition.EqualsAnyIn("highway", "secondary", "secondary_link"); - var isTertiaryHighway = new Condition.EqualsAnyIn("highway", "tertiary", "tertiary_link"); - var isClassifiedRoad = new Condition.EqualsAnyIn( + var isSecondaryHighway = new Condition.OneOf("highway", "secondary", "secondary_link"); + var isTertiaryHighway = new Condition.OneOf("highway", "tertiary", "tertiary_link"); + var isClassifiedRoad = new Condition.OneOf( "highway", "trunk", "trunk_link", @@ -94,7 +94,7 @@ else if (speedLimit >= 11.1f) { "tertiary", "tertiary_link" ); - var isClassifiedOrUnclassifiedRoad = new Condition.EqualsAnyIn( + var isClassifiedOrUnclassifiedRoad = new Condition.OneOf( "highway", "trunk", "trunk_link", @@ -107,7 +107,7 @@ else if (speedLimit >= 11.1f) { "unclassified" ); - var isNormalRoad = new Condition.EqualsAnyIn( + var isNormalRoad = new Condition.OneOf( "highway", "trunk", "trunk_link", @@ -166,7 +166,7 @@ else if (speedLimit >= 11.1f) { ); props.setProperties( - new ExactMatchSpecifier(new Condition.EqualsAnyIn("highway", "motorway", "motorway_link")), + new ExactMatchSpecifier(new Condition.OneOf("highway", "motorway", "motorway_link")), withModes(CAR) ); @@ -205,7 +205,7 @@ else if (speedLimit >= 11.1f) { props.setProperties( new ExactMatchSpecifier( new Condition.Equals("cycleway", "lane"), - new Condition.EqualsAnyIn("highway", "unclassified", "residential") + new Condition.OneOf("highway", "unclassified", "residential") ), cycleLaneInLowTraffic ); @@ -224,7 +224,7 @@ else if (speedLimit >= 11.1f) { props.setMixinProperties( new ExactMatchSpecifier( new Condition.Equals("oneway", "yes"), - new Condition.EqualsAnyInOrAbsent("cycleway"), + new Condition.OneOfOrAbsent("cycleway"), isNormalRoad ), ofBicycleSafety(1, 1.15) @@ -233,7 +233,7 @@ else if (speedLimit >= 11.1f) { // Discourage cycling along tram tracks props.setMixinProperties( new ExactMatchSpecifier( - new Condition.EqualsAnyIn("embedded_rails", "tram", "light_rail", "disused") + new Condition.OneOf("embedded_rails", "tram", "light_rail", "disused") ), ofBicycleSafety(1.2) ); @@ -252,12 +252,12 @@ else if (speedLimit >= 11.1f) { new LogicalOrSpecifier( new ExactMatchSpecifier( new Condition.Equals("bridge", "yes"), - new Condition.EqualsAnyInOrAbsent("sidewalk", "no", "separate"), + new Condition.OneOfOrAbsent("sidewalk", "no", "separate"), isClassifiedOrUnclassifiedRoad ), new ExactMatchSpecifier( new Condition.Equals("verge", "no"), - new Condition.EqualsAnyInOrAbsent("sidewalk", "no", "separate"), + new Condition.OneOfOrAbsent("sidewalk", "no", "separate"), isClassifiedOrUnclassifiedRoad ) ), @@ -268,7 +268,7 @@ else if (speedLimit >= 11.1f) { props.setMixinProperties( new ExactMatchSpecifier( new Condition.Equals("junction", "roundabout"), - new Condition.EqualsAnyInOrAbsent("sidewalk", "no", "separate") + new Condition.OneOfOrAbsent("sidewalk", "no", "separate") ), ofWalkSafety(2.) ); @@ -297,7 +297,7 @@ else if (speedLimit >= 11.1f) { props.setProperties( new ExactMatchSpecifier( new Condition.Equals("highway", "service"), - new Condition.EqualsAnyIn("bus", "yes", "designated") + new Condition.OneOf("bus", "yes", "designated") ), withModes(PEDESTRIAN_AND_BICYCLE).bicycleSafety(cycleSafetyMediumLowTraffic).walkSafety(1.9) ); @@ -404,49 +404,49 @@ else if (speedLimit >= 11.1f) { props.setProperties( new ExactMatchSpecifier( - new Condition.EqualsAnyIn("trail_visibility", "bad", "low", "poor", "horrible", "no"), + new Condition.OneOf("trail_visibility", "bad", "low", "poor", "horrible", "no"), new Condition.Equals("highway", "path") ), withModes(NONE) ); props.setProperties( new ExactMatchSpecifier( - new Condition.EqualsAnyIn( + new Condition.OneOf( "sac_scale", "demanding_mountain_hiking", "alpine_hiking", "demanding_alpine_hiking", "difficult_alpine_hiking" ), - new Condition.EqualsAnyIn("highway", "path", "steps") + new Condition.OneOf("highway", "path", "steps") ), withModes(NONE) ); props.setProperties( new ExactMatchSpecifier( - new Condition.EqualsAnyIn("smoothness", "horrible", "very_horrible"), - new Condition.EqualsAnyIn("highway", "path", "bridleway", "track") + new Condition.OneOf("smoothness", "horrible", "very_horrible"), + new Condition.OneOf("highway", "path", "bridleway", "track") ), withModes(PEDESTRIAN).walkSafety(1.15) ); props.setProperties( new ExactMatchSpecifier( new Condition.Equals("smoothness", "impassable"), - new Condition.EqualsAnyIn("highway", "path", "bridleway", "track") + new Condition.OneOf("highway", "path", "bridleway", "track") ), withModes(NONE) ); props.setProperties( new ExactMatchSpecifier( new Condition.InclusiveRange("mtb:scale", 2, 1), - new Condition.EqualsAnyIn("highway", "path", "bridleway", "track") + new Condition.OneOf("highway", "path", "bridleway", "track") ), withModes(PEDESTRIAN).walkSafety(1.15) ); props.setProperties( new ExactMatchSpecifier( new Condition.GreaterThan("mtb:scale", 2), - new Condition.EqualsAnyIn("highway", "path", "bridleway", "track") + new Condition.OneOf("highway", "path", "bridleway", "track") ), withModes(NONE) ); @@ -461,7 +461,7 @@ else if (speedLimit >= 11.1f) { props.setMixinProperties("surface=metal_grid", ofBicycleSafety(1.2)); props.setMixinProperties("surface=metal", ofBicycleSafety(1.2)); // Paved but damaged - var isPaved = new Condition.EqualsAnyIn( + var isPaved = new Condition.OneOf( "surface", "asfalt", "concrete", @@ -502,46 +502,46 @@ else if (speedLimit >= 11.1f) { props.setMixinProperties( new ExactMatchSpecifier( new Condition.Absent("tracktype"), - new Condition.EqualsAnyInOrAbsent("surface", "unpaved"), - new Condition.EqualsAnyIn("highway", "track", "bridleway") + new Condition.OneOfOrAbsent("surface", "unpaved"), + new Condition.OneOf("highway", "track", "bridleway") ), ofBicycleSafety(1.8).walkSafety(1.6) ); props.setMixinProperties( new ExactMatchSpecifier( new Condition.Equals("tracktype", "grade2"), - new Condition.EqualsAnyInOrAbsent("surface", "unpaved"), - new Condition.EqualsAnyIn("highway", "track", "bridleway", "service", "unclassified") + new Condition.OneOfOrAbsent("surface", "unpaved"), + new Condition.OneOf("highway", "track", "bridleway", "service", "unclassified") ), ofBicycleSafety(1.4).walkSafety(1.4) ); props.setMixinProperties( new ExactMatchSpecifier( new Condition.Equals("tracktype", "grade3"), - new Condition.EqualsAnyInOrAbsent("surface", "unpaved"), - new Condition.EqualsAnyIn("highway", "track", "bridleway", "service", "unclassified") + new Condition.OneOfOrAbsent("surface", "unpaved"), + new Condition.OneOf("highway", "track", "bridleway", "service", "unclassified") ), ofBicycleSafety(1.8).walkSafety(1.6) ); props.setMixinProperties( new ExactMatchSpecifier( new Condition.Equals("tracktype", "grade4"), - new Condition.EqualsAnyInOrAbsent("surface", "unpaved"), - new Condition.EqualsAnyIn("highway", "track", "bridleway", "service", "unclassified") + new Condition.OneOfOrAbsent("surface", "unpaved"), + new Condition.OneOf("highway", "track", "bridleway", "service", "unclassified") ), ofBicycleSafety(2.3).walkSafety(1.8) ); props.setMixinProperties( new ExactMatchSpecifier( new Condition.Equals("tracktype", "grade5"), - new Condition.EqualsAnyInOrAbsent("surface", "unpaved"), - new Condition.EqualsAnyIn("highway", "track", "bridleway", "service", "unclassified") + new Condition.OneOfOrAbsent("surface", "unpaved"), + new Condition.OneOf("highway", "track", "bridleway", "service", "unclassified") ), ofBicycleSafety(2.3).walkSafety(2.4) ); props.setMixinProperties( new ExactMatchSpecifier( - new Condition.EqualsAnyInOrAbsent("surface"), + new Condition.OneOfOrAbsent("surface"), new Condition.Equals("highway", "path") ), ofBicycleSafety(2.3).walkSafety(2.4) @@ -560,7 +560,7 @@ else if (speedLimit >= 11.1f) { */ props.setCarSpeed( - new ExactMatchSpecifier(new Condition.EqualsAnyIn("highway", "motorway", "motorway_link")), + new ExactMatchSpecifier(new Condition.OneOf("highway", "motorway", "motorway_link")), 30.56f // 110 km/t ); @@ -570,7 +570,7 @@ else if (speedLimit >= 11.1f) { ); props.setCarSpeed( new ExactMatchSpecifier( - new Condition.EqualsAnyIn( + new Condition.OneOf( "highway", "trunk", "trunk_link", @@ -589,8 +589,8 @@ else if (speedLimit >= 11.1f) { ); props.setCarSpeed( new ExactMatchSpecifier( - new Condition.EqualsAnyIn("sidewalk", "yes", "both", "left", "right", "separate"), - new Condition.EqualsAnyIn( + new Condition.OneOf("sidewalk", "yes", "both", "left", "right", "separate"), + new Condition.OneOf( "highway", "trunk", "trunk_link", diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java index d430ad05f7d..e43b50c46ef 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java @@ -30,4 +30,8 @@ public OsmTagMapper getInstance() { case CONSTANT_SPEED_FINLAND -> new ConstantSpeedFinlandMapper(); }; } + + public boolean needsDocumentation() { + return this != CONSTANT_SPEED_FINLAND; + } } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java index fc166a69927..fa9d174f583 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java @@ -5,4 +5,8 @@ */ public record SafetyFeatures(double forward, double back) { public static final SafetyFeatures DEFAULT = new SafetyFeatures(1, 1); + + public boolean modifies() { + return !(forward == 1 && back == 1); + } } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java index d9f194aa4e5..2c33470f2f7 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java @@ -1,5 +1,7 @@ package org.opentripplanner.openstreetmap.wayproperty.specifier; +import java.util.Arrays; +import java.util.stream.Collectors; import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.openstreetmap.model.OSMWithTags; @@ -72,6 +74,11 @@ public int matchScore(OSMWithTags way) { return score; } + @Override + public String toMarkdown() { + return Arrays.stream(conditions).map(Object::toString).collect(Collectors.joining("; ")); + } + @Override public String toString() { return ToStringBuilder.of(this.getClass()).addObj("conditions", conditions).toString(); diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java index 4d8381963b3..89448cad158 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java @@ -112,6 +112,11 @@ record Equals(String key, String value) implements Condition { public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { return way.hasTag(exKey) && way.isTag(exKey, value); } + + @Override + public String toString() { + return "%s=%s".formatted(key, value); + } } record Present(String key) implements Condition { @@ -123,6 +128,11 @@ public MatchResult matchType() { public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { return way.hasTag(exKey); } + + @Override + public String toString() { + return "present(%s)".formatted(key); + } } record Absent(String key) implements Condition { @@ -130,6 +140,11 @@ record Absent(String key) implements Condition { public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { return !way.hasTag(exKey); } + + @Override + public String toString() { + return "!%s".formatted(key); + } } record GreaterThan(String key, int value) implements Condition { @@ -138,6 +153,11 @@ public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { var maybeInt = way.getTagAsInt(exKey, ignored -> {}); return maybeInt.isPresent() && maybeInt.getAsInt() > value; } + + @Override + public String toString() { + return "%s > %s".formatted(key, value); + } } record LessThan(String key, int value) implements Condition { @@ -146,6 +166,11 @@ public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { var maybeInt = way.getTagAsInt(exKey, ignored -> {}); return maybeInt.isPresent() && maybeInt.getAsInt() < value; } + + @Override + public String toString() { + return "%s < %s".formatted(key, value); + } } record InclusiveRange(String key, int upper, int lower) implements Condition { @@ -160,18 +185,28 @@ public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { var maybeInt = way.getTagAsInt(exKey, ignored -> {}); return maybeInt.isPresent() && maybeInt.getAsInt() >= lower && maybeInt.getAsInt() <= upper; } + + @Override + public String toString() { + return "%s > %s < %s".formatted(lower, key, upper); + } } - record EqualsAnyIn(String key, String... values) implements Condition { + record OneOf(String key, String... values) implements Condition { @Override public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { return Arrays.stream(values).anyMatch(value -> way.isTag(exKey, value)); } + + @Override + public String toString() { + return "%s one of [%s]".formatted(key, String.join(", ", values)); + } } - record EqualsAnyInOrAbsent(String key, String... values) implements Condition { + record OneOfOrAbsent(String key, String... values) implements Condition { /* A use case for this is to detect the absence of a sidewalk, cycle lane or verge*/ - public EqualsAnyInOrAbsent(String key) { + public OneOfOrAbsent(String key) { this(key, "no", "none"); } @@ -181,5 +216,10 @@ public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { !way.hasTag(exKey) || Arrays.stream(values).anyMatch(value -> way.isTag(exKey, value)) ); } + + @Override + public String toString() { + return "%s not one of [%s] or absent".formatted(key, String.join(", ", values)); + } } } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java index e6eb3f37940..4c26784682f 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java @@ -2,6 +2,7 @@ import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import org.opentripplanner.openstreetmap.model.OSMWithTags; /** @@ -54,6 +55,11 @@ public int matchScore(OSMWithTags way) { } } + @Override + public String toMarkdown() { + return conditions.stream().map(Object::toString).collect(Collectors.joining("; ")); + } + public boolean allTagsMatch(OSMWithTags way) { return conditions.stream().allMatch(o -> o.isMatch(way)); } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java index 229b26fa25a..1a0691deb08 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java @@ -2,6 +2,7 @@ import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import org.opentripplanner.openstreetmap.model.OSMWithTags; /** @@ -25,10 +26,6 @@ public LogicalOrSpecifier(ExactMatchSpecifier... specifiers) { this.subSpecs = Arrays.asList(specifiers); } - public LogicalOrSpecifier(Condition... conditions) { - this.subSpecs = Arrays.stream(conditions).map(ExactMatchSpecifier::new).toList(); - } - public LogicalOrSpecifier(String... specs) { this.subSpecs = Arrays.stream(specs).map(ExactMatchSpecifier::new).toList(); } @@ -47,4 +44,9 @@ public int matchScore(OSMWithTags way) { return 0; } } + + @Override + public String toMarkdown() { + return subSpecs.stream().map(ExactMatchSpecifier::toMarkdown).collect(Collectors.joining("|")); + } } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java index 1e6c53a25c9..f87845e729f 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java @@ -42,6 +42,8 @@ static Condition[] parseConditions(String spec, String separator) { */ int matchScore(OSMWithTags way); + String toMarkdown(); + record Scores(int forward, int backward) { public static Scores of(int s) { return new Scores(s, s); diff --git a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java new file mode 100644 index 00000000000..16930febdf1 --- /dev/null +++ b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -0,0 +1,141 @@ +package org.opentripplanner.generate.doc; + +import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; +import static org.opentripplanner.framework.io.FileUtils.readFile; +import static org.opentripplanner.framework.io.FileUtils.writeFile; +import static org.opentripplanner.framework.text.MarkdownFormatter.bold; +import static org.opentripplanner.generate.doc.framework.DocsTestConstants.DOCS_ROOT; +import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_ROOT; +import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; +import static org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource.CONSTANT_SPEED_FINLAND; +import static org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource.HAMBURG; + +import java.io.File; +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.opentripplanner.framework.text.Table; +import org.opentripplanner.framework.text.TableBuilder; +import org.opentripplanner.generate.doc.framework.DocBuilder; +import org.opentripplanner.generate.doc.framework.GeneratesDocumentation; +import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapper; +import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource; +import org.opentripplanner.openstreetmap.wayproperty.SafetyFeatures; +import org.opentripplanner.openstreetmap.wayproperty.WayPropertyPicker; +import org.opentripplanner.openstreetmap.wayproperty.WayPropertySet; + +@GeneratesDocumentation +public class OsmMapperDocTest { + + private static final String FILE_NAME = "OsmMapper.md"; + private static final File TEMPLATE = new File(TEMPLATE_ROOT, FILE_NAME); + + public static List mappers() { + return Arrays + .stream(OsmTagMapperSource.values()) + .filter(m -> !Set.of(HAMBURG, CONSTANT_SPEED_FINLAND).contains(m)) + .toList(); + } + + @ParameterizedTest + @MethodSource("mappers") + public void updateDocs(OsmTagMapperSource source) { + var mapper = source.getInstance(); + var wps = new WayPropertySet(); + mapper.populateProperties(wps); + + var outFile = outputFile(mapper); + + // Read and close input file (same as output file) + String template = readFile(TEMPLATE); + String original = readFile(outFile); + + var propTable = propTable(wps); + var mixinTable = mixinTable(wps); + + template = replaceSection(template, "props", propTable.toMarkdownTable()); + template = replaceSection(template, "prop-details", propDetails(wps)); + template = replaceSection(template, "mixins", mixinTable.toMarkdownTable()); + writeFile(outFile, template); + assertFileEquals(original, outFile); + } + + private static File outputFile(OsmTagMapper mapper) { + var name = mapper.getClass().getSimpleName().replaceAll("Mapper", ".md"); + return new File("%s/osm/".formatted(DOCS_ROOT), name); + } + + private static Table propTable(WayPropertySet wps) { + var propTable = new TableBuilder(); + propTable.withHeaders("specifier", "permission", "safety"); + + for (var prop : wps.getWayProperties()) { + propTable.addRow( + "`%s`".formatted(prop.specifier().toMarkdown()), + prop.properties().getPermission(), + emojiModifications(prop.properties().bicycleSafety(), prop.properties().walkSafety()) + ); + } + return propTable.build(); + } + + private static String propDetails(WayPropertySet wps) { + var docBuilder = new DocBuilder(); + + var wayProperties = wps.getWayProperties(); + for (var prop : wayProperties) { + var index = wayProperties.indexOf(prop); + + docBuilder.header(3, "Rule #%s".formatted(index), Integer.toString(index)); + docBuilder + .text(bold("Specifier:")) + .text("`%s`".formatted(prop.specifier().toMarkdown())) + .lineBreak(); + + docBuilder.text(bold("Permission:")).text(prop.properties().getPermission()); + docBuilder.lineBreak(); + var bike = prop.properties().bicycleSafety(); + docBuilder + .text(bold("Bike safety factor:")) + .text("forward: %s, back: %s".formatted(bike.forward(), bike.back())); + docBuilder.lineBreak(); + var walk = prop.properties().walkSafety(); + docBuilder + .text(bold("Walk safety factor:")) + .text("forward: %s, back: %s".formatted(walk.forward(), walk.back())); + docBuilder.endParagraph(); + } + return docBuilder.toString(); + } + + private static String hash(WayPropertyPicker prop) { + return prop.specifier().toMarkdown().replaceAll(" ", "").toLowerCase(); + } + + private static Table mixinTable(WayPropertySet wps) { + var propTable = new TableBuilder(); + propTable.withHeaders("matcher", "modifications"); + + for (var prop : wps.getMixins()) { + propTable.addRow( + "`%s`".formatted(prop.specifier().toMarkdown()), + emojiModifications(prop.bicycleSafety(), prop.walkSafety()) + ); + } + return propTable.build(); + } + + private static String emojiModifications(SafetyFeatures bicycle, SafetyFeatures walk) { + return emojiIfModifies(bicycle, "\uD83D\uDEB4") + " " + emojiIfModifies(walk, "\uD83D\uDEB6"); + } + + private static String emojiIfModifies(SafetyFeatures prop, String value) { + if (prop.modifies()) { + return value; + } else { + return ""; + } + } +} diff --git a/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ConditionTest.java b/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ConditionTest.java index def272652f6..6386aa902e2 100644 --- a/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ConditionTest.java +++ b/src/test/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ConditionTest.java @@ -29,11 +29,11 @@ import org.opentripplanner.openstreetmap.model.OSMWithTags; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.Absent; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.Equals; -import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.EqualsAnyIn; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.GreaterThan; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.InclusiveRange; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.LessThan; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.MatchResult; +import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.OneOf; import org.opentripplanner.openstreetmap.wayproperty.specifier.Condition.Present; class ConditionTest { @@ -46,7 +46,7 @@ class ConditionTest { static Condition moreThanFourLanes = new GreaterThan("lanes", 4); static Condition lessThanFourLanes = new LessThan("lanes", 4); static Condition betweenFiveAndThreeLanes = new InclusiveRange("lanes", 5, 3); - static Condition smoothnessBadAndWorseThanBad = new EqualsAnyIn( + static Condition smoothnessBadAndWorseThanBad = new OneOf( "smoothness", "bad", "very_bad", @@ -54,7 +54,7 @@ class ConditionTest { "very_horrible", "impassable" ); - static Condition noSidewalk = new Condition.EqualsAnyInOrAbsent("sidewalk"); + static Condition noSidewalk = new Condition.OneOfOrAbsent("sidewalk"); static Stream equalsCases() { return Stream.of( From e942193474fa29fcb8d16e47219f50237559a287 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 26 Jun 2024 10:07:35 +0200 Subject: [PATCH 055/132] Skip more mappers --- docs/osm/Atlanta.md | 1270 ---------------- docs/osm/Hamburg.md | 217 --- docs/osm/Houston.md | 1262 ---------------- docs/osm/Portland.md | 1275 ----------------- mkdocs.yml | 3 - .../generate/doc/OsmMapperDocTest.java | 17 +- 6 files changed, 11 insertions(+), 4033 deletions(-) delete mode 100644 docs/osm/Atlanta.md delete mode 100644 docs/osm/Hamburg.md delete mode 100644 docs/osm/Houston.md delete mode 100644 docs/osm/Portland.md diff --git a/docs/osm/Atlanta.md b/docs/osm/Atlanta.md deleted file mode 100644 index da8caa3b433..00000000000 --- a/docs/osm/Atlanta.md +++ /dev/null @@ -1,1270 +0,0 @@ -## OSM tag mapping - -### Way properties - -Way properties set a way's permission and optionally influences its walk and bicycle safety factors. -These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. - - - - -| specifier | permission | safety | -|---------------------------------------------------------|------------------------|--------| -| `highway=trunk_link` | ALL | 🚴 | -| `highway=trunk` | ALL | 🚴 | -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | - - - - - - -

Rule #0

- -**Specifier:** `highway=trunk_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `highway=trunk` -**Permission:** ALL -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `mtb:scale=3` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `mtb:scale=4` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `mtb:scale=5` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `mtb:scale=6` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `highway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `railway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #13

- -**Specifier:** `mtb:scale=1` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #14

- -**Specifier:** `mtb:scale=2` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `mtb:scale=0` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #16

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #17

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #18

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #22

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #23

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #27

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #29

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #30

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #31

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #32

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #33

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #34

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #35

- -**Specifier:** `highway=trunk_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #36

- -**Specifier:** `highway=motorway_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #37

- -**Specifier:** `highway=trunk` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #38

- -**Specifier:** `highway=motorway` -**Permission:** CAR -**Bike safety factor:** forward: 8.0, back: 8.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #39

- -**Specifier:** `present(highway); cycleway=lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #40

- -**Specifier:** `highway=service; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #41

- -**Specifier:** `highway=residential; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #42

- -**Specifier:** `highway=residential_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `highway=tertiary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #44

- -**Specifier:** `highway=tertiary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #45

- -**Specifier:** `highway=secondary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #46

- -**Specifier:** `highway=secondary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #47

- -**Specifier:** `highway=primary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #48

- -**Specifier:** `highway=primary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #49

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #50

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #51

- -**Specifier:** `highway=motorway; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #52

- -**Specifier:** `highway=motorway_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #53

- -**Specifier:** `present(highway); cycleway=share_busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #54

- -**Specifier:** `highway=service; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #55

- -**Specifier:** `highway=residential; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #56

- -**Specifier:** `highway=residential_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #57

- -**Specifier:** `highway=tertiary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #58

- -**Specifier:** `highway=tertiary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #59

- -**Specifier:** `highway=secondary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #60

- -**Specifier:** `highway=secondary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #61

- -**Specifier:** `highway=primary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #62

- -**Specifier:** `highway=primary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #63

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #64

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #65

- -**Specifier:** `highway=motorway; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #66

- -**Specifier:** `highway=motorway_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #67

- -**Specifier:** `present(highway); cycleway=opposite_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #68

- -**Specifier:** `highway=service; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #69

- -**Specifier:** `highway=residential; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #70

- -**Specifier:** `highway=residential_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #71

- -**Specifier:** `highway=tertiary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #72

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #73

- -**Specifier:** `highway=secondary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #74

- -**Specifier:** `highway=secondary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #75

- -**Specifier:** `highway=primary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #76

- -**Specifier:** `highway=primary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #77

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #78

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #79

- -**Specifier:** `present(highway); cycleway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #80

- -**Specifier:** `highway=service; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #81

- -**Specifier:** `highway=residential; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #82

- -**Specifier:** `highway=residential_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #83

- -**Specifier:** `highway=tertiary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #84

- -**Specifier:** `highway=tertiary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #85

- -**Specifier:** `highway=secondary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #86

- -**Specifier:** `highway=secondary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #87

- -**Specifier:** `highway=primary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #88

- -**Specifier:** `highway=primary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #89

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #90

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #91

- -**Specifier:** `present(highway); cycleway=opposite_track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #92

- -**Specifier:** `highway=service; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #93

- -**Specifier:** `highway=residential; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #94

- -**Specifier:** `highway=residential_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #95

- -**Specifier:** `highway=tertiary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #96

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #97

- -**Specifier:** `highway=secondary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #98

- -**Specifier:** `highway=secondary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #99

- -**Specifier:** `highway=primary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #100

- -**Specifier:** `highway=primary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #101

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #102

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #103

- -**Specifier:** `present(highway); cycleway=shared_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #104

- -**Specifier:** `highway=service; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.73, back: 0.73 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #105

- -**Specifier:** `highway=residential; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #106

- -**Specifier:** `highway=residential_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #107

- -**Specifier:** `highway=tertiary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #108

- -**Specifier:** `highway=tertiary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #109

- -**Specifier:** `highway=secondary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #110

- -**Specifier:** `highway=secondary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #111

- -**Specifier:** `highway=primary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #112

- -**Specifier:** `highway=primary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #113

- -**Specifier:** `present(highway); cycleway=opposite` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.4 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #114

- -**Specifier:** `highway=service; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #115

- -**Specifier:** `highway=residential; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #116

- -**Specifier:** `highway=residential_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #117

- -**Specifier:** `highway=tertiary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #118

- -**Specifier:** `highway=tertiary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #119

- -**Specifier:** `highway=secondary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #120

- -**Specifier:** `highway=secondary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #121

- -**Specifier:** `highway=primary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #122

- -**Specifier:** `highway=primary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #123

- -**Specifier:** `highway=path; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #124

- -**Specifier:** `highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #125

- -**Specifier:** `highway=footway; bicycle=yes; area=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #126

- -**Specifier:** `highway=pedestrian; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #127

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #128

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #129

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #130

- -**Specifier:** `highway=footway; footway=crossing; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #131

- -**Specifier:** `highway=track; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #132

- -**Specifier:** `highway=track; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #133

- -**Specifier:** `highway=track; bicycle=yes; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #134

- -**Specifier:** `highway=track; bicycle=designated; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #135

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #136

- -**Specifier:** `present(highway); bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #137

- -**Specifier:** `highway=service; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.84, back: 0.84 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #138

- -**Specifier:** `highway=residential; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #139

- -**Specifier:** `highway=unclassified; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #140

- -**Specifier:** `highway=residential_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #141

- -**Specifier:** `highway=tertiary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #142

- -**Specifier:** `highway=tertiary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #143

- -**Specifier:** `highway=secondary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #144

- -**Specifier:** `highway=secondary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #145

- -**Specifier:** `highway=primary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #146

- -**Specifier:** `highway=primary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #147

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #148

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #149

- -**Specifier:** `highway=motorway; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.76, back: 7.76 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #150

- -**Specifier:** `highway=motorway_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins - -Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. - - - - -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | - - diff --git a/docs/osm/Hamburg.md b/docs/osm/Hamburg.md deleted file mode 100644 index 2cdd3068ca6..00000000000 --- a/docs/osm/Hamburg.md +++ /dev/null @@ -1,217 +0,0 @@ -## OSM tag mapping - - - - -| matcher | permission | safety | -|---------------------------------------------------------|------------------------|--------| -| `highway=track` | PEDESTRIAN_AND_BICYCLE | | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | | -| `highway=residential; junction=roundabout` | ALL | 🚴 | -| `present(highway); junction=roundabout` | BICYCLE_AND_CAR | | -| `highway=pedestrian` | PEDESTRIAN | | -| `highway=residential; maxspeed=30` | ALL | 🚴 | -| `highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=unclassified; cycleway=lane` | ALL | 🚴 | -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | - - - -### Bicycle and walking safety mixins - - - - -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `highway=tertiary` | 🚴 | -| `maxspeed=70` | 🚴 | -| `maxspeed=80` | 🚴 | -| `maxspeed=90` | 🚴 | -| `maxspeed=100` | 🚴 | -| `tracktype=grade1` | | -| `tracktype=grade2` | 🚴 | -| `tracktype=grade3` | 🚴 | -| `tracktype=grade4` | 🚴 | -| `tracktype=grade5` | 🚴 | -| `lit=no` | 🚴 | -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | - - diff --git a/docs/osm/Houston.md b/docs/osm/Houston.md deleted file mode 100644 index 8071d9a0a8a..00000000000 --- a/docs/osm/Houston.md +++ /dev/null @@ -1,1262 +0,0 @@ -## OSM tag mapping - -### Way properties - -Way properties set a way's permission and optionally influences its walk and bicycle safety factors. -These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. - - - - -| specifier | permission | safety | -|---------------------------------------------------------|------------------------|--------| -| `highway=footway; layer=-1; tunnel=yes; indoor=yes` | NONE | | -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | - - - - - - -

Rule #0

- -**Specifier:** `highway=footway; layer=-1; tunnel=yes; indoor=yes` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `mtb:scale=3` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `mtb:scale=4` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `mtb:scale=5` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `mtb:scale=6` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `highway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `railway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `mtb:scale=1` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #13

- -**Specifier:** `mtb:scale=2` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #14

- -**Specifier:** `mtb:scale=0` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #16

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #17

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #18

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #22

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #23

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #27

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #29

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #30

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #31

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #32

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #33

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #34

- -**Specifier:** `highway=trunk_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #35

- -**Specifier:** `highway=motorway_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #36

- -**Specifier:** `highway=trunk` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #37

- -**Specifier:** `highway=motorway` -**Permission:** CAR -**Bike safety factor:** forward: 8.0, back: 8.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #38

- -**Specifier:** `present(highway); cycleway=lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #39

- -**Specifier:** `highway=service; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #40

- -**Specifier:** `highway=residential; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #41

- -**Specifier:** `highway=residential_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #42

- -**Specifier:** `highway=tertiary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `highway=tertiary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #44

- -**Specifier:** `highway=secondary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #45

- -**Specifier:** `highway=secondary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #46

- -**Specifier:** `highway=primary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #47

- -**Specifier:** `highway=primary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #48

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #49

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #50

- -**Specifier:** `highway=motorway; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #51

- -**Specifier:** `highway=motorway_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #52

- -**Specifier:** `present(highway); cycleway=share_busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #53

- -**Specifier:** `highway=service; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #54

- -**Specifier:** `highway=residential; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #55

- -**Specifier:** `highway=residential_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #56

- -**Specifier:** `highway=tertiary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #57

- -**Specifier:** `highway=tertiary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #58

- -**Specifier:** `highway=secondary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #59

- -**Specifier:** `highway=secondary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #60

- -**Specifier:** `highway=primary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #61

- -**Specifier:** `highway=primary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #62

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #63

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #64

- -**Specifier:** `highway=motorway; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #65

- -**Specifier:** `highway=motorway_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #66

- -**Specifier:** `present(highway); cycleway=opposite_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #67

- -**Specifier:** `highway=service; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #68

- -**Specifier:** `highway=residential; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #69

- -**Specifier:** `highway=residential_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #70

- -**Specifier:** `highway=tertiary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #71

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #72

- -**Specifier:** `highway=secondary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #73

- -**Specifier:** `highway=secondary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #74

- -**Specifier:** `highway=primary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #75

- -**Specifier:** `highway=primary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #76

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #77

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #78

- -**Specifier:** `present(highway); cycleway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #79

- -**Specifier:** `highway=service; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #80

- -**Specifier:** `highway=residential; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #81

- -**Specifier:** `highway=residential_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #82

- -**Specifier:** `highway=tertiary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #83

- -**Specifier:** `highway=tertiary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #84

- -**Specifier:** `highway=secondary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #85

- -**Specifier:** `highway=secondary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #86

- -**Specifier:** `highway=primary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #87

- -**Specifier:** `highway=primary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #88

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #89

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #90

- -**Specifier:** `present(highway); cycleway=opposite_track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #91

- -**Specifier:** `highway=service; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #92

- -**Specifier:** `highway=residential; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #93

- -**Specifier:** `highway=residential_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #94

- -**Specifier:** `highway=tertiary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #95

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #96

- -**Specifier:** `highway=secondary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #97

- -**Specifier:** `highway=secondary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #98

- -**Specifier:** `highway=primary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #99

- -**Specifier:** `highway=primary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #100

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #101

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #102

- -**Specifier:** `present(highway); cycleway=shared_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #103

- -**Specifier:** `highway=service; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.73, back: 0.73 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #104

- -**Specifier:** `highway=residential; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #105

- -**Specifier:** `highway=residential_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #106

- -**Specifier:** `highway=tertiary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #107

- -**Specifier:** `highway=tertiary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #108

- -**Specifier:** `highway=secondary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #109

- -**Specifier:** `highway=secondary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #110

- -**Specifier:** `highway=primary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #111

- -**Specifier:** `highway=primary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #112

- -**Specifier:** `present(highway); cycleway=opposite` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.4 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #113

- -**Specifier:** `highway=service; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #114

- -**Specifier:** `highway=residential; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #115

- -**Specifier:** `highway=residential_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #116

- -**Specifier:** `highway=tertiary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #117

- -**Specifier:** `highway=tertiary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #118

- -**Specifier:** `highway=secondary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #119

- -**Specifier:** `highway=secondary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #120

- -**Specifier:** `highway=primary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #121

- -**Specifier:** `highway=primary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #122

- -**Specifier:** `highway=path; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #123

- -**Specifier:** `highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #124

- -**Specifier:** `highway=footway; bicycle=yes; area=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #125

- -**Specifier:** `highway=pedestrian; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #126

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #127

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #128

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #129

- -**Specifier:** `highway=footway; footway=crossing; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #130

- -**Specifier:** `highway=track; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #131

- -**Specifier:** `highway=track; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #132

- -**Specifier:** `highway=track; bicycle=yes; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #133

- -**Specifier:** `highway=track; bicycle=designated; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #134

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #135

- -**Specifier:** `present(highway); bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #136

- -**Specifier:** `highway=service; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.84, back: 0.84 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #137

- -**Specifier:** `highway=residential; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #138

- -**Specifier:** `highway=unclassified; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #139

- -**Specifier:** `highway=residential_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #140

- -**Specifier:** `highway=tertiary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #141

- -**Specifier:** `highway=tertiary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #142

- -**Specifier:** `highway=secondary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #143

- -**Specifier:** `highway=secondary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #144

- -**Specifier:** `highway=primary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #145

- -**Specifier:** `highway=primary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #146

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #147

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #148

- -**Specifier:** `highway=motorway; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.76, back: 7.76 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #149

- -**Specifier:** `highway=motorway_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins - -Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. - - - - -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | - - diff --git a/docs/osm/Portland.md b/docs/osm/Portland.md deleted file mode 100644 index 7f7baed3d8b..00000000000 --- a/docs/osm/Portland.md +++ /dev/null @@ -1,1275 +0,0 @@ -## OSM tag mapping - -### Way properties - -Way properties set a way's permission and optionally influences its walk and bicycle safety factors. -These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. - - - - -| specifier | permission | safety | -|---------------------------------------------------------|------------------------|--------| -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | - - - - - - -

Rule #0

- -**Specifier:** `mtb:scale=3` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `mtb:scale=4` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `mtb:scale=5` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `mtb:scale=6` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `highway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `railway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `mtb:scale=1` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `mtb:scale=2` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #13

- -**Specifier:** `mtb:scale=0` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #14

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #16

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #17

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #18

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #22

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #23

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #27

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #29

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #30

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #31

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #32

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #33

- -**Specifier:** `highway=trunk_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #34

- -**Specifier:** `highway=motorway_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #35

- -**Specifier:** `highway=trunk` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #36

- -**Specifier:** `highway=motorway` -**Permission:** CAR -**Bike safety factor:** forward: 8.0, back: 8.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #37

- -**Specifier:** `present(highway); cycleway=lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #38

- -**Specifier:** `highway=service; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #39

- -**Specifier:** `highway=residential; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #40

- -**Specifier:** `highway=residential_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #41

- -**Specifier:** `highway=tertiary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #42

- -**Specifier:** `highway=tertiary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `highway=secondary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #44

- -**Specifier:** `highway=secondary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #45

- -**Specifier:** `highway=primary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #46

- -**Specifier:** `highway=primary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #47

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #48

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #49

- -**Specifier:** `highway=motorway; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #50

- -**Specifier:** `highway=motorway_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #51

- -**Specifier:** `present(highway); cycleway=share_busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #52

- -**Specifier:** `highway=service; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #53

- -**Specifier:** `highway=residential; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #54

- -**Specifier:** `highway=residential_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #55

- -**Specifier:** `highway=tertiary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #56

- -**Specifier:** `highway=tertiary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #57

- -**Specifier:** `highway=secondary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #58

- -**Specifier:** `highway=secondary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #59

- -**Specifier:** `highway=primary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #60

- -**Specifier:** `highway=primary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #61

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #62

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #63

- -**Specifier:** `highway=motorway; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #64

- -**Specifier:** `highway=motorway_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #65

- -**Specifier:** `present(highway); cycleway=opposite_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #66

- -**Specifier:** `highway=service; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #67

- -**Specifier:** `highway=residential; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #68

- -**Specifier:** `highway=residential_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #69

- -**Specifier:** `highway=tertiary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #70

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #71

- -**Specifier:** `highway=secondary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #72

- -**Specifier:** `highway=secondary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #73

- -**Specifier:** `highway=primary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #74

- -**Specifier:** `highway=primary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #75

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #76

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #77

- -**Specifier:** `present(highway); cycleway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #78

- -**Specifier:** `highway=service; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #79

- -**Specifier:** `highway=residential; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #80

- -**Specifier:** `highway=residential_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #81

- -**Specifier:** `highway=tertiary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #82

- -**Specifier:** `highway=tertiary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #83

- -**Specifier:** `highway=secondary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #84

- -**Specifier:** `highway=secondary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #85

- -**Specifier:** `highway=primary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #86

- -**Specifier:** `highway=primary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #87

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #88

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #89

- -**Specifier:** `present(highway); cycleway=opposite_track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #90

- -**Specifier:** `highway=service; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #91

- -**Specifier:** `highway=residential; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #92

- -**Specifier:** `highway=residential_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #93

- -**Specifier:** `highway=tertiary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #94

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #95

- -**Specifier:** `highway=secondary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #96

- -**Specifier:** `highway=secondary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #97

- -**Specifier:** `highway=primary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #98

- -**Specifier:** `highway=primary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #99

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #100

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #101

- -**Specifier:** `present(highway); cycleway=shared_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #102

- -**Specifier:** `highway=service; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.73, back: 0.73 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #103

- -**Specifier:** `highway=residential; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #104

- -**Specifier:** `highway=residential_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #105

- -**Specifier:** `highway=tertiary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #106

- -**Specifier:** `highway=tertiary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #107

- -**Specifier:** `highway=secondary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #108

- -**Specifier:** `highway=secondary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #109

- -**Specifier:** `highway=primary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #110

- -**Specifier:** `highway=primary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #111

- -**Specifier:** `present(highway); cycleway=opposite` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.4 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #112

- -**Specifier:** `highway=service; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #113

- -**Specifier:** `highway=residential; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #114

- -**Specifier:** `highway=residential_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #115

- -**Specifier:** `highway=tertiary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #116

- -**Specifier:** `highway=tertiary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #117

- -**Specifier:** `highway=secondary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #118

- -**Specifier:** `highway=secondary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #119

- -**Specifier:** `highway=primary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #120

- -**Specifier:** `highway=primary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #121

- -**Specifier:** `highway=path; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #122

- -**Specifier:** `highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #123

- -**Specifier:** `highway=footway; bicycle=yes; area=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #124

- -**Specifier:** `highway=pedestrian; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #125

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #126

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #127

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #128

- -**Specifier:** `highway=footway; footway=crossing; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #129

- -**Specifier:** `highway=track; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #130

- -**Specifier:** `highway=track; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #131

- -**Specifier:** `highway=track; bicycle=yes; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #132

- -**Specifier:** `highway=track; bicycle=designated; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #133

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #134

- -**Specifier:** `present(highway); bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #135

- -**Specifier:** `highway=service; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.84, back: 0.84 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #136

- -**Specifier:** `highway=residential; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #137

- -**Specifier:** `highway=unclassified; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #138

- -**Specifier:** `highway=residential_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #139

- -**Specifier:** `highway=tertiary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #140

- -**Specifier:** `highway=tertiary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #141

- -**Specifier:** `highway=secondary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #142

- -**Specifier:** `highway=secondary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #143

- -**Specifier:** `highway=primary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #144

- -**Specifier:** `highway=primary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #145

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #146

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #147

- -**Specifier:** `highway=motorway; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.76, back: 7.76 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #148

- -**Specifier:** `highway=motorway_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins - -Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. - - - - -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `footway=sidewalk` | 🚶 | -| `!name` | 🚶 | -| `highway=trunk` | 🚶 | -| `highway=trunk_link` | 🚶 | -| `highway=primary` | 🚶 | -| `highway=primary_link` | 🚶 | -| `highway=secondary` | 🚶 | -| `highway=secondary_link` | 🚶 | -| `highway=tertiary` | 🚶 | -| `highway=tertiary_link` | 🚶 | -| `lanes > 4` | 🚶 | -| `sidewalk=both` | 🚶 | -| `sidewalk=left` | 🚶 | -| `sidewalk=right` | 🚶 | -| `surface=unpaved` | 🚶 | -| `sidewalk=no; maxspeed=55 mph` | 🚶 | -| `sidewalk=no; maxspeed=50 mph` | 🚶 | -| `sidewalk=no; maxspeed=45 mph` | 🚶 | -| `sidewalk=no; maxspeed=40 mph` | 🚶 | -| `sidewalk=no; maxspeed=35 mph` | 🚶 | -| `sidewalk=no; maxspeed=30 mph` | 🚶 | -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | - - diff --git a/mkdocs.yml b/mkdocs.yml index 1a380e0fe9b..0db31c4df53 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -79,9 +79,6 @@ nav: - Germany: 'osm/Germany.md' - Finland: 'osm/Finland.md' - UK: 'osm/Finland.md' - - Atlanta: 'osm/Atlanta.md' - - Portland: 'osm/Portland.md' - - Houston: 'osm/Houston.md' - Router: 'RouterConfiguration.md' - "Route Request": 'RouteRequest.md' - "Realtime Updaters": 'UpdaterConfig.md' diff --git a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java index 16930febdf1..52400a05b01 100644 --- a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -7,8 +7,11 @@ import static org.opentripplanner.generate.doc.framework.DocsTestConstants.DOCS_ROOT; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_ROOT; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; +import static org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource.ATLANTA; import static org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource.CONSTANT_SPEED_FINLAND; import static org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource.HAMBURG; +import static org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource.HOUSTON; +import static org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource.PORTLAND; import java.io.File; import java.util.Arrays; @@ -23,7 +26,6 @@ import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapper; import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource; import org.opentripplanner.openstreetmap.wayproperty.SafetyFeatures; -import org.opentripplanner.openstreetmap.wayproperty.WayPropertyPicker; import org.opentripplanner.openstreetmap.wayproperty.WayPropertySet; @GeneratesDocumentation @@ -31,11 +33,18 @@ public class OsmMapperDocTest { private static final String FILE_NAME = "OsmMapper.md"; private static final File TEMPLATE = new File(TEMPLATE_ROOT, FILE_NAME); + private static final Set SKIP_MAPPERS = Set.of( + ATLANTA, + HOUSTON, + PORTLAND, + HAMBURG, + CONSTANT_SPEED_FINLAND + ); public static List mappers() { return Arrays .stream(OsmTagMapperSource.values()) - .filter(m -> !Set.of(HAMBURG, CONSTANT_SPEED_FINLAND).contains(m)) + .filter(m -> !SKIP_MAPPERS.contains(m)) .toList(); } @@ -110,10 +119,6 @@ private static String propDetails(WayPropertySet wps) { return docBuilder.toString(); } - private static String hash(WayPropertyPicker prop) { - return prop.specifier().toMarkdown().replaceAll(" ", "").toLowerCase(); - } - private static Table mixinTable(WayPropertySet wps) { var propTable = new TableBuilder(); propTable.withHeaders("matcher", "modifications"); From c28736b70199b0ac069298bcbe00ac306b8d39f3 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 26 Jun 2024 10:29:49 +0200 Subject: [PATCH 056/132] Move Portland specific tags to PortlandMapper --- docs/osm/Default.md | 56 ++++++------- docs/osm/Finland.md | 58 +++++++------- docs/osm/Germany.md | 78 +++++++++---------- docs/osm/Norway.md | 74 +++++++++--------- docs/osm/UK.md | 56 ++++++------- .../tagmapping/DefaultMapper.java | 18 ----- .../tagmapping/PortlandMapper.java | 21 +++++ .../wayproperty/SafetyFeatures.java | 4 + .../generate/doc/OsmMapperDocTest.java | 17 +++- 9 files changed, 189 insertions(+), 193 deletions(-) diff --git a/docs/osm/Default.md b/docs/osm/Default.md index fe2b8895b23..cadf5fe488d 100644 --- a/docs/osm/Default.md +++ b/docs/osm/Default.md @@ -1219,36 +1219,30 @@ permission of an OSM way. Multiple mixins can apply to the same way and their ef -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | +| matcher | bicycle safety | walk safety | +|------------------------------------------------------------|----------------|-------------| +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 0.7 | | +| `surface=unpaved` | 1.18 | | +| `surface=compacted` | 1.18 | | +| `surface=wood` | 1.18 | | +| `surface=cobblestone` | 1.3 | | +| `surface=sett` | 1.3 | | +| `surface=unhewn_cobblestone` | 1.5 | | +| `surface=grass_paver` | 1.3 | | +| `surface=pebblestone` | 1.3 | | +| `surface=metal` | 1.3 | | +| `surface=ground` | 1.5 | | +| `surface=dirt` | 1.5 | | +| `surface=earth` | 1.5 | | +| `surface=grass` | 1.5 | | +| `surface=mud` | 1.5 | | +| `surface=woodchip` | 1.5 | | +| `surface=gravel` | 1.5 | | +| `surface=artifical_turf` | 1.5 | | +| `surface=sand` | 100.0 | | +| `foot=discouraged` | | 3.0 | +| `bicycle=discouraged` | 3.0 | | +| `foot=use_sidepath` | | 5.0 | +| `bicycle=use_sidepath` | 5.0 | | diff --git a/docs/osm/Finland.md b/docs/osm/Finland.md index 2cd77be22ea..acb7bd5e302 100644 --- a/docs/osm/Finland.md +++ b/docs/osm/Finland.md @@ -1571,37 +1571,31 @@ permission of an OSM way. Multiple mixins can apply to the same way and their ef -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `bicycle=use_sidepath` | 🚶 | -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | +| matcher | bicycle safety | walk safety | +|------------------------------------------------------------|----------------|-------------| +| `bicycle=use_sidepath` | | 5.0 | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 0.7 | | +| `surface=unpaved` | 1.18 | | +| `surface=compacted` | 1.18 | | +| `surface=wood` | 1.18 | | +| `surface=cobblestone` | 1.3 | | +| `surface=sett` | 1.3 | | +| `surface=unhewn_cobblestone` | 1.5 | | +| `surface=grass_paver` | 1.3 | | +| `surface=pebblestone` | 1.3 | | +| `surface=metal` | 1.3 | | +| `surface=ground` | 1.5 | | +| `surface=dirt` | 1.5 | | +| `surface=earth` | 1.5 | | +| `surface=grass` | 1.5 | | +| `surface=mud` | 1.5 | | +| `surface=woodchip` | 1.5 | | +| `surface=gravel` | 1.5 | | +| `surface=artifical_turf` | 1.5 | | +| `surface=sand` | 100.0 | | +| `foot=discouraged` | | 3.0 | +| `bicycle=discouraged` | 3.0 | | +| `foot=use_sidepath` | | 5.0 | +| `bicycle=use_sidepath` | 5.0 | | diff --git a/docs/osm/Germany.md b/docs/osm/Germany.md index b6d218f95e7..7cd6cbf91cf 100644 --- a/docs/osm/Germany.md +++ b/docs/osm/Germany.md @@ -1291,47 +1291,41 @@ permission of an OSM way. Multiple mixins can apply to the same way and their ef -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `highway=tertiary` | 🚴 | -| `maxspeed=70` | 🚴 | -| `maxspeed=80` | 🚴 | -| `maxspeed=90` | 🚴 | -| `maxspeed=100` | 🚴 | -| `tracktype=grade1` | | -| `tracktype=grade2` | 🚴 | -| `tracktype=grade3` | 🚴 | -| `tracktype=grade4` | 🚴 | -| `tracktype=grade5` | 🚴 | -| `lit=no` | 🚴 | -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | +| matcher | bicycle safety | walk safety | +|------------------------------------------------------------|----------------|-------------| +| `highway=tertiary` | 1.2 | | +| `maxspeed=70` | 1.5 | | +| `maxspeed=80` | 2.0 | | +| `maxspeed=90` | 3.0 | | +| `maxspeed=100` | 5.0 | | +| `tracktype=grade1` | | | +| `tracktype=grade2` | 1.1 | | +| `tracktype=grade3` | 1.15 | | +| `tracktype=grade4` | 1.3 | | +| `tracktype=grade5` | 1.5 | | +| `lit=no` | 1.05 | | +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 0.7 | | +| `surface=unpaved` | 1.18 | | +| `surface=compacted` | 1.18 | | +| `surface=wood` | 1.18 | | +| `surface=cobblestone` | 1.3 | | +| `surface=sett` | 1.3 | | +| `surface=unhewn_cobblestone` | 1.5 | | +| `surface=grass_paver` | 1.3 | | +| `surface=pebblestone` | 1.3 | | +| `surface=metal` | 1.3 | | +| `surface=ground` | 1.5 | | +| `surface=dirt` | 1.5 | | +| `surface=earth` | 1.5 | | +| `surface=grass` | 1.5 | | +| `surface=mud` | 1.5 | | +| `surface=woodchip` | 1.5 | | +| `surface=gravel` | 1.5 | | +| `surface=artifical_turf` | 1.5 | | +| `surface=sand` | 100.0 | | +| `foot=discouraged` | | 3.0 | +| `bicycle=discouraged` | 3.0 | | +| `foot=use_sidepath` | | 5.0 | +| `bicycle=use_sidepath` | 5.0 | | diff --git a/docs/osm/Norway.md b/docs/osm/Norway.md index 00ba1b4bf51..7237319d738 100644 --- a/docs/osm/Norway.md +++ b/docs/osm/Norway.md @@ -387,42 +387,42 @@ permission of an OSM way. Multiple mixins can apply to the same way and their ef -| matcher | modifications | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------| -| `cycleway=shared_lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | 🚴 | -| `lcn=yes¦rcn=yes¦ncn=yes` | 🚴 | -| `oneway=yes; cycleway not one of [no, none] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | 🚴 | -| `embedded_rails one of [tram, light_rail, disused]` | 🚴 | -| `tunnel=yes; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]` | 🚶 | -| `bridge=yes; sidewalk not one of [no, separate] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]¦verge=no; sidewalk not one of [no, separate] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]` | 🚶 | -| `junction=roundabout; sidewalk not one of [no, separate] or absent` | 🚶 | -| `surface=grass_paver` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=metal_grid` | 🚴 | -| `surface=metal` | 🚴 | -| `smoothness=intermediate; surface one of [asfalt, concrete, paving_stones, paved, wood]` | 🚴 | -| `smoothness=bad; surface one of [asfalt, concrete, paving_stones, paved, wood]` | 🚴 🚶 | -| `surface=unpaved; !tracktype` | 🚴 🚶 | -| `surface=compacted` | 🚴 🚶 | -| `surface=fine_gravel` | 🚴 🚶 | -| `surface=pebblestone` | 🚴 🚶 | -| `surface=gravel` | 🚴 🚶 | -| `surface=woodchip` | 🚴 🚶 | -| `surface=ground` | 🚴 🚶 | -| `surface=dirt` | 🚴 🚶 | -| `surface=earth` | 🚴 🚶 | -| `surface=grass` | 🚴 🚶 | -| `surface=mud` | 🚴 🚶 | -| `surface=sand` | 🚴 🚶 | -| `!tracktype; surface not one of [unpaved] or absent; highway one of [track, bridleway]` | 🚴 🚶 | -| `tracktype=grade2; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | -| `tracktype=grade3; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | -| `tracktype=grade4; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | -| `tracktype=grade5; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 🚴 🚶 | -| `surface not one of [no, none] or absent; highway=path` | 🚴 🚶 | -| `sac_scale=mountain_hiking` | 🚶 | -| `trail_visibility=intermediate` | 🚶 | +| matcher | bicycle safety | walk safety | +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------|-------------| +| `cycleway=shared_lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | 0.85 | | +| `lcn=yes¦rcn=yes¦ncn=yes` | 0.85 | | +| `oneway=yes; cycleway not one of [no, none] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | forward: 1.0
back: 1.15 | | +| `embedded_rails one of [tram, light_rail, disused]` | 1.2 | | +| `tunnel=yes; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]` | | 2.0 | +| `bridge=yes; sidewalk not one of [no, separate] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]¦verge=no; sidewalk not one of [no, separate] or absent; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified]` | | 2.0 | +| `junction=roundabout; sidewalk not one of [no, separate] or absent` | | 2.0 | +| `surface=grass_paver` | 1.2 | | +| `surface=sett` | 1.2 | | +| `surface=cobblestone` | 1.2 | | +| `surface=unhewn_cobblestone` | 3.0 | | +| `surface=metal_grid` | 1.2 | | +| `surface=metal` | 1.2 | | +| `smoothness=intermediate; surface one of [asfalt, concrete, paving_stones, paved, wood]` | 1.2 | | +| `smoothness=bad; surface one of [asfalt, concrete, paving_stones, paved, wood]` | 1.4 | 1.6 | +| `surface=unpaved; !tracktype` | 1.8 | 1.6 | +| `surface=compacted` | 1.4 | 1.4 | +| `surface=fine_gravel` | 1.8 | 1.6 | +| `surface=pebblestone` | 1.8 | 1.6 | +| `surface=gravel` | 1.8 | 1.6 | +| `surface=woodchip` | 1.8 | 1.6 | +| `surface=ground` | 2.3 | 2.4 | +| `surface=dirt` | 2.3 | 2.4 | +| `surface=earth` | 2.3 | 2.4 | +| `surface=grass` | 2.3 | 1.8 | +| `surface=mud` | 3.0 | 3.0 | +| `surface=sand` | 3.0 | 1.8 | +| `!tracktype; surface not one of [unpaved] or absent; highway one of [track, bridleway]` | 1.8 | 1.6 | +| `tracktype=grade2; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 1.4 | 1.4 | +| `tracktype=grade3; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 1.8 | 1.6 | +| `tracktype=grade4; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 2.3 | 1.8 | +| `tracktype=grade5; surface not one of [unpaved] or absent; highway one of [track, bridleway, service, unclassified]` | 2.3 | 2.4 | +| `surface not one of [no, none] or absent; highway=path` | 2.3 | 2.4 | +| `sac_scale=mountain_hiking` | | 1.8 | +| `trail_visibility=intermediate` | | 1.8 | diff --git a/docs/osm/UK.md b/docs/osm/UK.md index 9a1f7388228..26376a29f17 100644 --- a/docs/osm/UK.md +++ b/docs/osm/UK.md @@ -1331,36 +1331,30 @@ permission of an OSM way. Multiple mixins can apply to the same way and their ef -| matcher | modifications | -|------------------------------------------------------------|---------------| -| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 🚴 | -| `surface=unpaved` | 🚴 | -| `surface=compacted` | 🚴 | -| `surface=wood` | 🚴 | -| `surface=cobblestone` | 🚴 | -| `surface=sett` | 🚴 | -| `surface=unhewn_cobblestone` | 🚴 | -| `surface=grass_paver` | 🚴 | -| `surface=pebblestone` | 🚴 | -| `surface=metal` | 🚴 | -| `surface=ground` | 🚴 | -| `surface=dirt` | 🚴 | -| `surface=earth` | 🚴 | -| `surface=grass` | 🚴 | -| `surface=mud` | 🚴 | -| `surface=woodchip` | 🚴 | -| `surface=gravel` | 🚴 | -| `surface=artifical_turf` | 🚴 | -| `surface=sand` | 🚴 | -| `rlis:bicycle=caution_area` | 🚴 | -| `rlis:bicycle:right=caution_area` | 🚴 | -| `rlis:bicycle:left=caution_area` | 🚴 | -| `ccgis:bicycle=caution_area` | 🚴 | -| `ccgis:bicycle:right=caution_area` | 🚴 | -| `ccgis:bicycle:left=caution_area` | 🚴 | -| `foot=discouraged` | 🚶 | -| `bicycle=discouraged` | 🚴 | -| `foot=use_sidepath` | 🚶 | -| `bicycle=use_sidepath` | 🚴 | +| matcher | bicycle safety | walk safety | +|------------------------------------------------------------|----------------|-------------| +| `lcn=yes¦rcn=yes¦ncn=yes¦bicycle_road=yes¦cyclestreet=yes` | 0.7 | | +| `surface=unpaved` | 1.18 | | +| `surface=compacted` | 1.18 | | +| `surface=wood` | 1.18 | | +| `surface=cobblestone` | 1.3 | | +| `surface=sett` | 1.3 | | +| `surface=unhewn_cobblestone` | 1.5 | | +| `surface=grass_paver` | 1.3 | | +| `surface=pebblestone` | 1.3 | | +| `surface=metal` | 1.3 | | +| `surface=ground` | 1.5 | | +| `surface=dirt` | 1.5 | | +| `surface=earth` | 1.5 | | +| `surface=grass` | 1.5 | | +| `surface=mud` | 1.5 | | +| `surface=woodchip` | 1.5 | | +| `surface=gravel` | 1.5 | | +| `surface=artifical_turf` | 1.5 | | +| `surface=sand` | 100.0 | | +| `foot=discouraged` | | 3.0 | +| `bicycle=discouraged` | 3.0 | | +| `foot=use_sidepath` | | 5.0 | +| `bicycle=use_sidepath` | 5.0 | | diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java index 9989c102030..f6343cfd384 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java @@ -602,24 +602,6 @@ public void populateProperties(WayPropertySet props) { /* Portland-local mixins */ - /* - * the RLIS/CCGIS:bicycle=designated mixins are coded out as they are no longer neccessary because of of the bicycle=designated block of code - * above. This switch makes our weighting system less reliant on tags that aren't generally used by the OSM community, and prevents the double - * counting that was occuring on streets with both bicycle infrastructure and an RLIS:bicycle=designated tag - */ - - /* - * props.setProperties("RLIS:bicycle=designated", StreetTraversalPermission.ALL, 0.97, 0.97, true); - */ - props.setMixinProperties("RLIS:bicycle=caution_area", ofBicycleSafety(1.45)); - props.setMixinProperties("RLIS:bicycle:right=caution_area", ofBicycleSafety(1.45, 1)); - props.setMixinProperties("RLIS:bicycle:left=caution_area", ofBicycleSafety(1, 1.45)); - /* - * props.setProperties("CCGIS:bicycle=designated", StreetTraversalPermission.ALL, 0.97, 0.97, true); - */ - props.setMixinProperties("CCGIS:bicycle=caution_area", ofBicycleSafety(1.45)); - props.setMixinProperties("CCGIS:bicycle:right=caution_area", ofBicycleSafety(1.45, 1)); - props.setMixinProperties("CCGIS:bicycle:left=caution_area", ofBicycleSafety(1, 1.45)); props.setMixinProperties("foot=discouraged", ofWalkSafety(3)); props.setMixinProperties("bicycle=discouraged", ofBicycleSafety(3)); diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java index a532d279ba4..f58daa1ddb3 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java @@ -1,5 +1,6 @@ package org.opentripplanner.openstreetmap.tagmapping; +import static org.opentripplanner.openstreetmap.wayproperty.MixinPropertiesBuilder.ofBicycleSafety; import static org.opentripplanner.openstreetmap.wayproperty.MixinPropertiesBuilder.ofWalkSafety; import static org.opentripplanner.openstreetmap.wayproperty.specifier.ExactMatchSpecifier.exact; @@ -41,6 +42,26 @@ public void populateProperties(WayPropertySet props) { props.setMixinProperties(exact("sidewalk=no;maxspeed=35 mph"), ofWalkSafety(2)); props.setMixinProperties(exact("sidewalk=no;maxspeed=30 mph"), ofWalkSafety(1.5)); + /* + * the RLIS/CCGIS:bicycle=designated mixins are coded out as they are no longer neccessary because of of the bicycle=designated block of code + * above. This switch makes our weighting system less reliant on tags that aren't generally used by the OSM community, and prevents the double + * counting that was occuring on streets with both bicycle infrastructure and an RLIS:bicycle=designated tag + */ + + /* + * props.setProperties("RLIS:bicycle=designated", StreetTraversalPermission.ALL, 0.97, 0.97, true); + */ + props.setMixinProperties("RLIS:bicycle=caution_area", ofBicycleSafety(1.45)); + props.setMixinProperties("RLIS:bicycle:right=caution_area", ofBicycleSafety(1.45, 1)); + props.setMixinProperties("RLIS:bicycle:left=caution_area", ofBicycleSafety(1, 1.45)); + /* + * props.setProperties("CCGIS:bicycle=designated", StreetTraversalPermission.ALL, 0.97, 0.97, true); + */ + props.setMixinProperties("CCGIS:bicycle=caution_area", ofBicycleSafety(1.45)); + props.setMixinProperties("CCGIS:bicycle:right=caution_area", ofBicycleSafety(1.45, 1)); + props.setMixinProperties("CCGIS:bicycle:left=caution_area", ofBicycleSafety(1, 1.45)); + + // Max speed limit in Oregon is 70 mph ~= 113kmh ~= 31.3m/s props.maxPossibleCarSpeed = 31.4f; diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java index fa9d174f583..dcf5969322f 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java @@ -9,4 +9,8 @@ public record SafetyFeatures(double forward, double back) { public boolean modifies() { return !(forward == 1 && back == 1); } + + public boolean isSymetric() { + return forward == back; + } } diff --git a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java index 52400a05b01..1884551d3cc 100644 --- a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -121,17 +121,30 @@ private static String propDetails(WayPropertySet wps) { private static Table mixinTable(WayPropertySet wps) { var propTable = new TableBuilder(); - propTable.withHeaders("matcher", "modifications"); + propTable.withHeaders("matcher", "bicycle safety", "walk safety"); for (var prop : wps.getMixins()) { propTable.addRow( "`%s`".formatted(prop.specifier().toMarkdown()), - emojiModifications(prop.bicycleSafety(), prop.walkSafety()) + tableValues(prop.bicycleSafety()), + tableValues(prop.walkSafety()) ); } return propTable.build(); } + private static String tableValues(SafetyFeatures safety) { + if (!safety.modifies()) { + return ""; + } + else if(safety.isSymetric()){ + return Double.toString(safety.forward()); + } + else { + return "forward: %s
back: %s".formatted(safety.forward(), safety.back()); + } + } + private static String emojiModifications(SafetyFeatures bicycle, SafetyFeatures walk) { return emojiIfModifies(bicycle, "\uD83D\uDEB4") + " " + emojiIfModifies(walk, "\uD83D\uDEB6"); } From 669da728640d42923220743277f7c4b78a3a8ed5 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 26 Jun 2024 11:56:08 +0200 Subject: [PATCH 057/132] Finetune look of tables --- doc-templates/OsmMapper.md | 11 +- docs/osm/Default.md | 1360 ++----------- docs/osm/Finland.md | 1756 ++--------------- docs/osm/Germany.md | 1441 ++------------ docs/osm/Norway.md | 424 +--- docs/osm/UK.md | 1486 ++------------ mkdocs.yml | 2 +- .../tagmapping/PortlandMapper.java | 15 +- .../generate/doc/OsmMapperDocTest.java | 56 +- 9 files changed, 768 insertions(+), 5783 deletions(-) diff --git a/doc-templates/OsmMapper.md b/doc-templates/OsmMapper.md index 555805f0c8d..1fe32ea06e9 100644 --- a/doc-templates/OsmMapper.md +++ b/doc-templates/OsmMapper.md @@ -1,17 +1,18 @@ -## OSM tag mapping +# OSM tag mapping ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. + These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. +Lower safety values make an OSM way more desirable and higher values less desirable. - - -### Bicycle and walking safety mixins +### Safety mixins Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. +permission of an OSM way. Their safety values are multiplied with the base values from the selected +way properties. Multiple mixins can apply to the same way and their effects compound. diff --git a/docs/osm/Default.md b/docs/osm/Default.md index cadf5fe488d..c390c8e4a1b 100644 --- a/docs/osm/Default.md +++ b/docs/osm/Default.md @@ -1,1220 +1,174 @@ -## OSM tag mapping +# OSM tag mapping ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. + These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. +Lower safety values make an OSM way more desirable and higher values less desirable. -| specifier | permission | safety | -|---------------------------------------------------------|------------------------|--------| -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| specifier | permission | bike safety | walk safety | +|---------------------------------------------------------|--------------------------|-------------------------------|-------------| +| `mtb:scale=3` | `NONE` | | | +| `mtb:scale=4` | `NONE` | | | +| `mtb:scale=5` | `NONE` | | | +| `mtb:scale=6` | `NONE` | | | +| `highway=corridor` | `PEDESTRIAN` | | | +| `highway=steps` | `PEDESTRIAN` | | | +| `highway=crossing` | `PEDESTRIAN` | | | +| `highway=platform` | `PEDESTRIAN` | | | +| `public_transport=platform` | `PEDESTRIAN` | | | +| `railway=platform` | `PEDESTRIAN` | | | +| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | +| `mtb:scale=1` | `PEDESTRIAN` | | | +| `mtb:scale=2` | `PEDESTRIAN` | | | +| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=cycleway` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=pedestrian` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | +| `highway=footway` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=bridleway` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | +| `highway=living_street` | `ALL` | 0.9 | | +| `highway=unclassified` | `ALL` | | | +| `highway=road` | `ALL` | | | +| `highway=byway` | `ALL` | 1.3 | | +| `highway=track` | `ALL` | 1.3 | | +| `highway=service` | `ALL` | 1.1 | | +| `highway=residential` | `ALL` | 0.98 | | +| `highway=residential_link` | `ALL` | 0.98 | | +| `highway=tertiary` | `ALL` | | | +| `highway=tertiary_link` | `ALL` | | | +| `highway=secondary` | `ALL` | 1.5 | | +| `highway=secondary_link` | `ALL` | 1.5 | | +| `highway=primary` | `ALL` | 2.06 | | +| `highway=primary_link` | `ALL` | 2.06 | | +| `highway=trunk_link` | `CAR` | 2.06 | | +| `highway=motorway_link` | `CAR` | 2.06 | | +| `highway=trunk` | `CAR` | 7.47 | | +| `highway=motorway` | `CAR` | 8.0 | | +| `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | +| `highway=service; cycleway=lane` | `ALL` | 0.77 | | +| `highway=residential; cycleway=lane` | `ALL` | 0.77 | | +| `highway=residential_link; cycleway=lane` | `ALL` | 0.77 | | +| `highway=tertiary; cycleway=lane` | `ALL` | 0.87 | | +| `highway=tertiary_link; cycleway=lane` | `ALL` | 0.87 | | +| `highway=secondary; cycleway=lane` | `ALL` | 0.96 | | +| `highway=secondary_link; cycleway=lane` | `ALL` | 0.96 | | +| `highway=primary; cycleway=lane` | `ALL` | 1.15 | | +| `highway=primary_link; cycleway=lane` | `ALL` | 1.15 | | +| `highway=trunk; cycleway=lane` | `BICYCLE_AND_CAR` | 1.5 | | +| `highway=trunk_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | +| `highway=motorway; cycleway=lane` | `BICYCLE_AND_CAR` | 2.0 | | +| `highway=motorway_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | +| `present(highway); cycleway=share_busway` | `PEDESTRIAN_AND_BICYCLE` | 0.92 | | +| `highway=service; cycleway=share_busway` | `ALL` | 0.85 | | +| `highway=residential; cycleway=share_busway` | `ALL` | 0.85 | | +| `highway=residential_link; cycleway=share_busway` | `ALL` | 0.85 | | +| `highway=tertiary; cycleway=share_busway` | `ALL` | 0.92 | | +| `highway=tertiary_link; cycleway=share_busway` | `ALL` | 0.92 | | +| `highway=secondary; cycleway=share_busway` | `ALL` | 0.99 | | +| `highway=secondary_link; cycleway=share_busway` | `ALL` | 0.99 | | +| `highway=primary; cycleway=share_busway` | `ALL` | 1.25 | | +| `highway=primary_link; cycleway=share_busway` | `ALL` | 1.25 | | +| `highway=trunk; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.75 | | +| `highway=trunk_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | +| `highway=motorway; cycleway=share_busway` | `BICYCLE_AND_CAR` | 2.5 | | +| `highway=motorway_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | +| `present(highway); cycleway=opposite_lane` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 0.87 | | +| `highway=service; cycleway=opposite_lane` | `ALL` | forward: 1.1
back: 0.77 | | +| `highway=residential; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=residential_link; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=tertiary; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=tertiary_link; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=secondary; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=secondary_link; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=primary; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=primary_link; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=trunk; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 7.47
back: 1.5 | | +| `highway=trunk_link; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 2.06
back: 1.15 | | +| `present(highway); cycleway=track` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=service; cycleway=track` | `ALL` | 0.65 | | +| `highway=residential; cycleway=track` | `ALL` | 0.65 | | +| `highway=residential_link; cycleway=track` | `ALL` | 0.65 | | +| `highway=tertiary; cycleway=track` | `ALL` | 0.75 | | +| `highway=tertiary_link; cycleway=track` | `ALL` | 0.75 | | +| `highway=secondary; cycleway=track` | `ALL` | 0.8 | | +| `highway=secondary_link; cycleway=track` | `ALL` | 0.8 | | +| `highway=primary; cycleway=track` | `ALL` | 0.85 | | +| `highway=primary_link; cycleway=track` | `ALL` | 0.85 | | +| `highway=trunk; cycleway=track` | `BICYCLE_AND_CAR` | 0.95 | | +| `highway=trunk_link; cycleway=track` | `BICYCLE_AND_CAR` | 0.85 | | +| `present(highway); cycleway=opposite_track` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 0.75 | | +| `highway=service; cycleway=opposite_track` | `ALL` | forward: 1.1
back: 0.65 | | +| `highway=residential; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=residential_link; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=tertiary; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=tertiary_link; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=secondary; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=secondary_link; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=primary; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=primary_link; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=trunk; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 7.47
back: 0.95 | | +| `highway=trunk_link; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 2.06
back: 0.85 | | +| `present(highway); cycleway=shared_lane` | `PEDESTRIAN_AND_BICYCLE` | 0.77 | | +| `highway=service; cycleway=shared_lane` | `ALL` | 0.73 | | +| `highway=residential; cycleway=shared_lane` | `ALL` | 0.77 | | +| `highway=residential_link; cycleway=shared_lane` | `ALL` | 0.77 | | +| `highway=tertiary; cycleway=shared_lane` | `ALL` | 0.83 | | +| `highway=tertiary_link; cycleway=shared_lane` | `ALL` | 0.83 | | +| `highway=secondary; cycleway=shared_lane` | `ALL` | 1.25 | | +| `highway=secondary_link; cycleway=shared_lane` | `ALL` | 1.25 | | +| `highway=primary; cycleway=shared_lane` | `ALL` | 1.75 | | +| `highway=primary_link; cycleway=shared_lane` | `ALL` | 1.75 | | +| `present(highway); cycleway=opposite` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 1.4 | | +| `highway=service; cycleway=opposite` | `ALL` | 1.1 | | +| `highway=residential; cycleway=opposite` | `ALL` | 0.98 | | +| `highway=residential_link; cycleway=opposite` | `ALL` | 0.98 | | +| `highway=tertiary; cycleway=opposite` | `ALL` | | | +| `highway=tertiary_link; cycleway=opposite` | `ALL` | | | +| `highway=secondary; cycleway=opposite` | `ALL` | forward: 1.5
back: 1.71 | | +| `highway=secondary_link; cycleway=opposite` | `ALL` | forward: 1.5
back: 1.71 | | +| `highway=primary; cycleway=opposite` | `ALL` | forward: 2.06
back: 2.99 | | +| `highway=primary_link; cycleway=opposite` | `ALL` | forward: 2.06
back: 2.99 | | +| `highway=path; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=footway; bicycle=yes; area=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | +| `highway=pedestrian; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `footway=sidewalk; highway=footway; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 2.5 | | +| `footway=sidewalk; highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=footway; footway=crossing` | `PEDESTRIAN_AND_BICYCLE` | 2.5 | | +| `highway=footway; footway=crossing; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=track; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | +| `highway=track; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | +| `highway=track; bicycle=yes; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | +| `highway=track; bicycle=designated; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | +| `highway=track; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | +| `present(highway); bicycle=designated` | `ALL` | 0.97 | | +| `highway=service; bicycle=designated` | `ALL` | 0.84 | | +| `highway=residential; bicycle=designated` | `ALL` | 0.95 | | +| `highway=unclassified; bicycle=designated` | `ALL` | 0.95 | | +| `highway=residential_link; bicycle=designated` | `ALL` | 0.95 | | +| `highway=tertiary; bicycle=designated` | `ALL` | 0.97 | | +| `highway=tertiary_link; bicycle=designated` | `ALL` | 0.97 | | +| `highway=secondary; bicycle=designated` | `ALL` | 1.46 | | +| `highway=secondary_link; bicycle=designated` | `ALL` | 1.46 | | +| `highway=primary; bicycle=designated` | `ALL` | 2.0 | | +| `highway=primary_link; bicycle=designated` | `ALL` | 2.0 | | +| `highway=trunk; bicycle=designated` | `BICYCLE_AND_CAR` | 7.25 | | +| `highway=trunk_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | +| `highway=motorway; bicycle=designated` | `BICYCLE_AND_CAR` | 7.76 | | +| `highway=motorway_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | - - - -

Rule #0

- -**Specifier:** `mtb:scale=3` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `mtb:scale=4` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `mtb:scale=5` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `mtb:scale=6` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `highway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `railway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `mtb:scale=1` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `mtb:scale=2` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #13

- -**Specifier:** `mtb:scale=0` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #14

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #16

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #17

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #18

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #22

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #23

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #27

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #29

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #30

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #31

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #32

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #33

- -**Specifier:** `highway=trunk_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #34

- -**Specifier:** `highway=motorway_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #35

- -**Specifier:** `highway=trunk` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #36

- -**Specifier:** `highway=motorway` -**Permission:** CAR -**Bike safety factor:** forward: 8.0, back: 8.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #37

- -**Specifier:** `present(highway); cycleway=lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #38

- -**Specifier:** `highway=service; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #39

- -**Specifier:** `highway=residential; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #40

- -**Specifier:** `highway=residential_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #41

- -**Specifier:** `highway=tertiary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #42

- -**Specifier:** `highway=tertiary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `highway=secondary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #44

- -**Specifier:** `highway=secondary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #45

- -**Specifier:** `highway=primary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #46

- -**Specifier:** `highway=primary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #47

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #48

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #49

- -**Specifier:** `highway=motorway; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #50

- -**Specifier:** `highway=motorway_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #51

- -**Specifier:** `present(highway); cycleway=share_busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #52

- -**Specifier:** `highway=service; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #53

- -**Specifier:** `highway=residential; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #54

- -**Specifier:** `highway=residential_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #55

- -**Specifier:** `highway=tertiary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #56

- -**Specifier:** `highway=tertiary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #57

- -**Specifier:** `highway=secondary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #58

- -**Specifier:** `highway=secondary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #59

- -**Specifier:** `highway=primary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #60

- -**Specifier:** `highway=primary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #61

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #62

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #63

- -**Specifier:** `highway=motorway; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #64

- -**Specifier:** `highway=motorway_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #65

- -**Specifier:** `present(highway); cycleway=opposite_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #66

- -**Specifier:** `highway=service; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #67

- -**Specifier:** `highway=residential; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #68

- -**Specifier:** `highway=residential_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #69

- -**Specifier:** `highway=tertiary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #70

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #71

- -**Specifier:** `highway=secondary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #72

- -**Specifier:** `highway=secondary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #73

- -**Specifier:** `highway=primary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #74

- -**Specifier:** `highway=primary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #75

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #76

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #77

- -**Specifier:** `present(highway); cycleway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #78

- -**Specifier:** `highway=service; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #79

- -**Specifier:** `highway=residential; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #80

- -**Specifier:** `highway=residential_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #81

- -**Specifier:** `highway=tertiary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #82

- -**Specifier:** `highway=tertiary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #83

- -**Specifier:** `highway=secondary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #84

- -**Specifier:** `highway=secondary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #85

- -**Specifier:** `highway=primary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #86

- -**Specifier:** `highway=primary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #87

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #88

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #89

- -**Specifier:** `present(highway); cycleway=opposite_track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #90

- -**Specifier:** `highway=service; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #91

- -**Specifier:** `highway=residential; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #92

- -**Specifier:** `highway=residential_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #93

- -**Specifier:** `highway=tertiary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #94

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #95

- -**Specifier:** `highway=secondary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #96

- -**Specifier:** `highway=secondary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #97

- -**Specifier:** `highway=primary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #98

- -**Specifier:** `highway=primary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #99

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #100

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #101

- -**Specifier:** `present(highway); cycleway=shared_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #102

- -**Specifier:** `highway=service; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.73, back: 0.73 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #103

- -**Specifier:** `highway=residential; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #104

- -**Specifier:** `highway=residential_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #105

- -**Specifier:** `highway=tertiary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #106

- -**Specifier:** `highway=tertiary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #107

- -**Specifier:** `highway=secondary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #108

- -**Specifier:** `highway=secondary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #109

- -**Specifier:** `highway=primary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #110

- -**Specifier:** `highway=primary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #111

- -**Specifier:** `present(highway); cycleway=opposite` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.4 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #112

- -**Specifier:** `highway=service; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #113

- -**Specifier:** `highway=residential; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #114

- -**Specifier:** `highway=residential_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #115

- -**Specifier:** `highway=tertiary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #116

- -**Specifier:** `highway=tertiary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #117

- -**Specifier:** `highway=secondary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #118

- -**Specifier:** `highway=secondary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #119

- -**Specifier:** `highway=primary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #120

- -**Specifier:** `highway=primary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #121

- -**Specifier:** `highway=path; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #122

- -**Specifier:** `highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #123

- -**Specifier:** `highway=footway; bicycle=yes; area=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #124

- -**Specifier:** `highway=pedestrian; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #125

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #126

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #127

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #128

- -**Specifier:** `highway=footway; footway=crossing; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #129

- -**Specifier:** `highway=track; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #130

- -**Specifier:** `highway=track; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #131

- -**Specifier:** `highway=track; bicycle=yes; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #132

- -**Specifier:** `highway=track; bicycle=designated; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #133

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #134

- -**Specifier:** `present(highway); bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #135

- -**Specifier:** `highway=service; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.84, back: 0.84 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #136

- -**Specifier:** `highway=residential; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #137

- -**Specifier:** `highway=unclassified; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #138

- -**Specifier:** `highway=residential_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #139

- -**Specifier:** `highway=tertiary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #140

- -**Specifier:** `highway=tertiary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #141

- -**Specifier:** `highway=secondary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #142

- -**Specifier:** `highway=secondary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #143

- -**Specifier:** `highway=primary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #144

- -**Specifier:** `highway=primary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #145

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #146

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #147

- -**Specifier:** `highway=motorway; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.76, back: 7.76 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #148

- -**Specifier:** `highway=motorway_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins +### Safety mixins Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. +permission of an OSM way. Their safety values are multiplied with the base values from the selected +way properties. Multiple mixins can apply to the same way and their effects compound. diff --git a/docs/osm/Finland.md b/docs/osm/Finland.md index acb7bd5e302..33b1ee9ae2a 100644 --- a/docs/osm/Finland.md +++ b/docs/osm/Finland.md @@ -1,1572 +1,218 @@ -## OSM tag mapping +# OSM tag mapping ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. + These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. +Lower safety values make an OSM way more desirable and higher values less desirable. -| specifier | permission | safety | -|---------------------------------------------------------------------------------|------------------------|--------| -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | ALL | 🚴 | -| `highway=trunk` | ALL | 🚴 | -| `highway=trunk; tunnel=yes` | CAR | 🚴 | -| `motorroad=yes` | CAR | 🚴 | -| `present(highway); informal=yes` | NONE | | -| `highway=service; access=private` | NONE | | -| `highway=trail` | NONE | | -| `present(highway); seasonal=winter` | NONE | | -| `present(highway); ice_road=yes` | NONE | | -| `present(highway); winter_road=yes` | NONE | | -| `highway=footway` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `highway=cycleway; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=footway; bridge=yes` | PEDESTRIAN | | -| `highway=footway; tunnel=yes` | PEDESTRIAN | | -| `highway=cycleway; bridge=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=cycleway; tunnel=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; crossing=traffic_signals` | PEDESTRIAN | 🚶 | -| `highway=footway; footway=crossing` | PEDESTRIAN | 🚶 | -| `highway=cycleway; cycleway=crossing; segregated=yes; crossing=traffic_signals` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; footway=crossing; segregated=yes; crossing=traffic_signals` | PEDESTRIAN | 🚴 🚶 | -| `highway=cycleway; cycleway=crossing; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; footway=crossing; segregated=yes` | PEDESTRIAN | 🚴 🚶 | -| `highway=cycleway; cycleway=crossing; crossing=traffic_signals` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; footway=crossing; crossing=traffic_signals` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; cycleway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; tunnel=yes; access=destination` | NONE | | -| `highway=service; access=destination` | ALL | 🚴 | -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| specifier | permission | bike safety | walk safety | +|---------------------------------------------------------------------------------|--------------------------|-------------------------------|-------------| +| `highway=living_street` | `ALL` | 0.9 | | +| `highway=unclassified` | `ALL` | | | +| `highway=road` | `ALL` | | | +| `highway=byway` | `ALL` | 1.3 | | +| `highway=track` | `ALL` | 1.3 | | +| `highway=service` | `ALL` | 1.1 | | +| `highway=residential` | `ALL` | 0.98 | | +| `highway=residential_link` | `ALL` | 0.98 | | +| `highway=tertiary` | `ALL` | | | +| `highway=tertiary_link` | `ALL` | | | +| `highway=secondary` | `ALL` | 1.5 | | +| `highway=secondary_link` | `ALL` | 1.5 | | +| `highway=primary` | `ALL` | 2.06 | | +| `highway=primary_link` | `ALL` | 2.06 | | +| `highway=trunk_link` | `ALL` | 2.06 | | +| `highway=trunk` | `ALL` | 7.47 | | +| `highway=trunk; tunnel=yes` | `CAR` | 7.47 | | +| `motorroad=yes` | `CAR` | 7.47 | | +| `present(highway); informal=yes` | `NONE` | | | +| `highway=service; access=private` | `NONE` | | | +| `highway=trail` | `NONE` | | | +| `present(highway); seasonal=winter` | `NONE` | | | +| `present(highway); ice_road=yes` | `NONE` | | | +| `present(highway); winter_road=yes` | `NONE` | | | +| `highway=footway` | `PEDESTRIAN` | | | +| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | +| `highway=cycleway; segregated=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | 1.1 | +| `highway=footway; bridge=yes` | `PEDESTRIAN` | | | +| `highway=footway; tunnel=yes` | `PEDESTRIAN` | | | +| `highway=cycleway; bridge=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=cycleway; tunnel=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=footway; footway=crossing; crossing=traffic_signals` | `PEDESTRIAN` | | 1.1 | +| `highway=footway; footway=crossing` | `PEDESTRIAN` | | 1.2 | +| `highway=cycleway; cycleway=crossing; segregated=yes; crossing=traffic_signals` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | 1.1 | +| `highway=cycleway; footway=crossing; segregated=yes; crossing=traffic_signals` | `PEDESTRIAN` | 0.8 | 1.1 | +| `highway=cycleway; cycleway=crossing; segregated=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.2 | 1.2 | +| `highway=cycleway; footway=crossing; segregated=yes` | `PEDESTRIAN` | 1.2 | 1.2 | +| `highway=cycleway; cycleway=crossing; crossing=traffic_signals` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | 1.15 | +| `highway=cycleway; footway=crossing; crossing=traffic_signals` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | 1.15 | +| `highway=cycleway; cycleway=crossing` | `PEDESTRIAN_AND_BICYCLE` | 1.2 | 1.25 | +| `highway=cycleway; footway=crossing` | `PEDESTRIAN_AND_BICYCLE` | 1.2 | 1.25 | +| `highway=cycleway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=service; tunnel=yes; access=destination` | `NONE` | | | +| `highway=service; access=destination` | `ALL` | 1.1 | | +| `mtb:scale=3` | `NONE` | | | +| `mtb:scale=4` | `NONE` | | | +| `mtb:scale=5` | `NONE` | | | +| `mtb:scale=6` | `NONE` | | | +| `highway=corridor` | `PEDESTRIAN` | | | +| `highway=steps` | `PEDESTRIAN` | | | +| `highway=crossing` | `PEDESTRIAN` | | | +| `highway=platform` | `PEDESTRIAN` | | | +| `public_transport=platform` | `PEDESTRIAN` | | | +| `railway=platform` | `PEDESTRIAN` | | | +| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | +| `mtb:scale=1` | `PEDESTRIAN` | | | +| `mtb:scale=2` | `PEDESTRIAN` | | | +| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=cycleway` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=pedestrian` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | +| `highway=footway` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=bridleway` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | +| `highway=living_street` | `ALL` | 0.9 | | +| `highway=unclassified` | `ALL` | | | +| `highway=road` | `ALL` | | | +| `highway=byway` | `ALL` | 1.3 | | +| `highway=track` | `ALL` | 1.3 | | +| `highway=service` | `ALL` | 1.1 | | +| `highway=residential` | `ALL` | 0.98 | | +| `highway=residential_link` | `ALL` | 0.98 | | +| `highway=tertiary` | `ALL` | | | +| `highway=tertiary_link` | `ALL` | | | +| `highway=secondary` | `ALL` | 1.5 | | +| `highway=secondary_link` | `ALL` | 1.5 | | +| `highway=primary` | `ALL` | 2.06 | | +| `highway=primary_link` | `ALL` | 2.06 | | +| `highway=trunk_link` | `CAR` | 2.06 | | +| `highway=motorway_link` | `CAR` | 2.06 | | +| `highway=trunk` | `CAR` | 7.47 | | +| `highway=motorway` | `CAR` | 8.0 | | +| `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | +| `highway=service; cycleway=lane` | `ALL` | 0.77 | | +| `highway=residential; cycleway=lane` | `ALL` | 0.77 | | +| `highway=residential_link; cycleway=lane` | `ALL` | 0.77 | | +| `highway=tertiary; cycleway=lane` | `ALL` | 0.87 | | +| `highway=tertiary_link; cycleway=lane` | `ALL` | 0.87 | | +| `highway=secondary; cycleway=lane` | `ALL` | 0.96 | | +| `highway=secondary_link; cycleway=lane` | `ALL` | 0.96 | | +| `highway=primary; cycleway=lane` | `ALL` | 1.15 | | +| `highway=primary_link; cycleway=lane` | `ALL` | 1.15 | | +| `highway=trunk; cycleway=lane` | `BICYCLE_AND_CAR` | 1.5 | | +| `highway=trunk_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | +| `highway=motorway; cycleway=lane` | `BICYCLE_AND_CAR` | 2.0 | | +| `highway=motorway_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | +| `present(highway); cycleway=share_busway` | `PEDESTRIAN_AND_BICYCLE` | 0.92 | | +| `highway=service; cycleway=share_busway` | `ALL` | 0.85 | | +| `highway=residential; cycleway=share_busway` | `ALL` | 0.85 | | +| `highway=residential_link; cycleway=share_busway` | `ALL` | 0.85 | | +| `highway=tertiary; cycleway=share_busway` | `ALL` | 0.92 | | +| `highway=tertiary_link; cycleway=share_busway` | `ALL` | 0.92 | | +| `highway=secondary; cycleway=share_busway` | `ALL` | 0.99 | | +| `highway=secondary_link; cycleway=share_busway` | `ALL` | 0.99 | | +| `highway=primary; cycleway=share_busway` | `ALL` | 1.25 | | +| `highway=primary_link; cycleway=share_busway` | `ALL` | 1.25 | | +| `highway=trunk; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.75 | | +| `highway=trunk_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | +| `highway=motorway; cycleway=share_busway` | `BICYCLE_AND_CAR` | 2.5 | | +| `highway=motorway_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | +| `present(highway); cycleway=opposite_lane` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 0.87 | | +| `highway=service; cycleway=opposite_lane` | `ALL` | forward: 1.1
back: 0.77 | | +| `highway=residential; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=residential_link; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=tertiary; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=tertiary_link; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=secondary; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=secondary_link; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=primary; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=primary_link; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=trunk; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 7.47
back: 1.5 | | +| `highway=trunk_link; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 2.06
back: 1.15 | | +| `present(highway); cycleway=track` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=service; cycleway=track` | `ALL` | 0.65 | | +| `highway=residential; cycleway=track` | `ALL` | 0.65 | | +| `highway=residential_link; cycleway=track` | `ALL` | 0.65 | | +| `highway=tertiary; cycleway=track` | `ALL` | 0.75 | | +| `highway=tertiary_link; cycleway=track` | `ALL` | 0.75 | | +| `highway=secondary; cycleway=track` | `ALL` | 0.8 | | +| `highway=secondary_link; cycleway=track` | `ALL` | 0.8 | | +| `highway=primary; cycleway=track` | `ALL` | 0.85 | | +| `highway=primary_link; cycleway=track` | `ALL` | 0.85 | | +| `highway=trunk; cycleway=track` | `BICYCLE_AND_CAR` | 0.95 | | +| `highway=trunk_link; cycleway=track` | `BICYCLE_AND_CAR` | 0.85 | | +| `present(highway); cycleway=opposite_track` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 0.75 | | +| `highway=service; cycleway=opposite_track` | `ALL` | forward: 1.1
back: 0.65 | | +| `highway=residential; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=residential_link; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=tertiary; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=tertiary_link; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=secondary; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=secondary_link; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=primary; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=primary_link; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=trunk; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 7.47
back: 0.95 | | +| `highway=trunk_link; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 2.06
back: 0.85 | | +| `present(highway); cycleway=shared_lane` | `PEDESTRIAN_AND_BICYCLE` | 0.77 | | +| `highway=service; cycleway=shared_lane` | `ALL` | 0.73 | | +| `highway=residential; cycleway=shared_lane` | `ALL` | 0.77 | | +| `highway=residential_link; cycleway=shared_lane` | `ALL` | 0.77 | | +| `highway=tertiary; cycleway=shared_lane` | `ALL` | 0.83 | | +| `highway=tertiary_link; cycleway=shared_lane` | `ALL` | 0.83 | | +| `highway=secondary; cycleway=shared_lane` | `ALL` | 1.25 | | +| `highway=secondary_link; cycleway=shared_lane` | `ALL` | 1.25 | | +| `highway=primary; cycleway=shared_lane` | `ALL` | 1.75 | | +| `highway=primary_link; cycleway=shared_lane` | `ALL` | 1.75 | | +| `present(highway); cycleway=opposite` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 1.4 | | +| `highway=service; cycleway=opposite` | `ALL` | 1.1 | | +| `highway=residential; cycleway=opposite` | `ALL` | 0.98 | | +| `highway=residential_link; cycleway=opposite` | `ALL` | 0.98 | | +| `highway=tertiary; cycleway=opposite` | `ALL` | | | +| `highway=tertiary_link; cycleway=opposite` | `ALL` | | | +| `highway=secondary; cycleway=opposite` | `ALL` | forward: 1.5
back: 1.71 | | +| `highway=secondary_link; cycleway=opposite` | `ALL` | forward: 1.5
back: 1.71 | | +| `highway=primary; cycleway=opposite` | `ALL` | forward: 2.06
back: 2.99 | | +| `highway=primary_link; cycleway=opposite` | `ALL` | forward: 2.06
back: 2.99 | | +| `highway=path; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=footway; bicycle=yes; area=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | +| `highway=pedestrian; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `footway=sidewalk; highway=footway; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 2.5 | | +| `footway=sidewalk; highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=footway; footway=crossing` | `PEDESTRIAN_AND_BICYCLE` | 2.5 | | +| `highway=footway; footway=crossing; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=track; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | +| `highway=track; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | +| `highway=track; bicycle=yes; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | +| `highway=track; bicycle=designated; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | +| `highway=track; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | +| `present(highway); bicycle=designated` | `ALL` | 0.97 | | +| `highway=service; bicycle=designated` | `ALL` | 0.84 | | +| `highway=residential; bicycle=designated` | `ALL` | 0.95 | | +| `highway=unclassified; bicycle=designated` | `ALL` | 0.95 | | +| `highway=residential_link; bicycle=designated` | `ALL` | 0.95 | | +| `highway=tertiary; bicycle=designated` | `ALL` | 0.97 | | +| `highway=tertiary_link; bicycle=designated` | `ALL` | 0.97 | | +| `highway=secondary; bicycle=designated` | `ALL` | 1.46 | | +| `highway=secondary_link; bicycle=designated` | `ALL` | 1.46 | | +| `highway=primary; bicycle=designated` | `ALL` | 2.0 | | +| `highway=primary_link; bicycle=designated` | `ALL` | 2.0 | | +| `highway=trunk; bicycle=designated` | `BICYCLE_AND_CAR` | 7.25 | | +| `highway=trunk_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | +| `highway=motorway; bicycle=designated` | `BICYCLE_AND_CAR` | 7.76 | | +| `highway=motorway_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | - - - -

Rule #0

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #13

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #14

- -**Specifier:** `highway=trunk_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `highway=trunk` -**Permission:** ALL -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #16

- -**Specifier:** `highway=trunk; tunnel=yes` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #17

- -**Specifier:** `motorroad=yes` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #18

- -**Specifier:** `present(highway); informal=yes` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `highway=service; access=private` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `highway=trail` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `present(highway); seasonal=winter` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #22

- -**Specifier:** `present(highway); ice_road=yes` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #23

- -**Specifier:** `present(highway); winter_road=yes` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `highway=cycleway; segregated=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.1, back: 1.1 - -

Rule #27

- -**Specifier:** `highway=footway; bridge=yes` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=footway; tunnel=yes` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #29

- -**Specifier:** `highway=cycleway; bridge=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #30

- -**Specifier:** `highway=cycleway; tunnel=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #31

- -**Specifier:** `highway=footway; footway=crossing; crossing=traffic_signals` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.1, back: 1.1 - -

Rule #32

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.2, back: 1.2 - -

Rule #33

- -**Specifier:** `highway=cycleway; cycleway=crossing; segregated=yes; crossing=traffic_signals` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.1, back: 1.1 - -

Rule #34

- -**Specifier:** `highway=cycleway; footway=crossing; segregated=yes; crossing=traffic_signals` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.1, back: 1.1 - -

Rule #35

- -**Specifier:** `highway=cycleway; cycleway=crossing; segregated=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.2, back: 1.2 -**Walk safety factor:** forward: 1.2, back: 1.2 - -

Rule #36

- -**Specifier:** `highway=cycleway; footway=crossing; segregated=yes` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.2, back: 1.2 -**Walk safety factor:** forward: 1.2, back: 1.2 - -

Rule #37

- -**Specifier:** `highway=cycleway; cycleway=crossing; crossing=traffic_signals` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.15, back: 1.15 - -

Rule #38

- -**Specifier:** `highway=cycleway; footway=crossing; crossing=traffic_signals` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.15, back: 1.15 - -

Rule #39

- -**Specifier:** `highway=cycleway; cycleway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.2, back: 1.2 -**Walk safety factor:** forward: 1.25, back: 1.25 - -

Rule #40

- -**Specifier:** `highway=cycleway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.2, back: 1.2 -**Walk safety factor:** forward: 1.25, back: 1.25 - -

Rule #41

- -**Specifier:** `highway=cycleway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #42

- -**Specifier:** `highway=service; tunnel=yes; access=destination` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `highway=service; access=destination` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #44

- -**Specifier:** `mtb:scale=3` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #45

- -**Specifier:** `mtb:scale=4` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #46

- -**Specifier:** `mtb:scale=5` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #47

- -**Specifier:** `mtb:scale=6` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #48

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #49

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #50

- -**Specifier:** `highway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #51

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #52

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #53

- -**Specifier:** `railway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #54

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #55

- -**Specifier:** `mtb:scale=1` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #56

- -**Specifier:** `mtb:scale=2` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #57

- -**Specifier:** `mtb:scale=0` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #58

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #59

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #60

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #61

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #62

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #63

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #64

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #65

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #66

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #67

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #68

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #69

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #70

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #71

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #72

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #73

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #74

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #75

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #76

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #77

- -**Specifier:** `highway=trunk_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #78

- -**Specifier:** `highway=motorway_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #79

- -**Specifier:** `highway=trunk` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #80

- -**Specifier:** `highway=motorway` -**Permission:** CAR -**Bike safety factor:** forward: 8.0, back: 8.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #81

- -**Specifier:** `present(highway); cycleway=lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #82

- -**Specifier:** `highway=service; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #83

- -**Specifier:** `highway=residential; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #84

- -**Specifier:** `highway=residential_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #85

- -**Specifier:** `highway=tertiary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #86

- -**Specifier:** `highway=tertiary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #87

- -**Specifier:** `highway=secondary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #88

- -**Specifier:** `highway=secondary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #89

- -**Specifier:** `highway=primary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #90

- -**Specifier:** `highway=primary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #91

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #92

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #93

- -**Specifier:** `highway=motorway; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #94

- -**Specifier:** `highway=motorway_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #95

- -**Specifier:** `present(highway); cycleway=share_busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #96

- -**Specifier:** `highway=service; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #97

- -**Specifier:** `highway=residential; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #98

- -**Specifier:** `highway=residential_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #99

- -**Specifier:** `highway=tertiary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #100

- -**Specifier:** `highway=tertiary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #101

- -**Specifier:** `highway=secondary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #102

- -**Specifier:** `highway=secondary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #103

- -**Specifier:** `highway=primary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #104

- -**Specifier:** `highway=primary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #105

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #106

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #107

- -**Specifier:** `highway=motorway; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #108

- -**Specifier:** `highway=motorway_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #109

- -**Specifier:** `present(highway); cycleway=opposite_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #110

- -**Specifier:** `highway=service; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #111

- -**Specifier:** `highway=residential; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #112

- -**Specifier:** `highway=residential_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #113

- -**Specifier:** `highway=tertiary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #114

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #115

- -**Specifier:** `highway=secondary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #116

- -**Specifier:** `highway=secondary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #117

- -**Specifier:** `highway=primary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #118

- -**Specifier:** `highway=primary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #119

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #120

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #121

- -**Specifier:** `present(highway); cycleway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #122

- -**Specifier:** `highway=service; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #123

- -**Specifier:** `highway=residential; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #124

- -**Specifier:** `highway=residential_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #125

- -**Specifier:** `highway=tertiary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #126

- -**Specifier:** `highway=tertiary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #127

- -**Specifier:** `highway=secondary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #128

- -**Specifier:** `highway=secondary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #129

- -**Specifier:** `highway=primary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #130

- -**Specifier:** `highway=primary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #131

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #132

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #133

- -**Specifier:** `present(highway); cycleway=opposite_track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #134

- -**Specifier:** `highway=service; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #135

- -**Specifier:** `highway=residential; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #136

- -**Specifier:** `highway=residential_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #137

- -**Specifier:** `highway=tertiary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #138

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #139

- -**Specifier:** `highway=secondary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #140

- -**Specifier:** `highway=secondary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #141

- -**Specifier:** `highway=primary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #142

- -**Specifier:** `highway=primary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #143

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #144

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #145

- -**Specifier:** `present(highway); cycleway=shared_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #146

- -**Specifier:** `highway=service; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.73, back: 0.73 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #147

- -**Specifier:** `highway=residential; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #148

- -**Specifier:** `highway=residential_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #149

- -**Specifier:** `highway=tertiary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #150

- -**Specifier:** `highway=tertiary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #151

- -**Specifier:** `highway=secondary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #152

- -**Specifier:** `highway=secondary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #153

- -**Specifier:** `highway=primary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #154

- -**Specifier:** `highway=primary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #155

- -**Specifier:** `present(highway); cycleway=opposite` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.4 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #156

- -**Specifier:** `highway=service; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #157

- -**Specifier:** `highway=residential; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #158

- -**Specifier:** `highway=residential_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #159

- -**Specifier:** `highway=tertiary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #160

- -**Specifier:** `highway=tertiary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #161

- -**Specifier:** `highway=secondary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #162

- -**Specifier:** `highway=secondary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #163

- -**Specifier:** `highway=primary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #164

- -**Specifier:** `highway=primary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #165

- -**Specifier:** `highway=path; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #166

- -**Specifier:** `highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #167

- -**Specifier:** `highway=footway; bicycle=yes; area=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #168

- -**Specifier:** `highway=pedestrian; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #169

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #170

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #171

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #172

- -**Specifier:** `highway=footway; footway=crossing; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #173

- -**Specifier:** `highway=track; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #174

- -**Specifier:** `highway=track; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #175

- -**Specifier:** `highway=track; bicycle=yes; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #176

- -**Specifier:** `highway=track; bicycle=designated; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #177

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #178

- -**Specifier:** `present(highway); bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #179

- -**Specifier:** `highway=service; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.84, back: 0.84 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #180

- -**Specifier:** `highway=residential; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #181

- -**Specifier:** `highway=unclassified; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #182

- -**Specifier:** `highway=residential_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #183

- -**Specifier:** `highway=tertiary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #184

- -**Specifier:** `highway=tertiary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #185

- -**Specifier:** `highway=secondary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #186

- -**Specifier:** `highway=secondary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #187

- -**Specifier:** `highway=primary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #188

- -**Specifier:** `highway=primary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #189

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #190

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #191

- -**Specifier:** `highway=motorway; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.76, back: 7.76 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #192

- -**Specifier:** `highway=motorway_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins +### Safety mixins Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. +permission of an OSM way. Their safety values are multiplied with the base values from the selected +way properties. Multiple mixins can apply to the same way and their effects compound. diff --git a/docs/osm/Germany.md b/docs/osm/Germany.md index 7cd6cbf91cf..9420e22025e 100644 --- a/docs/osm/Germany.md +++ b/docs/osm/Germany.md @@ -1,1292 +1,183 @@ -## OSM tag mapping +# OSM tag mapping ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. + These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. +Lower safety values make an OSM way more desirable and higher values less desirable. -| specifier | permission | safety | -|---------------------------------------------------------|------------------------|--------| -| `highway=track` | PEDESTRIAN_AND_BICYCLE | | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | | -| `highway=residential; junction=roundabout` | ALL | 🚴 | -| `present(highway); junction=roundabout` | BICYCLE_AND_CAR | | -| `highway=pedestrian` | PEDESTRIAN | | -| `highway=residential; maxspeed=30` | ALL | 🚴 | -| `highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=unclassified; cycleway=lane` | ALL | 🚴 | -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| specifier | permission | bike safety | walk safety | +|---------------------------------------------------------|--------------------------|-------------------------------|-------------| +| `highway=track` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=track; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=residential; junction=roundabout` | `ALL` | 0.98 | | +| `present(highway); junction=roundabout` | `BICYCLE_AND_CAR` | | | +| `highway=pedestrian` | `PEDESTRIAN` | | | +| `highway=residential; maxspeed=30` | `ALL` | 0.9 | | +| `highway=footway; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.8 | | +| `footway=sidewalk; highway=footway; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.2 | | +| `highway=unclassified; cycleway=lane` | `ALL` | 0.87 | | +| `mtb:scale=3` | `NONE` | | | +| `mtb:scale=4` | `NONE` | | | +| `mtb:scale=5` | `NONE` | | | +| `mtb:scale=6` | `NONE` | | | +| `highway=corridor` | `PEDESTRIAN` | | | +| `highway=steps` | `PEDESTRIAN` | | | +| `highway=crossing` | `PEDESTRIAN` | | | +| `highway=platform` | `PEDESTRIAN` | | | +| `public_transport=platform` | `PEDESTRIAN` | | | +| `railway=platform` | `PEDESTRIAN` | | | +| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | +| `mtb:scale=1` | `PEDESTRIAN` | | | +| `mtb:scale=2` | `PEDESTRIAN` | | | +| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=cycleway` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=pedestrian` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | +| `highway=footway` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=bridleway` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | +| `highway=living_street` | `ALL` | 0.9 | | +| `highway=unclassified` | `ALL` | | | +| `highway=road` | `ALL` | | | +| `highway=byway` | `ALL` | 1.3 | | +| `highway=track` | `ALL` | 1.3 | | +| `highway=service` | `ALL` | 1.1 | | +| `highway=residential` | `ALL` | 0.98 | | +| `highway=residential_link` | `ALL` | 0.98 | | +| `highway=tertiary` | `ALL` | | | +| `highway=tertiary_link` | `ALL` | | | +| `highway=secondary` | `ALL` | 1.5 | | +| `highway=secondary_link` | `ALL` | 1.5 | | +| `highway=primary` | `ALL` | 2.06 | | +| `highway=primary_link` | `ALL` | 2.06 | | +| `highway=trunk_link` | `CAR` | 2.06 | | +| `highway=motorway_link` | `CAR` | 2.06 | | +| `highway=trunk` | `CAR` | 7.47 | | +| `highway=motorway` | `CAR` | 8.0 | | +| `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | +| `highway=service; cycleway=lane` | `ALL` | 0.77 | | +| `highway=residential; cycleway=lane` | `ALL` | 0.77 | | +| `highway=residential_link; cycleway=lane` | `ALL` | 0.77 | | +| `highway=tertiary; cycleway=lane` | `ALL` | 0.87 | | +| `highway=tertiary_link; cycleway=lane` | `ALL` | 0.87 | | +| `highway=secondary; cycleway=lane` | `ALL` | 0.96 | | +| `highway=secondary_link; cycleway=lane` | `ALL` | 0.96 | | +| `highway=primary; cycleway=lane` | `ALL` | 1.15 | | +| `highway=primary_link; cycleway=lane` | `ALL` | 1.15 | | +| `highway=trunk; cycleway=lane` | `BICYCLE_AND_CAR` | 1.5 | | +| `highway=trunk_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | +| `highway=motorway; cycleway=lane` | `BICYCLE_AND_CAR` | 2.0 | | +| `highway=motorway_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | +| `present(highway); cycleway=share_busway` | `PEDESTRIAN_AND_BICYCLE` | 0.92 | | +| `highway=service; cycleway=share_busway` | `ALL` | 0.85 | | +| `highway=residential; cycleway=share_busway` | `ALL` | 0.85 | | +| `highway=residential_link; cycleway=share_busway` | `ALL` | 0.85 | | +| `highway=tertiary; cycleway=share_busway` | `ALL` | 0.92 | | +| `highway=tertiary_link; cycleway=share_busway` | `ALL` | 0.92 | | +| `highway=secondary; cycleway=share_busway` | `ALL` | 0.99 | | +| `highway=secondary_link; cycleway=share_busway` | `ALL` | 0.99 | | +| `highway=primary; cycleway=share_busway` | `ALL` | 1.25 | | +| `highway=primary_link; cycleway=share_busway` | `ALL` | 1.25 | | +| `highway=trunk; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.75 | | +| `highway=trunk_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | +| `highway=motorway; cycleway=share_busway` | `BICYCLE_AND_CAR` | 2.5 | | +| `highway=motorway_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | +| `present(highway); cycleway=opposite_lane` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 0.87 | | +| `highway=service; cycleway=opposite_lane` | `ALL` | forward: 1.1
back: 0.77 | | +| `highway=residential; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=residential_link; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=tertiary; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=tertiary_link; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=secondary; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=secondary_link; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=primary; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=primary_link; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=trunk; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 7.47
back: 1.5 | | +| `highway=trunk_link; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 2.06
back: 1.15 | | +| `present(highway); cycleway=track` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=service; cycleway=track` | `ALL` | 0.65 | | +| `highway=residential; cycleway=track` | `ALL` | 0.65 | | +| `highway=residential_link; cycleway=track` | `ALL` | 0.65 | | +| `highway=tertiary; cycleway=track` | `ALL` | 0.75 | | +| `highway=tertiary_link; cycleway=track` | `ALL` | 0.75 | | +| `highway=secondary; cycleway=track` | `ALL` | 0.8 | | +| `highway=secondary_link; cycleway=track` | `ALL` | 0.8 | | +| `highway=primary; cycleway=track` | `ALL` | 0.85 | | +| `highway=primary_link; cycleway=track` | `ALL` | 0.85 | | +| `highway=trunk; cycleway=track` | `BICYCLE_AND_CAR` | 0.95 | | +| `highway=trunk_link; cycleway=track` | `BICYCLE_AND_CAR` | 0.85 | | +| `present(highway); cycleway=opposite_track` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 0.75 | | +| `highway=service; cycleway=opposite_track` | `ALL` | forward: 1.1
back: 0.65 | | +| `highway=residential; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=residential_link; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=tertiary; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=tertiary_link; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=secondary; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=secondary_link; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=primary; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=primary_link; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=trunk; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 7.47
back: 0.95 | | +| `highway=trunk_link; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 2.06
back: 0.85 | | +| `present(highway); cycleway=shared_lane` | `PEDESTRIAN_AND_BICYCLE` | 0.77 | | +| `highway=service; cycleway=shared_lane` | `ALL` | 0.73 | | +| `highway=residential; cycleway=shared_lane` | `ALL` | 0.77 | | +| `highway=residential_link; cycleway=shared_lane` | `ALL` | 0.77 | | +| `highway=tertiary; cycleway=shared_lane` | `ALL` | 0.83 | | +| `highway=tertiary_link; cycleway=shared_lane` | `ALL` | 0.83 | | +| `highway=secondary; cycleway=shared_lane` | `ALL` | 1.25 | | +| `highway=secondary_link; cycleway=shared_lane` | `ALL` | 1.25 | | +| `highway=primary; cycleway=shared_lane` | `ALL` | 1.75 | | +| `highway=primary_link; cycleway=shared_lane` | `ALL` | 1.75 | | +| `present(highway); cycleway=opposite` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 1.4 | | +| `highway=service; cycleway=opposite` | `ALL` | 1.1 | | +| `highway=residential; cycleway=opposite` | `ALL` | 0.98 | | +| `highway=residential_link; cycleway=opposite` | `ALL` | 0.98 | | +| `highway=tertiary; cycleway=opposite` | `ALL` | | | +| `highway=tertiary_link; cycleway=opposite` | `ALL` | | | +| `highway=secondary; cycleway=opposite` | `ALL` | forward: 1.5
back: 1.71 | | +| `highway=secondary_link; cycleway=opposite` | `ALL` | forward: 1.5
back: 1.71 | | +| `highway=primary; cycleway=opposite` | `ALL` | forward: 2.06
back: 2.99 | | +| `highway=primary_link; cycleway=opposite` | `ALL` | forward: 2.06
back: 2.99 | | +| `highway=path; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=footway; bicycle=yes; area=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | +| `highway=pedestrian; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `footway=sidewalk; highway=footway; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 2.5 | | +| `footway=sidewalk; highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=footway; footway=crossing` | `PEDESTRIAN_AND_BICYCLE` | 2.5 | | +| `highway=footway; footway=crossing; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=track; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | +| `highway=track; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | +| `highway=track; bicycle=yes; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | +| `highway=track; bicycle=designated; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | +| `highway=track; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | +| `present(highway); bicycle=designated` | `ALL` | 0.97 | | +| `highway=service; bicycle=designated` | `ALL` | 0.84 | | +| `highway=residential; bicycle=designated` | `ALL` | 0.95 | | +| `highway=unclassified; bicycle=designated` | `ALL` | 0.95 | | +| `highway=residential_link; bicycle=designated` | `ALL` | 0.95 | | +| `highway=tertiary; bicycle=designated` | `ALL` | 0.97 | | +| `highway=tertiary_link; bicycle=designated` | `ALL` | 0.97 | | +| `highway=secondary; bicycle=designated` | `ALL` | 1.46 | | +| `highway=secondary_link; bicycle=designated` | `ALL` | 1.46 | | +| `highway=primary; bicycle=designated` | `ALL` | 2.0 | | +| `highway=primary_link; bicycle=designated` | `ALL` | 2.0 | | +| `highway=trunk; bicycle=designated` | `BICYCLE_AND_CAR` | 7.25 | | +| `highway=trunk_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | +| `highway=motorway; bicycle=designated` | `BICYCLE_AND_CAR` | 7.76 | | +| `highway=motorway_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | - - - -

Rule #0

- -**Specifier:** `highway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `highway=residential; junction=roundabout` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `present(highway); junction=roundabout` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `highway=residential; maxspeed=30` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.2, back: 1.2 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `highway=unclassified; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `mtb:scale=3` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `mtb:scale=4` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `mtb:scale=5` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `mtb:scale=6` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #13

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #14

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `highway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #16

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #17

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #18

- -**Specifier:** `railway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `mtb:scale=1` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `mtb:scale=2` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #22

- -**Specifier:** `mtb:scale=0` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #23

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #27

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #29

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #30

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #31

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #32

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #33

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #34

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #35

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #36

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #37

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #38

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #39

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #40

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #41

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #42

- -**Specifier:** `highway=trunk_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `highway=motorway_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #44

- -**Specifier:** `highway=trunk` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #45

- -**Specifier:** `highway=motorway` -**Permission:** CAR -**Bike safety factor:** forward: 8.0, back: 8.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #46

- -**Specifier:** `present(highway); cycleway=lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #47

- -**Specifier:** `highway=service; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #48

- -**Specifier:** `highway=residential; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #49

- -**Specifier:** `highway=residential_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #50

- -**Specifier:** `highway=tertiary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #51

- -**Specifier:** `highway=tertiary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #52

- -**Specifier:** `highway=secondary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #53

- -**Specifier:** `highway=secondary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #54

- -**Specifier:** `highway=primary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #55

- -**Specifier:** `highway=primary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #56

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #57

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #58

- -**Specifier:** `highway=motorway; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #59

- -**Specifier:** `highway=motorway_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #60

- -**Specifier:** `present(highway); cycleway=share_busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #61

- -**Specifier:** `highway=service; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #62

- -**Specifier:** `highway=residential; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #63

- -**Specifier:** `highway=residential_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #64

- -**Specifier:** `highway=tertiary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #65

- -**Specifier:** `highway=tertiary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #66

- -**Specifier:** `highway=secondary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #67

- -**Specifier:** `highway=secondary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #68

- -**Specifier:** `highway=primary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #69

- -**Specifier:** `highway=primary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #70

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #71

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #72

- -**Specifier:** `highway=motorway; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #73

- -**Specifier:** `highway=motorway_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #74

- -**Specifier:** `present(highway); cycleway=opposite_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #75

- -**Specifier:** `highway=service; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #76

- -**Specifier:** `highway=residential; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #77

- -**Specifier:** `highway=residential_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #78

- -**Specifier:** `highway=tertiary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #79

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #80

- -**Specifier:** `highway=secondary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #81

- -**Specifier:** `highway=secondary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #82

- -**Specifier:** `highway=primary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #83

- -**Specifier:** `highway=primary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #84

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #85

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #86

- -**Specifier:** `present(highway); cycleway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #87

- -**Specifier:** `highway=service; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #88

- -**Specifier:** `highway=residential; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #89

- -**Specifier:** `highway=residential_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #90

- -**Specifier:** `highway=tertiary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #91

- -**Specifier:** `highway=tertiary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #92

- -**Specifier:** `highway=secondary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #93

- -**Specifier:** `highway=secondary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #94

- -**Specifier:** `highway=primary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #95

- -**Specifier:** `highway=primary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #96

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #97

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #98

- -**Specifier:** `present(highway); cycleway=opposite_track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #99

- -**Specifier:** `highway=service; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #100

- -**Specifier:** `highway=residential; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #101

- -**Specifier:** `highway=residential_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #102

- -**Specifier:** `highway=tertiary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #103

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #104

- -**Specifier:** `highway=secondary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #105

- -**Specifier:** `highway=secondary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #106

- -**Specifier:** `highway=primary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #107

- -**Specifier:** `highway=primary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #108

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #109

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #110

- -**Specifier:** `present(highway); cycleway=shared_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #111

- -**Specifier:** `highway=service; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.73, back: 0.73 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #112

- -**Specifier:** `highway=residential; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #113

- -**Specifier:** `highway=residential_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #114

- -**Specifier:** `highway=tertiary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #115

- -**Specifier:** `highway=tertiary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #116

- -**Specifier:** `highway=secondary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #117

- -**Specifier:** `highway=secondary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #118

- -**Specifier:** `highway=primary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #119

- -**Specifier:** `highway=primary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #120

- -**Specifier:** `present(highway); cycleway=opposite` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.4 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #121

- -**Specifier:** `highway=service; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #122

- -**Specifier:** `highway=residential; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #123

- -**Specifier:** `highway=residential_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #124

- -**Specifier:** `highway=tertiary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #125

- -**Specifier:** `highway=tertiary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #126

- -**Specifier:** `highway=secondary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #127

- -**Specifier:** `highway=secondary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #128

- -**Specifier:** `highway=primary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #129

- -**Specifier:** `highway=primary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #130

- -**Specifier:** `highway=path; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #131

- -**Specifier:** `highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #132

- -**Specifier:** `highway=footway; bicycle=yes; area=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #133

- -**Specifier:** `highway=pedestrian; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #134

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #135

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #136

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #137

- -**Specifier:** `highway=footway; footway=crossing; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #138

- -**Specifier:** `highway=track; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #139

- -**Specifier:** `highway=track; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #140

- -**Specifier:** `highway=track; bicycle=yes; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #141

- -**Specifier:** `highway=track; bicycle=designated; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #142

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #143

- -**Specifier:** `present(highway); bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #144

- -**Specifier:** `highway=service; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.84, back: 0.84 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #145

- -**Specifier:** `highway=residential; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #146

- -**Specifier:** `highway=unclassified; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #147

- -**Specifier:** `highway=residential_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #148

- -**Specifier:** `highway=tertiary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #149

- -**Specifier:** `highway=tertiary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #150

- -**Specifier:** `highway=secondary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #151

- -**Specifier:** `highway=secondary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #152

- -**Specifier:** `highway=primary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #153

- -**Specifier:** `highway=primary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #154

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #155

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #156

- -**Specifier:** `highway=motorway; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.76, back: 7.76 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #157

- -**Specifier:** `highway=motorway_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins +### Safety mixins Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. +permission of an OSM way. Their safety values are multiplied with the base values from the selected +way properties. Multiple mixins can apply to the same way and their effects compound. diff --git a/docs/osm/Norway.md b/docs/osm/Norway.md index 7237319d738..f0c17c24a6c 100644 --- a/docs/osm/Norway.md +++ b/docs/osm/Norway.md @@ -1,388 +1,70 @@ -## OSM tag mapping +# OSM tag mapping ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. + These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. +Lower safety values make an OSM way more desirable and higher values less desirable. -| specifier | permission | safety | -|------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|--------| -| `highway one of [motorway, motorway_link]` | CAR | | -| `highway one of [trunk, trunk_link, primary, primary_link]; motorroad=yes` | CAR | | -| `highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | ALL | | -| `cycleway=track; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | ALL | | -| `cycleway=lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` | ALL | 🚴 | -| `cycleway=lane; maxspeed < 50; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` | ALL | 🚴 | -| `cycleway=lane; highway one of [unclassified, residential]` | ALL | 🚴 | -| `highway=service` | ALL | | -| `highway=service; service=parking_aisle` | ALL | 🚴 | -| `highway=service; service=drive-through` | ALL | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=busway` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=service; bus one of [yes, designated]` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; lanes > 1` | PEDESTRIAN_AND_BICYCLE | 🚶 | -| `highway=cycleway; oneway=yes` | PEDESTRIAN_AND_BICYCLE | 🚶 | -| `highway=cycleway; sidewalk one of [yes, left, right, both]` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=cycleway; lanes > 1; sidewalk one of [yes, left, right, both]` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway; oneway=yes; sidewalk one of [yes, left, right, both]` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway; foot=designated; segregated=no` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=path; foot=designated; bicycle=designated; segregated=no` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; foot=designated; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path; foot=designated; bicycle=designated; segregated=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=cycleway; foot=designated; segregated=yes; lanes > 1` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway; foot=designated; present(segregated); motor_vehicle=destination` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path; foot=designated; bicycle=designated; present(segregated); motor_vehicle=destination` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=sidewalk` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=cycleway; cycleway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 🚶 | -| `highway=track` | PEDESTRIAN_AND_BICYCLE | | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | | -| `highway=steps` | PEDESTRIAN | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=footway; indoor=yes` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `trail_visibility one of [bad, low, poor, horrible, no]; highway=path` | NONE | | -| `sac_scale one of [demanding_mountain_hiking, alpine_hiking, demanding_alpine_hiking, difficult_alpine_hiking]; highway one of [path, steps]` | NONE | | -| `smoothness one of [horrible, very_horrible]; highway one of [path, bridleway, track]` | PEDESTRIAN | 🚶 | -| `smoothness=impassable; highway one of [path, bridleway, track]` | NONE | | -| `1 > mtb:scale < 2; highway one of [path, bridleway, track]` | PEDESTRIAN | 🚶 | -| `mtb:scale > 2; highway one of [path, bridleway, track]` | NONE | | +| specifier | permission | bike safety | walk safety | +|------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------|-------------|-------------| +| `highway one of [motorway, motorway_link]` | `CAR` | | | +| `highway one of [trunk, trunk_link, primary, primary_link]; motorroad=yes` | `CAR` | | | +| `highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | `ALL` | | | +| `cycleway=track; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` | `ALL` | | | +| `cycleway=lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` | `ALL` | 1.27 | | +| `cycleway=lane; maxspeed < 50; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` | `ALL` | 1.1 | | +| `cycleway=lane; highway one of [unclassified, residential]` | `ALL` | 1.1 | | +| `highway=service` | `ALL` | | | +| `highway=service; service=parking_aisle` | `ALL` | 2.5 | | +| `highway=service; service=drive-through` | `ALL` | 2.5 | | +| `highway=living_street` | `ALL` | 1.83 | | +| `highway=pedestrian` | `PEDESTRIAN_AND_BICYCLE` | 1.2 | | +| `highway=busway` | `PEDESTRIAN_AND_BICYCLE` | 2.37 | 1.9 | +| `highway=service; bus one of [yes, designated]` | `PEDESTRIAN_AND_BICYCLE` | 2.37 | 1.9 | +| `highway=footway` | `PEDESTRIAN_AND_BICYCLE` | 1.42 | | +| `highway=cycleway` | `PEDESTRIAN_AND_BICYCLE` | 1.05 | 1.4 | +| `highway=cycleway; lanes > 1` | `PEDESTRIAN_AND_BICYCLE` | | 1.4 | +| `highway=cycleway; oneway=yes` | `PEDESTRIAN_AND_BICYCLE` | | 1.4 | +| `highway=cycleway; sidewalk one of [yes, left, right, both]` | `PEDESTRIAN_AND_BICYCLE` | 1.05 | | +| `highway=cycleway; lanes > 1; sidewalk one of [yes, left, right, both]` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=cycleway; oneway=yes; sidewalk one of [yes, left, right, both]` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=cycleway; foot=designated; segregated=no` | `PEDESTRIAN_AND_BICYCLE` | 1.05 | 1.15 | +| `highway=path; foot=designated; bicycle=designated; segregated=no` | `PEDESTRIAN_AND_BICYCLE` | 1.05 | 1.15 | +| `highway=cycleway; foot=designated; segregated=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.05 | | +| `highway=path; foot=designated; bicycle=designated; segregated=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.05 | | +| `highway=cycleway; foot=designated; segregated=yes; lanes > 1` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=cycleway; foot=designated; present(segregated); motor_vehicle=destination` | `PEDESTRIAN_AND_BICYCLE` | 1.57 | | +| `highway=path; foot=designated; bicycle=designated; present(segregated); motor_vehicle=destination` | `PEDESTRIAN_AND_BICYCLE` | 1.57 | | +| `highway=footway; footway=sidewalk` | `PEDESTRIAN_AND_BICYCLE` | 1.93 | 1.1 | +| `highway=footway; footway=crossing` | `PEDESTRIAN_AND_BICYCLE` | 2.33 | 1.35 | +| `highway=cycleway; cycleway=crossing` | `PEDESTRIAN_AND_BICYCLE` | 2.33 | 1.35 | +| `highway=track` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=bridleway` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=steps` | `PEDESTRIAN` | | | +| `highway=corridor` | `PEDESTRIAN` | | | +| `highway=footway; indoor=yes` | `PEDESTRIAN` | | | +| `highway=platform` | `PEDESTRIAN` | | | +| `public_transport=platform` | `PEDESTRIAN` | | | +| `trail_visibility one of [bad, low, poor, horrible, no]; highway=path` | `NONE` | | | +| `sac_scale one of [demanding_mountain_hiking, alpine_hiking, demanding_alpine_hiking, difficult_alpine_hiking]; highway one of [path, steps]` | `NONE` | | | +| `smoothness one of [horrible, very_horrible]; highway one of [path, bridleway, track]` | `PEDESTRIAN` | | 1.15 | +| `smoothness=impassable; highway one of [path, bridleway, track]` | `NONE` | | | +| `1 > mtb:scale < 2; highway one of [path, bridleway, track]` | `PEDESTRIAN` | | 1.15 | +| `mtb:scale > 2; highway one of [path, bridleway, track]` | `NONE` | | | - - - -

Rule #0

- -**Specifier:** `highway one of [motorway, motorway_link]` -**Permission:** CAR -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `highway one of [trunk, trunk_link, primary, primary_link]; motorroad=yes` -**Permission:** CAR -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `cycleway=track; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link, unclassified, residential]` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `cycleway=lane; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` -**Permission:** ALL -**Bike safety factor:** forward: 1.27, back: 1.27 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `cycleway=lane; maxspeed < 50; highway one of [trunk, trunk_link, primary, primary_link, secondary, secondary_link, tertiary, tertiary_link]` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `cycleway=lane; highway one of [unclassified, residential]` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `highway=service; service=parking_aisle` -**Permission:** ALL -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `highway=service; service=drive-through` -**Permission:** ALL -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 1.83, back: 1.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.2, back: 1.2 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `highway=busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.37, back: 2.37 -**Walk safety factor:** forward: 1.9, back: 1.9 - -

Rule #13

- -**Specifier:** `highway=service; bus one of [yes, designated]` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.37, back: 2.37 -**Walk safety factor:** forward: 1.9, back: 1.9 - -

Rule #14

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.42, back: 1.42 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.05, back: 1.05 -**Walk safety factor:** forward: 1.4, back: 1.4 - -

Rule #16

- -**Specifier:** `highway=cycleway; lanes > 1` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.4, back: 1.4 - -

Rule #17

- -**Specifier:** `highway=cycleway; oneway=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.4, back: 1.4 - -

Rule #18

- -**Specifier:** `highway=cycleway; sidewalk one of [yes, left, right, both]` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.05, back: 1.05 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `highway=cycleway; lanes > 1; sidewalk one of [yes, left, right, both]` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `highway=cycleway; oneway=yes; sidewalk one of [yes, left, right, both]` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `highway=cycleway; foot=designated; segregated=no` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.05, back: 1.05 -**Walk safety factor:** forward: 1.15, back: 1.15 - -

Rule #22

- -**Specifier:** `highway=path; foot=designated; bicycle=designated; segregated=no` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.05, back: 1.05 -**Walk safety factor:** forward: 1.15, back: 1.15 - -

Rule #23

- -**Specifier:** `highway=cycleway; foot=designated; segregated=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.05, back: 1.05 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `highway=path; foot=designated; bicycle=designated; segregated=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.05, back: 1.05 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `highway=cycleway; foot=designated; segregated=yes; lanes > 1` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `highway=cycleway; foot=designated; present(segregated); motor_vehicle=destination` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.57, back: 1.57 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #27

- -**Specifier:** `highway=path; foot=designated; bicycle=designated; present(segregated); motor_vehicle=destination` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.57, back: 1.57 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=footway; footway=sidewalk` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.93, back: 1.93 -**Walk safety factor:** forward: 1.1, back: 1.1 - -

Rule #29

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.33, back: 2.33 -**Walk safety factor:** forward: 1.35, back: 1.35 - -

Rule #30

- -**Specifier:** `highway=cycleway; cycleway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.33, back: 2.33 -**Walk safety factor:** forward: 1.35, back: 1.35 - -

Rule #31

- -**Specifier:** `highway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #32

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #33

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #34

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #35

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #36

- -**Specifier:** `highway=footway; indoor=yes` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #37

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #38

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #39

- -**Specifier:** `trail_visibility one of [bad, low, poor, horrible, no]; highway=path` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #40

- -**Specifier:** `sac_scale one of [demanding_mountain_hiking, alpine_hiking, demanding_alpine_hiking, difficult_alpine_hiking]; highway one of [path, steps]` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #41

- -**Specifier:** `smoothness one of [horrible, very_horrible]; highway one of [path, bridleway, track]` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.15, back: 1.15 - -

Rule #42

- -**Specifier:** `smoothness=impassable; highway one of [path, bridleway, track]` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `1 > mtb:scale < 2; highway one of [path, bridleway, track]` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.15, back: 1.15 - -

Rule #44

- -**Specifier:** `mtb:scale > 2; highway one of [path, bridleway, track]` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins +### Safety mixins Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. +permission of an OSM way. Their safety values are multiplied with the base values from the selected +way properties. Multiple mixins can apply to the same way and their effects compound. diff --git a/docs/osm/UK.md b/docs/osm/UK.md index 26376a29f17..3dd77b1b393 100644 --- a/docs/osm/UK.md +++ b/docs/osm/UK.md @@ -1,1332 +1,188 @@ -## OSM tag mapping +# OSM tag mapping ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. + These factors determine how desirable an OSM way is when routing for cyclists and pedestrians. +Lower safety values make an OSM way more desirable and higher values less desirable. -| specifier | permission | safety | -|---------------------------------------------------------|------------------------|--------| -| `highway=trunk_link` | ALL | 🚴 | -| `highway=trunk` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | ALL | 🚴 | -| `highway=trunk_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | ALL | 🚴 | -| `highway=trunk_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | ALL | 🚴 | -| `highway=trunk_link; bicycle=designated` | ALL | 🚴 | -| `mtb:scale=3` | NONE | | -| `mtb:scale=4` | NONE | | -| `mtb:scale=5` | NONE | | -| `mtb:scale=6` | NONE | | -| `highway=corridor` | PEDESTRIAN | | -| `highway=steps` | PEDESTRIAN | | -| `highway=crossing` | PEDESTRIAN | | -| `highway=platform` | PEDESTRIAN | | -| `public_transport=platform` | PEDESTRIAN | | -| `railway=platform` | PEDESTRIAN | | -| `footway=sidewalk; highway=footway` | PEDESTRIAN | | -| `mtb:scale=1` | PEDESTRIAN | | -| `mtb:scale=2` | PEDESTRIAN | | -| `mtb:scale=0` | PEDESTRIAN_AND_BICYCLE | | -| `highway=cycleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=path` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=bridleway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=living_street` | ALL | 🚴 | -| `highway=unclassified` | ALL | | -| `highway=road` | ALL | | -| `highway=byway` | ALL | 🚴 | -| `highway=track` | ALL | 🚴 | -| `highway=service` | ALL | 🚴 | -| `highway=residential` | ALL | 🚴 | -| `highway=residential_link` | ALL | 🚴 | -| `highway=tertiary` | ALL | | -| `highway=tertiary_link` | ALL | | -| `highway=secondary` | ALL | 🚴 | -| `highway=secondary_link` | ALL | 🚴 | -| `highway=primary` | ALL | 🚴 | -| `highway=primary_link` | ALL | 🚴 | -| `highway=trunk_link` | CAR | 🚴 | -| `highway=motorway_link` | CAR | 🚴 | -| `highway=trunk` | CAR | 🚴 | -| `highway=motorway` | CAR | 🚴 | -| `present(highway); cycleway=lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=lane` | ALL | 🚴 | -| `highway=residential; cycleway=lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=lane` | ALL | 🚴 | -| `highway=secondary; cycleway=lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=lane` | ALL | 🚴 | -| `highway=primary; cycleway=lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=lane` | ALL | 🚴 | -| `highway=trunk; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=share_busway` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential; cycleway=share_busway` | ALL | 🚴 | -| `highway=residential_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary; cycleway=share_busway` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary; cycleway=share_busway` | ALL | 🚴 | -| `highway=secondary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary; cycleway=share_busway` | ALL | 🚴 | -| `highway=primary_link; cycleway=share_busway` | ALL | 🚴 | -| `highway=trunk; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; cycleway=share_busway` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_lane` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_lane` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=track` | ALL | 🚴 | -| `highway=residential; cycleway=track` | ALL | 🚴 | -| `highway=residential_link; cycleway=track` | ALL | 🚴 | -| `highway=tertiary; cycleway=track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=track` | ALL | 🚴 | -| `highway=secondary; cycleway=track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=track` | ALL | 🚴 | -| `highway=primary; cycleway=track` | ALL | 🚴 | -| `highway=primary_link; cycleway=track` | ALL | 🚴 | -| `highway=trunk; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=opposite_track` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential; cycleway=opposite_track` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary; cycleway=opposite_track` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite_track` | ALL | 🚴 | -| `highway=trunk; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; cycleway=opposite_track` | BICYCLE_AND_CAR | 🚴 | -| `present(highway); cycleway=shared_lane` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential; cycleway=shared_lane` | ALL | 🚴 | -| `highway=residential_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=tertiary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=secondary_link; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary; cycleway=shared_lane` | ALL | 🚴 | -| `highway=primary_link; cycleway=shared_lane` | ALL | 🚴 | -| `present(highway); cycleway=opposite` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=service; cycleway=opposite` | ALL | 🚴 | -| `highway=residential; cycleway=opposite` | ALL | 🚴 | -| `highway=residential_link; cycleway=opposite` | ALL | 🚴 | -| `highway=tertiary; cycleway=opposite` | ALL | | -| `highway=tertiary_link; cycleway=opposite` | ALL | | -| `highway=secondary; cycleway=opposite` | ALL | 🚴 | -| `highway=secondary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=primary; cycleway=opposite` | ALL | 🚴 | -| `highway=primary_link; cycleway=opposite` | ALL | 🚴 | -| `highway=path; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; bicycle=yes; area=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=pedestrian; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `footway=sidewalk; highway=footway; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=footway; footway=crossing; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=yes; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; bicycle=designated; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `highway=track; present(surface)` | PEDESTRIAN_AND_BICYCLE | 🚴 | -| `present(highway); bicycle=designated` | ALL | 🚴 | -| `highway=service; bicycle=designated` | ALL | 🚴 | -| `highway=residential; bicycle=designated` | ALL | 🚴 | -| `highway=unclassified; bicycle=designated` | ALL | 🚴 | -| `highway=residential_link; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary; bicycle=designated` | ALL | 🚴 | -| `highway=tertiary_link; bicycle=designated` | ALL | 🚴 | -| `highway=secondary; bicycle=designated` | ALL | 🚴 | -| `highway=secondary_link; bicycle=designated` | ALL | 🚴 | -| `highway=primary; bicycle=designated` | ALL | 🚴 | -| `highway=primary_link; bicycle=designated` | ALL | 🚴 | -| `highway=trunk; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=trunk_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | -| `highway=motorway_link; bicycle=designated` | BICYCLE_AND_CAR | 🚴 | +| specifier | permission | bike safety | walk safety | +|---------------------------------------------------------|--------------------------|-------------------------------|-------------| +| `highway=trunk_link` | `ALL` | 2.06 | | +| `highway=trunk` | `ALL` | 7.47 | | +| `highway=trunk; cycleway=lane` | `ALL` | 1.5 | | +| `highway=trunk_link; cycleway=lane` | `ALL` | 1.15 | | +| `highway=trunk; cycleway=share_busway` | `ALL` | 1.75 | | +| `highway=trunk_link; cycleway=share_busway` | `ALL` | 1.25 | | +| `highway=trunk; cycleway=opposite_lane` | `ALL` | forward: 7.47
back: 1.5 | | +| `highway=trunk_link; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=trunk; cycleway=track` | `ALL` | 0.95 | | +| `highway=trunk_link; cycleway=track` | `ALL` | 0.85 | | +| `highway=trunk; cycleway=opposite_track` | `ALL` | forward: 7.47
back: 0.95 | | +| `highway=trunk_link; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=trunk; bicycle=designated` | `ALL` | 7.25 | | +| `highway=trunk_link; bicycle=designated` | `ALL` | 2.0 | | +| `mtb:scale=3` | `NONE` | | | +| `mtb:scale=4` | `NONE` | | | +| `mtb:scale=5` | `NONE` | | | +| `mtb:scale=6` | `NONE` | | | +| `highway=corridor` | `PEDESTRIAN` | | | +| `highway=steps` | `PEDESTRIAN` | | | +| `highway=crossing` | `PEDESTRIAN` | | | +| `highway=platform` | `PEDESTRIAN` | | | +| `public_transport=platform` | `PEDESTRIAN` | | | +| `railway=platform` | `PEDESTRIAN` | | | +| `footway=sidewalk; highway=footway` | `PEDESTRIAN` | | | +| `mtb:scale=1` | `PEDESTRIAN` | | | +| `mtb:scale=2` | `PEDESTRIAN` | | | +| `mtb:scale=0` | `PEDESTRIAN_AND_BICYCLE` | | | +| `highway=cycleway` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=path` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=pedestrian` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | +| `highway=footway` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=bridleway` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | +| `highway=living_street` | `ALL` | 0.9 | | +| `highway=unclassified` | `ALL` | | | +| `highway=road` | `ALL` | | | +| `highway=byway` | `ALL` | 1.3 | | +| `highway=track` | `ALL` | 1.3 | | +| `highway=service` | `ALL` | 1.1 | | +| `highway=residential` | `ALL` | 0.98 | | +| `highway=residential_link` | `ALL` | 0.98 | | +| `highway=tertiary` | `ALL` | | | +| `highway=tertiary_link` | `ALL` | | | +| `highway=secondary` | `ALL` | 1.5 | | +| `highway=secondary_link` | `ALL` | 1.5 | | +| `highway=primary` | `ALL` | 2.06 | | +| `highway=primary_link` | `ALL` | 2.06 | | +| `highway=trunk_link` | `CAR` | 2.06 | | +| `highway=motorway_link` | `CAR` | 2.06 | | +| `highway=trunk` | `CAR` | 7.47 | | +| `highway=motorway` | `CAR` | 8.0 | | +| `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | +| `highway=service; cycleway=lane` | `ALL` | 0.77 | | +| `highway=residential; cycleway=lane` | `ALL` | 0.77 | | +| `highway=residential_link; cycleway=lane` | `ALL` | 0.77 | | +| `highway=tertiary; cycleway=lane` | `ALL` | 0.87 | | +| `highway=tertiary_link; cycleway=lane` | `ALL` | 0.87 | | +| `highway=secondary; cycleway=lane` | `ALL` | 0.96 | | +| `highway=secondary_link; cycleway=lane` | `ALL` | 0.96 | | +| `highway=primary; cycleway=lane` | `ALL` | 1.15 | | +| `highway=primary_link; cycleway=lane` | `ALL` | 1.15 | | +| `highway=trunk; cycleway=lane` | `BICYCLE_AND_CAR` | 1.5 | | +| `highway=trunk_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | +| `highway=motorway; cycleway=lane` | `BICYCLE_AND_CAR` | 2.0 | | +| `highway=motorway_link; cycleway=lane` | `BICYCLE_AND_CAR` | 1.15 | | +| `present(highway); cycleway=share_busway` | `PEDESTRIAN_AND_BICYCLE` | 0.92 | | +| `highway=service; cycleway=share_busway` | `ALL` | 0.85 | | +| `highway=residential; cycleway=share_busway` | `ALL` | 0.85 | | +| `highway=residential_link; cycleway=share_busway` | `ALL` | 0.85 | | +| `highway=tertiary; cycleway=share_busway` | `ALL` | 0.92 | | +| `highway=tertiary_link; cycleway=share_busway` | `ALL` | 0.92 | | +| `highway=secondary; cycleway=share_busway` | `ALL` | 0.99 | | +| `highway=secondary_link; cycleway=share_busway` | `ALL` | 0.99 | | +| `highway=primary; cycleway=share_busway` | `ALL` | 1.25 | | +| `highway=primary_link; cycleway=share_busway` | `ALL` | 1.25 | | +| `highway=trunk; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.75 | | +| `highway=trunk_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | +| `highway=motorway; cycleway=share_busway` | `BICYCLE_AND_CAR` | 2.5 | | +| `highway=motorway_link; cycleway=share_busway` | `BICYCLE_AND_CAR` | 1.25 | | +| `present(highway); cycleway=opposite_lane` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 0.87 | | +| `highway=service; cycleway=opposite_lane` | `ALL` | forward: 1.1
back: 0.77 | | +| `highway=residential; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=residential_link; cycleway=opposite_lane` | `ALL` | forward: 0.98
back: 0.77 | | +| `highway=tertiary; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=tertiary_link; cycleway=opposite_lane` | `ALL` | forward: 1.0
back: 0.87 | | +| `highway=secondary; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=secondary_link; cycleway=opposite_lane` | `ALL` | forward: 1.5
back: 0.96 | | +| `highway=primary; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=primary_link; cycleway=opposite_lane` | `ALL` | forward: 2.06
back: 1.15 | | +| `highway=trunk; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 7.47
back: 1.5 | | +| `highway=trunk_link; cycleway=opposite_lane` | `BICYCLE_AND_CAR` | forward: 2.06
back: 1.15 | | +| `present(highway); cycleway=track` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=service; cycleway=track` | `ALL` | 0.65 | | +| `highway=residential; cycleway=track` | `ALL` | 0.65 | | +| `highway=residential_link; cycleway=track` | `ALL` | 0.65 | | +| `highway=tertiary; cycleway=track` | `ALL` | 0.75 | | +| `highway=tertiary_link; cycleway=track` | `ALL` | 0.75 | | +| `highway=secondary; cycleway=track` | `ALL` | 0.8 | | +| `highway=secondary_link; cycleway=track` | `ALL` | 0.8 | | +| `highway=primary; cycleway=track` | `ALL` | 0.85 | | +| `highway=primary_link; cycleway=track` | `ALL` | 0.85 | | +| `highway=trunk; cycleway=track` | `BICYCLE_AND_CAR` | 0.95 | | +| `highway=trunk_link; cycleway=track` | `BICYCLE_AND_CAR` | 0.85 | | +| `present(highway); cycleway=opposite_track` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 0.75 | | +| `highway=service; cycleway=opposite_track` | `ALL` | forward: 1.1
back: 0.65 | | +| `highway=residential; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=residential_link; cycleway=opposite_track` | `ALL` | forward: 0.98
back: 0.65 | | +| `highway=tertiary; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=tertiary_link; cycleway=opposite_track` | `ALL` | forward: 1.0
back: 0.75 | | +| `highway=secondary; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=secondary_link; cycleway=opposite_track` | `ALL` | forward: 1.5
back: 0.8 | | +| `highway=primary; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=primary_link; cycleway=opposite_track` | `ALL` | forward: 2.06
back: 0.85 | | +| `highway=trunk; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 7.47
back: 0.95 | | +| `highway=trunk_link; cycleway=opposite_track` | `BICYCLE_AND_CAR` | forward: 2.06
back: 0.85 | | +| `present(highway); cycleway=shared_lane` | `PEDESTRIAN_AND_BICYCLE` | 0.77 | | +| `highway=service; cycleway=shared_lane` | `ALL` | 0.73 | | +| `highway=residential; cycleway=shared_lane` | `ALL` | 0.77 | | +| `highway=residential_link; cycleway=shared_lane` | `ALL` | 0.77 | | +| `highway=tertiary; cycleway=shared_lane` | `ALL` | 0.83 | | +| `highway=tertiary_link; cycleway=shared_lane` | `ALL` | 0.83 | | +| `highway=secondary; cycleway=shared_lane` | `ALL` | 1.25 | | +| `highway=secondary_link; cycleway=shared_lane` | `ALL` | 1.25 | | +| `highway=primary; cycleway=shared_lane` | `ALL` | 1.75 | | +| `highway=primary_link; cycleway=shared_lane` | `ALL` | 1.75 | | +| `present(highway); cycleway=opposite` | `PEDESTRIAN_AND_BICYCLE` | forward: 1.0
back: 1.4 | | +| `highway=service; cycleway=opposite` | `ALL` | 1.1 | | +| `highway=residential; cycleway=opposite` | `ALL` | 0.98 | | +| `highway=residential_link; cycleway=opposite` | `ALL` | 0.98 | | +| `highway=tertiary; cycleway=opposite` | `ALL` | | | +| `highway=tertiary_link; cycleway=opposite` | `ALL` | | | +| `highway=secondary; cycleway=opposite` | `ALL` | forward: 1.5
back: 1.71 | | +| `highway=secondary_link; cycleway=opposite` | `ALL` | forward: 1.5
back: 1.71 | | +| `highway=primary; cycleway=opposite` | `ALL` | forward: 2.06
back: 2.99 | | +| `highway=primary_link; cycleway=opposite` | `ALL` | forward: 2.06
back: 2.99 | | +| `highway=path; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.6 | | +| `highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `highway=footway; bicycle=yes; area=yes` | `PEDESTRIAN_AND_BICYCLE` | 0.9 | | +| `highway=pedestrian; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.75 | | +| `footway=sidewalk; highway=footway; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 2.5 | | +| `footway=sidewalk; highway=footway; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=footway; footway=crossing` | `PEDESTRIAN_AND_BICYCLE` | 2.5 | | +| `highway=footway; footway=crossing; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 1.1 | | +| `highway=track; bicycle=yes` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | +| `highway=track; bicycle=designated` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | +| `highway=track; bicycle=yes; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.18 | | +| `highway=track; bicycle=designated; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 0.99 | | +| `highway=track; present(surface)` | `PEDESTRIAN_AND_BICYCLE` | 1.3 | | +| `present(highway); bicycle=designated` | `ALL` | 0.97 | | +| `highway=service; bicycle=designated` | `ALL` | 0.84 | | +| `highway=residential; bicycle=designated` | `ALL` | 0.95 | | +| `highway=unclassified; bicycle=designated` | `ALL` | 0.95 | | +| `highway=residential_link; bicycle=designated` | `ALL` | 0.95 | | +| `highway=tertiary; bicycle=designated` | `ALL` | 0.97 | | +| `highway=tertiary_link; bicycle=designated` | `ALL` | 0.97 | | +| `highway=secondary; bicycle=designated` | `ALL` | 1.46 | | +| `highway=secondary_link; bicycle=designated` | `ALL` | 1.46 | | +| `highway=primary; bicycle=designated` | `ALL` | 2.0 | | +| `highway=primary_link; bicycle=designated` | `ALL` | 2.0 | | +| `highway=trunk; bicycle=designated` | `BICYCLE_AND_CAR` | 7.25 | | +| `highway=trunk_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | +| `highway=motorway; bicycle=designated` | `BICYCLE_AND_CAR` | 7.76 | | +| `highway=motorway_link; bicycle=designated` | `BICYCLE_AND_CAR` | 2.0 | | - - - -

Rule #0

- -**Specifier:** `highway=trunk_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #1

- -**Specifier:** `highway=trunk` -**Permission:** ALL -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #2

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #3

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #4

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #5

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #6

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #7

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #8

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #9

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #10

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #11

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #12

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #13

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #14

- -**Specifier:** `mtb:scale=3` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #15

- -**Specifier:** `mtb:scale=4` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #16

- -**Specifier:** `mtb:scale=5` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #17

- -**Specifier:** `mtb:scale=6` -**Permission:** NONE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #18

- -**Specifier:** `highway=corridor` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #19

- -**Specifier:** `highway=steps` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #20

- -**Specifier:** `highway=crossing` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #21

- -**Specifier:** `highway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #22

- -**Specifier:** `public_transport=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #23

- -**Specifier:** `railway=platform` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #24

- -**Specifier:** `footway=sidewalk; highway=footway` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #25

- -**Specifier:** `mtb:scale=1` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #26

- -**Specifier:** `mtb:scale=2` -**Permission:** PEDESTRIAN -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #27

- -**Specifier:** `mtb:scale=0` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #28

- -**Specifier:** `highway=cycleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #29

- -**Specifier:** `highway=path` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #30

- -**Specifier:** `highway=pedestrian` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #31

- -**Specifier:** `highway=footway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #32

- -**Specifier:** `highway=bridleway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #33

- -**Specifier:** `highway=living_street` -**Permission:** ALL -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #34

- -**Specifier:** `highway=unclassified` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #35

- -**Specifier:** `highway=road` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #36

- -**Specifier:** `highway=byway` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #37

- -**Specifier:** `highway=track` -**Permission:** ALL -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #38

- -**Specifier:** `highway=service` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #39

- -**Specifier:** `highway=residential` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #40

- -**Specifier:** `highway=residential_link` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #41

- -**Specifier:** `highway=tertiary` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #42

- -**Specifier:** `highway=tertiary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #43

- -**Specifier:** `highway=secondary` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #44

- -**Specifier:** `highway=secondary_link` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #45

- -**Specifier:** `highway=primary` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #46

- -**Specifier:** `highway=primary_link` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #47

- -**Specifier:** `highway=trunk_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #48

- -**Specifier:** `highway=motorway_link` -**Permission:** CAR -**Bike safety factor:** forward: 2.06, back: 2.06 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #49

- -**Specifier:** `highway=trunk` -**Permission:** CAR -**Bike safety factor:** forward: 7.47, back: 7.47 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #50

- -**Specifier:** `highway=motorway` -**Permission:** CAR -**Bike safety factor:** forward: 8.0, back: 8.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #51

- -**Specifier:** `present(highway); cycleway=lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #52

- -**Specifier:** `highway=service; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #53

- -**Specifier:** `highway=residential; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #54

- -**Specifier:** `highway=residential_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #55

- -**Specifier:** `highway=tertiary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #56

- -**Specifier:** `highway=tertiary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.87, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #57

- -**Specifier:** `highway=secondary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #58

- -**Specifier:** `highway=secondary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.96, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #59

- -**Specifier:** `highway=primary; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #60

- -**Specifier:** `highway=primary_link; cycleway=lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #61

- -**Specifier:** `highway=trunk; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.5, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #62

- -**Specifier:** `highway=trunk_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #63

- -**Specifier:** `highway=motorway; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #64

- -**Specifier:** `highway=motorway_link; cycleway=lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.15, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #65

- -**Specifier:** `present(highway); cycleway=share_busway` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #66

- -**Specifier:** `highway=service; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #67

- -**Specifier:** `highway=residential; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #68

- -**Specifier:** `highway=residential_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #69

- -**Specifier:** `highway=tertiary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #70

- -**Specifier:** `highway=tertiary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.92, back: 0.92 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #71

- -**Specifier:** `highway=secondary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #72

- -**Specifier:** `highway=secondary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #73

- -**Specifier:** `highway=primary; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #74

- -**Specifier:** `highway=primary_link; cycleway=share_busway` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #75

- -**Specifier:** `highway=trunk; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #76

- -**Specifier:** `highway=trunk_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #77

- -**Specifier:** `highway=motorway; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #78

- -**Specifier:** `highway=motorway_link; cycleway=share_busway` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #79

- -**Specifier:** `present(highway); cycleway=opposite_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #80

- -**Specifier:** `highway=service; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #81

- -**Specifier:** `highway=residential; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #82

- -**Specifier:** `highway=residential_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #83

- -**Specifier:** `highway=tertiary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #84

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.87 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #85

- -**Specifier:** `highway=secondary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #86

- -**Specifier:** `highway=secondary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.96 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #87

- -**Specifier:** `highway=primary; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #88

- -**Specifier:** `highway=primary_link; cycleway=opposite_lane` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #89

- -**Specifier:** `highway=trunk; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 1.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #90

- -**Specifier:** `highway=trunk_link; cycleway=opposite_lane` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 1.15 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #91

- -**Specifier:** `present(highway); cycleway=track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #92

- -**Specifier:** `highway=service; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #93

- -**Specifier:** `highway=residential; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #94

- -**Specifier:** `highway=residential_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.65, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #95

- -**Specifier:** `highway=tertiary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #96

- -**Specifier:** `highway=tertiary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #97

- -**Specifier:** `highway=secondary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #98

- -**Specifier:** `highway=secondary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.8, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #99

- -**Specifier:** `highway=primary; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #100

- -**Specifier:** `highway=primary_link; cycleway=track` -**Permission:** ALL -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #101

- -**Specifier:** `highway=trunk; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #102

- -**Specifier:** `highway=trunk_link; cycleway=track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 0.85, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #103

- -**Specifier:** `present(highway); cycleway=opposite_track` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #104

- -**Specifier:** `highway=service; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #105

- -**Specifier:** `highway=residential; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #106

- -**Specifier:** `highway=residential_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.65 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #107

- -**Specifier:** `highway=tertiary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #108

- -**Specifier:** `highway=tertiary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #109

- -**Specifier:** `highway=secondary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #110

- -**Specifier:** `highway=secondary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 0.8 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #111

- -**Specifier:** `highway=primary; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #112

- -**Specifier:** `highway=primary_link; cycleway=opposite_track` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #113

- -**Specifier:** `highway=trunk; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.47, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #114

- -**Specifier:** `highway=trunk_link; cycleway=opposite_track` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.06, back: 0.85 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #115

- -**Specifier:** `present(highway); cycleway=shared_lane` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #116

- -**Specifier:** `highway=service; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.73, back: 0.73 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #117

- -**Specifier:** `highway=residential; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #118

- -**Specifier:** `highway=residential_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.77, back: 0.77 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #119

- -**Specifier:** `highway=tertiary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #120

- -**Specifier:** `highway=tertiary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 0.83, back: 0.83 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #121

- -**Specifier:** `highway=secondary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #122

- -**Specifier:** `highway=secondary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.25, back: 1.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #123

- -**Specifier:** `highway=primary; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #124

- -**Specifier:** `highway=primary_link; cycleway=shared_lane` -**Permission:** ALL -**Bike safety factor:** forward: 1.75, back: 1.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #125

- -**Specifier:** `present(highway); cycleway=opposite` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.0, back: 1.4 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #126

- -**Specifier:** `highway=service; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #127

- -**Specifier:** `highway=residential; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #128

- -**Specifier:** `highway=residential_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 0.98, back: 0.98 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #129

- -**Specifier:** `highway=tertiary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #130

- -**Specifier:** `highway=tertiary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.0, back: 1.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #131

- -**Specifier:** `highway=secondary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #132

- -**Specifier:** `highway=secondary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 1.5, back: 1.71 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #133

- -**Specifier:** `highway=primary; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #134

- -**Specifier:** `highway=primary_link; cycleway=opposite` -**Permission:** ALL -**Bike safety factor:** forward: 2.06, back: 2.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #135

- -**Specifier:** `highway=path; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.6, back: 0.6 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #136

- -**Specifier:** `highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #137

- -**Specifier:** `highway=footway; bicycle=yes; area=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.9, back: 0.9 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #138

- -**Specifier:** `highway=pedestrian; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.75, back: 0.75 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #139

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #140

- -**Specifier:** `footway=sidewalk; highway=footway; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #141

- -**Specifier:** `highway=footway; footway=crossing` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 2.5, back: 2.5 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #142

- -**Specifier:** `highway=footway; footway=crossing; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.1, back: 1.1 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #143

- -**Specifier:** `highway=track; bicycle=yes` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #144

- -**Specifier:** `highway=track; bicycle=designated` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #145

- -**Specifier:** `highway=track; bicycle=yes; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.18, back: 1.18 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #146

- -**Specifier:** `highway=track; bicycle=designated; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 0.99, back: 0.99 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #147

- -**Specifier:** `highway=track; present(surface)` -**Permission:** PEDESTRIAN_AND_BICYCLE -**Bike safety factor:** forward: 1.3, back: 1.3 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #148

- -**Specifier:** `present(highway); bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #149

- -**Specifier:** `highway=service; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.84, back: 0.84 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #150

- -**Specifier:** `highway=residential; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #151

- -**Specifier:** `highway=unclassified; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #152

- -**Specifier:** `highway=residential_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.95, back: 0.95 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #153

- -**Specifier:** `highway=tertiary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #154

- -**Specifier:** `highway=tertiary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 0.97, back: 0.97 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #155

- -**Specifier:** `highway=secondary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #156

- -**Specifier:** `highway=secondary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 1.46, back: 1.46 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #157

- -**Specifier:** `highway=primary; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #158

- -**Specifier:** `highway=primary_link; bicycle=designated` -**Permission:** ALL -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #159

- -**Specifier:** `highway=trunk; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.25, back: 7.25 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #160

- -**Specifier:** `highway=trunk_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #161

- -**Specifier:** `highway=motorway; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 7.76, back: 7.76 -**Walk safety factor:** forward: 1.0, back: 1.0 - -

Rule #162

- -**Specifier:** `highway=motorway_link; bicycle=designated` -**Permission:** BICYCLE_AND_CAR -**Bike safety factor:** forward: 2.0, back: 2.0 -**Walk safety factor:** forward: 1.0, back: 1.0 - - - - -### Bicycle and walking safety mixins +### Safety mixins Mixins are selectors that have only an effect on the bicycle and walk safety factors but not on the -permission of an OSM way. Multiple mixins can apply to the same way and their effects compound. +permission of an OSM way. Their safety values are multiplied with the base values from the selected +way properties. Multiple mixins can apply to the same way and their effects compound. diff --git a/mkdocs.yml b/mkdocs.yml index 0db31c4df53..0689ea0211c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -78,7 +78,7 @@ nav: - Norway: 'osm/Norway.md' - Germany: 'osm/Germany.md' - Finland: 'osm/Finland.md' - - UK: 'osm/Finland.md' + - UK: 'osm/UK.md' - Router: 'RouterConfiguration.md' - "Route Request": 'RouteRequest.md' - "Realtime Updaters": 'UpdaterConfig.md' diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java index f58daa1ddb3..99df904e314 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java @@ -42,21 +42,14 @@ public void populateProperties(WayPropertySet props) { props.setMixinProperties(exact("sidewalk=no;maxspeed=35 mph"), ofWalkSafety(2)); props.setMixinProperties(exact("sidewalk=no;maxspeed=30 mph"), ofWalkSafety(1.5)); - /* - * the RLIS/CCGIS:bicycle=designated mixins are coded out as they are no longer neccessary because of of the bicycle=designated block of code - * above. This switch makes our weighting system less reliant on tags that aren't generally used by the OSM community, and prevents the double - * counting that was occuring on streets with both bicycle infrastructure and an RLIS:bicycle=designated tag - */ + // rarely used tags that are specific to counties near Portland + // https://taginfo.openstreetmap.org/keys/RLIS:bicycle#overview - /* - * props.setProperties("RLIS:bicycle=designated", StreetTraversalPermission.ALL, 0.97, 0.97, true); - */ props.setMixinProperties("RLIS:bicycle=caution_area", ofBicycleSafety(1.45)); props.setMixinProperties("RLIS:bicycle:right=caution_area", ofBicycleSafety(1.45, 1)); props.setMixinProperties("RLIS:bicycle:left=caution_area", ofBicycleSafety(1, 1.45)); - /* - * props.setProperties("CCGIS:bicycle=designated", StreetTraversalPermission.ALL, 0.97, 0.97, true); - */ + + // https://taginfo.openstreetmap.org/keys/CCGIS:bicycle#overview props.setMixinProperties("CCGIS:bicycle=caution_area", ofBicycleSafety(1.45)); props.setMixinProperties("CCGIS:bicycle:right=caution_area", ofBicycleSafety(1.45, 1)); props.setMixinProperties("CCGIS:bicycle:left=caution_area", ofBicycleSafety(1, 1.45)); diff --git a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java index 1884551d3cc..48c64f068c9 100644 --- a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -3,7 +3,6 @@ import static org.opentripplanner.framework.io.FileUtils.assertFileEquals; import static org.opentripplanner.framework.io.FileUtils.readFile; import static org.opentripplanner.framework.io.FileUtils.writeFile; -import static org.opentripplanner.framework.text.MarkdownFormatter.bold; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.DOCS_ROOT; import static org.opentripplanner.generate.doc.framework.DocsTestConstants.TEMPLATE_ROOT; import static org.opentripplanner.generate.doc.framework.TemplateUtil.replaceSection; @@ -21,7 +20,6 @@ import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.framework.text.Table; import org.opentripplanner.framework.text.TableBuilder; -import org.opentripplanner.generate.doc.framework.DocBuilder; import org.opentripplanner.generate.doc.framework.GeneratesDocumentation; import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapper; import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource; @@ -65,7 +63,6 @@ public void updateDocs(OsmTagMapperSource source) { var mixinTable = mixinTable(wps); template = replaceSection(template, "props", propTable.toMarkdownTable()); - template = replaceSection(template, "prop-details", propDetails(wps)); template = replaceSection(template, "mixins", mixinTable.toMarkdownTable()); writeFile(outFile, template); assertFileEquals(original, outFile); @@ -78,50 +75,26 @@ private static File outputFile(OsmTagMapper mapper) { private static Table propTable(WayPropertySet wps) { var propTable = new TableBuilder(); - propTable.withHeaders("specifier", "permission", "safety"); + propTable.withHeaders("specifier", "permission", "bike safety", "walk safety"); for (var prop : wps.getWayProperties()) { propTable.addRow( "`%s`".formatted(prop.specifier().toMarkdown()), - prop.properties().getPermission(), - emojiModifications(prop.properties().bicycleSafety(), prop.properties().walkSafety()) + "`%s`".formatted(prop.properties().getPermission()), + tableValues(prop.properties().bicycleSafety()), + tableValues(prop.properties().walkSafety()) ); } return propTable.build(); } - private static String propDetails(WayPropertySet wps) { - var docBuilder = new DocBuilder(); - - var wayProperties = wps.getWayProperties(); - for (var prop : wayProperties) { - var index = wayProperties.indexOf(prop); - - docBuilder.header(3, "Rule #%s".formatted(index), Integer.toString(index)); - docBuilder - .text(bold("Specifier:")) - .text("`%s`".formatted(prop.specifier().toMarkdown())) - .lineBreak(); - - docBuilder.text(bold("Permission:")).text(prop.properties().getPermission()); - docBuilder.lineBreak(); - var bike = prop.properties().bicycleSafety(); - docBuilder - .text(bold("Bike safety factor:")) - .text("forward: %s, back: %s".formatted(bike.forward(), bike.back())); - docBuilder.lineBreak(); - var walk = prop.properties().walkSafety(); - docBuilder - .text(bold("Walk safety factor:")) - .text("forward: %s, back: %s".formatted(walk.forward(), walk.back())); - docBuilder.endParagraph(); - } - return docBuilder.toString(); - } - private static Table mixinTable(WayPropertySet wps) { var propTable = new TableBuilder(); - propTable.withHeaders("matcher", "bicycle safety", "walk safety"); + propTable.withHeaders( + "matcher", + "bicycle safety", + "walk safety" + ); for (var prop : wps.getMixins()) { propTable.addRow( @@ -145,15 +118,4 @@ else if(safety.isSymetric()){ } } - private static String emojiModifications(SafetyFeatures bicycle, SafetyFeatures walk) { - return emojiIfModifies(bicycle, "\uD83D\uDEB4") + " " + emojiIfModifies(walk, "\uD83D\uDEB6"); - } - - private static String emojiIfModifies(SafetyFeatures prop, String value) { - if (prop.modifies()) { - return value; - } else { - return ""; - } - } } From 69f9076f14fe3ddd10074e8c68fb289b25507a12 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 26 Jun 2024 13:22:42 +0200 Subject: [PATCH 058/132] Remove bike safety endpoint from Report API --- docs/sandbox/ReportApi.md | 8 -- .../reportapi/model/BicycleSafetyReport.java | 57 ------------ .../reportapi/resource/ReportResource.java | 40 -------- src/ext/resources/reportapi/report.html | 93 ------------------- .../tagmapping/DefaultMapper.java | 1 - .../tagmapping/PortlandMapper.java | 1 - .../generate/doc/OsmMapperDocTest.java | 13 +-- 7 files changed, 3 insertions(+), 210 deletions(-) delete mode 100644 src/ext/java/org/opentripplanner/ext/reportapi/model/BicycleSafetyReport.java delete mode 100644 src/ext/resources/reportapi/report.html diff --git a/docs/sandbox/ReportApi.md b/docs/sandbox/ReportApi.md index 1a0668d1740..bc219ec2f98 100644 --- a/docs/sandbox/ReportApi.md +++ b/docs/sandbox/ReportApi.md @@ -24,14 +24,6 @@ This module mounts an endpoint for generating reports under `otp/report`. Availa - [/otp/report/transfers.csv](http://localhost:8080/otp/report/transfers.csv) - [/otp/report/graph.json](http://localhost:8080/otp/report/graph.json) Detailed numbers of transit and street entities in the graph -- [/otp/report/bicycle-safety.html](http://localhost:8080/otp/report/bicycle-safety.html): - Interactive viewer of the rules that determine how bicycle safety factors are calculated. -- [/otp/report/bicycle-safety.csv](http://localhost:8080/otp/report/bicycle-safety.csv): Raw CSV - data for the bicycle safety report. - - [Norwegian version](http://localhost:8080/otp/report/bicycle-safety.csv?osmWayPropertySet=norway) - - [German version](http://localhost:8080/otp/report/bicycle-safety.csv?osmWayPropertySet=germany) - - [UK version](http://localhost:8080/otp/report/bicycle-safety.csv?osmWayPropertySet=uk) - - [Finnish version](http://localhost:8080/otp/report/bicycle-safety.csv?osmWayPropertySet=finland) - [/otp/report/transit/group/priorities](http://localhost:8080/otp/report/transit/group/priorities): List all transit groups used for transit-group-priority (Competition neutral planning). diff --git a/src/ext/java/org/opentripplanner/ext/reportapi/model/BicycleSafetyReport.java b/src/ext/java/org/opentripplanner/ext/reportapi/model/BicycleSafetyReport.java deleted file mode 100644 index 8830189107d..00000000000 --- a/src/ext/java/org/opentripplanner/ext/reportapi/model/BicycleSafetyReport.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.opentripplanner.ext.reportapi.model; - -import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource; -import org.opentripplanner.openstreetmap.wayproperty.WayPropertySet; - -public class BicycleSafetyReport { - - public static void main(String[] args) { - System.out.println(makeCsv(OsmTagMapperSource.NORWAY)); - } - - public static String makeCsv(OsmTagMapperSource source) { - var wayPropertySet = new WayPropertySet(); - - source.getInstance().populateProperties(wayPropertySet); - - var buf = new CsvReportBuilder(","); - - buf.addHeader( - "OSM tags for osmWayPropertySet " + source, - "mixin", - "permissions", - "safety penalty there", - "safety penalty back" - ); - - wayPropertySet - .getWayProperties() - .forEach(p -> { - buf.addText(p.specifier().toString()); - buf.addBoolean(false); - buf.addText(p.properties().getPermission().toString()); - - var safetyProps = p.properties().bicycleSafety(); - if (safetyProps != null) { - buf.addNumber(safetyProps.forward()); - buf.addNumber(safetyProps.back()); - } - buf.newLine(); - }); - - wayPropertySet - .getMixins() - .forEach(p -> { - buf.addText(p.specifier().toString()); - buf.addBoolean(true); - buf.addText(""); - - var safetyProps = p.bicycleSafety(); - buf.addNumber(safetyProps.forward()); - buf.addNumber(safetyProps.back()); - buf.newLine(); - }); - - return buf.toString(); - } -} diff --git a/src/ext/java/org/opentripplanner/ext/reportapi/resource/ReportResource.java b/src/ext/java/org/opentripplanner/ext/reportapi/resource/ReportResource.java index a859b4ff78a..e06aec71b53 100644 --- a/src/ext/java/org/opentripplanner/ext/reportapi/resource/ReportResource.java +++ b/src/ext/java/org/opentripplanner/ext/reportapi/resource/ReportResource.java @@ -1,25 +1,18 @@ package org.opentripplanner.ext.reportapi.resource; -import jakarta.ws.rs.BadRequestException; -import jakarta.ws.rs.DefaultValue; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; -import jakarta.ws.rs.QueryParam; import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; -import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.time.Duration; -import org.opentripplanner.ext.reportapi.model.BicycleSafetyReport; import org.opentripplanner.ext.reportapi.model.CachedValue; import org.opentripplanner.ext.reportapi.model.GraphReportBuilder; import org.opentripplanner.ext.reportapi.model.GraphReportBuilder.GraphStats; import org.opentripplanner.ext.reportapi.model.TransfersReport; import org.opentripplanner.ext.reportapi.model.TransitGroupPriorityReport; import org.opentripplanner.model.transfer.TransferService; -import org.opentripplanner.openstreetmap.tagmapping.OsmTagMapperSource; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.opentripplanner.transit.service.TransitService; @@ -51,39 +44,6 @@ public String getTransfersAsCsv() { return TransfersReport.export(transferService.listAll(), transitService); } - @GET - @Path("/bicycle-safety.html") - @Produces(MediaType.TEXT_HTML) - public Response getBicycleSafetyPage() { - try (var is = getClass().getResourceAsStream("/reportapi/report.html")) { - return Response.ok(new String(is.readAllBytes(), StandardCharsets.UTF_8)).build(); - } catch (IOException e) { - return Response.serverError().build(); - } - } - - @GET - @Path("/bicycle-safety.csv") - @Produces("text/csv") - public Response getBicycleSafetyAsCsv( - @DefaultValue("DEFAULT") @QueryParam("osmWayPropertySet") String osmWayPropertySet - ) { - OsmTagMapperSource source; - try { - source = OsmTagMapperSource.valueOf(osmWayPropertySet.toUpperCase()); - } catch (IllegalArgumentException ignore) { - throw new BadRequestException("Unknown osmWayPropertySet: " + osmWayPropertySet); - } - - return Response - .ok(BicycleSafetyReport.makeCsv(source)) - .header( - "Content-Disposition", - "attachment; filename=\"" + osmWayPropertySet + "-bicycle-safety.csv\"" - ) - .build(); - } - @GET @Path("/transit/group/priorities") @Produces(MediaType.TEXT_PLAIN) diff --git a/src/ext/resources/reportapi/report.html b/src/ext/resources/reportapi/report.html deleted file mode 100644 index bfa5af66603..00000000000 --- a/src/ext/resources/reportapi/report.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - OTP Bicycle safety factor report browser - - - - - - - - - - - - - - - - -
- - -
-

OTP Bicycle safety factor report browser

-
- Documentation -
- -
- -
- -
- - - - - - - - - - - - -
OSM tag match expressionMixin?Traversal permissionsSafety factor there1Safety factor back1
-
- -
- 1: Smaller means more cycling friendly. Larger means less cycle friendly. Think of at as a multiplier for the cost of traversing the way. -
-
-
-
- - - - - - - diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java index f6343cfd384..c5d1c0d1582 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/DefaultMapper.java @@ -602,7 +602,6 @@ public void populateProperties(WayPropertySet props) { /* Portland-local mixins */ - props.setMixinProperties("foot=discouraged", ofWalkSafety(3)); props.setMixinProperties("bicycle=discouraged", ofBicycleSafety(3)); diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java index 99df904e314..1a09b3b6714 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/PortlandMapper.java @@ -54,7 +54,6 @@ public void populateProperties(WayPropertySet props) { props.setMixinProperties("CCGIS:bicycle:right=caution_area", ofBicycleSafety(1.45, 1)); props.setMixinProperties("CCGIS:bicycle:left=caution_area", ofBicycleSafety(1, 1.45)); - // Max speed limit in Oregon is 70 mph ~= 113kmh ~= 31.3m/s props.maxPossibleCarSpeed = 31.4f; diff --git a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java index 48c64f068c9..cd69830f023 100644 --- a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -90,11 +90,7 @@ private static Table propTable(WayPropertySet wps) { private static Table mixinTable(WayPropertySet wps) { var propTable = new TableBuilder(); - propTable.withHeaders( - "matcher", - "bicycle safety", - "walk safety" - ); + propTable.withHeaders("matcher", "bicycle safety", "walk safety"); for (var prop : wps.getMixins()) { propTable.addRow( @@ -109,13 +105,10 @@ private static Table mixinTable(WayPropertySet wps) { private static String tableValues(SafetyFeatures safety) { if (!safety.modifies()) { return ""; - } - else if(safety.isSymetric()){ + } else if (safety.isSymetric()) { return Double.toString(safety.forward()); - } - else { + } else { return "forward: %s
back: %s".formatted(safety.forward(), safety.back()); } } - } From fd222ecc3f81ef77b7cc37241e61574ce0ecb46d Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 26 Jun 2024 13:30:37 +0200 Subject: [PATCH 059/132] Fix Javadoc of TimetableSnapshotManager --- .../updater/trip/TimetableSnapshotManager.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotManager.java b/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotManager.java index 624d749664c..bf7c8c98919 100644 --- a/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotManager.java +++ b/src/main/java/org/opentripplanner/updater/trip/TimetableSnapshotManager.java @@ -35,13 +35,6 @@ public final class TimetableSnapshotManager { */ private final ReentrantLock bufferLock = new ReentrantLock(true); - /** - * The working copy of the timetable snapshot. Should not be visible to routing threads. Should - * only be modified by a thread that holds a lock on {@link #bufferLock}. All public methods that - * might modify this buffer will correctly acquire the lock. - */ - private final TimetableSnapshot buffer = new TimetableSnapshot(); - /** * The working copy of the timetable snapshot. Should not be visible to routing threads. Should * only be modified by a thread that holds a lock on {@link #bufferLock}. All public methods that @@ -53,6 +46,12 @@ public final class TimetableSnapshotManager { * before re-indexing it. While refactoring or rewriting parts of this system, we could throw * an exception if a writing section is entered by more than one thread. */ + private final TimetableSnapshot buffer = new TimetableSnapshot(); + + /** + * The last committed snapshot that was handed off to a routing thread. This snapshot may be given + * to more than one routing thread if the maximum snapshot frequency is exceeded. + */ private volatile TimetableSnapshot snapshot = null; /** From 75af424f7f2b238cc7ae778eb5e78f0d93dbf82d Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 26 Jun 2024 14:08:41 +0200 Subject: [PATCH 060/132] Update Javadoc --- .../openstreetmap/wayproperty/SafetyFeatures.java | 6 ++++++ .../wayproperty/specifier/BestMatchSpecifier.java | 2 +- .../wayproperty/specifier/ExactMatchSpecifier.java | 2 +- .../wayproperty/specifier/LogicalOrSpecifier.java | 4 ++-- .../openstreetmap/wayproperty/specifier/OsmSpecifier.java | 6 +++++- .../org/opentripplanner/generate/doc/OsmMapperDocTest.java | 4 ++-- 6 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java index dcf5969322f..37669984405 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java @@ -6,10 +6,16 @@ public record SafetyFeatures(double forward, double back) { public static final SafetyFeatures DEFAULT = new SafetyFeatures(1, 1); + /** + * Does this instance actually modify the safety values? + */ public boolean modifies() { return !(forward == 1 && back == 1); } + /** + * Does forward and back have the same value? + */ public boolean isSymetric() { return forward == back; } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java index 2c33470f2f7..293bcf84644 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/BestMatchSpecifier.java @@ -75,7 +75,7 @@ public int matchScore(OSMWithTags way) { } @Override - public String toMarkdown() { + public String toDocString() { return Arrays.stream(conditions).map(Object::toString).collect(Collectors.joining("; ")); } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java index 4c26784682f..48c3b5edb64 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/ExactMatchSpecifier.java @@ -56,7 +56,7 @@ public int matchScore(OSMWithTags way) { } @Override - public String toMarkdown() { + public String toDocString() { return conditions.stream().map(Object::toString).collect(Collectors.joining("; ")); } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java index 1a0691deb08..74db280115b 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/LogicalOrSpecifier.java @@ -46,7 +46,7 @@ public int matchScore(OSMWithTags way) { } @Override - public String toMarkdown() { - return subSpecs.stream().map(ExactMatchSpecifier::toMarkdown).collect(Collectors.joining("|")); + public String toDocString() { + return subSpecs.stream().map(ExactMatchSpecifier::toDocString).collect(Collectors.joining("|")); } } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java index f87845e729f..71d629552ff 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/OsmSpecifier.java @@ -42,7 +42,11 @@ static Condition[] parseConditions(String spec, String separator) { */ int matchScore(OSMWithTags way); - String toMarkdown(); + /** + * Convert this specifier to a human-readable identifier that represents this in (generated) + * documentation. + */ + String toDocString(); record Scores(int forward, int backward) { public static Scores of(int s) { diff --git a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java index cd69830f023..443b01fbeb0 100644 --- a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -79,7 +79,7 @@ private static Table propTable(WayPropertySet wps) { for (var prop : wps.getWayProperties()) { propTable.addRow( - "`%s`".formatted(prop.specifier().toMarkdown()), + "`%s`".formatted(prop.specifier().toDocString()), "`%s`".formatted(prop.properties().getPermission()), tableValues(prop.properties().bicycleSafety()), tableValues(prop.properties().walkSafety()) @@ -94,7 +94,7 @@ private static Table mixinTable(WayPropertySet wps) { for (var prop : wps.getMixins()) { propTable.addRow( - "`%s`".formatted(prop.specifier().toMarkdown()), + "`%s`".formatted(prop.specifier().toDocString()), tableValues(prop.bicycleSafety()), tableValues(prop.walkSafety()) ); From d176d5fdeb86837b3ce4b2802964c2d4ddf64459 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 26 Jun 2024 15:08:24 +0200 Subject: [PATCH 061/132] Update links to Siri on Google Cloud [ci skip] --- doc-templates/UpdaterConfig.md | 1 + docs/UpdaterConfig.md | 1 + mkdocs.yml | 1 + 3 files changed, 3 insertions(+) diff --git a/doc-templates/UpdaterConfig.md b/doc-templates/UpdaterConfig.md index b0444f038af..f16d28f570c 100644 --- a/doc-templates/UpdaterConfig.md +++ b/doc-templates/UpdaterConfig.md @@ -83,6 +83,7 @@ GBFS form factors: - [Vehicle parking](sandbox/VehicleParking.md) - [Siri over HTTP](sandbox/siri/SiriUpdater.md) +- [Siri over Google Cloud PubSub](sandbox/siri/SiriGooglePubSubUpdater.md) - [Siri over Azure Message Bus](sandbox/siri/SiriAzureUpdater.md) - [VehicleRentalServiceDirectory](sandbox/VehicleRentalServiceDirectory.md) diff --git a/docs/UpdaterConfig.md b/docs/UpdaterConfig.md index 3e0907f60ad..ebe0acf94b4 100644 --- a/docs/UpdaterConfig.md +++ b/docs/UpdaterConfig.md @@ -415,6 +415,7 @@ HTTP headers to add to the request. Any header key, value can be inserted. - [Vehicle parking](sandbox/VehicleParking.md) - [Siri over HTTP](sandbox/siri/SiriUpdater.md) +- [Siri over Google Cloud PubSub](sandbox/siri/SiriGooglePubSubUpdater.md) - [Siri over Azure Message Bus](sandbox/siri/SiriAzureUpdater.md) - [VehicleRentalServiceDirectory](sandbox/VehicleRentalServiceDirectory.md) diff --git a/mkdocs.yml b/mkdocs.yml index b8c257ceb7d..7925151ac35 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -99,6 +99,7 @@ nav: - Direct Transfer Analyzer: 'sandbox/transferanalyzer.md' - Google Cloud Storage: 'sandbox/GoogleCloudStorage.md' - SIRI Updaters: 'sandbox/siri/SiriUpdater.md' + - SIRI Updaters (Google Cloud): 'sandbox/siri/SiriGooglePubSubUpdater.md' - SIRI Updater (Azure): 'sandbox/siri/SiriAzureUpdater.md' - Vehicle Rental Service Directory API support: 'sandbox/VehicleRentalServiceDirectory.md' - Smoove Bike Rental Updator Support: 'sandbox/SmooveBikeRental.md' From d0ec77e9f0cfe9f75ca2ed68e227a15ff1db2d02 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Thu, 27 Jun 2024 09:25:59 +0200 Subject: [PATCH 062/132] Improve handling of SIRI added trip with unresolvable agency --- .../siri/SiriTimetableSnapshotSourceTest.java | 35 ++++++++++++------ .../ext/siri/AddedTripBuilder.java | 36 +++++++++++++------ .../updater/spi/UpdateError.java | 1 + 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/src/ext-test/java/org/opentripplanner/ext/siri/SiriTimetableSnapshotSourceTest.java b/src/ext-test/java/org/opentripplanner/ext/siri/SiriTimetableSnapshotSourceTest.java index a069f5c6656..7eb44302fb9 100644 --- a/src/ext-test/java/org/opentripplanner/ext/siri/SiriTimetableSnapshotSourceTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/siri/SiriTimetableSnapshotSourceTest.java @@ -2,21 +2,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -import java.util.List; import java.util.Set; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import org.opentripplanner.model.PickDrop; import org.opentripplanner.transit.model.timetable.RealTimeState; -import org.opentripplanner.transit.model.timetable.Trip; -import org.opentripplanner.transit.model.timetable.TripOnServiceDate; -import org.opentripplanner.transit.model.timetable.TripTimes; -import org.opentripplanner.transit.model.timetable.TripTimesFactory; -import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; -import org.opentripplanner.transit.service.TransitService; -import org.opentripplanner.updater.TimetableSnapshotSourceParameters; import org.opentripplanner.updater.spi.UpdateError; import org.opentripplanner.updater.spi.UpdateResult; import org.opentripplanner.updater.trip.RealtimeTestEnvironment; @@ -88,6 +77,30 @@ void testAddedJourneyWithInvalidScheduledData() { assertFailure(UpdateError.UpdateErrorType.NEGATIVE_HOP_TIME, result); } + @Test + void testAddedJourneyWithUnresolvableAgency() { + var env = RealtimeTestEnvironment.siri(); + + // Create an extra journey with unknown line and operator + var createExtraJourney = new SiriEtBuilder(env.getDateTimeHelper()) + .withEstimatedVehicleJourneyCode("newJourney") + .withIsExtraJourney(true) + .withOperatorRef("unknown operator") + .withLineRef("unknown line") + .withEstimatedCalls(builder -> + builder + .call(env.stopA1) + .departAimedExpected("10:58", "10:48") + .call(env.stopB1) + .arriveAimedExpected("10:08", "10:58") + ) + .buildEstimatedTimetableDeliveries(); + + var result = env.applyEstimatedTimetable(createExtraJourney); + assertEquals(0, result.successful()); + assertFailure(UpdateError.UpdateErrorType.CANNOT_RESOLVE_AGENCY, result); + } + @Test void testReplaceJourney() { var env = RealtimeTestEnvironment.siri(); diff --git a/src/ext/java/org/opentripplanner/ext/siri/AddedTripBuilder.java b/src/ext/java/org/opentripplanner/ext/siri/AddedTripBuilder.java index 8eae3be7077..aac485da4eb 100644 --- a/src/ext/java/org/opentripplanner/ext/siri/AddedTripBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/siri/AddedTripBuilder.java @@ -2,6 +2,7 @@ import static java.lang.Boolean.TRUE; import static org.opentripplanner.ext.siri.mapper.SiriTransportModeMapper.mapTransitMainMode; +import static org.opentripplanner.updater.spi.UpdateError.UpdateErrorType.CANNOT_RESOLVE_AGENCY; import static org.opentripplanner.updater.spi.UpdateError.UpdateErrorType.NO_START_DATE; import static org.opentripplanner.updater.spi.UpdateError.UpdateErrorType.NO_VALID_STOPS; import static org.opentripplanner.updater.spi.UpdateError.UpdateErrorType.TOO_FEW_STOPS; @@ -13,6 +14,8 @@ import java.util.List; import java.util.Objects; import java.util.function.Function; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opentripplanner.ext.siri.mapper.PickDropMapper; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.framework.time.ServiceDateUtils; @@ -172,7 +175,11 @@ Result build() { Route route = entityResolver.resolveRoute(lineRef); if (route == null) { - route = createRoute(); + Agency agency = resolveAgency(); + if (agency == null) { + return UpdateError.result(tripId, CANNOT_RESOLVE_AGENCY); + } + route = createRoute(agency); LOG.info("Adding route {} to transitModel.", route); transitModel.getTransitModelIndex().addRoutes(route); } @@ -278,24 +285,34 @@ Result build() { /** * Method to create a Route. Commonly used to create a route if a real-time message * refers to a route that is not in the transit model. - * - * We will find the first Route with same Operator, and use the same Authority - * If no operator found, copy the agency from replaced route - * * If no name is given for the route, an empty string will be set as the name. * * @return a new Route */ - private Route createRoute() { + @Nonnull + private Route createRoute(Agency agency) { var routeBuilder = Route.of(entityResolver.resolveId(lineRef)); routeBuilder.withShortName(shortName); routeBuilder.withMode(transitMode); routeBuilder.withNetexSubmode(transitSubMode); routeBuilder.withOperator(operator); + routeBuilder.withAgency(agency); + + return routeBuilder.build(); + } - // TODO - SIRI: Is there a better way to find authority/Agency? - Agency agency = transitModel + /** + * Attempt to find the agency to which this new trip belongs. + * The algorithm retrieves any route operated by the same operator as the one operating this new + * trip and resolves its agency. + * If no route with the same operator can be found, the algorithm falls back to retrieving the + * agency operating the replaced route. + * If none can be found the method returns null. + */ + @Nullable + private Agency resolveAgency() { + return transitModel .getTransitModelIndex() .getAllRoutes() .stream() @@ -303,9 +320,6 @@ private Route createRoute() { .findFirst() .map(Route::getAgency) .orElseGet(() -> replacedRoute != null ? replacedRoute.getAgency() : null); - routeBuilder.withAgency(agency); - - return routeBuilder.build(); } private Trip createTrip(Route route, FeedScopedId calServiceId) { diff --git a/src/main/java/org/opentripplanner/updater/spi/UpdateError.java b/src/main/java/org/opentripplanner/updater/spi/UpdateError.java index 548ef0210eb..1f568ba99a4 100644 --- a/src/main/java/org/opentripplanner/updater/spi/UpdateError.java +++ b/src/main/java/org/opentripplanner/updater/spi/UpdateError.java @@ -49,6 +49,7 @@ public enum UpdateErrorType { NOT_IMPLEMENTED_UNSCHEDULED, NOT_IMPLEMENTED_DUPLICATED, NOT_MONITORED, + CANNOT_RESOLVE_AGENCY, } public static Result result(FeedScopedId tripId, UpdateErrorType errorType) { From 1850dd1ab7f9ed0c7db255c2d163b116bfe45b3b Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Thu, 27 Jun 2024 15:28:12 +0200 Subject: [PATCH 063/132] Use immutable collections in timetable snapshot. --- .../model/TimetableSnapshot.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index 5c018412572..ac4de0ce38c 100644 --- a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -1,6 +1,7 @@ package org.opentripplanner.model; import com.google.common.collect.HashMultimap; +import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.SetMultimap; import java.time.LocalDate; import java.util.Collection; @@ -9,6 +10,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.Set; @@ -80,8 +82,7 @@ public class TimetableSnapshot { * include ones from the scheduled GTFS, as well as ones added by realtime messages and * tracked by the TripPatternCache.

* Note that the keys do not include all scheduled TripPatterns, only those for which we have at - * least one update. The type of the field is specifically HashMap (rather than the more general - * Map interface) because we need to efficiently clone it.

+ * least one update.

* The members of the SortedSet (the Timetable for a particular day) are treated as copy-on-write * when we're updating them. If an update will modify the timetable for a particular day, that * timetable is replicated before any modifications are applied to avoid affecting any previous @@ -91,16 +92,15 @@ public class TimetableSnapshot { * The compound key approach better reflects the fact that there should be only one Timetable per * TripPattern and date. */ - private HashMap> timetables = new HashMap(); + private Map> timetables = new HashMap(); /** * For cases where the trip pattern (sequence of stops visited) has been changed by a realtime * update, a Map associating the updated trip pattern with a compound key of the feed-scoped - * trip ID and the service date. The type of this field is HashMap rather than the more general - * Map interface because we need to efficiently clone it whenever we start building up a new - * snapshot. TODO RT_AB: clarify if this is an index or the original source of truth. + * trip ID and the service date. + * TODO RT_AB: clarify if this is an index or the original source of truth. */ - private HashMap realtimeAddedTripPattern = new HashMap<>(); + private Map realtimeAddedTripPattern = new HashMap<>(); /** * This is an index of TripPatterns, not the primary collection. It tracks which TripPatterns @@ -256,9 +256,8 @@ public TimetableSnapshot commit(TransitLayerUpdater transitLayerUpdater, boolean if (!force && !this.isDirty()) { return null; } - ret.timetables = (HashMap>) this.timetables.clone(); - ret.realtimeAddedTripPattern = - (HashMap) this.realtimeAddedTripPattern.clone(); + ret.timetables = Map.copyOf(timetables); + ret.realtimeAddedTripPattern = Map.copyOf(realtimeAddedTripPattern); if (transitLayerUpdater != null) { transitLayerUpdater.update(dirtyTimetables, timetables); @@ -267,7 +266,7 @@ public TimetableSnapshot commit(TransitLayerUpdater transitLayerUpdater, boolean this.dirtyTimetables.clear(); this.dirty = false; - ret.setPatternsForStop(HashMultimap.create(this.patternsForStop)); + ret.setPatternsForStop(ImmutableSetMultimap.copyOf(patternsForStop)); ret.readOnly = true; // mark the snapshot as henceforth immutable return ret; From 41794f4ad5f406fb4045ef420791e7d57a0465b6 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 27 Jun 2024 18:20:55 +0200 Subject: [PATCH 064/132] Apply suggestions from code review Co-authored-by: Andrew Byrd --- docs/Frontends.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/Frontends.md b/docs/Frontends.md index b8134d4cf7c..92c1d0bba4d 100644 --- a/docs/Frontends.md +++ b/docs/Frontends.md @@ -22,11 +22,11 @@ The main OpenTripPlanner repository currently contains two debug web frontends: - the original one in [`/src/client/classic-debug/`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/src/client/classic-debug) The **new debug client** is a React/TypeScript Single Page App (SPA) that can be served locally or accessed over a content delivery network (CDN). -Unlike the original debug client, it connects to the OTP Java backend via the GraphQL API using the Transmodel vocabulary. +Unlike the original debug client, it connects to the OTP Java backend via the GraphQL API using the Transmodel vocabulary. By default, it is available at the root URL (`http://localhost:8080/` in local operation). The **original debug client** is a jQuery and Backbone based UI whose history can be traced back over a decade to the first days of the OTP project. -It connects to the OTP Java backend via a REST API using the GTFS vocabulary. Historically this was the default OTP interface, and for now it continues to be -available on any running OTP instance at the root URL. +It connects to the OTP Java backend via a REST API using the GTFS vocabulary. Historically this was the default OTP interface available at the root URL. +It is still available, but has been moved to `http://localhost:8080/classic-debug/` . There is a third piece of software that might qualify as an OTP client: a Java Swing application making use of the Processing visualization library, located in the [GraphVisualizer class](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java). @@ -36,7 +36,7 @@ street network, providing some insight into the internals of the routing algorit ## Working with Debug Frontends -While the two debug frontends are enabled by default as of this writing, it may not be in the future, or you may wish to disable it if you've chosen to use a different frontend. +While the two debug frontends are enabled by default as of this writing, they may not be in the future, and you may wish to disable them if you've chosen to use a different frontend. Also, to get full use of the existing debug frontends you may want to enable OTP's built-in simple testing geocoder which performs fuzzy searches for transit stops by name, supplying their coordinates to the routing engine. Without it, you will be limited to origins and destinations selected on a map or specified in terms of latitude and longitude coordinates. The debug frontend and the geocoder can be toggled in `otp-config.json`: From 07728f218d3191c198b0295a92ec1c1361201b33 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 27 Jun 2024 18:22:50 +0200 Subject: [PATCH 065/132] Replace 'original' with 'classic' --- docs/Frontends.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Frontends.md b/docs/Frontends.md index 92c1d0bba4d..b2f0b9d0b2e 100644 --- a/docs/Frontends.md +++ b/docs/Frontends.md @@ -19,12 +19,12 @@ On the other hand, **production frontends** are intended to be a component of la The main OpenTripPlanner repository currently contains two debug web frontends: - new one currently under development at [`/client`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/client). -- the original one in [`/src/client/classic-debug/`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/src/client/classic-debug) +- the classic one in [`/src/client/classic-debug/`](https://github.com/opentripplanner/OpenTripPlanner/tree/dev-2.x/src/client/classic-debug) The **new debug client** is a React/TypeScript Single Page App (SPA) that can be served locally or accessed over a content delivery network (CDN). Unlike the original debug client, it connects to the OTP Java backend via the GraphQL API using the Transmodel vocabulary. By default, it is available at the root URL (`http://localhost:8080/` in local operation). -The **original debug client** is a jQuery and Backbone based UI whose history can be traced back over a decade to the first days of the OTP project. +The **classic debug client** is a jQuery and Backbone based UI whose history can be traced back over a decade to the first days of the OTP project. It connects to the OTP Java backend via a REST API using the GTFS vocabulary. Historically this was the default OTP interface available at the root URL. It is still available, but has been moved to `http://localhost:8080/classic-debug/` . From 46c5373470ffeba624e018ed2a8305f5eb7c6746 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 27 Jun 2024 18:24:44 +0200 Subject: [PATCH 066/132] Revert change --- .../org/opentripplanner/test/support/JsonAssertions.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/test/java/org/opentripplanner/test/support/JsonAssertions.java b/src/test/java/org/opentripplanner/test/support/JsonAssertions.java index e836ace81fd..1fe87268eee 100644 --- a/src/test/java/org/opentripplanner/test/support/JsonAssertions.java +++ b/src/test/java/org/opentripplanner/test/support/JsonAssertions.java @@ -32,10 +32,11 @@ public static void assertEqualJson(String expected, JsonNode actual) { assertEquals( exp, actualNode, - "Expected '%s' but actual was '%s'".formatted( - JsonSupport.prettyPrint(exp), - JsonSupport.prettyPrint(actualNode) - ) + () -> + "Expected '%s' but actual was '%s'".formatted( + JsonSupport.prettyPrint(exp), + JsonSupport.prettyPrint(actualNode) + ) ); } catch (JsonProcessingException e) { throw new RuntimeException(e); From 7c8c4a679dd261b19d6fadf4cbf362fa7886bc9f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Jun 2024 22:04:55 +0000 Subject: [PATCH 067/132] Update junit5 monorepo to v5.10.3 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 62f6155fd10..d77daf01502 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,7 @@ 2.51.1 2.17.1 3.1.7 - 5.10.2 + 5.10.3 1.13.0 5.5.3 1.5.6 From df5fc3fe859ee2a0ea78e1cc46634298e2cd6296 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Fri, 28 Jun 2024 10:52:23 +0000 Subject: [PATCH 068/132] Add changelog entry for #5924 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 7d524a77258..27e84a71ff6 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -36,6 +36,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Improve cancellation of large response in TransModel API [#5908](https://github.com/opentripplanner/OpenTripPlanner/pull/5908) - Refactor SIRI-ET updaters [#5904](https://github.com/opentripplanner/OpenTripPlanner/pull/5904) - Update Google Pubsub updater configuration [#5927](https://github.com/opentripplanner/OpenTripPlanner/pull/5927) +- Make new debug client the default, move old one to `classic-debug` [#5924](https://github.com/opentripplanner/OpenTripPlanner/pull/5924) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From 1322ecb90daf8b6e978d0f6102562d543c110e6b Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Fri, 28 Jun 2024 10:53:24 +0000 Subject: [PATCH 069/132] Upgrade debug client to version 2024/06/2024-06-28T10:52 --- src/client/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/index.html b/src/client/index.html index 77fc8ebbe8d..8767b03a337 100644 --- a/src/client/index.html +++ b/src/client/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +

From 59c4183137b43977252faa0f069f158ec016fcd2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 28 Jun 2024 10:53:35 +0000 Subject: [PATCH 070/132] Update Debug UI dependencies (non-major) --- client/package-lock.json | 551 +++++++++++++++++++++++++-------------- client/package.json | 22 +- 2 files changed, 367 insertions(+), 206 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index d57d763b59c..3c4520eb745 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -10,37 +10,37 @@ "dependencies": { "@googlemaps/polyline-codec": "1.0.28", "bootstrap": "5.3.3", - "graphql": "16.8.2", - "graphql-request": "7.0.1", - "maplibre-gl": "4.4.0", + "graphql": "16.9.0", + "graphql-request": "7.1.0", + "maplibre-gl": "4.5.0", "react": "18.3.1", - "react-bootstrap": "2.10.2", + "react-bootstrap": "2.10.3", "react-dom": "18.3.1", "react-map-gl": "7.1.7" }, "devDependencies": { "@graphql-codegen/cli": "5.0.2", - "@graphql-codegen/client-preset": "4.3.0", + "@graphql-codegen/client-preset": "4.3.1", "@graphql-codegen/introspection": "4.0.3", "@parcel/watcher": "2.4.1", "@testing-library/react": "16.0.0", "@types/react": "18.3.3", "@types/react-dom": "18.3.0", - "@typescript-eslint/eslint-plugin": "7.13.0", - "@typescript-eslint/parser": "7.13.0", + "@typescript-eslint/eslint-plugin": "7.14.1", + "@typescript-eslint/parser": "7.14.1", "@vitejs/plugin-react": "4.3.1", "@vitest/coverage-v8": "1.6.0", "eslint": "8.57.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.29.1", - "eslint-plugin-jsx-a11y": "6.8.0", - "eslint-plugin-react": "7.34.2", + "eslint-plugin-jsx-a11y": "6.9.0", + "eslint-plugin-react": "7.34.3", "eslint-plugin-react-hooks": "4.6.2", "eslint-plugin-react-refresh": "0.4.7", "jsdom": "24.1.0", "prettier": "3.3.2", - "typescript": "5.4.5", - "vite": "5.3.1", + "typescript": "5.5.2", + "vite": "5.3.2", "vitest": "1.6.0" } }, @@ -1104,9 +1104,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", - "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1173,9 +1174,9 @@ "dev": true }, "node_modules/@dprint/darwin-arm64": { - "version": "0.45.1", - "resolved": "https://registry.npmjs.org/@dprint/darwin-arm64/-/darwin-arm64-0.45.1.tgz", - "integrity": "sha512-pH0/uKLJ5SJPoHhOwLWFMhCmL0BY3FzWQbull8OGMK/FRkIPgOl2adZSovtUZpUMGWyDOzIWH1fW9X2DuMhnEg==", + "version": "0.46.3", + "resolved": "https://registry.npmjs.org/@dprint/darwin-arm64/-/darwin-arm64-0.46.3.tgz", + "integrity": "sha512-1ycDpGvclGHF3UG5V6peymPDg6ouNTqM6BjhVELQ6zwr+X98AMhq/1slgO8hwHtPcaS5qhTAS+PkzOmBJRegow==", "cpu": [ "arm64" ], @@ -1183,12 +1184,13 @@ "optional": true, "os": [ "darwin" - ] + ], + "peer": true }, "node_modules/@dprint/darwin-x64": { - "version": "0.45.1", - "resolved": "https://registry.npmjs.org/@dprint/darwin-x64/-/darwin-x64-0.45.1.tgz", - "integrity": "sha512-YUj421LmBLDlxpIER3pORKfQmpmXD50n5mClHjpZrnl17WTiHtQ+jHvDJdJoxH2eS66W0mQyxLoGo5SfFfiM7A==", + "version": "0.46.3", + "resolved": "https://registry.npmjs.org/@dprint/darwin-x64/-/darwin-x64-0.46.3.tgz", + "integrity": "sha512-v5IpLmrY836Q5hJAxZuX097ZNQvoZgO6JKO4bK4l6XDhhHAw2XTIUr41+FM5r36ENxyASMk0NpHjhcHtih3o0g==", "cpu": [ "x64" ], @@ -1196,18 +1198,21 @@ "optional": true, "os": [ "darwin" - ] + ], + "peer": true }, "node_modules/@dprint/formatter": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@dprint/formatter/-/formatter-0.3.0.tgz", "integrity": "sha512-N9fxCxbaBOrDkteSOzaCqwWjso5iAe+WJPsHC021JfHNj2ThInPNEF13ORDKta3llq5D1TlclODCvOvipH7bWQ==", - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/@dprint/linux-arm64-glibc": { - "version": "0.45.1", - "resolved": "https://registry.npmjs.org/@dprint/linux-arm64-glibc/-/linux-arm64-glibc-0.45.1.tgz", - "integrity": "sha512-lJ7s/pOQWRJ0mstjZQnVyX2/3QRXZ9cpFHJDZ7e81Y8QSn/iqxTrnK0DPgxUrDG8hYKQmWQdQLU4sP5DKBz0Jg==", + "version": "0.46.3", + "resolved": "https://registry.npmjs.org/@dprint/linux-arm64-glibc/-/linux-arm64-glibc-0.46.3.tgz", + "integrity": "sha512-9P13g1vgV8RfQH2qBGa8YAfaOeWA42RIhj7lmWRpkDFtwau96reMKwnBBn8bHUnc5e6bSsbPUOMb/X1KMUKz/g==", "cpu": [ "arm64" ], @@ -1215,12 +1220,13 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@dprint/linux-arm64-musl": { - "version": "0.45.1", - "resolved": "https://registry.npmjs.org/@dprint/linux-arm64-musl/-/linux-arm64-musl-0.45.1.tgz", - "integrity": "sha512-un2awe1L1sAJLsCPSEUrE0/cgupdzbYFoyBOutyU1zHR9KQn47AtIDw+chvuinU4xleHDuEGyXGuJ6NE+Ky6vw==", + "version": "0.46.3", + "resolved": "https://registry.npmjs.org/@dprint/linux-arm64-musl/-/linux-arm64-musl-0.46.3.tgz", + "integrity": "sha512-AAcdcMSZ6DEIoY9E0xQHjkZP+THP7EWsQge4TWzglSIjzn31YltglHAGYFcLB4CTJYpF0NsFDNFktzgkO+s0og==", "cpu": [ "arm64" ], @@ -1228,12 +1234,13 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@dprint/linux-x64-glibc": { - "version": "0.45.1", - "resolved": "https://registry.npmjs.org/@dprint/linux-x64-glibc/-/linux-x64-glibc-0.45.1.tgz", - "integrity": "sha512-5Civht90S/g8zlyYB7n4oH78p+sLbNqeFCFuImJRK7uRxZwCRya7lji6RwlB6DQ7qngVqovTHj9RLOYfZzfVlg==", + "version": "0.46.3", + "resolved": "https://registry.npmjs.org/@dprint/linux-x64-glibc/-/linux-x64-glibc-0.46.3.tgz", + "integrity": "sha512-c5cQ3G1rC64nBZ8Pd2LGWwzkEk4D7Ax9NrBbwYmNPvs6mFbGlJPC1+RD95x2WwIrIlMIciLG+Kxmt25PzBphmg==", "cpu": [ "x64" ], @@ -1241,12 +1248,13 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@dprint/linux-x64-musl": { - "version": "0.45.1", - "resolved": "https://registry.npmjs.org/@dprint/linux-x64-musl/-/linux-x64-musl-0.45.1.tgz", - "integrity": "sha512-p2/gjnHDd8GRCvtey5HZO4o/He6pSmY/zpcCuIXprFW9P0vNlEj3DFhz4FPpOKXM+csrsVWWs2E0T/xr5QZtVg==", + "version": "0.46.3", + "resolved": "https://registry.npmjs.org/@dprint/linux-x64-musl/-/linux-x64-musl-0.46.3.tgz", + "integrity": "sha512-ONtk2QtLcV0TqWOCOqzUFQixgk3JC+vnJLB5L6tQwT7BX5LzeircfE/1f4dg459iqejNC9MBXZkHnXqabvWSow==", "cpu": [ "x64" ], @@ -1254,18 +1262,21 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@dprint/typescript": { - "version": "0.90.5", - "resolved": "https://registry.npmjs.org/@dprint/typescript/-/typescript-0.90.5.tgz", - "integrity": "sha512-/1aP6saonFvJyQN3l2is6eTOec3GnLGyW+opid/eDm8pnlhwzYl8A9p36pI6WO5jLl/a9Ghod+LWpvSOuXFGUw==", - "license": "MIT" + "version": "0.91.1", + "resolved": "https://registry.npmjs.org/@dprint/typescript/-/typescript-0.91.1.tgz", + "integrity": "sha512-BX3TneRLf3OuO/3tsxbseHqWbpCPOOb2vOm9OlKgSYIKqOsCHpz5kWx5iDuGrNwxWWMKife/1ccz87I5tBLaNA==", + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/@dprint/win32-x64": { - "version": "0.45.1", - "resolved": "https://registry.npmjs.org/@dprint/win32-x64/-/win32-x64-0.45.1.tgz", - "integrity": "sha512-2l78XM7KsW46P2Yv6uPB3fE+y92EsBlrCxi+RVQ0pbznPFdMdkLyGgaCuh683zdld14jHlaADpIQ7YchGAEMAg==", + "version": "0.46.3", + "resolved": "https://registry.npmjs.org/@dprint/win32-x64/-/win32-x64-0.46.3.tgz", + "integrity": "sha512-xvj4DSEilf0gGdT7CqnwNEgfWNuWqT6eIBxHDEUbmcn1vZ7IwirtqRq/nm3lmYtQaJ4EbtMQZvACHZwxC7G96w==", "cpu": [ "x64" ], @@ -1273,7 +1284,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", @@ -1849,21 +1861,21 @@ } }, "node_modules/@graphql-codegen/client-preset": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.3.0.tgz", - "integrity": "sha512-p2szj5YiyLUYnQn1h7S4dsSY2Jc1LNrm32ptkb6CGtqPo3w9vgqki2WRJwgeJN8s3bhifqWRPzhoid/smrFVgA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.3.1.tgz", + "integrity": "sha512-FHszBKhubbJkrZHwzUNfMUp9IkzufCfn/riTpIy5yA84Wq0AJSPFL7nWkG+h3azFPeznLfqo3KJmfzRb+xeFEA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/template": "^7.20.7", "@graphql-codegen/add": "^5.0.3", - "@graphql-codegen/gql-tag-operations": "4.0.7", + "@graphql-codegen/gql-tag-operations": "4.0.8", "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-codegen/typed-document-node": "^5.0.7", - "@graphql-codegen/typescript": "^4.0.7", - "@graphql-codegen/typescript-operations": "^4.2.1", - "@graphql-codegen/visitor-plugin-common": "^5.2.0", + "@graphql-codegen/typed-document-node": "^5.0.8", + "@graphql-codegen/typescript": "^4.0.8", + "@graphql-codegen/typescript-operations": "^4.2.2", + "@graphql-codegen/visitor-plugin-common": "^5.3.0", "@graphql-tools/documents": "^1.0.0", "@graphql-tools/utils": "^10.0.0", "@graphql-typed-document-node/core": "3.2.0", @@ -1889,14 +1901,14 @@ } }, "node_modules/@graphql-codegen/gql-tag-operations": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.7.tgz", - "integrity": "sha512-2I69+IDC8pqAohH6cgKse/vPfJ/4TRTJX96PkAKz8S4RD54PUHtBmzCdBInIFEP/vQuH5mFUAaIKXXjznmGOsg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.8.tgz", + "integrity": "sha512-slCICQOFbMfdL7mAZ6XUiOhcJl0yOKfqHFiULIlQJKpo8ey6NHsrtc8Q02ZF417BfTfZ/Qj7rmXhkc/dwY94ag==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-codegen/visitor-plugin-common": "5.2.0", + "@graphql-codegen/visitor-plugin-common": "5.3.0", "@graphql-tools/utils": "^10.0.0", "auto-bind": "~4.0.0", "tslib": "~2.6.0" @@ -1952,14 +1964,14 @@ } }, "node_modules/@graphql-codegen/typed-document-node": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.0.7.tgz", - "integrity": "sha512-rgFh96hAbNwPUxLVlRcNhGaw2+y7ZGx7giuETtdO8XzPasTQGWGRkZ3wXQ5UUiTX4X3eLmjnuoXYKT7HoxSznQ==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.0.8.tgz", + "integrity": "sha512-ImJd1KwS0vYZiPVZzs8EOZ79V96zN0p1A1MJNpk/8CiJWpIi4FupLLfTMMYq5Rr0AZET+O/A+udw4LDjDrAWvg==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-codegen/visitor-plugin-common": "5.2.0", + "@graphql-codegen/visitor-plugin-common": "5.3.0", "auto-bind": "~4.0.0", "change-case-all": "1.0.15", "tslib": "~2.6.0" @@ -1969,15 +1981,15 @@ } }, "node_modules/@graphql-codegen/typescript": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.0.7.tgz", - "integrity": "sha512-Gn+JNvQBJhBqH7s83piAJ6UeU/MTj9GXWFO9bdbl8PMLCAM1uFAtg04iHfkGCtDKXcUg5a3Dt/SZG85uk5KuhA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.0.8.tgz", + "integrity": "sha512-kYS3SjGNnC9vgFS8N3vaxzRFkdXX2umMi1SOpHjMFCPjMe8NR0uNdW4nP9T0YEq+DvWgj+XojjpFy2oyz9q12w==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.4", "@graphql-codegen/schema-ast": "^4.0.2", - "@graphql-codegen/visitor-plugin-common": "5.2.0", + "@graphql-codegen/visitor-plugin-common": "5.3.0", "auto-bind": "~4.0.0", "tslib": "~2.6.0" }, @@ -1986,15 +1998,15 @@ } }, "node_modules/@graphql-codegen/typescript-operations": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.2.1.tgz", - "integrity": "sha512-LhEPsaP+AI65zfK2j6CBAL4RT0bJL/rR9oRWlvwtHLX0t7YQr4CP4BXgvvej9brYdedAxHGPWeV1tPHy5/z9KQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.2.2.tgz", + "integrity": "sha512-8FJHIAubM4r9ElLuuDAKhdOjainSwRHEmGIrtEgEwHARKhMk1Ttj6bpOQDisYlbDl4ZTHWEJCdNa9o9rgcl+9g==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.4", - "@graphql-codegen/typescript": "^4.0.7", - "@graphql-codegen/visitor-plugin-common": "5.2.0", + "@graphql-codegen/typescript": "^4.0.8", + "@graphql-codegen/visitor-plugin-common": "5.3.0", "auto-bind": "~4.0.0", "tslib": "~2.6.0" }, @@ -2003,9 +2015,9 @@ } }, "node_modules/@graphql-codegen/visitor-plugin-common": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.2.0.tgz", - "integrity": "sha512-0p8AwmARaZCAlDFfQu6Sz+JV6SjbPDx3y2nNM7WAAf0au7Im/GpJ7Ke3xaIYBc1b2rTZ+DqSTJI/zomENGD9NA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.3.0.tgz", + "integrity": "sha512-+kUk7gRD/72Wfkjd7D96Lonh9k4lFw9d3O1+I07Jyja4QN9H42kdFEO0hM/b4Q9lLkI1yJ66Oym7lWz2Ikj3aw==", "dev": true, "license": "MIT", "dependencies": { @@ -3401,9 +3413,10 @@ } }, "node_modules/@restart/ui": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.6.8.tgz", - "integrity": "sha512-6ndCv3oZ7r9vuP1Ok9KH55TM1/UkdBnP/fSraW0DFDMbPMzWKhVKeFAIEUCRCSdzayjZDcFYK6xbMlipN9dmMA==", + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.6.9.tgz", + "integrity": "sha512-mUbygUsJcRurjZCt1f77gg4DpheD1D+Sc7J3JjAkysUj7t8m4EBJVOqWC9788Qtbc69cJ+HlJc6jBguKwS8Mcw==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.21.0", "@popperjs/core": "^2.11.6", @@ -3841,17 +3854,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", - "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.14.1.tgz", + "integrity": "sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/type-utils": "7.13.0", - "@typescript-eslint/utils": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/type-utils": "7.14.1", + "@typescript-eslint/utils": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -3875,16 +3888,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.0.tgz", - "integrity": "sha512-EjMfl69KOS9awXXe83iRN7oIEXy9yYdqWfqdrFAYAAr6syP8eLEFI7ZE4939antx2mNgPRW/o1ybm2SFYkbTVA==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/typescript-estree": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/typescript-estree": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", "debug": "^4.3.4" }, "engines": { @@ -3904,14 +3917,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", - "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.14.1.tgz", + "integrity": "sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0" + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3922,14 +3935,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", - "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.14.1.tgz", + "integrity": "sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.13.0", - "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/typescript-estree": "7.14.1", + "@typescript-eslint/utils": "7.14.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -3950,9 +3963,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", - "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.14.1.tgz", + "integrity": "sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==", "dev": true, "license": "MIT", "engines": { @@ -3964,14 +3977,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", - "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.14.1.tgz", + "integrity": "sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4006,16 +4019,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", - "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.14.1.tgz", + "integrity": "sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/typescript-estree": "7.13.0" + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/typescript-estree": "7.14.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -4029,13 +4042,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", - "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.14.1.tgz", + "integrity": "sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/types": "7.14.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -4424,6 +4437,7 @@ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, + "peer": true, "dependencies": { "dequal": "^2.0.3" } @@ -4570,16 +4584,20 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.1.0", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/arraybuffer.prototype.slice": { @@ -4690,23 +4708,15 @@ } }, "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", + "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", "dev": true, + "license": "MPL-2.0", "engines": { "node": ">=4" } }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dev": true, - "dependencies": { - "dequal": "^2.0.3" - } - }, "node_modules/babel-plugin-syntax-trailing-function-commas": { "version": "7.0.0-beta.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", @@ -5474,6 +5484,39 @@ "node": ">=6" } }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -5645,22 +5688,24 @@ } }, "node_modules/dprint": { - "version": "0.45.1", - "resolved": "https://registry.npmjs.org/dprint/-/dprint-0.45.1.tgz", - "integrity": "sha512-OYefcDgxd6jSdig/Cfkw1vdvyiOIRruCPnqGBbXpc95buDt9kvwL+Lic1OHc+SaQSsQub0BUZMd5+TNgy8Sh3A==", + "version": "0.46.3", + "resolved": "https://registry.npmjs.org/dprint/-/dprint-0.46.3.tgz", + "integrity": "sha512-ACEd7B7sO/uvPvV/nsHbtkIeMqeD2a8XGO1DokROtKDUmI5WbuflGZOwyjFCYwy4rkX6FXoYBzGdEQ6um7BjCA==", "hasInstallScript": true, "license": "MIT", + "optional": true, + "peer": true, "bin": { "dprint": "bin.js" }, "optionalDependencies": { - "@dprint/darwin-arm64": "0.45.1", - "@dprint/darwin-x64": "0.45.1", - "@dprint/linux-arm64-glibc": "0.45.1", - "@dprint/linux-arm64-musl": "0.45.1", - "@dprint/linux-x64-glibc": "0.45.1", - "@dprint/linux-x64-musl": "0.45.1", - "@dprint/win32-x64": "0.45.1" + "@dprint/darwin-arm64": "0.46.3", + "@dprint/darwin-x64": "0.46.3", + "@dprint/linux-arm64-glibc": "0.46.3", + "@dprint/linux-arm64-musl": "0.46.3", + "@dprint/linux-x64-glibc": "0.46.3", + "@dprint/linux-x64-musl": "0.46.3", + "@dprint/win32-x64": "0.46.3" } }, "node_modules/dset": { @@ -5792,6 +5837,27 @@ "node": ">= 0.4" } }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-iterator-helpers": { "version": "1.0.19", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", @@ -6118,27 +6184,28 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", + "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", + "aria-query": "~5.1.3", + "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", + "axe-core": "^4.9.1", + "axobject-query": "~3.1.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", + "es-iterator-helpers": "^1.0.19", + "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.0" }, "engines": { "node": ">=4.0" @@ -6147,11 +6214,32 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/axobject-query": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6162,6 +6250,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6170,9 +6259,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.34.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", - "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", + "version": "7.34.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz", + "integrity": "sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==", "dev": true, "license": "MIT", "dependencies": { @@ -6180,7 +6269,7 @@ "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.2", "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", + "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", @@ -6817,9 +6906,10 @@ } }, "node_modules/geojson-vt": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", - "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz", + "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==", + "license": "ISC" }, "node_modules/get-caller-file": { "version": "2.0.5", @@ -7040,9 +7130,9 @@ "dev": true }, "node_modules/graphql": { - "version": "16.8.2", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.2.tgz", - "integrity": "sha512-cvVIBILwuoSyD54U4cF/UXDh5yAobhNV/tPygI4lZhgOIJQE/WLWC4waBRb4I6bDVYb3OVx3lfHbaQOEoUD5sg==", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", + "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==", "license": "MIT", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" @@ -7102,23 +7192,34 @@ } }, "node_modules/graphql-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-7.0.1.tgz", - "integrity": "sha512-hfGBZF6o6lC3C0th+aTMOFP6p8Ev+ydXn4PUlT8rvqPDUFCbaynXszjBCyu0saZIP3VGbJ67GpxW8UGK+tphSw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-7.1.0.tgz", + "integrity": "sha512-Ouu/lYVFhARS1aXeZoVJWnGT6grFJXTLwXJuK4mUGGRo0EUk1JkyYp43mdGmRgUVezpRm6V5Sq3t8jBDQcajng==", "license": "MIT", "dependencies": { - "@dprint/formatter": "^0.3.0", - "@dprint/typescript": "^0.90.4", "@graphql-typed-document-node/core": "^3.2.0", "@molt/command": "^0.9.0", - "dprint": "^0.45.1", - "zod": "^3.23.5" + "zod": "^3.23.8" }, "bin": { "graffle": "build/cli/generate.js" }, "peerDependencies": { + "@dprint/formatter": "^0.3.0", + "@dprint/typescript": "^0.91.1", + "dprint": "^0.46.2", "graphql": "14 - 16" + }, + "peerDependenciesMeta": { + "@dprint/formatter": { + "optional": true + }, + "@dprint/typescript": { + "optional": true + }, + "dprint": { + "optional": true + } } }, "node_modules/graphql-tag": { @@ -7478,6 +7579,23 @@ "node": ">=0.10.0" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-array-buffer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", @@ -8595,9 +8713,9 @@ } }, "node_modules/maplibre-gl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.4.0.tgz", - "integrity": "sha512-RS5ZYjUfcTuyTjR+jbPNGO+Cbjgid8jtBsUpgmx/m+2voj9oY6DmpanBBm2xvjOxZSfChR2wUpzK22mf6sEOlw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.5.0.tgz", + "integrity": "sha512-qOS1hn4d/pn2i0uva4S5Oz+fACzTkgBKq+NpwT/Tqzi4MSyzcWNtDELzLUSgWqHfNIkGCl5CZ/w7dtis+t4RCw==", "license": "BSD-3-Clause", "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", @@ -8616,7 +8734,7 @@ "@types/pbf": "^3.0.5", "@types/supercluster": "^7.1.3", "earcut": "^2.2.4", - "geojson-vt": "^3.2.1", + "geojson-vt": "^4.0.2", "gl-matrix": "^3.4.3", "global-prefix": "^3.0.0", "kdbush": "^4.0.2", @@ -8712,9 +8830,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -8930,6 +9048,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -9583,13 +9718,14 @@ } }, "node_modules/react-bootstrap": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.2.tgz", - "integrity": "sha512-UvB7mRqQjivdZNxJNEA2yOQRB7L9N43nBnKc33K47+cH90/ujmnMwatTCwQLu83gLhrzAl8fsa6Lqig/KLghaA==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.3.tgz", + "integrity": "sha512-cc1KAaQyj6Gr3AfA0eRRiUMSlRi3brDVcjc/o0E9y9XNW7ISo8TITrq8G8G3QTFe7VIhCiDt38k99AEFoLOolw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.24.7", "@restart/hooks": "^0.4.9", - "@restart/ui": "^1.6.8", + "@restart/ui": "^1.6.9", "@types/react-transition-group": "^4.4.6", "classnames": "^2.3.2", "dom-helpers": "^5.2.1", @@ -10354,6 +10490,19 @@ "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", "dev": true }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -10440,6 +10589,17 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/string.prototype.includes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", + "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", @@ -10950,10 +11110,11 @@ } }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -11181,9 +11342,9 @@ } }, "node_modules/vite": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", - "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.2.tgz", + "integrity": "sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/client/package.json b/client/package.json index 84c0e314dad..509c25752dd 100644 --- a/client/package.json +++ b/client/package.json @@ -19,37 +19,37 @@ "dependencies": { "@googlemaps/polyline-codec": "1.0.28", "bootstrap": "5.3.3", - "graphql": "16.8.2", - "graphql-request": "7.0.1", - "maplibre-gl": "4.4.0", + "graphql": "16.9.0", + "graphql-request": "7.1.0", + "maplibre-gl": "4.5.0", "react": "18.3.1", - "react-bootstrap": "2.10.2", + "react-bootstrap": "2.10.3", "react-dom": "18.3.1", "react-map-gl": "7.1.7" }, "devDependencies": { "@graphql-codegen/cli": "5.0.2", - "@graphql-codegen/client-preset": "4.3.0", + "@graphql-codegen/client-preset": "4.3.1", "@graphql-codegen/introspection": "4.0.3", "@parcel/watcher": "2.4.1", "@testing-library/react": "16.0.0", "@types/react": "18.3.3", "@types/react-dom": "18.3.0", - "@typescript-eslint/eslint-plugin": "7.13.0", - "@typescript-eslint/parser": "7.13.0", + "@typescript-eslint/eslint-plugin": "7.14.1", + "@typescript-eslint/parser": "7.14.1", "@vitejs/plugin-react": "4.3.1", "@vitest/coverage-v8": "1.6.0", "eslint": "8.57.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.29.1", - "eslint-plugin-jsx-a11y": "6.8.0", - "eslint-plugin-react": "7.34.2", + "eslint-plugin-jsx-a11y": "6.9.0", + "eslint-plugin-react": "7.34.3", "eslint-plugin-react-hooks": "4.6.2", "eslint-plugin-react-refresh": "0.4.7", "jsdom": "24.1.0", "prettier": "3.3.2", - "typescript": "5.4.5", - "vite": "5.3.1", + "typescript": "5.5.2", + "vite": "5.3.2", "vitest": "1.6.0" } } From 15cf5f81e6eb2aef59d0cb573ef44384d740c7a1 Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Fri, 28 Jun 2024 12:06:51 +0000 Subject: [PATCH 071/132] Upgrade debug client to version 2024/06/2024-06-28T12:06 --- src/client/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/index.html b/src/client/index.html index 8767b03a337..d406984f024 100644 --- a/src/client/index.html +++ b/src/client/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +
From 6e75b10eebf6354e5ead7c7166bcf544a3dfb3b7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 00:34:47 +0000 Subject: [PATCH 072/132] Update dependency mkdocs-material to v9.5.27 --- docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 93a8c6c673e..442ecdd9fe9 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,4 @@ mkdocs==1.5.3 -mkdocs-material==9.5.16 +mkdocs-material==9.5.27 mike@git+https://github.com/jimporter/mike.git@f0522f245e64687dd18384fbd86b721175711474 mkdocs-no-sitemap-plugin==0.0.1 From b1c52dafbcebbf88278da048dd7798ddf408234b Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 1 Jul 2024 09:36:14 +0200 Subject: [PATCH 073/132] Update mkdocs to 1.6.0 --- docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 442ecdd9fe9..4681f78c93f 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,4 @@ -mkdocs==1.5.3 +mkdocs==1.6.0 mkdocs-material==9.5.27 mike@git+https://github.com/jimporter/mike.git@f0522f245e64687dd18384fbd86b721175711474 mkdocs-no-sitemap-plugin==0.0.1 From 755d60c2702e5bac07d4dc2e2b69c7aab2031868 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 07:57:44 +0000 Subject: [PATCH 074/132] Update lucene.version to v9.11.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d77daf01502..c6ce3a03f60 100644 --- a/pom.xml +++ b/pom.xml @@ -66,7 +66,7 @@ 1.13.0 5.5.3 1.5.6 - 9.10.0 + 9.11.1 2.0.13 2.0.15 1.27 From 4fac03cfcbd52aa699fd575429fb5f1dbae28777 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 1 Jul 2024 17:46:28 +0200 Subject: [PATCH 075/132] Update src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java Co-authored-by: Thomas Gran --- .../standalone/config/routerequest/TransferConfig.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java index bbf2087c59e..990d7402776 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java @@ -40,12 +40,12 @@ static void mapTransferPreferences(NodeAdapter c, TransferPreferences.Builder tx .summary("The extra time needed to make a safe transfer.") .description( """ - An extra buffer time that's applied when exiting one public transport vehicle and boarding another. - This time is in addition to how long it might take to walk between stops plus `boardSlack` and - `alightSlack`. + The extra buffer time/safety margin added to transfers to make sure the connection is safe, time + wise. We recommend allowing the end-user to set this, and use `board-/alight-slack` to enforce + agency policies. This time is in addition to how long it might take to walk, board and alight. - It is useful to add extra time for passengers with mobility issues, who need extra time - when moving between vehicles. + It is useful for passengers on long distance travel, and people with mobility issues, but can be set + close to zero for everyday commuters and short distance searches in high transit frequency areas. """ ) .asDurationOrSeconds(dft.slack()) From 8fc0d9f7c58083481b95585194a66570bfe4e495 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 1 Jul 2024 17:49:08 +0200 Subject: [PATCH 076/132] Update compiled documentation --- docs/RouteRequest.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 60dec16d9b8..2d894dee8dd 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -367,12 +367,12 @@ significant time or walking will still be taken. The extra time needed to make a safe transfer. -An extra buffer time that's applied when exiting one public transport vehicle and boarding another. -This time is in addition to how long it might take to walk between stops plus `boardSlack` and -`alightSlack`. +The extra buffer time/safety margin added to transfers to make sure the connection is safe, time +wise. We recommend allowing the end-user to set this, and use `board-/alight-slack` to enforce +agency policies. This time is in addition to how long it might take to walk, board and alight. -It is useful to add extra time for passengers with mobility issues, who need extra time -when moving between vehicles. +It is useful for passengers on long distance travel, and people with mobility issues, but can be set +close to zero for everyday commuters and short distance searches in high transit frequency areas.

unpreferredCost

From 22d2123ed120801b114279892a8acc260af3dbf0 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 2 Jul 2024 09:58:21 +0200 Subject: [PATCH 077/132] Apply review feedback --- mkdocs.yml | 4 ++-- .../tagmapping/OsmTagMapperSource.java | 4 ---- .../wayproperty/specifier/Condition.java | 24 +++++++++++++++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 0689ea0211c..81dbf9a36fe 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -75,9 +75,9 @@ nav: - Build: 'BuildConfiguration.md' - OSM Tag Mapping: - Default: 'osm/Default.md' - - Norway: 'osm/Norway.md' - - Germany: 'osm/Germany.md' - Finland: 'osm/Finland.md' + - Germany: 'osm/Germany.md' + - Norway: 'osm/Norway.md' - UK: 'osm/UK.md' - Router: 'RouterConfiguration.md' - "Route Request": 'RouteRequest.md' diff --git a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java index e43b50c46ef..d430ad05f7d 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java +++ b/src/main/java/org/opentripplanner/openstreetmap/tagmapping/OsmTagMapperSource.java @@ -30,8 +30,4 @@ public OsmTagMapper getInstance() { case CONSTANT_SPEED_FINLAND -> new ConstantSpeedFinlandMapper(); }; } - - public boolean needsDocumentation() { - return this != CONSTANT_SPEED_FINLAND; - } } diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java index 89448cad158..35a104c5980 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java @@ -107,6 +107,9 @@ enum MatchResult { NONE, } + /** + * Selects tags where a given key/value matches. + */ record Equals(String key, String value) implements Condition { @Override public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { @@ -119,6 +122,9 @@ public String toString() { } } + /** + * Selects tags with a give key. + */ record Present(String key) implements Condition { @Override public MatchResult matchType() { @@ -135,6 +141,9 @@ public String toString() { } } + /** + * Selects tags where a given tag is absent. + */ record Absent(String key) implements Condition { @Override public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { @@ -147,6 +156,9 @@ public String toString() { } } + /** + * Selects tags where the integer value is greater than a given number. + */ record GreaterThan(String key, int value) implements Condition { @Override public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { @@ -160,6 +172,9 @@ public String toString() { } } + /** + * Selects tags where the integer value is less than a given number. + */ record LessThan(String key, int value) implements Condition { @Override public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { @@ -173,6 +188,9 @@ public String toString() { } } + /** + * Selects integer tag values and checks if they are in between a lower and an upper bound. + */ record InclusiveRange(String key, int upper, int lower) implements Condition { public InclusiveRange { if (upper < lower) { @@ -192,6 +210,9 @@ public String toString() { } } + /** + * Selects a tag which has one of a set of given values. + */ record OneOf(String key, String... values) implements Condition { @Override public boolean isExtendedKeyMatch(OSMWithTags way, String exKey) { @@ -204,6 +225,9 @@ public String toString() { } } + /** + * Selects a tag which has one of a set of given values or the tag is absent. + */ record OneOfOrAbsent(String key, String... values) implements Condition { /* A use case for this is to detect the absence of a sidewalk, cycle lane or verge*/ public OneOfOrAbsent(String key) { From 22ed45effc1cc4e70c03dab62f814d8b834d0561 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Thu, 27 Jun 2024 16:45:00 +0200 Subject: [PATCH 078/132] Prevent modifications on read-only timetables --- .../model/TimetableSnapshot.java | 16 +++---- .../model/TimetableSnapshotTest.java | 47 +++++++++++++++++++ 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index ac4de0ce38c..2499264d8c8 100644 --- a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -92,7 +92,7 @@ public class TimetableSnapshot { * The compound key approach better reflects the fact that there should be only one Timetable per * TripPattern and date. */ - private Map> timetables = new HashMap(); + private Map> timetables = new HashMap<>(); /** * For cases where the trip pattern (sequence of stops visited) has been changed by a realtime @@ -266,7 +266,7 @@ public TimetableSnapshot commit(TransitLayerUpdater transitLayerUpdater, boolean this.dirtyTimetables.clear(); this.dirty = false; - ret.setPatternsForStop(ImmutableSetMultimap.copyOf(patternsForStop)); + ret.patternsForStop = ImmutableSetMultimap.copyOf(patternsForStop); ret.readOnly = true; // mark the snapshot as henceforth immutable return ret; @@ -303,6 +303,10 @@ public void clear(String feedId) { * message and an attempt was made to re-associate it with its originally scheduled trip pattern. */ public boolean revertTripToScheduledTripPattern(FeedScopedId tripId, LocalDate serviceDate) { + if (readOnly) { + throw new ConcurrentModificationException("This TimetableSnapshot is read-only."); + } + boolean success = false; final TripPattern pattern = getRealtimeAddedTripPattern(tripId, serviceDate); @@ -406,10 +410,6 @@ public Collection getPatternsForStop(StopLocation stop) { return patternsForStop.get(stop); } - public void setPatternsForStop(SetMultimap patternsForStop) { - this.patternsForStop = patternsForStop; - } - /** * Does this snapshot contain any realtime data or is it completely empty? */ @@ -423,7 +423,7 @@ public boolean isEmpty() { * @param feedId feed id to clear out * @return true if the timetable changed as a result of the call */ - protected boolean clearTimetable(String feedId) { + private boolean clearTimetable(String feedId) { return timetables.keySet().removeIf(tripPattern -> feedId.equals(tripPattern.getFeedId())); } @@ -433,7 +433,7 @@ protected boolean clearTimetable(String feedId) { * @param feedId feed id to clear out * @return true if the realtimeAddedTripPattern changed as a result of the call */ - protected boolean clearRealtimeAddedTripPattern(String feedId) { + private boolean clearRealtimeAddedTripPattern(String feedId) { return realtimeAddedTripPattern .keySet() .removeIf(realtimeAddedTripPattern -> diff --git a/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java b/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java index 26d93f6a848..89c30da79e4 100644 --- a/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java +++ b/src/test/java/org/opentripplanner/model/TimetableSnapshotTest.java @@ -5,6 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import com.google.transit.realtime.GtfsRealtime.TripDescriptor; @@ -261,6 +262,52 @@ public void testPurge() { assertFalse(resolver.isDirty()); } + @Test + void testCannotUpdateReadOnlyTimetableSnapshot() { + TimetableSnapshot committedSnapshot = createCommittedSnapshot(); + LocalDate today = LocalDate.now(timeZone); + TripPattern pattern = patternIndex.get(new FeedScopedId(feedId, "1.1")); + assertThrows( + ConcurrentModificationException.class, + () -> committedSnapshot.update(pattern, null, today) + ); + } + + @Test + void testCannotCommitReadOnlyTimetableSnapshot() { + TimetableSnapshot committedSnapshot = createCommittedSnapshot(); + assertThrows(ConcurrentModificationException.class, () -> committedSnapshot.commit(null, true)); + } + + @Test + void testCannotClearReadOnlyTimetableSnapshot() { + TimetableSnapshot committedSnapshot = createCommittedSnapshot(); + assertThrows(ConcurrentModificationException.class, () -> committedSnapshot.clear(null)); + } + + @Test + void testCannotPurgeReadOnlyTimetableSnapshot() { + TimetableSnapshot committedSnapshot = createCommittedSnapshot(); + assertThrows( + ConcurrentModificationException.class, + () -> committedSnapshot.purgeExpiredData(null) + ); + } + + @Test + void testCannotRevertReadOnlyTimetableSnapshot() { + TimetableSnapshot committedSnapshot = createCommittedSnapshot(); + assertThrows( + ConcurrentModificationException.class, + () -> committedSnapshot.revertTripToScheduledTripPattern(null, null) + ); + } + + private static TimetableSnapshot createCommittedSnapshot() { + TimetableSnapshot timetableSnapshot = new TimetableSnapshot(); + return timetableSnapshot.commit(null, true); + } + private Result updateResolver( TimetableSnapshot resolver, TripPattern pattern, From c321509b15f70441e35c8b9ebba1d1d3f130c462 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 2 Jul 2024 12:30:18 +0200 Subject: [PATCH 079/132] Update slack docs --- docs/RouteRequest.md | 35 ++++++++++--------- .../routerequest/RouteRequestConfig.java | 31 ++++++++-------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 2d894dee8dd..2401c378513 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -15,9 +15,9 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe | Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | |--------------------------------------------------------------------------------------------------------------|:----------------------:|------------------------------------------------------------------------------------------------------------------------------------------------|:----------:|------------------|:-----:| -| [alightSlack](#rd_alightSlack) | `duration` | The extra time to exit a public transport vehicle. | *Optional* | `"PT0S"` | 2.0 | +| [alightSlack](#rd_alightSlack) | `duration` | The time safety margin when alighting from a vehicle. | *Optional* | `"PT0S"` | 2.0 | | arriveBy | `boolean` | Whether the trip should depart or arrive at the specified date and time. | *Optional* | `false` | 2.0 | -| [boardSlack](#rd_boardSlack) | `duration` | The extra time to board a public transport vehicle. | *Optional* | `"PT0S"` | 2.0 | +| [boardSlack](#rd_boardSlack) | `duration` | The time safety margin when boarding a vehicle. | *Optional* | `"PT0S"` | 2.0 | | [drivingDirection](#rd_drivingDirection) | `enum` | The driving direction to use in the intersection traversal calculation | *Optional* | `"right"` | 2.2 | | elevatorBoardCost | `integer` | What is the cost of boarding a elevator? | *Optional* | `90` | 2.0 | | elevatorBoardTime | `integer` | How long does it take to get on an elevator, on average. | *Optional* | `90` | 2.0 | @@ -192,14 +192,14 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe **Since version:** `2.0` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT0S"` **Path:** /routingDefaults -The extra time to exit a public transport vehicle. +The time safety margin when alighting from a vehicle. -The slack is added to arrival time of the transit vehicle. +This time slack is added to arrival time of the vehicle before any transfer or onward travel. -This also influences the time it takes to transfer. - -Since some modes, like airplane and subway, need more time than others, this is also configurable -per mode with `alightSlackForMode`. +The sole reason for this is to avoid missed connections when there are minor schedule variations. This +parameter is intended to be set by agencies not individual users. In general it is better to use +`boardSlack` - see its documentation for details. However, for specific modes, like airplane and +subway, that need more time than others, this is also configurable per mode with `alightSlackForMode`.

boardSlack

@@ -207,18 +207,19 @@ per mode with `alightSlackForMode`. **Since version:** `2.0` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT0S"` **Path:** /routingDefaults -The extra time to board a public transport vehicle. +The time safety margin when boarding a vehicle. -The extra time is added to the time when entering a public transport vehicle. This is a useful -tool for agencies wanting to add a general buffer time so that passengers are instructed to be -a earlier at their stop than is strictly necessary. This is also added when transferring from one -vehicle to another. +The board slack is added to the passenger's arrival time at a stop before boarding evaluating which +vehicles can be boarded. -It is similar to `transferSlack`, except that this also applies to the first transit leg in the -trip and `transferSlack` does not. +The sole reason for this is to avoid missed connections when there are minor schedule variations. This +parameter is intended to be set by agencies not individual users. For specific modes, like airplane and +subway, that need more time than others, this is also configurable per mode with `boardSlackForMode`. -Some modes, like airplane or subway, might need more of a slack than others, so this is also -configurable per mode with `boardSlackForMode`. +Agencies can use this parameter to ensure that the trip planner does not instruct passengers to arrive +at the last second. +This slack is added at every boarding including the first vehicle and transfers except for in-seat +transfers and guaranteed transfers.

drivingDirection

diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index ddb5d9a3a18..9286e519acd 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -202,15 +202,15 @@ private static void mapTransitPreferences(NodeAdapter c, TransitPreferences.Buil c .of("alightSlack") .since(V2_0) - .summary("The extra time to exit a public transport vehicle.") + .summary("The time safety margin when alighting from a vehicle.") .description( """ -The slack is added to arrival time of the transit vehicle. +This time slack is added to arrival time of the vehicle before any transfer or onward travel. -This also influences the time it takes to transfer. - -Since some modes, like airplane and subway, need more time than others, this is also configurable -per mode with `alightSlackForMode`. +The sole reason for this is to avoid missed connections when there are minor schedule variations. This +parameter is intended to be set by agencies not individual users. In general it is better to use +`boardSlack` - see its documentation for details. However, for specific modes, like airplane and +subway, that need more time than others, this is also configurable per mode with `alightSlackForMode`. """ ) .asDuration(dft.alightSlack().defaultValue()) @@ -235,19 +235,20 @@ private static void mapTransitPreferences(NodeAdapter c, TransitPreferences.Buil c .of("boardSlack") .since(V2_0) - .summary("The extra time to board a public transport vehicle.") + .summary("The time safety margin when boarding a vehicle.") .description( """ -The extra time is added to the time when entering a public transport vehicle. This is a useful -tool for agencies wanting to add a general buffer time so that passengers are instructed to be -a earlier at their stop than is strictly necessary. This is also added when transferring from one -vehicle to another. +The board slack is added to the passenger's arrival time at a stop before boarding evaluating which +vehicles can be boarded. -It is similar to `transferSlack`, except that this also applies to the first transit leg in the -trip and `transferSlack` does not. +The sole reason for this is to avoid missed connections when there are minor schedule variations. This +parameter is intended to be set by agencies not individual users. For specific modes, like airplane and +subway, that need more time than others, this is also configurable per mode with `boardSlackForMode`. -Some modes, like airplane or subway, might need more of a slack than others, so this is also -configurable per mode with `boardSlackForMode`. +Agencies can use this parameter to ensure that the trip planner does not instruct passengers to arrive +at the last second. +This slack is added at every boarding including the first vehicle and transfers except for in-seat +transfers and guaranteed transfers. """ ) .asDuration(dft.boardSlack().defaultValue()) From 93a132ad9d1ca2a8bddc642b4f917437a4ed73ed Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 2 Jul 2024 14:42:28 +0200 Subject: [PATCH 080/132] Apply review feedback --- doc-templates/OsmMapper.md | 12 ++++++++++++ docs/osm/Default.md | 12 ++++++++++++ docs/osm/Finland.md | 12 ++++++++++++ docs/osm/Germany.md | 12 ++++++++++++ docs/osm/Norway.md | 12 ++++++++++++ docs/osm/UK.md | 12 ++++++++++++ 6 files changed, 72 insertions(+) diff --git a/doc-templates/OsmMapper.md b/doc-templates/OsmMapper.md index 1fe32ea06e9..1690deac627 100644 --- a/doc-templates/OsmMapper.md +++ b/doc-templates/OsmMapper.md @@ -1,5 +1,17 @@ # OSM tag mapping +This page is intended to give an overview of which OpenStreetMap(OSM) tags OTP uses to evaluate its +walking and bicycling instructions. If a tag is not part of the documentation on this page +then this tag mapper (profile) does not use it. + +The exception are access permissions and wheelchair accessibility tags like + +- `access=no` +- `wheelchair=no` +- `oneway=yes` + +These are identical for all mappers and not separately listed on this page. + ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. diff --git a/docs/osm/Default.md b/docs/osm/Default.md index c390c8e4a1b..814420b791f 100644 --- a/docs/osm/Default.md +++ b/docs/osm/Default.md @@ -1,5 +1,17 @@ # OSM tag mapping +This page is intended to give an overview of which OpenStreetMap(OSM) tags OTP uses to evaluate its +walking and bicycling instructions. If a tag is not part of the documentation on this page +then this tag mapper (profile) does not use it. + +The exception are access permissions and wheelchair accessibility tags like + +- `access=no` +- `wheelchair=no` +- `oneway=yes` + +These are identical for all mappers and not separately listed on this page. + ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. diff --git a/docs/osm/Finland.md b/docs/osm/Finland.md index 33b1ee9ae2a..8a60b5f0b13 100644 --- a/docs/osm/Finland.md +++ b/docs/osm/Finland.md @@ -1,5 +1,17 @@ # OSM tag mapping +This page is intended to give an overview of which OpenStreetMap(OSM) tags OTP uses to evaluate its +walking and bicycling instructions. If a tag is not part of the documentation on this page +then this tag mapper (profile) does not use it. + +The exception are access permissions and wheelchair accessibility tags like + +- `access=no` +- `wheelchair=no` +- `oneway=yes` + +These are identical for all mappers and not separately listed on this page. + ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. diff --git a/docs/osm/Germany.md b/docs/osm/Germany.md index 9420e22025e..922aa3af836 100644 --- a/docs/osm/Germany.md +++ b/docs/osm/Germany.md @@ -1,5 +1,17 @@ # OSM tag mapping +This page is intended to give an overview of which OpenStreetMap(OSM) tags OTP uses to evaluate its +walking and bicycling instructions. If a tag is not part of the documentation on this page +then this tag mapper (profile) does not use it. + +The exception are access permissions and wheelchair accessibility tags like + +- `access=no` +- `wheelchair=no` +- `oneway=yes` + +These are identical for all mappers and not separately listed on this page. + ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. diff --git a/docs/osm/Norway.md b/docs/osm/Norway.md index f0c17c24a6c..d38fc4c04df 100644 --- a/docs/osm/Norway.md +++ b/docs/osm/Norway.md @@ -1,5 +1,17 @@ # OSM tag mapping +This page is intended to give an overview of which OpenStreetMap(OSM) tags OTP uses to evaluate its +walking and bicycling instructions. If a tag is not part of the documentation on this page +then this tag mapper (profile) does not use it. + +The exception are access permissions and wheelchair accessibility tags like + +- `access=no` +- `wheelchair=no` +- `oneway=yes` + +These are identical for all mappers and not separately listed on this page. + ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. diff --git a/docs/osm/UK.md b/docs/osm/UK.md index 3dd77b1b393..4a640caf95c 100644 --- a/docs/osm/UK.md +++ b/docs/osm/UK.md @@ -1,5 +1,17 @@ # OSM tag mapping +This page is intended to give an overview of which OpenStreetMap(OSM) tags OTP uses to evaluate its +walking and bicycling instructions. If a tag is not part of the documentation on this page +then this tag mapper (profile) does not use it. + +The exception are access permissions and wheelchair accessibility tags like + +- `access=no` +- `wheelchair=no` +- `oneway=yes` + +These are identical for all mappers and not separately listed on this page. + ### Way properties Way properties set a way's permission and optionally influences its walk and bicycle safety factors. From dd0c06abadd4ccb521ec10f964a5b59ab22e1aa2 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Wed, 3 Jul 2024 07:48:21 +0000 Subject: [PATCH 081/132] Add changelog entry for #5915 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 27e84a71ff6..756f677579f 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -37,6 +37,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Refactor SIRI-ET updaters [#5904](https://github.com/opentripplanner/OpenTripPlanner/pull/5904) - Update Google Pubsub updater configuration [#5927](https://github.com/opentripplanner/OpenTripPlanner/pull/5927) - Make new debug client the default, move old one to `classic-debug` [#5924](https://github.com/opentripplanner/OpenTripPlanner/pull/5924) +- Require valid polygons for AreaStop [#5915](https://github.com/opentripplanner/OpenTripPlanner/pull/5915) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From 98c075d99bc026f24ce7c6a0b063494e4338dd6e Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Wed, 3 Jul 2024 07:48:47 +0000 Subject: [PATCH 082/132] Bump serialization version id for #5915 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c6ce3a03f60..2a828e2e976 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,7 @@ - 151 + 152 31.2 2.51.1 From b057fbce5a6317cb433bb36f144fc1a8ffad60dc Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 3 Jul 2024 10:13:19 +0200 Subject: [PATCH 083/132] Update src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java Co-authored-by: Joel Lappalainen --- .../openstreetmap/wayproperty/specifier/Condition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java index 35a104c5980..3344074f536 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java @@ -123,7 +123,7 @@ public String toString() { } /** - * Selects tags with a give key. + * Selects tags with a given key. */ record Present(String key) implements Condition { @Override From a9441a7060ba7e9c56ad667280f83933288323ea Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 3 Jul 2024 10:14:37 +0200 Subject: [PATCH 084/132] Improve Javadoc --- .../openstreetmap/wayproperty/specifier/Condition.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java index 3344074f536..4ad180c16c3 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/specifier/Condition.java @@ -226,7 +226,9 @@ public String toString() { } /** - * Selects a tag which has one of a set of given values or the tag is absent. + * Selects a tag where one of the following conditions is true: + * - one of a set of given values matches + * - the tag is absent */ record OneOfOrAbsent(String key, String... values) implements Condition { /* A use case for this is to detect the absence of a sidewalk, cycle lane or verge*/ From 10f746416c39e9a970f1dc8c65685008daea1a72 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Tue, 2 Jul 2024 16:39:38 +0200 Subject: [PATCH 085/132] Expose stop transfer priority in API --- .../apis/transmodel/model/EnumTypes.java | 15 +++++++++++++++ .../model/stop/MonoOrMultiModalStation.java | 9 +++++++++ .../apis/transmodel/model/stop/StopPlaceType.java | 12 ++++++++++++ .../apis/transmodel/schema.graphql | 14 +++++++++++++- 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java b/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java index 6c173ba815f..54efb958406 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java @@ -22,6 +22,7 @@ import org.opentripplanner.transit.model.basic.Accessibility; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.network.BikeAccess; +import org.opentripplanner.transit.model.site.StopTransferPriority; import org.opentripplanner.transit.model.timetable.Direction; import org.opentripplanner.transit.model.timetable.OccupancyStatus; import org.opentripplanner.transit.model.timetable.RealTimeState; @@ -133,6 +134,7 @@ public class EnumTypes { public static final GraphQLEnumType INTERCHANGE_WEIGHTING = GraphQLEnumType .newEnum() + .description("Deprecated. Use STOP_INTERCHANGE_PRIORITY") .name("InterchangeWeighting") .value("preferredInterchange", 2, "Highest priority interchange.") .value("recommendedInterchange", 1, "Second highest priority interchange.") @@ -140,6 +142,19 @@ public class EnumTypes { .value("noInterchange", -1, "Interchange not allowed.") .build(); + public static final GraphQLEnumType STOP_INTERCHANGE_PRIORITY = GraphQLEnumType + .newEnum() + .name("StopInterchangePriority") + .value("preferred", StopTransferPriority.PREFERRED, "Highest interchange priority.") + .value("recommended", StopTransferPriority.RECOMMENDED) + .value("allowed", StopTransferPriority.ALLOWED) + .value( + "discouraged", + StopTransferPriority.DISCOURAGED, + "This maps to 'interchangeNotAllowed' in NeTEx." + ) + .build(); + public static final GraphQLEnumType ITINERARY_FILTER_DEBUG_PROFILE = createFromDocumentedEnum( "ItineraryFilterDebugProfile", List.of( diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/stop/MonoOrMultiModalStation.java b/src/main/java/org/opentripplanner/apis/transmodel/model/stop/MonoOrMultiModalStation.java index 3055c1a0115..9a7c92f6618 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/stop/MonoOrMultiModalStation.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/stop/MonoOrMultiModalStation.java @@ -8,6 +8,7 @@ import org.opentripplanner.transit.model.site.MultiModalStation; import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.model.site.StopLocation; +import org.opentripplanner.transit.model.site.StopTransferPriority; public class MonoOrMultiModalStation { @@ -40,6 +41,8 @@ public class MonoOrMultiModalStation { private final MonoOrMultiModalStation parentStation; + private final StopTransferPriority priority; + public MonoOrMultiModalStation(Station station, MultiModalStation parentStation) { this.id = station.getId(); this.name = station.getName(); @@ -50,6 +53,7 @@ public MonoOrMultiModalStation(Station station, MultiModalStation parentStation) this.url = station.getUrl(); this.timezone = station.getTimezone(); this.childStops = station.getChildStops(); + this.priority = station.getPriority(); this.parentStation = parentStation != null ? new MonoOrMultiModalStation(parentStation) : null; } @@ -63,6 +67,7 @@ public MonoOrMultiModalStation(MultiModalStation multiModalStation) { this.url = multiModalStation.getUrl(); this.timezone = null; this.childStops = multiModalStation.getChildStops(); + this.priority = null; this.parentStation = null; } @@ -102,6 +107,10 @@ public Collection getChildStops() { return childStops; } + public StopTransferPriority getPriority() { + return priority; + } + public MonoOrMultiModalStation getParentStation() { return parentStation; } diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/stop/StopPlaceType.java b/src/main/java/org/opentripplanner/apis/transmodel/model/stop/StopPlaceType.java index 13a1521bf1a..53621ee9b5a 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/stop/StopPlaceType.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/stop/StopPlaceType.java @@ -147,10 +147,22 @@ public static GraphQLObjectType create( .description( "Relative weighting of this stop with regards to interchanges. NOT IMPLEMENTED" ) + .deprecate("Not implemented. Use stopInterchangePriority") .type(EnumTypes.INTERCHANGE_WEIGHTING) .dataFetcher(environment -> 0) .build() ) + .field( + GraphQLFieldDefinition + .newFieldDefinition() + .name("stopInterchangePriority") + .description("Specify the priority of interchanges at this stop") + .type(EnumTypes.STOP_INTERCHANGE_PRIORITY) + .dataFetcher(environment -> + ((MonoOrMultiModalStation) environment.getSource()).getPriority() + ) + .build() + ) .field( GraphQLFieldDefinition .newFieldDefinition() diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 5c1912df4e6..e93eca94f83 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -1167,6 +1167,8 @@ type StopPlace implements PlaceInterface { ): [Quay] @timingData "Get all situations active for the stop place. Situations affecting individual quays are not returned, and should be fetched directly from the quay." situations: [PtSituationElement!]! + "Specify the priority of interchanges at this stop" + stopInterchangePriority: StopInterchangePriority tariffZones: [TariffZone]! timeZone: String "The transport modes of quays under this stop place." @@ -1174,7 +1176,7 @@ type StopPlace implements PlaceInterface { "The transport submode serviced by this stop place." transportSubmode: [TransportSubmode] "Relative weighting of this stop with regards to interchanges. NOT IMPLEMENTED" - weighting: InterchangeWeighting + weighting: InterchangeWeighting @deprecated(reason : "Not implemented. Use stopInterchangePriority") } "List of coordinates between two stops as a polyline" @@ -1531,6 +1533,7 @@ enum InterchangePriority { recommended } +"Deprecated. Use STOP_INTERCHANGE_PRIORITY" enum InterchangeWeighting { "Third highest priority interchange." interchangeAllowed @@ -1746,6 +1749,15 @@ enum StopCondition { startPoint } +enum StopInterchangePriority { + allowed + "This maps to 'interchangeNotAllowed' in NeTEx." + discouraged + "Highest interchange priority." + preferred + recommended +} + enum StreetMode { "Bike only. This can be used as access/egress, but transfers will still be walk only." bicycle From d6c9f6fff313c48276b5155f3d4611fc5f961096 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 3 Jul 2024 11:07:00 +0200 Subject: [PATCH 086/132] refactor: Add logging of wholes in the stop-index. --- .../transit/service/StopModelIndex.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java b/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java index 16337d980a1..5c0a5d3c0f9 100644 --- a/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java +++ b/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java @@ -1,8 +1,11 @@ package org.opentripplanner.transit.service; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Map; +import java.util.Objects; +import javax.annotation.Nullable; import org.locationtech.jts.geom.Envelope; import org.opentripplanner.framework.collection.CollectionsView; import org.opentripplanner.framework.geometry.HashGridSpatialIndex; @@ -12,6 +15,9 @@ import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.model.site.StopLocation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.event.Level; /** * Indexed access to Stop entities. @@ -20,6 +26,8 @@ */ class StopModelIndex { + private static final Logger LOG = LoggerFactory.getLogger(StopModelIndex.class); + private final HashGridSpatialIndex regularStopSpatialIndex = new HashGridSpatialIndex<>(); private final Map multiModalStationForStations = new HashMap<>(); private final HashGridSpatialIndex locationIndex = new HashGridSpatialIndex<>(); @@ -58,6 +66,8 @@ class StopModelIndex { // Trim the sizes of the indices regularStopSpatialIndex.compact(); locationIndex.compact(); + + logWholesInIndex(); } /** @@ -71,6 +81,7 @@ MultiModalStation getMultiModalStationForStation(Station station) { return multiModalStationForStations.get(station); } + @Nullable StopLocation stopByIndex(int index) { return stopsByIndex[index]; } @@ -82,4 +93,19 @@ int stopIndexSize() { Collection findAreaStops(Envelope envelope) { return locationIndex.query(envelope); } + + /** + * A small number of wholes in the stop-index is ok, but if there are many, it will affect + * the Raptor performance. + */ + private void logWholesInIndex() { + int c = (int) Arrays.stream(stopsByIndex).filter(Objects::isNull).count(); + if (c > 0) { + double p = (100.0 * c) / stopsByIndex.length; + // Log this as warning is more than 5% of the space is null + LOG + .atLevel(p >= 5.0 ? Level.WARN : Level.INFO) + .log("The stop index contains wholes in it. {} of {} is null.", c, stopsByIndex.length); + } + } } From 76e9139844513fd361b0a8e0821cb71c6a8acbfe Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 3 Jul 2024 11:08:55 +0200 Subject: [PATCH 087/132] Fix: NullPointerException in TransitLayerMapper --- .../transit/mappers/TransfersMapper.java | 5 +++++ .../transit/mappers/TransitLayerMapper.java | 15 ++++++++++++--- .../transit/service/StopModel.java | 1 + 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransfersMapper.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransfersMapper.java index 3cb259d3a67..74a5d7a6352 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransfersMapper.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransfersMapper.java @@ -19,6 +19,11 @@ static List> mapTransfers(StopModel stopModel, TransitModel trans for (int i = 0; i < stopModel.stopIndexSize(); ++i) { var stop = stopModel.stopByIndex(i); + + if (stop == null) { + continue; + } + ArrayList list = new ArrayList<>(); for (PathTransfer pathTransfer : transitModel.getTransfersByStop(stop)) { diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java index 210c8b42066..546a97b1d6e 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java @@ -190,12 +190,21 @@ static int[] createStopBoardAlightTransferCosts( if (!tuningParams.enableStopTransferPriority()) { return null; } + int defaultCost = RaptorCostConverter.toRaptorCost( + tuningParams.stopBoardAlightDuringTransferCost(StopTransferPriority.ALLOWED) + ); int[] stopBoardAlightTransferCosts = new int[stops.stopIndexSize()]; for (int i = 0; i < stops.stopIndexSize(); ++i) { - StopTransferPriority priority = stops.stopByIndex(i).getPriority(); - int domainCost = tuningParams.stopBoardAlightDuringTransferCost(priority); - stopBoardAlightTransferCosts[i] = RaptorCostConverter.toRaptorCost(domainCost); + // There can be wholes in the stop index, so we need to account for 'null' here. + var stop = stops.stopByIndex(i); + if (stop == null) { + stopBoardAlightTransferCosts[i] = defaultCost; + } else { + var priority = stop.getPriority(); + int domainCost = tuningParams.stopBoardAlightDuringTransferCost(priority); + stopBoardAlightTransferCosts[i] = RaptorCostConverter.toRaptorCost(domainCost); + } } return stopBoardAlightTransferCosts; } diff --git a/src/main/java/org/opentripplanner/transit/service/StopModel.java b/src/main/java/org/opentripplanner/transit/service/StopModel.java index 763aa504c40..4f55ca25b5b 100644 --- a/src/main/java/org/opentripplanner/transit/service/StopModel.java +++ b/src/main/java/org/opentripplanner/transit/service/StopModel.java @@ -162,6 +162,7 @@ public Collection listGroupStops() { return groupStopById.values(); } + @Nullable public StopLocation stopByIndex(int stopIndex) { return index.stopByIndex(stopIndex); } From b84f11735a8e2724021f7c410968c73f241180d1 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 3 Jul 2024 11:12:01 +0200 Subject: [PATCH 088/132] refactor: Explicit default-value for StopTransferPriority --- docs/BuildConfiguration.md | 4 +-- docs/RouterConfiguration.md | 2 +- .../gtfs/graphbuilder/GtfsFeedParameters.java | 3 -- .../GtfsFeedParametersBuilder.java | 2 +- .../transit/mappers/TransitLayerMapper.java | 2 +- .../transit/model/site/RegularStop.java | 4 ++- .../transit/model/site/Station.java | 5 ++-- .../transit/model/site/StopLocation.java | 2 +- .../model/site/StopTransferPriority.java | 30 +++++++++++-------- 9 files changed, 28 insertions(+), 26 deletions(-) diff --git a/docs/BuildConfiguration.md b/docs/BuildConfiguration.md index 7d2d90ea41b..cefd8d2cf2f 100644 --- a/docs/BuildConfiguration.md +++ b/docs/BuildConfiguration.md @@ -731,7 +731,7 @@ but we want to calculate the transfers always from OSM data. **Since version:** `2.3` ∙ **Type:** `enum` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"allowed"` **Path:** /gtfsDefaults -**Enum values:** `discouraged` | `allowed` | `recommended` | `preferred` +**Enum values:** `preferred` | `recommended` | `allowed` | `discouraged` Should there be some preference or aversion for transfers at stops that are part of a station. @@ -980,7 +980,7 @@ but we want to calculate the transfers always from OSM data. **Since version:** `2.3` ∙ **Type:** `enum` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"allowed"` **Path:** /transitFeeds/[0] -**Enum values:** `discouraged` | `allowed` | `recommended` | `preferred` +**Enum values:** `preferred` | `recommended` | `allowed` | `discouraged` Should there be some preference or aversion for transfers at stops that are part of a station. Overrides the value specified in `gtfsDefaults`. diff --git a/docs/RouterConfiguration.md b/docs/RouterConfiguration.md index 0891bf6d20d..aff2f4964f0 100644 --- a/docs/RouterConfiguration.md +++ b/docs/RouterConfiguration.md @@ -363,7 +363,7 @@ for more info." **Since version:** `2.0` ∙ **Type:** `enum map of integer` ∙ **Cardinality:** `Optional` **Path:** /transit -**Enum keys:** `discouraged` | `allowed` | `recommended` | `preferred` +**Enum keys:** `preferred` | `recommended` | `allowed` | `discouraged` Costs for boarding and alighting during transfers at stops with a given transfer priority. diff --git a/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsFeedParameters.java b/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsFeedParameters.java index fa23e02bac5..68b8874d5e6 100644 --- a/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsFeedParameters.java +++ b/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsFeedParameters.java @@ -24,9 +24,6 @@ public record GtfsFeedParameters( implements DataSourceConfig { public static final boolean DEFAULT_REMOVE_REPEATED_STOPS = true; - public static final StopTransferPriority DEFAULT_STATION_TRANSFER_PREFERENCE = - StopTransferPriority.ALLOWED; - public static final boolean DEFAULT_DISCARD_MIN_TRANSFER_TIMES = false; public static final boolean DEFAULT_BLOCK_BASED_INTERLINING = true; diff --git a/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsFeedParametersBuilder.java b/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsFeedParametersBuilder.java index 9dd3ad3a25e..1e799dbecbb 100644 --- a/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsFeedParametersBuilder.java +++ b/src/main/java/org/opentripplanner/gtfs/graphbuilder/GtfsFeedParametersBuilder.java @@ -18,7 +18,7 @@ public class GtfsFeedParametersBuilder { public GtfsFeedParametersBuilder() { this.removeRepeatedStops = GtfsFeedParameters.DEFAULT_REMOVE_REPEATED_STOPS; - this.stationTransferPreference = GtfsFeedParameters.DEFAULT_STATION_TRANSFER_PREFERENCE; + this.stationTransferPreference = StopTransferPriority.defaultValue(); this.discardMinTransferTimes = GtfsFeedParameters.DEFAULT_DISCARD_MIN_TRANSFER_TIMES; this.blockBasedInterlining = GtfsFeedParameters.DEFAULT_BLOCK_BASED_INTERLINING; this.maxInterlineDistance = GtfsFeedParameters.DEFAULT_MAX_INTERLINE_DISTANCE; diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java index 546a97b1d6e..91bdd78f396 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java @@ -191,7 +191,7 @@ static int[] createStopBoardAlightTransferCosts( return null; } int defaultCost = RaptorCostConverter.toRaptorCost( - tuningParams.stopBoardAlightDuringTransferCost(StopTransferPriority.ALLOWED) + tuningParams.stopBoardAlightDuringTransferCost(StopTransferPriority.defaultValue()) ); int[] stopBoardAlightTransferCosts = new int[stops.stopIndexSize()]; diff --git a/src/main/java/org/opentripplanner/transit/model/site/RegularStop.java b/src/main/java/org/opentripplanner/transit/model/site/RegularStop.java index 4c1638e7bae..9f3327beff9 100644 --- a/src/main/java/org/opentripplanner/transit/model/site/RegularStop.java +++ b/src/main/java/org/opentripplanner/transit/model/site/RegularStop.java @@ -127,7 +127,9 @@ public Point getGeometry() { @Override @Nonnull public StopTransferPriority getPriority() { - return isPartOfStation() ? getParentStation().getPriority() : StopTransferPriority.ALLOWED; + return isPartOfStation() + ? getParentStation().getPriority() + : StopTransferPriority.defaultValue(); } @Override diff --git a/src/main/java/org/opentripplanner/transit/model/site/Station.java b/src/main/java/org/opentripplanner/transit/model/site/Station.java index 3bfbcb7594e..68ce2d6d5a2 100644 --- a/src/main/java/org/opentripplanner/transit/model/site/Station.java +++ b/src/main/java/org/opentripplanner/transit/model/site/Station.java @@ -30,8 +30,6 @@ public class Station extends AbstractTransitEntity implements StopLocationsGroup, LogInfo { - public static final StopTransferPriority DEFAULT_PRIORITY = StopTransferPriority.ALLOWED; - private final I18NString name; private final String code; private final I18NString description; @@ -52,7 +50,8 @@ public class Station // Required fields this.name = Objects.requireNonNull(builder.getName()); this.coordinate = Objects.requireNonNull(builder.getCoordinate()); - this.priority = Objects.requireNonNullElse(builder.getPriority(), DEFAULT_PRIORITY); + this.priority = + Objects.requireNonNullElse(builder.getPriority(), StopTransferPriority.defaultValue()); this.transfersNotAllowed = builder.isTransfersNotAllowed(); // Optional fields diff --git a/src/main/java/org/opentripplanner/transit/model/site/StopLocation.java b/src/main/java/org/opentripplanner/transit/model/site/StopLocation.java index a3cbd1a8014..9cb4411437c 100644 --- a/src/main/java/org/opentripplanner/transit/model/site/StopLocation.java +++ b/src/main/java/org/opentripplanner/transit/model/site/StopLocation.java @@ -142,7 +142,7 @@ default ZoneId getTimeZone() { @Nonnull default StopTransferPriority getPriority() { - return StopTransferPriority.ALLOWED; + return StopTransferPriority.defaultValue(); } boolean isPartOfSameStationAs(StopLocation alternativeStop); diff --git a/src/main/java/org/opentripplanner/transit/model/site/StopTransferPriority.java b/src/main/java/org/opentripplanner/transit/model/site/StopTransferPriority.java index 1bc214fd47e..0e072c19ed6 100644 --- a/src/main/java/org/opentripplanner/transit/model/site/StopTransferPriority.java +++ b/src/main/java/org/opentripplanner/transit/model/site/StopTransferPriority.java @@ -9,31 +9,35 @@ */ public enum StopTransferPriority { /** - * Block transfers from/to this stop. In OTP this is not a definitive block, just a huge penalty - * is added to the cost function. + * Preferred place to transfer, strongly recommended. *

- * NeTEx equivalent is NO_INTERCHANGE. + * NeTEx equivalent is PREFERRED_INTERCHANGE. */ - DISCOURAGED, - + PREFERRED, + /** + * Recommended stop place. + *

+ * NeTEx equivalent is RECOMMENDED_INTERCHANGE. + */ + RECOMMENDED, /** * Allow transfers from/to this stop. This is the default. *

* NeTEx equivalent is INTERCHANGE_ALLOWED. */ ALLOWED, - /** - * Recommended stop place. + * Block transfers from/to this stop. In OTP this is not a definitive block, just a huge penalty + * is added to the cost function. *

- * NeTEx equivalent is RECOMMENDED_INTERCHANGE. + * NeTEx equivalent is NO_INTERCHANGE. */ - RECOMMENDED, + DISCOURAGED; /** - * Preferred place to transfer, strongly recommended. - *

- * NeTEx equivalent is PREFERRED_INTERCHANGE. + * The {@link #ALLOWED} is used as default value in cases where the value is not set. */ - PREFERRED, + public static StopTransferPriority defaultValue() { + return ALLOWED; + } } From eef2d6b87ca77d051c6933b4682c4a9fa03cb2fb Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 3 Jul 2024 11:51:27 +0200 Subject: [PATCH 089/132] review: Fix spelling --- .../raptoradapter/transit/mappers/TransitLayerMapper.java | 2 +- .../org/opentripplanner/transit/service/StopModelIndex.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java index 91bdd78f396..33a076bb8d6 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/TransitLayerMapper.java @@ -196,7 +196,7 @@ static int[] createStopBoardAlightTransferCosts( int[] stopBoardAlightTransferCosts = new int[stops.stopIndexSize()]; for (int i = 0; i < stops.stopIndexSize(); ++i) { - // There can be wholes in the stop index, so we need to account for 'null' here. + // There can be holes in the stop index, so we need to account for 'null' here. var stop = stops.stopByIndex(i); if (stop == null) { stopBoardAlightTransferCosts[i] = defaultCost; diff --git a/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java b/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java index 5c0a5d3c0f9..6b89915aa42 100644 --- a/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java +++ b/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java @@ -67,7 +67,7 @@ class StopModelIndex { regularStopSpatialIndex.compact(); locationIndex.compact(); - logWholesInIndex(); + logHolesInIndex(); } /** @@ -98,14 +98,14 @@ Collection findAreaStops(Envelope envelope) { * A small number of wholes in the stop-index is ok, but if there are many, it will affect * the Raptor performance. */ - private void logWholesInIndex() { + private void logHolesInIndex() { int c = (int) Arrays.stream(stopsByIndex).filter(Objects::isNull).count(); if (c > 0) { double p = (100.0 * c) / stopsByIndex.length; // Log this as warning is more than 5% of the space is null LOG .atLevel(p >= 5.0 ? Level.WARN : Level.INFO) - .log("The stop index contains wholes in it. {} of {} is null.", c, stopsByIndex.length); + .log("The stop index contains holes in it. {} of {} is null.", c, stopsByIndex.length); } } } From a4ab59a8914e51c9a9edbaa6aee1b70425058b89 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Wed, 3 Jul 2024 12:03:20 +0200 Subject: [PATCH 090/132] Improve GraphQL Enum documentation --- .../apis/transmodel/model/EnumTypes.java | 21 +++++++++++++++---- .../apis/transmodel/schema.graphql | 6 ++++-- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java b/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java index 54efb958406..6e63ddf3921 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java @@ -145,13 +145,26 @@ public class EnumTypes { public static final GraphQLEnumType STOP_INTERCHANGE_PRIORITY = GraphQLEnumType .newEnum() .name("StopInterchangePriority") - .value("preferred", StopTransferPriority.PREFERRED, "Highest interchange priority.") - .value("recommended", StopTransferPriority.RECOMMENDED) - .value("allowed", StopTransferPriority.ALLOWED) + .value( + "preferred", + StopTransferPriority.PREFERRED, + "Preferred place to transfer, strongly recommended. NeTEx equivalent is PREFERRED_INTERCHANGE." + ) + .value( + "recommended", + StopTransferPriority.RECOMMENDED, + "Recommended stop place. NeTEx equivalent is RECOMMENDED_INTERCHANGE." + ) + .value( + "allowed", + StopTransferPriority.ALLOWED, + "Allow transfers from/to this stop. This is the default. NeTEx equivalent is INTERCHANGE_ALLOWED." + ) .value( "discouraged", StopTransferPriority.DISCOURAGED, - "This maps to 'interchangeNotAllowed' in NeTEx." + "Block transfers from/to this stop. In OTP this is not a definitive block," + + " just a huge penalty is added to the cost function. NeTEx equivalent is NO_INTERCHANGE." ) .build(); diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index e93eca94f83..64440780f78 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -1750,11 +1750,13 @@ enum StopCondition { } enum StopInterchangePriority { + "Allow transfers from/to this stop. This is the default. NeTEx equivalent is INTERCHANGE_ALLOWED." allowed - "This maps to 'interchangeNotAllowed' in NeTEx." + "Block transfers from/to this stop. In OTP this is not a definitive block, just a huge penalty is added to the cost function. NeTEx equivalent is NO_INTERCHANGE." discouraged - "Highest interchange priority." + "Preferred place to transfer, strongly recommended. NeTEx equivalent is PREFERRED_INTERCHANGE." preferred + "Recommended stop place. NeTEx equivalent is RECOMMENDED_INTERCHANGE." recommended } From 2a07977cdf4f4f7602c940b20611412b3b402143 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 3 Jul 2024 12:32:02 +0200 Subject: [PATCH 091/132] Allow configuration of allowKeepingAtDestination --- docs/sandbox/VehicleRentalServiceDirectory.md | 1 + .../VehicleRentalServiceDirectoryFetcher.java | 3 +-- .../api/NetworkParameters.java | 14 +++++++++----- ...VehicleRentalServiceDirectoryFetcherConfig.java | 6 ++++++ 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/docs/sandbox/VehicleRentalServiceDirectory.md b/docs/sandbox/VehicleRentalServiceDirectory.md index 8009a62f912..a822fe93d65 100644 --- a/docs/sandbox/VehicleRentalServiceDirectory.md +++ b/docs/sandbox/VehicleRentalServiceDirectory.md @@ -38,6 +38,7 @@ the `router-config.json` | url | `uri` | Endpoint for the VehicleRentalServiceDirectory | *Required* | | 2.1 | | [headers](#vehicleRentalServiceDirectory_headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.1 | | [networks](#vehicleRentalServiceDirectory_networks) | `object[]` | List all networks to include. Use "network": "default-network" to set defaults. | *Optional* | | 2.4 | +|       allowKeepingVehicleAtDestination | `boolean` | Enables `allowKeepingVehicleAtDestination` for the given network | *Optional* | `false` | 2.5 | |       geofencingZones | `boolean` | Enables geofencingZones for the given network | *Optional* | `false` | 2.4 | |       network | `string` | The network name | *Required* | | 2.4 | diff --git a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/VehicleRentalServiceDirectoryFetcher.java b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/VehicleRentalServiceDirectoryFetcher.java index 9b350dec345..03b0acd59cd 100644 --- a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/VehicleRentalServiceDirectoryFetcher.java +++ b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/VehicleRentalServiceDirectoryFetcher.java @@ -105,8 +105,7 @@ private static List buildListOfNetworksFr new GbfsVehicleRentalDataSourceParameters( updaterUrl.get(), parameters.getLanguage(), - // allowKeepingRentedVehicleAtDestination - not part of GBFS, not supported here - false, + networkParams.allowKeepingAtDestination(), parameters.getHeaders(), networkName, networkParams.geofencingZones(), diff --git a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java index 25d394f72ec..c99c6893618 100644 --- a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java +++ b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java @@ -5,15 +5,19 @@ /** * Parameters for a specific network. *

- * The {@link GbfsVehicleRentalDataSourceParameters} support {@code overloadingAllowed} and - * {@code allowKeepingRentedVehicleAtDestination} is not included here since they are not part of - * the GBFS specification. If there is a demand for these, they can be added. + * The {@link GbfsVehicleRentalDataSourceParameters} supports {@code overloadingAllowed} + * which is not included here since they are not part of + * the GBFS specification. If there is a demand for it, it can be added. *

* @param network The network name * @param geofencingZones enable geofencingZones for the given network */ -public record NetworkParameters(String network, boolean geofencingZones) { +public record NetworkParameters( + String network, + boolean geofencingZones, + boolean allowKeepingAtDestination +) { public NetworkParameters withName(String network) { - return new NetworkParameters(network, geofencingZones); + return new NetworkParameters(network, geofencingZones, allowKeepingAtDestination); } } diff --git a/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java b/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java index b30fc3d5b3f..3a7da95bfec 100644 --- a/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java @@ -3,6 +3,7 @@ import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_0; import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_1; import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_4; +import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_5; import java.util.List; import org.opentripplanner.ext.vehiclerentalservicedirectory.api.NetworkParameters; @@ -79,6 +80,11 @@ private static List mapNetworkParameters( .of("geofencingZones") .since(V2_4) .summary("Enables geofencingZones for the given network") + .asBoolean(false), + c + .of("allowKeepingVehicleAtDestination") + .since(V2_5) + .summary("Enables `allowKeepingVehicleAtDestination` for the given network") .asBoolean(false) ) ); From 39cfada63b1f9e1673631958e2a88086f1b6ad6f Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 3 Jul 2024 12:42:38 +0200 Subject: [PATCH 092/132] Add changelog entry --- doc-templates/sandbox/VehicleRentalServiceDirectory.md | 3 ++- docs/sandbox/VehicleRentalServiceDirectory.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc-templates/sandbox/VehicleRentalServiceDirectory.md b/doc-templates/sandbox/VehicleRentalServiceDirectory.md index d9908de1a90..d550fe27dc2 100644 --- a/doc-templates/sandbox/VehicleRentalServiceDirectory.md +++ b/doc-templates/sandbox/VehicleRentalServiceDirectory.md @@ -1,4 +1,4 @@ -# Vehicle Rental Service Directory API support. +# Vehicle Rental Service Directory API support This adds support for the GBFS service directory endpoint component located at https://github.com/entur/lamassu. OTP uses the service directory to lookup and connect to all GBFS @@ -17,6 +17,7 @@ configuration from it. - Initial implementation of bike share updater API support - Make json tag names configurable [#3447](https://github.com/opentripplanner/OpenTripPlanner/pull/3447) - Enable GBFS geofencing with VehicleRentalServiceDirectory [#5324](https://github.com/opentripplanner/OpenTripPlanner/pull/5324) +- Enable `allowKeepingVehicleAtDestination` [#5944](https://github.com/opentripplanner/OpenTripPlanner/pull/5944) ## Configuration diff --git a/docs/sandbox/VehicleRentalServiceDirectory.md b/docs/sandbox/VehicleRentalServiceDirectory.md index a822fe93d65..feb5cb91ecb 100644 --- a/docs/sandbox/VehicleRentalServiceDirectory.md +++ b/docs/sandbox/VehicleRentalServiceDirectory.md @@ -1,4 +1,4 @@ -# Vehicle Rental Service Directory API support. +# Vehicle Rental Service Directory API support This adds support for the GBFS service directory endpoint component located at https://github.com/entur/lamassu. OTP uses the service directory to lookup and connect to all GBFS @@ -17,6 +17,7 @@ configuration from it. - Initial implementation of bike share updater API support - Make json tag names configurable [#3447](https://github.com/opentripplanner/OpenTripPlanner/pull/3447) - Enable GBFS geofencing with VehicleRentalServiceDirectory [#5324](https://github.com/opentripplanner/OpenTripPlanner/pull/5324) +- Enable `allowKeepingVehicleAtDestination` [#5944](https://github.com/opentripplanner/OpenTripPlanner/pull/5944) ## Configuration From 0c914c4b8e1e93a319297ad535b1504a5ca76e51 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 3 Jul 2024 14:05:01 +0200 Subject: [PATCH 093/132] review: Fix doc --- .../org/opentripplanner/transit/service/StopModelIndex.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java b/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java index 6b89915aa42..c12c6f715f7 100644 --- a/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java +++ b/src/main/java/org/opentripplanner/transit/service/StopModelIndex.java @@ -95,14 +95,14 @@ Collection findAreaStops(Envelope envelope) { } /** - * A small number of wholes in the stop-index is ok, but if there are many, it will affect + * A small number of holes in the stop-index is ok, but if there are many, it will affect * the Raptor performance. */ private void logHolesInIndex() { int c = (int) Arrays.stream(stopsByIndex).filter(Objects::isNull).count(); if (c > 0) { double p = (100.0 * c) / stopsByIndex.length; - // Log this as warning is more than 5% of the space is null + // Log this as warning if more than 5% of the space is null LOG .atLevel(p >= 5.0 ? Level.WARN : Level.INFO) .log("The stop index contains holes in it. {} of {} is null.", c, stopsByIndex.length); From ac2cb37d9866ead1b55df52fb41283fbb49b030e Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 3 Jul 2024 18:02:33 +0200 Subject: [PATCH 094/132] Re-apply update --- .../resources/org/opentripplanner/apis/gtfs/schema.graphqls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index eb3c631ec3c..57fe17a55ab 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -1356,7 +1356,7 @@ type QueryType { A global minimum transfer time (in seconds) that specifies the minimum amount of time that must pass between exiting one transit vehicle and boarding another. This time is in addition to time it might take to walk - between transit stops. Default value: 0 + between transit stops. Default value: 120 """ minTransferTime: Int, "The weight multipliers for transit modes. WALK, BICYCLE, CAR, TRANSIT and LEG_SWITCH are not included." From 3c81fcaf9c754a760ece74cd61a3859eb7541161 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Wed, 3 Jul 2024 23:12:11 +0300 Subject: [PATCH 095/132] Remove unused code --- .../org/opentripplanner/inspector/vector/LayerParameters.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java index 0d6a4b23d6b..cb849e0f0ac 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java +++ b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java @@ -1,7 +1,5 @@ package org.opentripplanner.inspector.vector; -import java.util.ArrayList; -import java.util.List; import org.opentripplanner.apis.support.mapping.PropertyMapper; /** @@ -12,7 +10,6 @@ public interface LayerParameters> { int MAX_ZOOM = 20; int CACHE_MAX_SECONDS = -1; double EXPANSION_FACTOR = 0.25d; - List HIDE_NETWORKS = new ArrayList<>(); /** * User-visible name of the layer */ From b64b08af2b6c0ee79189c6e571daf2be7dc79c3e Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 4 Jul 2024 12:50:04 +0300 Subject: [PATCH 096/132] Add and update GraphQL integration tests --- .../apis/gtfs/GraphQLIntegrationTest.java | 34 ++++++++++++------- .../TestFreeFloatingRentalVehicleBuilder.java | 24 +++++++++++++ .../TestVehicleRentalStationBuilder.java | 24 +++++++++++++ .../apis/gtfs/expectations/nearest.json | 14 ++++++++ .../gtfs/expectations/rental-vehicle.json | 21 ++++++++++++ .../expectations/vehicle-rental-station.json | 5 ++- .../apis/gtfs/queries/nearest.graphql | 14 +++++++- .../apis/gtfs/queries/rental-vehicle.graphql | 23 +++++++++++++ .../queries/vehicle-rental-station.graphql | 3 ++ 9 files changed, 148 insertions(+), 14 deletions(-) create mode 100644 src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json create mode 100644 src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql diff --git a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java index c73a607b594..6b74db2c20d 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java @@ -73,8 +73,10 @@ import org.opentripplanner.service.realtimevehicles.internal.DefaultRealtimeVehicleService; import org.opentripplanner.service.realtimevehicles.model.RealtimeVehicle; import org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService; +import org.opentripplanner.service.vehiclerental.model.TestFreeFloatingRentalVehicleBuilder; import org.opentripplanner.service.vehiclerental.model.TestVehicleRentalStationBuilder; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; import org.opentripplanner.standalone.config.framework.json.JsonSupport; import org.opentripplanner.test.support.FilePatternSource; import org.opentripplanner.transit.model._data.TransitModelForTest; @@ -112,6 +114,18 @@ class GraphQLIntegrationTest { .map(p -> (RegularStop) p.stop) .toList(); + private static VehicleRentalStation VEHICLE_RENTAL_STATION = new TestVehicleRentalStationBuilder() + .withVehicles(10) + .withSpaces(10) + .withVehicleTypeBicycle(5, 7) + .withVehicleTypeElectricBicycle(5, 3) + .withSystem("system-1", "https://foo.bar") + .build(); + + private static VehicleRentalVehicle RENTAL_VEHICLE = new TestFreeFloatingRentalVehicleBuilder() + .withSystem("system-1", "https://foo.bar") + .build(); + static final Graph GRAPH = new Graph(); static final Instant ALERT_START_TIME = OffsetDateTime @@ -280,13 +294,8 @@ public TransitAlertService getTransitAlertService() { realtimeVehicleService.setRealtimeVehicles(pattern, List.of(occypancyVehicle, positionVehicle)); DefaultVehicleRentalService defaultVehicleRentalService = new DefaultVehicleRentalService(); - VehicleRentalStation vehicleRentalStation = new TestVehicleRentalStationBuilder() - .withVehicles(10) - .withSpaces(10) - .withVehicleTypeBicycle(5, 7) - .withVehicleTypeElectricBicycle(5, 3) - .build(); - defaultVehicleRentalService.addVehicleRentalStation(vehicleRentalStation); + defaultVehicleRentalService.addVehicleRentalStation(VEHICLE_RENTAL_STATION); + defaultVehicleRentalService.addVehicleRentalStation(RENTAL_VEHICLE); context = new GraphQLRequestContext( @@ -451,11 +460,12 @@ public List findClosestPlaces( List filterByNetwork, TransitService transitService ) { - return List - .of(TransitModelForTest.of().stop("A").build()) - .stream() - .map(stop -> new PlaceAtDistance(stop, 0)) - .toList(); + var stop = TransitModelForTest.of().stop("A").build(); + return List.of( + new PlaceAtDistance(stop, 0), + new PlaceAtDistance(VEHICLE_RENTAL_STATION, 30), + new PlaceAtDistance(RENTAL_VEHICLE, 50) + ); } }; } diff --git a/src/test/java/org/opentripplanner/service/vehiclerental/model/TestFreeFloatingRentalVehicleBuilder.java b/src/test/java/org/opentripplanner/service/vehiclerental/model/TestFreeFloatingRentalVehicleBuilder.java index 4864fab5e43..c3837942426 100644 --- a/src/test/java/org/opentripplanner/service/vehiclerental/model/TestFreeFloatingRentalVehicleBuilder.java +++ b/src/test/java/org/opentripplanner/service/vehiclerental/model/TestFreeFloatingRentalVehicleBuilder.java @@ -13,6 +13,7 @@ public class TestFreeFloatingRentalVehicleBuilder { private double latitude = DEFAULT_LATITUDE; private double longitude = DEFAULT_LONGITUDE; + private VehicleRentalSystem system = null; private RentalVehicleType vehicleType = RentalVehicleType.getDefaultType(NETWORK_1); @@ -30,6 +31,28 @@ public TestFreeFloatingRentalVehicleBuilder withLongitude(double longitude) { return this; } + public TestFreeFloatingRentalVehicleBuilder withSystem(String id, String url) { + this.system = + new VehicleRentalSystem( + id, + null, + null, + null, + null, + url, + null, + null, + null, + null, + null, + null, + null, + null, + null + ); + return this; + } + public TestFreeFloatingRentalVehicleBuilder withVehicleScooter() { return buildVehicleType(RentalFormFactor.SCOOTER); } @@ -63,6 +86,7 @@ public VehicleRentalVehicle build() { vehicle.latitude = latitude; vehicle.longitude = longitude; vehicle.vehicleType = vehicleType; + vehicle.system = system; return vehicle; } } diff --git a/src/test/java/org/opentripplanner/service/vehiclerental/model/TestVehicleRentalStationBuilder.java b/src/test/java/org/opentripplanner/service/vehiclerental/model/TestVehicleRentalStationBuilder.java index 33f922ff0b9..0fb9f8b620f 100644 --- a/src/test/java/org/opentripplanner/service/vehiclerental/model/TestVehicleRentalStationBuilder.java +++ b/src/test/java/org/opentripplanner/service/vehiclerental/model/TestVehicleRentalStationBuilder.java @@ -19,6 +19,7 @@ public class TestVehicleRentalStationBuilder { private int spaces = 10; private boolean overloadingAllowed = false; private boolean stationOn = false; + private VehicleRentalSystem system = null; private final Map vehicleTypesAvailable = new HashMap<>(); private final Map vehicleSpacesAvailable = new HashMap<>(); @@ -52,6 +53,28 @@ public TestVehicleRentalStationBuilder withStationOn(boolean stationOn) { return this; } + public TestVehicleRentalStationBuilder withSystem(String id, String url) { + this.system = + new VehicleRentalSystem( + id, + null, + null, + null, + null, + url, + null, + null, + null, + null, + null, + null, + null, + null, + null + ); + return this; + } + public TestVehicleRentalStationBuilder withVehicleTypeBicycle(int numAvailable, int numSpaces) { return buildVehicleType( RentalFormFactor.BICYCLE, @@ -127,6 +150,7 @@ public VehicleRentalStation build() { station.isRenting = stationOn; station.isReturning = stationOn; station.realTimeData = true; + station.system = system; return station; } } diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/nearest.json b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/nearest.json index 82d929adeb1..b6b5b7ee674 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/nearest.json +++ b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/nearest.json @@ -10,6 +10,20 @@ "parentStation" : null } } + }, + { + "node" : { + "place" : { + "stationId" : "Network-1:FooStation" + } + } + }, + { + "node" : { + "place" : { + "vehicleId" : "Network-1:free-floating-bicycle" + } + } } ] } diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json new file mode 100644 index 00000000000..800366f4e2c --- /dev/null +++ b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json @@ -0,0 +1,21 @@ +{ + "data": { + "rentalVehicle": { + "vehicleId":"Network-1:free-floating-bicycle", + "name":"free-floating-bicycle", + "allowPickupNow":true, + "network":"Network-1", + "lon":19.01, + "lat":47.52, + "rentalUris":null, + "operative":true, + "vehicleType": { + "formFactor":"BICYCLE", + "propulsionType":"HUMAN" + }, + "vehicleRentalSystem": { + "url":"https://foo.bar" + } + } + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json index ef1284c5c5e..4981b44f7e7 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json +++ b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json @@ -53,7 +53,10 @@ "capacity" : null, "allowOverloading" : false, "rentalUris" : null, - "operative" : false + "operative" : false, + "vehicleRentalSystem" : { + "url" : "https://foo.bar" + } } } } diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/nearest.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/nearest.graphql index c7f8eed4213..469a117bab4 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/nearest.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/nearest.graphql @@ -1,5 +1,11 @@ { - nearest(lat: 60.19915, lon: 24.94089, maxDistance: 500) { + nearest( + lat: 60.19915 + lon: 24.94089 + maxDistance: 500 + filterByPlaceTypes: [STOP, VEHICLE_RENT] + filterByNetwork: ["Network-1"] + ) { edges { node { place { @@ -10,6 +16,12 @@ id } } + ... on RentalVehicle { + vehicleId + } + ... on VehicleRentalStation { + stationId + } } } } diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql new file mode 100644 index 00000000000..859051e0c24 --- /dev/null +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql @@ -0,0 +1,23 @@ +{ + rentalVehicle(id: "Network-1:free-floating-bicycle") { + vehicleId + name + allowPickupNow + network + lon + lat + rentalUris { + android + ios + web + } + operative + vehicleType { + formFactor + propulsionType + } + vehicleRentalSystem { + url + } + } +} diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql index 8e555ffdbdd..f0c5d221dd2 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql @@ -39,5 +39,8 @@ web } operative + vehicleRentalSystem { + url + } } } From 64788299559072ef179c9ffe8597e563ef7e43d0 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 4 Jul 2024 12:31:03 +0200 Subject: [PATCH 097/132] Apply suggestions from code review Co-authored-by: Andrew Byrd --- .../config/routerequest/RouteRequestConfig.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index 9286e519acd..4bde66bd467 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -207,10 +207,10 @@ private static void mapTransitPreferences(NodeAdapter c, TransitPreferences.Buil """ This time slack is added to arrival time of the vehicle before any transfer or onward travel. -The sole reason for this is to avoid missed connections when there are minor schedule variations. This -parameter is intended to be set by agencies not individual users. In general it is better to use -`boardSlack` - see its documentation for details. However, for specific modes, like airplane and +This time slack helps model potential delays or procedures a passenger experiences during the process of passing through the alighting location. This +parameter is intended to be set by agencies not individual users. For specific modes, like airplane and subway, that need more time than others, this is also configurable per mode with `alightSlackForMode`. +A related parameter (transferSlack) exists to help avoid missed connections when there are minor schedule variations. """ ) .asDuration(dft.alightSlack().defaultValue()) @@ -238,10 +238,10 @@ private static void mapTransitPreferences(NodeAdapter c, TransitPreferences.Buil .summary("The time safety margin when boarding a vehicle.") .description( """ -The board slack is added to the passenger's arrival time at a stop before boarding evaluating which +The board slack is added to the passenger's arrival time at a stop, before evaluating which vehicles can be boarded. - -The sole reason for this is to avoid missed connections when there are minor schedule variations. This +This time slack helps model potential delays or procedures a passenger experiences during the process of passing through the boarding location, as well as some minor schedule variation. +A related parameter (transferSlack) also helps avoid missed connections when there are minor schedule variations. This parameter is intended to be set by agencies not individual users. For specific modes, like airplane and subway, that need more time than others, this is also configurable per mode with `boardSlackForMode`. From 9ee2076adfe78141787b83256c5d7ab0f3f0f038 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 4 Jul 2024 13:13:03 +0200 Subject: [PATCH 098/132] Update slack documentation --- docs/RouteRequest.md | 27 +++++++++++-------- .../routerequest/RouteRequestConfig.java | 21 +++++++++------ .../config/routerequest/TransferConfig.java | 2 +- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 2401c378513..14d937eeb63 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -196,10 +196,10 @@ The time safety margin when alighting from a vehicle. This time slack is added to arrival time of the vehicle before any transfer or onward travel. -The sole reason for this is to avoid missed connections when there are minor schedule variations. This -parameter is intended to be set by agencies not individual users. In general it is better to use -`boardSlack` - see its documentation for details. However, for specific modes, like airplane and +This time slack helps model potential delays or procedures a passenger experiences during the process of passing through the alighting location. This +parameter is intended to be set by agencies not individual users. For specific modes, like airplane and subway, that need more time than others, this is also configurable per mode with `alightSlackForMode`. +A related parameter (transferSlack) exists to help avoid missed connections when there are minor schedule variations.

boardSlack

@@ -209,17 +209,22 @@ subway, that need more time than others, this is also configurable per mode with The time safety margin when boarding a vehicle. -The board slack is added to the passenger's arrival time at a stop before boarding evaluating which +The board slack is added to the passenger's arrival time at a stop, before evaluating which vehicles can be boarded. -The sole reason for this is to avoid missed connections when there are minor schedule variations. This -parameter is intended to be set by agencies not individual users. For specific modes, like airplane and -subway, that need more time than others, this is also configurable per mode with `boardSlackForMode`. +This time slack helps model potential delays or procedures a passenger experiences during the process +of passing through the boarding location, as well as some minor schedule variation. This parameter is +intended to be set by agencies not individual users. Agencies can use this parameter to ensure that the trip planner does not instruct passengers to arrive -at the last second. -This slack is added at every boarding including the first vehicle and transfers except for in-seat -transfers and guaranteed transfers. +at the last second. This slack is added at every boarding including the first vehicle and transfers +except for in-seat transfers and guaranteed transfers. + +For specific modes, like airplane and subway, that need more time than others, this is also +configurable per mode with `boardSlackForMode`. + +A related parameter (transferSlack) also helps avoid missed connections when there are minor schedule +variations.

drivingDirection

@@ -373,7 +378,7 @@ wise. We recommend allowing the end-user to set this, and use `board-/alight-sla agency policies. This time is in addition to how long it might take to walk, board and alight. It is useful for passengers on long distance travel, and people with mobility issues, but can be set -close to zero for everyday commuters and short distance searches in high transit frequency areas. +close to zero for everyday commuters and short distance searches in high-frequency transit areas.

unpreferredCost

diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index 4bde66bd467..6fa33aac267 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -240,15 +240,20 @@ A related parameter (transferSlack) exists to help avoid missed connections when """ The board slack is added to the passenger's arrival time at a stop, before evaluating which vehicles can be boarded. -This time slack helps model potential delays or procedures a passenger experiences during the process of passing through the boarding location, as well as some minor schedule variation. -A related parameter (transferSlack) also helps avoid missed connections when there are minor schedule variations. This -parameter is intended to be set by agencies not individual users. For specific modes, like airplane and -subway, that need more time than others, this is also configurable per mode with `boardSlackForMode`. -Agencies can use this parameter to ensure that the trip planner does not instruct passengers to arrive -at the last second. -This slack is added at every boarding including the first vehicle and transfers except for in-seat -transfers and guaranteed transfers. +This time slack helps model potential delays or procedures a passenger experiences during the process +of passing through the boarding location, as well as some minor schedule variation. This parameter is +intended to be set by agencies not individual users. + +Agencies can use this parameter to ensure that the trip planner does not instruct passengers to arrive +at the last second. This slack is added at every boarding including the first vehicle and transfers +except for in-seat transfers and guaranteed transfers. + +For specific modes, like airplane and subway, that need more time than others, this is also +configurable per mode with `boardSlackForMode`. + +A related parameter (transferSlack) also helps avoid missed connections when there are minor schedule +variations. """ ) .asDuration(dft.boardSlack().defaultValue()) diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java index 990d7402776..99b051e7941 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/TransferConfig.java @@ -45,7 +45,7 @@ static void mapTransferPreferences(NodeAdapter c, TransferPreferences.Builder tx agency policies. This time is in addition to how long it might take to walk, board and alight. It is useful for passengers on long distance travel, and people with mobility issues, but can be set - close to zero for everyday commuters and short distance searches in high transit frequency areas. + close to zero for everyday commuters and short distance searches in high-frequency transit areas. """ ) .asDurationOrSeconds(dft.slack()) From 468bb838f71f622367e1b3c3ae02ee199387a7fd Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 4 Jul 2024 13:27:14 +0200 Subject: [PATCH 099/132] Add Javadoc --- .../apis/transmodel/mapping/TripRequestMapperTest.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java b/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java index b204c8a419e..42e4607a8b6 100644 --- a/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java @@ -402,9 +402,14 @@ public void testExplicitModes() { assertEquals(StreetMode.WALK, req.journey().transfer().mode()); } + /** + * This tests that both the new parameter name 'transferSlack` and the deprecated one + * 'minimumTransferTime' (for backwards compatibility) are correctly mapped to the internal + * transfer slack as a duration. + */ @ParameterizedTest @ValueSource(strings = { "transferSlack", "minimumTransferTime" }) - public void testTransferSlack(String name) { + public void testBackwardsCompatibleTransferSlack(String name) { Map arguments = Map.of(name, 101); var req = TripRequestMapper.createRequest(executionContext(arguments)); assertEquals(Duration.ofSeconds(101), req.preferences().transfer().slack()); From 9a3edc14362465b75b1f792718808a07f9c27f6c Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 4 Jul 2024 14:53:45 +0300 Subject: [PATCH 100/132] Add place finder tests for rental --- .../PlaceFinderTraverseVisitor.java | 2 +- .../PlaceFinderTraverseVisitorTest.java | 71 +++++++++++++++++++ .../street/search/state/TestStateBuilder.java | 14 ++++ 3 files changed, 86 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java b/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java index 41b8ea6cbc4..16420a0d9eb 100644 --- a/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java +++ b/src/main/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitor.java @@ -31,6 +31,7 @@ public class PlaceFinderTraverseVisitor implements TraverseVisitor private final Set filterByStops; private final Set filterByStations; private final Set filterByRoutes; + private final Set filterByNetwork; private final Set filterByVehicleRental; private final Set seenPatternAtStops = new HashSet<>(); private final Set seenStops = new HashSet<>(); @@ -44,7 +45,6 @@ public class PlaceFinderTraverseVisitor implements TraverseVisitor private final boolean includeStations; private final int maxResults; private final double radiusMeters; - private final Set filterByNetwork; /** * @param transitService A TransitService used in finding information about the diff --git a/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java b/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java index 0796176d9bb..b69a6533334 100644 --- a/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java +++ b/src/test/java/org/opentripplanner/routing/graphfinder/PlaceFinderTraverseVisitorTest.java @@ -13,6 +13,7 @@ import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.model.StopTime; +import org.opentripplanner.service.vehiclerental.model.TestVehicleRentalStationBuilder; import org.opentripplanner.street.search.state.TestStateBuilder; import org.opentripplanner.transit.model._data.TransitModelForTest; import org.opentripplanner.transit.model.basic.TransitMode; @@ -280,4 +281,74 @@ void stopsAndStationsWithStopAndStationFilter() { visitor.visitVertex(state1); } + + @Test + void rentalStation() { + var visitor = new PlaceFinderTraverseVisitor( + transitService, + null, + List.of(PlaceType.VEHICLE_RENT), + null, + null, + null, + null, + null, + 1, + 500 + ); + var station = new TestVehicleRentalStationBuilder().build(); + assertEquals(List.of(), visitor.placesFound); + var state1 = TestStateBuilder.ofWalking().rentalStation(station).build(); + visitor.visitVertex(state1); + + var res = visitor.placesFound.stream().map(PlaceAtDistance::place).toList(); + + assertEquals(List.of(station), res); + } + + @Test + void rentalStationWithNetworksFilter() { + var visitor = new PlaceFinderTraverseVisitor( + transitService, + null, + List.of(PlaceType.VEHICLE_RENT), + null, + null, + null, + null, + List.of("Network-1"), + 1, + 500 + ); + var station = new TestVehicleRentalStationBuilder().build(); + assertEquals(List.of(), visitor.placesFound); + var state1 = TestStateBuilder.ofWalking().rentalStation(station).build(); + visitor.visitVertex(state1); + + var res = visitor.placesFound.stream().map(PlaceAtDistance::place).toList(); + + assertEquals(List.of(station), res); + + visitor = + new PlaceFinderTraverseVisitor( + transitService, + null, + List.of(PlaceType.VEHICLE_RENT), + null, + null, + null, + null, + List.of("Network-2"), + 1, + 500 + ); + + assertEquals(List.of(), visitor.placesFound); + state1 = TestStateBuilder.ofWalking().rentalStation(station).build(); + visitor.visitVertex(state1); + + res = visitor.placesFound.stream().map(PlaceAtDistance::place).toList(); + + assertEquals(List.of(), res); + } } diff --git a/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java b/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java index e43c5a769d0..3750c4619b9 100644 --- a/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java +++ b/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java @@ -16,6 +16,7 @@ import org.opentripplanner.service.vehiclerental.model.TestFreeFloatingRentalVehicleBuilder; import org.opentripplanner.service.vehiclerental.model.TestVehicleRentalStationBuilder; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; import org.opentripplanner.service.vehiclerental.street.StreetVehicleRentalLink; import org.opentripplanner.service.vehiclerental.street.VehicleRentalEdge; import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; @@ -219,6 +220,19 @@ public TestStateBuilder stop() { return arriveAtStop(testModel.stop("stop", count, count).build()); } + /** + * Add a state that arrives at a rental station. + */ + public TestStateBuilder rentalStation(VehicleRentalStation station) { + count++; + var from = (StreetVertex) currentState.vertex; + var to = new VehicleRentalPlaceVertex(station); + + var link = StreetVehicleRentalLink.createStreetVehicleRentalLink(from, to); + currentState = link.traverse(currentState)[0]; + return this; + } + public TestStateBuilder enterStation(String id) { count++; var from = (StreetVertex) currentState.vertex; From b46b160000d0a17ea0fc3d42088cac2082628643 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Thu, 4 Jul 2024 14:36:24 +0200 Subject: [PATCH 101/132] Fix duration parsing error handling --- .../LinearFunctionSerialization.java | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerialization.java b/src/main/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerialization.java index bccad0568c5..cb9dfb5c4cc 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerialization.java +++ b/src/main/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerialization.java @@ -1,6 +1,7 @@ package org.opentripplanner.routing.api.request.framework; import java.time.Duration; +import java.time.format.DateTimeParseException; import java.util.Locale; import java.util.Optional; import java.util.function.BiFunction; @@ -39,6 +40,8 @@ public class LinearFunctionSerialization { String.join(SEP, DUR, PLUS, NUM, VARIABLE) ); + private static final Pattern DECIMAL_NUMBER_PATTERN = Pattern.compile("\\d+(\\.\\d+)?"); + private LinearFunctionSerialization() {} /** @@ -61,11 +64,7 @@ public static Optional parse(String text, BiFunction var coefficient = Double.parseDouble(coefficientText); coefficient = Units.normalizedFactor(coefficient, 0.0, 100.0); - // Unfortunately, to be backwards compatible we need to support decimal numbers. - // If a decimal number, then the value is converted to seconds - var constant = constantText.matches("\\d+(\\.\\d+)?") - ? Duration.ofSeconds(IntUtils.round(Double.parseDouble(constantText))) - : DurationUtils.duration(constantText); + var constant = parseDecimalSecondsOrDuration(constantText); return Optional.of(factory.apply(constant, coefficient)); } @@ -85,4 +84,24 @@ public static String serialize(Duration constant, double coefficient) { Units.factorToString(coefficient) ); } + + /** + * Parse a String as a Duration. + * Unfortunately, to be backwards compatible we need to support decimal numbers. + * If the text represents a decimal number, then the value is converted to seconds. + *
+ * The parsing function {@link DurationUtils#parseSecondsOrDuration(String)} cannot be used + * here since it supports only integer seconds, not decimal seconds. + * + */ + private static Duration parseDecimalSecondsOrDuration(String text) { + try { + if (DECIMAL_NUMBER_PATTERN.matcher(text).matches()) { + return Duration.ofSeconds(IntUtils.round(Double.parseDouble(text))); + } + return DurationUtils.duration(text); + } catch (DateTimeParseException e) { + throw new IllegalArgumentException("Unable to parse duration: '" + text + "'"); + } + } } From e955e832e0e2af6d12889971152a4931bb07684a Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 4 Jul 2024 14:51:37 +0000 Subject: [PATCH 102/132] Add changelog entry for #5943 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 756f677579f..dd32b0a2548 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -38,6 +38,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Update Google Pubsub updater configuration [#5927](https://github.com/opentripplanner/OpenTripPlanner/pull/5927) - Make new debug client the default, move old one to `classic-debug` [#5924](https://github.com/opentripplanner/OpenTripPlanner/pull/5924) - Require valid polygons for AreaStop [#5915](https://github.com/opentripplanner/OpenTripPlanner/pull/5915) +- Fix NullPointerException in stop transfer priority cost vector generation [#5943](https://github.com/opentripplanner/OpenTripPlanner/pull/5943) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From 36760322b2bf45ee539a6f525ba69d82290470a7 Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Thu, 4 Jul 2024 14:52:04 +0000 Subject: [PATCH 103/132] Bump serialization version id for #5943 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0816cd6962c..cb738fee822 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,7 @@ - 152 + 153 31.2 2.51.1 From 4c5d1ea319a34d603f877e44cd222600b1853894 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Fri, 5 Jul 2024 09:26:23 +0200 Subject: [PATCH 104/132] Added unit test --- .../framework/LinearFunctionSerializationTest.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerializationTest.java b/src/test/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerializationTest.java index e1785db61b1..46ef4b50e77 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerializationTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/framework/LinearFunctionSerializationTest.java @@ -36,6 +36,8 @@ static Stream parseTestCases() { 3h + 5.111 t || 3h | 5.1 7m + 10.1 x || 7m | 10.0 PT7s + 10.1 x || 7s | 10.0 + 0.1 + 10.1 x || 0s | 10.0 + 0.5 + 10.1 x || 1s | 10.0 """ ); } @@ -53,7 +55,7 @@ void parseTest(String input, String expectedConstant, double expectedCoefficient } @Test - void parseEmtpy() { + void parseEmpty() { assertEquals(Optional.empty(), LinearFunctionSerialization.parse(null, fail())); assertEquals(Optional.empty(), LinearFunctionSerialization.parse("", fail())); assertEquals(Optional.empty(), LinearFunctionSerialization.parse(" \r\n", fail())); @@ -77,6 +79,15 @@ void parseIllegalArgument() { assertEquals("Unable to parse function: 'foo'", ex.getMessage()); } + @Test + void parseIllegalDuration() { + var ex = assertThrows( + IllegalArgumentException.class, + () -> LinearFunctionSerialization.parse("600ss + 1.3 t", fail()) + ); + assertEquals("Unable to parse duration: '600ss'", ex.getMessage()); + } + private static BiFunction fail() { return (a, b) -> Assertions.fail("Factory method called, not expected!"); } From 13e2caf9d3eb670dbbeec6b7568f3bb14b29cba9 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 5 Jul 2024 10:14:10 +0200 Subject: [PATCH 105/132] Add French case study [ci skip] --- docs/Presentations.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/Presentations.md b/docs/Presentations.md index 4313346801f..ad44be751f5 100644 --- a/docs/Presentations.md +++ b/docs/Presentations.md @@ -11,3 +11,6 @@ ## Presentations in German * [ÖPNV und Fahrgemeinschaften intermodal mit dem OpenTripPlanner. FOSSGIS 2019. Holger Bruch. March, 2019](https://www.youtube.com/watch?v=XUiqEdnXEfo) + +## Case studies and reports +* [Case study by the French MOT about a national OTP instance](https://blog.transport.data.gouv.fr/images/rapport-otp-complet-2024-03-14.pdf) \ No newline at end of file From babd0fa23d1abcbe549a6ec1e16fbe5196f98e50 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 5 Jul 2024 11:02:40 +0200 Subject: [PATCH 106/132] Disable Legacy REST API by default --- docs/Configuration.md | 2 +- .../org/opentripplanner/framework/application/OTPFeature.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index 05611e23628..a4e8b5100a4 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -241,7 +241,7 @@ Here is a list of all features which can be toggled on/off and their default val | `FaresV2` | Enable import of GTFS-Fares v2 data. | | ✓️ | | `FlexRouting` | Enable FLEX routing. | | ✓️ | | `GoogleCloudStorage` | Enable Google Cloud Storage integration. | | ✓️ | -| `LegacyRestApi` | Enable legacy REST API. This API will be removed in the future. | ✓️ | ✓️ | +| `LegacyRestApi` | Enable legacy REST API. This API will be removed in the future. | | ✓️ | | `RealtimeResolver` | When routing with ignoreRealtimeUpdates=true, add an extra step which populates results with real-time data | | ✓️ | | `ReportApi` | Enable the report API. | | ✓️ | | `RestAPIPassInDefaultConfigAsJson` | Enable a default RouteRequest to be passed in as JSON on the REST API - FOR DEBUGGING ONLY! | | | diff --git a/src/main/java/org/opentripplanner/framework/application/OTPFeature.java b/src/main/java/org/opentripplanner/framework/application/OTPFeature.java index 29489de19f2..8ee5d100b94 100644 --- a/src/main/java/org/opentripplanner/framework/application/OTPFeature.java +++ b/src/main/java/org/opentripplanner/framework/application/OTPFeature.java @@ -89,7 +89,7 @@ public enum OTPFeature { FaresV2(false, true, "Enable import of GTFS-Fares v2 data."), FlexRouting(false, true, "Enable FLEX routing."), GoogleCloudStorage(false, true, "Enable Google Cloud Storage integration."), - LegacyRestApi(true, true, "Enable legacy REST API. This API will be removed in the future."), + LegacyRestApi(false, true, "Enable legacy REST API. This API will be removed in the future."), RealtimeResolver( false, true, From 66dedbb9435b2ab65f7c472a7f0633ebbf412d05 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Mon, 1 Jul 2024 09:34:59 +0200 Subject: [PATCH 107/132] Fix copy-on-write in TimetableSnapshot --- .../model/TimetableSnapshot.java | 61 ++++++++++++------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index 5c018412572..0b6655e2ec4 100644 --- a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -1,6 +1,7 @@ package org.opentripplanner.model; import com.google.common.collect.HashMultimap; +import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.SetMultimap; import java.time.LocalDate; import java.util.Collection; @@ -186,25 +187,7 @@ public Result update( Timetable tt = resolve(pattern, serviceDate); // we need to perform the copy of Timetable here rather than in Timetable.update() // to avoid repeatedly copying in case several updates are applied to the same timetable - if (!dirtyTimetables.contains(tt)) { - Timetable old = tt; - tt = new Timetable(tt, serviceDate); - SortedSet sortedTimetables = timetables.get(pattern); - if (sortedTimetables == null) { - sortedTimetables = new TreeSet<>(new SortedTimetableComparator()); - } else { - SortedSet temp = new TreeSet<>(new SortedTimetableComparator()); - temp.addAll(sortedTimetables); - sortedTimetables = temp; - } - if (old.getServiceDate() != null) { - sortedTimetables.remove(old); - } - sortedTimetables.add(tt); - timetables.put(pattern, sortedTimetables); - dirtyTimetables.add(tt); - dirty = true; - } + tt = copyTimetable(pattern, serviceDate, tt); // Assume all trips in a pattern are from the same feed, which should be the case. // Find trip index @@ -330,10 +313,11 @@ public boolean revertTripToScheduledTripPattern(FeedScopedId tripId, LocalDate s } if (tripTimesToRemove != null) { - for (Timetable sortedTimetable : sortedTimetables) { - boolean isDirty = sortedTimetable.getTripTimes().remove(tripTimesToRemove); + for (Timetable originalTimetable : sortedTimetables) { + boolean isDirty = originalTimetable.getTripTimes().contains(tripTimesToRemove); if (isDirty) { - dirtyTimetables.add(sortedTimetable); + Timetable updatedTimetable = copyTimetable(pattern, serviceDate, originalTimetable); + updatedTimetable.getTripTimes().remove(tripTimesToRemove); } } } @@ -455,6 +439,39 @@ private void addPatternToIndex(TripPattern tripPattern) { } } + /** + * Make a copy of the given timetable for a given pattern and service date. + * If the timetable was already copied-on write in this snapshot, the same instance will be + * returned. The SortedSet that holds the collection of Timetables for that pattern + * (sorted by service date) is shared between multiple snapshots and must be copied as well.
+ * Note on performance: if multiple Timetables are modified in a SortedSet, the SortedSet will be + * copied multiple times. The impact on memory/garbage collection is assumed to be minimal + * since the collection is small. + * The SortedSet is made immutable to prevent change after snapshot publication. + */ + private Timetable copyTimetable(TripPattern pattern, LocalDate serviceDate, Timetable tt) { + if (!dirtyTimetables.contains(tt)) { + Timetable old = tt; + tt = new Timetable(tt, serviceDate); + SortedSet sortedTimetables = timetables.get(pattern); + if (sortedTimetables == null) { + sortedTimetables = new TreeSet<>(new SortedTimetableComparator()); + } else { + SortedSet temp = new TreeSet<>(new SortedTimetableComparator()); + temp.addAll(sortedTimetables); + sortedTimetables = temp; + } + if (old.getServiceDate() != null) { + sortedTimetables.remove(old); + } + sortedTimetables.add(tt); + timetables.put(pattern, ImmutableSortedSet.copyOfSorted(sortedTimetables)); + dirtyTimetables.add(tt); + dirty = true; + } + return tt; + } + protected static class SortedTimetableComparator implements Comparator { @Override From 7ab29bcc8922828a1386fcce3c621320aff2e28f Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 5 Jul 2024 15:34:41 +0300 Subject: [PATCH 108/132] Call system network in schema and move network id there --- .../apis/gtfs/GtfsGraphQLIndex.java | 4 +-- .../gtfs/datafetchers/RentalVehicleImpl.java | 2 +- ...mpl.java => VehicleRentalNetworkImpl.java} | 7 +++- .../VehicleRentalStationImpl.java | 2 +- .../gtfs/generated/GraphQLDataFetchers.java | 23 ++++++++----- .../apis/gtfs/generated/GraphQLTypes.java | 20 ++++++------ .../apis/gtfs/generated/graphql-codegen.yml | 2 +- .../opentripplanner/apis/gtfs/schema.graphqls | 32 ++++++++++++------- .../apis/gtfs/GraphQLIntegrationTest.java | 4 +-- .../gtfs/expectations/rental-vehicle.json | 4 +-- .../expectations/vehicle-rental-station.json | 4 +-- .../apis/gtfs/queries/rental-vehicle.graphql | 4 +-- .../queries/vehicle-rental-station.graphql | 4 +-- 13 files changed, 67 insertions(+), 45 deletions(-) rename src/main/java/org/opentripplanner/apis/gtfs/datafetchers/{VehicleRentalSystemImpl.java => VehicleRentalNetworkImpl.java} (70%) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java index 833dd96a907..ca059723acd 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java @@ -75,8 +75,8 @@ import org.opentripplanner.apis.gtfs.datafetchers.UnknownImpl; import org.opentripplanner.apis.gtfs.datafetchers.VehicleParkingImpl; import org.opentripplanner.apis.gtfs.datafetchers.VehiclePositionImpl; +import org.opentripplanner.apis.gtfs.datafetchers.VehicleRentalNetworkImpl; import org.opentripplanner.apis.gtfs.datafetchers.VehicleRentalStationImpl; -import org.opentripplanner.apis.gtfs.datafetchers.VehicleRentalSystemImpl; import org.opentripplanner.apis.gtfs.datafetchers.debugOutputImpl; import org.opentripplanner.apis.gtfs.datafetchers.elevationProfileComponentImpl; import org.opentripplanner.apis.gtfs.datafetchers.placeAtDistanceImpl; @@ -167,7 +167,7 @@ protected static GraphQLSchema buildSchema() { .type(typeWiring.build(BookingTimeImpl.class)) .type(typeWiring.build(BookingInfoImpl.class)) .type(typeWiring.build(VehicleRentalStationImpl.class)) - .type(typeWiring.build(VehicleRentalSystemImpl.class)) + .type(typeWiring.build(VehicleRentalNetworkImpl.class)) .type(typeWiring.build(RentalVehicleImpl.class)) .type(typeWiring.build(RentalVehicleTypeImpl.class)) .type(typeWiring.build(StopOnRouteImpl.class)) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java index 1449c44e315..c4fb92c0ef4 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RentalVehicleImpl.java @@ -63,7 +63,7 @@ public DataFetcher vehicleType() { } @Override - public DataFetcher vehicleRentalSystem() { + public DataFetcher rentalNetwork() { return environment -> getSource(environment).getVehicleRentalSystem(); } diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalSystemImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalNetworkImpl.java similarity index 70% rename from src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalSystemImpl.java rename to src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalNetworkImpl.java index 7256ab5aaa3..75f771eed83 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalSystemImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalNetworkImpl.java @@ -5,7 +5,12 @@ import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; -public class VehicleRentalSystemImpl implements GraphQLDataFetchers.GraphQLVehicleRentalSystem { +public class VehicleRentalNetworkImpl implements GraphQLDataFetchers.GraphQLVehicleRentalNetwork { + + @Override + public DataFetcher networkId() { + return environment -> getSource(environment).systemId; + } @Override public DataFetcher url() { diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java index 117061b988e..0603d19e412 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/VehicleRentalStationImpl.java @@ -109,7 +109,7 @@ public DataFetcher availableSpaces() { } @Override - public DataFetcher vehicleRentalSystem() { + public DataFetcher rentalNetwork() { return environment -> getSource(environment).getVehicleRentalSystem(); } diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java index be74354e284..67944543580 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLDataFetchers.java @@ -853,13 +853,13 @@ public interface GraphQLRentalVehicle { public DataFetcher operative(); + public DataFetcher rentalNetwork(); + public DataFetcher rentalUris(); public DataFetcher vehicleId(); public DataFetcher vehicleType(); - - DataFetcher vehicleRentalSystem(); } public interface GraphQLRentalVehicleEntityCounts { @@ -1269,6 +1269,17 @@ public interface GraphQLVehiclePosition { public DataFetcher vehicleId(); } + /** + * Vehicle rental network, which is referred as system in the GBFS terminology. Note, the same operator can operate in multiple + * regions either with the same network/system or with a different one. This can contain information about either the rental brand + * or about the operator. + */ + public interface GraphQLVehicleRentalNetwork { + public DataFetcher networkId(); + + public DataFetcher url(); + } + /** Vehicle rental station represents a location where users can rent bicycles etc. for a fee. */ public interface GraphQLVehicleRentalStation { public DataFetcher allowDropoff(); @@ -1301,9 +1312,9 @@ public interface GraphQLVehicleRentalStation { public DataFetcher realtime(); - public DataFetcher rentalUris(); + public DataFetcher rentalNetwork(); - public DataFetcher vehicleRentalSystem(); + public DataFetcher rentalUris(); public DataFetcher spacesAvailable(); @@ -1312,10 +1323,6 @@ public interface GraphQLVehicleRentalStation { public DataFetcher vehiclesAvailable(); } - public interface GraphQLVehicleRentalSystem { - public DataFetcher url(); - } - public interface GraphQLVehicleRentalUris { public DataFetcher android(); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java index b191cc0830b..541219481ef 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/GraphQLTypes.java @@ -2409,6 +2409,7 @@ public static class GraphQLQueryTypeNearestArgs { private String before; private GraphQLInputFiltersInput filterByIds; private List filterByModes; + private List filterByNetwork; private List filterByPlaceTypes; private Integer first; private Integer last; @@ -2416,7 +2417,6 @@ public static class GraphQLQueryTypeNearestArgs { private Double lon; private Integer maxDistance; private Integer maxResults; - private List filterByNetwork; public GraphQLQueryTypeNearestArgs(Map args) { if (args != null) { @@ -2431,6 +2431,7 @@ public GraphQLQueryTypeNearestArgs(Map args) { .map(GraphQLMode.class::cast) .collect(Collectors.toList()); } + this.filterByNetwork = (List) args.get("filterByNetwork"); if (args.get("filterByPlaceTypes") != null) { this.filterByPlaceTypes = ((List) args.get("filterByPlaceTypes")).stream() @@ -2448,7 +2449,6 @@ public GraphQLQueryTypeNearestArgs(Map args) { this.lon = (Double) args.get("lon"); this.maxDistance = (Integer) args.get("maxDistance"); this.maxResults = (Integer) args.get("maxResults"); - this.filterByNetwork = (List) args.get("filterByNetwork"); } } @@ -2468,6 +2468,10 @@ public List getGraphQLFilterByModes() { return this.filterByModes; } + public List getGraphQLFilterByNetwork() { + return this.filterByNetwork; + } + public List getGraphQLFilterByPlaceTypes() { return this.filterByPlaceTypes; } @@ -2512,6 +2516,10 @@ public void setGraphQLFilterByModes(List filterByModes) { this.filterByModes = filterByModes; } + public void setGraphQLFilterByNetwork(List filterByNetwork) { + this.filterByNetwork = filterByNetwork; + } + public void setGraphQLFilterByPlaceTypes(List filterByPlaceTypes) { this.filterByPlaceTypes = filterByPlaceTypes; } @@ -2539,14 +2547,6 @@ public void setGraphQLMaxDistance(Integer maxDistance) { public void setGraphQLMaxResults(Integer maxResults) { this.maxResults = maxResults; } - - public List getGraphQLFilterByNetwork() { - return this.filterByNetwork; - } - - public void setGraphQLFilterByNetwork(List networks) { - this.filterByNetwork = networks; - } } public static class GraphQLQueryTypeNodeArgs { diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml b/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml index 6e5cbf7bd71..b9ee0ac3e16 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/graphql-codegen.yml @@ -47,7 +47,7 @@ config: BikeRentalStation: org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace#VehicleRentalPlace BikeRentalStationUris: org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris#VehicleRentalStationUris VehicleRentalStation: org.opentripplanner.service.vehiclerental.model.VehicleRentalStation#VehicleRentalStation - VehicleRentalSystem: org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem#VehicleRentalSystem + VehicleRentalNetwork: org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem#VehicleRentalSystem RentalVehicleEntityCounts: org.opentripplanner.service.vehiclerental.model.RentalVehicleEntityCounts#RentalVehicleEntityCounts RentalVehicleTypeCount: org.opentripplanner.service.vehiclerental.model.RentalVehicleTypeCount#RentalVehicleTypeCount RentalVehicle: org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle#VehicleRentalVehicle diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 02900c6f2ee..6de46739182 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -1741,15 +1741,15 @@ type RentalVehicle implements Node & PlaceInterface { "Name of the vehicle" name: String! "ID of the rental network." - network: String + network: String @deprecated(reason : "Use `networkId` from `rentalNetwork` instead.") "If true, vehicle is not disabled." operative: Boolean + "The vehicle rental network information. This is referred as system in the GBFS terminology." + rentalNetwork: VehicleRentalNetwork! "Platform-specific URLs to begin the vehicle." rentalUris: VehicleRentalUris "ID of the vehicle in the format of network:id" vehicleId: String - "The vehicle rental system information." - vehicleRentalSystem: VehicleRentalSystem "The type of the rental vehicle (scooter, bicycle, car...)" vehicleType: RentalVehicleType } @@ -2417,6 +2417,21 @@ type VehiclePosition { vehicleId: String } +""" +Vehicle rental network, which is referred as system in the GBFS terminology. Note, the same operator can operate in multiple +regions either with the same network/system or with a different one. This can contain information about either the rental brand +or about the operator. +""" +type VehicleRentalNetwork { + """ + ID of the vehicle rental network. In GBFS, this is the `system_id` field from the system information, but it can + be overridden in the configuration to have a different value so this field doesn't necessarily match the source data. + """ + networkId: String! + "The rental vehicle operator's network/system URL. In GBFS, this is the `url` field from the system information." + url: String +} + "Vehicle rental station represents a location where users can rent bicycles etc. for a fee." type VehicleRentalStation implements Node & PlaceInterface { """ @@ -2447,7 +2462,7 @@ type VehicleRentalStation implements Node & PlaceInterface { "Name of the vehicle rental station" name: String! "ID of the rental network." - network: String + network: String @deprecated(reason : "Use `networkId` from `rentalNetwork` instead.") "If true, station is on and in service." operative: Boolean """ @@ -2456,6 +2471,8 @@ type VehicleRentalStation implements Node & PlaceInterface { are always the total capacity divided by two. """ realtime: Boolean + "The vehicle rental network information. This is referred as system in the GBFS terminology." + rentalNetwork: VehicleRentalNetwork! "Platform-specific URLs to begin renting a vehicle from this station." rentalUris: VehicleRentalUris """ @@ -2468,8 +2485,6 @@ type VehicleRentalStation implements Node & PlaceInterface { spacesAvailable: Int @deprecated(reason : "Use `availableSpaces` instead, which also contains the space vehicle types") "ID of the vehicle in the format of network:id" stationId: String - "The vehicle rental system information." - vehicleRentalSystem: VehicleRentalSystem """ Number of vehicles currently available on the rental station. See field `allowPickupNow` to know if is currently possible to pick up a vehicle. @@ -2477,11 +2492,6 @@ type VehicleRentalStation implements Node & PlaceInterface { vehiclesAvailable: Int @deprecated(reason : "Use `availableVehicles` instead, which also contains vehicle types") } -type VehicleRentalSystem { - "The rental vehicle operator's system URL." - url: String -} - type VehicleRentalUris { """ A URI that can be passed to an Android app with an {@code android.intent.action.VIEW} Android diff --git a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java index 6b74db2c20d..2fb7a8d9db2 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/GraphQLIntegrationTest.java @@ -119,11 +119,11 @@ class GraphQLIntegrationTest { .withSpaces(10) .withVehicleTypeBicycle(5, 7) .withVehicleTypeElectricBicycle(5, 3) - .withSystem("system-1", "https://foo.bar") + .withSystem("Network-1", "https://foo.bar") .build(); private static VehicleRentalVehicle RENTAL_VEHICLE = new TestFreeFloatingRentalVehicleBuilder() - .withSystem("system-1", "https://foo.bar") + .withSystem("Network-1", "https://foo.bar") .build(); static final Graph GRAPH = new Graph(); diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json index 800366f4e2c..9017fe77a93 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json +++ b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/rental-vehicle.json @@ -4,7 +4,6 @@ "vehicleId":"Network-1:free-floating-bicycle", "name":"free-floating-bicycle", "allowPickupNow":true, - "network":"Network-1", "lon":19.01, "lat":47.52, "rentalUris":null, @@ -13,7 +12,8 @@ "formFactor":"BICYCLE", "propulsionType":"HUMAN" }, - "vehicleRentalSystem": { + "rentalNetwork": { + "networkId":"Network-1", "url":"https://foo.bar" } } diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json index 4981b44f7e7..ad1ce76d9be 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json +++ b/src/test/resources/org/opentripplanner/apis/gtfs/expectations/vehicle-rental-station.json @@ -47,14 +47,14 @@ "allowPickup" : false, "allowDropoffNow" : false, "allowPickupNow" : false, - "network" : "Network-1", "lon" : 18.99, "lat" : 47.51, "capacity" : null, "allowOverloading" : false, "rentalUris" : null, "operative" : false, - "vehicleRentalSystem" : { + "rentalNetwork" : { + "networkId" : "Network-1", "url" : "https://foo.bar" } } diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql index 859051e0c24..9a912781c56 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/rental-vehicle.graphql @@ -3,7 +3,6 @@ vehicleId name allowPickupNow - network lon lat rentalUris { @@ -16,7 +15,8 @@ formFactor propulsionType } - vehicleRentalSystem { + rentalNetwork { + networkId url } } diff --git a/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql b/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql index f0c5d221dd2..a2200465912 100644 --- a/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql +++ b/src/test/resources/org/opentripplanner/apis/gtfs/queries/vehicle-rental-station.graphql @@ -28,7 +28,6 @@ allowPickup allowDropoffNow allowPickupNow - network lon lat capacity @@ -39,7 +38,8 @@ web } operative - vehicleRentalSystem { + rentalNetwork { + networkId url } } From 3eaa5d071b05fe495ef680b37da7ff5a4964eff7 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 5 Jul 2024 16:51:08 +0300 Subject: [PATCH 109/132] Add system to smoove stations --- .../SmooveBikeRentalDataSource.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java b/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java index 3876ff44651..1f287ad950b 100644 --- a/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java +++ b/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java @@ -8,6 +8,7 @@ import org.opentripplanner.service.vehiclerental.model.RentalVehicleType; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalSystem; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.updater.spi.DataSource; import org.opentripplanner.updater.spi.GenericJsonDataSource; @@ -32,6 +33,7 @@ public class SmooveBikeRentalDataSource private final String networkName; private final RentalVehicleType vehicleType; + private final VehicleRentalSystem system; public SmooveBikeRentalDataSource(SmooveBikeRentalDataSourceParameters config) { this(config, new OtpHttpClientFactory()); @@ -45,6 +47,24 @@ public SmooveBikeRentalDataSource( networkName = config.getNetwork(DEFAULT_NETWORK_NAME); vehicleType = RentalVehicleType.getDefaultType(networkName); overloadingAllowed = config.overloadingAllowed(); + system = + new VehicleRentalSystem( + networkName, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ); } /** @@ -94,6 +114,7 @@ protected VehicleRentalStation parseElement(JsonNode node) { station.vehicleTypesAvailable = Map.of(vehicleType, station.vehiclesAvailable); station.vehicleSpacesAvailable = Map.of(vehicleType, station.spacesAvailable); station.overloadingAllowed = overloadingAllowed; + station.system = system; return station; } } From b9a0c82cb3e6929c94f172c98cfd4459ed47229e Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 5 Jul 2024 17:11:39 +0300 Subject: [PATCH 110/132] Add more required fields to smoove system --- .../ext/smoovebikerental/SmooveBikeRentalDataSource.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java b/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java index 1f287ad950b..b65c22b4727 100644 --- a/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java +++ b/src/ext/java/org/opentripplanner/ext/smoovebikerental/SmooveBikeRentalDataSource.java @@ -50,6 +50,8 @@ public SmooveBikeRentalDataSource( system = new VehicleRentalSystem( networkName, + "fi", + "Helsinki/Espoo", null, null, null, @@ -58,9 +60,7 @@ public SmooveBikeRentalDataSource( null, null, null, - null, - null, - null, + "Europe/Helsinki", null, null, null From 623b52d829b2baf7dcc9503d4211eedc00d6d703 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Fri, 5 Jul 2024 15:28:26 +0000 Subject: [PATCH 111/132] Add changelog entry for #5897 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index dd32b0a2548..ca97c053229 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -39,6 +39,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Make new debug client the default, move old one to `classic-debug` [#5924](https://github.com/opentripplanner/OpenTripPlanner/pull/5924) - Require valid polygons for AreaStop [#5915](https://github.com/opentripplanner/OpenTripPlanner/pull/5915) - Fix NullPointerException in stop transfer priority cost vector generation [#5943](https://github.com/opentripplanner/OpenTripPlanner/pull/5943) +- Convert transferSlack configuration to duration [#5897](https://github.com/opentripplanner/OpenTripPlanner/pull/5897) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From bd2ecedc3524d0aa9e1960efe53ab41aa4afce68 Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Fri, 5 Jul 2024 15:28:50 +0000 Subject: [PATCH 112/132] Bump serialization version id for #5897 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cb738fee822..b177a1e1d41 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,7 @@ - 153 + 154 31.2 2.51.1 From 7f7bbeec4b7dd6fbff0571f2067ca35256041609 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 5 Jul 2024 18:04:11 +0000 Subject: [PATCH 113/132] fix(deps): update jackson.version to v2.17.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b177a1e1d41..c7700971d5a 100644 --- a/pom.xml +++ b/pom.xml @@ -60,7 +60,7 @@ 31.2 2.51.1 - 2.17.1 + 2.17.2 3.1.7 5.10.3 1.13.0 From de9640bcad387d52314665d97ac51d4fb529ca1c Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Sun, 7 Jul 2024 17:21:11 +0200 Subject: [PATCH 114/132] Use immutable set when purging expired data --- src/main/java/org/opentripplanner/model/TimetableSnapshot.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index 0b6655e2ec4..7ddeb6aaa77 100644 --- a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -354,7 +354,7 @@ public boolean purgeExpiredData(LocalDate serviceDate) { if (toKeepTimetables.isEmpty()) { it.remove(); } else { - timetables.put(pattern, toKeepTimetables); + timetables.put(pattern, ImmutableSortedSet.copyOfSorted(toKeepTimetables)); } } From c8f9bbadbf7aaa48f770d3d8bd4ddfca839fcabb Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 8 Jul 2024 10:25:33 +0200 Subject: [PATCH 115/132] Update src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java Co-authored-by: Joel Lappalainen --- .../vehiclerentalservicedirectory/api/NetworkParameters.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java index c99c6893618..849f56c0c0c 100644 --- a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java +++ b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java @@ -6,7 +6,7 @@ * Parameters for a specific network. *

* The {@link GbfsVehicleRentalDataSourceParameters} supports {@code overloadingAllowed} - * which is not included here since they are not part of + * which is not included here since it is not part of * the GBFS specification. If there is a demand for it, it can be added. *

* @param network The network name From 87bda743e4f1672417b0b09ff6a4bc65292bcb21 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Mon, 8 Jul 2024 11:38:18 +0300 Subject: [PATCH 116/132] Improve documentation and make list items non null --- .../resources/org/opentripplanner/apis/gtfs/schema.graphqls | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls index 6de46739182..2c545648e00 100644 --- a/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls +++ b/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls @@ -1183,8 +1183,8 @@ type QueryType { nearest places related to bicycling. """ filterByModes: [Mode], - "Only include vehicle rental networks that match one of the given network names." - filterByNetwork: [String], + "Only include vehicle rental networks that match one of the given network ids." + filterByNetwork: [String!], "Only return places that are one of these types, e.g. `STOP` or `VEHICLE_RENT`" filterByPlaceTypes: [FilterPlaceType], first: Int, From d1d8235731a76b213c1bb419066b344552243bfa Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 8 Jul 2024 11:02:38 +0200 Subject: [PATCH 117/132] Flesh out documentation a bit more --- docs/sandbox/VehicleRentalServiceDirectory.md | 46 ++++++++++++++----- .../api/NetworkParameters.java | 3 ++ ...leRentalServiceDirectoryFetcherConfig.java | 13 +++++- 3 files changed, 49 insertions(+), 13 deletions(-) diff --git a/docs/sandbox/VehicleRentalServiceDirectory.md b/docs/sandbox/VehicleRentalServiceDirectory.md index feb5cb91ecb..140dab5ecc5 100644 --- a/docs/sandbox/VehicleRentalServiceDirectory.md +++ b/docs/sandbox/VehicleRentalServiceDirectory.md @@ -30,18 +30,18 @@ the `router-config.json` -| Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | -|-----------------------------------------------------|:---------------:|---------------------------------------------------------------------------------|:----------:|---------------|:-----:| -| language | `string` | Language code. | *Optional* | | 2.1 | -| sourcesName | `string` | Json tag name for updater sources. | *Optional* | `"systems"` | 2.1 | -| updaterNetworkName | `string` | Json tag name for the network name for each source. | *Optional* | `"id"` | 2.1 | -| updaterUrlName | `string` | Json tag name for endpoint urls for each source. | *Optional* | `"url"` | 2.1 | -| url | `uri` | Endpoint for the VehicleRentalServiceDirectory | *Required* | | 2.1 | -| [headers](#vehicleRentalServiceDirectory_headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.1 | -| [networks](#vehicleRentalServiceDirectory_networks) | `object[]` | List all networks to include. Use "network": "default-network" to set defaults. | *Optional* | | 2.4 | -|       allowKeepingVehicleAtDestination | `boolean` | Enables `allowKeepingVehicleAtDestination` for the given network | *Optional* | `false` | 2.5 | -|       geofencingZones | `boolean` | Enables geofencingZones for the given network | *Optional* | `false` | 2.4 | -|       network | `string` | The network name | *Required* | | 2.4 | +| Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | +|----------------------------------------------------------------------------------------------------------------------|:---------------:|---------------------------------------------------------------------------------|:----------:|---------------|:-----:| +| language | `string` | Language code. | *Optional* | | 2.1 | +| sourcesName | `string` | Json tag name for updater sources. | *Optional* | `"systems"` | 2.1 | +| updaterNetworkName | `string` | Json tag name for the network name for each source. | *Optional* | `"id"` | 2.1 | +| updaterUrlName | `string` | Json tag name for endpoint urls for each source. | *Optional* | `"url"` | 2.1 | +| url | `uri` | Endpoint for the VehicleRentalServiceDirectory | *Required* | | 2.1 | +| [headers](#vehicleRentalServiceDirectory_headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.1 | +| [networks](#vehicleRentalServiceDirectory_networks) | `object[]` | List all networks to include. Use "network": "default-network" to set defaults. | *Optional* | | 2.4 | +|       [allowKeepingVehicleAtDestination](#vehicleRentalServiceDirectory_networks_0_allowKeepingVehicleAtDestination) | `boolean` | Enables `allowKeepingVehicleAtDestination` for the given network. | *Optional* | `false` | 2.5 | +|       [geofencingZones](#vehicleRentalServiceDirectory_networks_0_geofencingZones) | `boolean` | Enables geofencingZones for the given network | *Optional* | `false` | 2.4 | +|       network | `string` | The network name | *Required* | | 2.4 | @@ -71,6 +71,28 @@ networks are dropped. Note! The values in the "default-network" are not used to missing field values in networks listed. +

allowKeepingVehicleAtDestination

+ +**Since version:** `2.5` ∙ **Type:** `boolean` ∙ **Cardinality:** `Optional` ∙ **Default value:** `false` +**Path:** /vehicleRentalServiceDirectory/networks/[0] + +Enables `allowKeepingVehicleAtDestination` for the given network. + +Configures if a vehicle rented from a station must be returned to another one or can +be kept at the end of the trip. + +See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information. + + +

geofencingZones

+ +**Since version:** `2.4` ∙ **Type:** `boolean` ∙ **Cardinality:** `Optional` ∙ **Default value:** `false` +**Path:** /vehicleRentalServiceDirectory/networks/[0] + +Enables geofencingZones for the given network + +See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information. + diff --git a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java index 849f56c0c0c..0c529cd48ae 100644 --- a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java +++ b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java @@ -11,6 +11,9 @@ *

* @param network The network name * @param geofencingZones enable geofencingZones for the given network + * @param allowKeepingAtDestination if a vehicle that was picked up from a station must be returned + * to another one or can be kept at the destination. + * {@link org.opentripplanner.standalone.config.routerconfig.updaters.sources.VehicleRentalSourceFactory#allOwKeepingRentedVehicleAtDestination()} */ public record NetworkParameters( String network, diff --git a/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java b/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java index 3a7da95bfec..811915f3061 100644 --- a/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java @@ -80,11 +80,22 @@ private static List mapNetworkParameters( .of("geofencingZones") .since(V2_4) .summary("Enables geofencingZones for the given network") + .description( + "See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information." + ) .asBoolean(false), c .of("allowKeepingVehicleAtDestination") .since(V2_5) - .summary("Enables `allowKeepingVehicleAtDestination` for the given network") + .summary("Enables `allowKeepingVehicleAtDestination` for the given network.") + .description( + """ + Configures if a vehicle rented from a station must be returned to another one or can + be kept at the end of the trip. + + See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information. + """ + ) .asBoolean(false) ) ); From 9a2b8de10e1831f5552039549fbfa7ae960d2a92 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 8 Jul 2024 11:07:56 +0200 Subject: [PATCH 118/132] Remove unused method --- .../api/NetworkParameters.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java index 0c529cd48ae..c8b638edae3 100644 --- a/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java +++ b/src/ext/java/org/opentripplanner/ext/vehiclerentalservicedirectory/api/NetworkParameters.java @@ -19,8 +19,4 @@ public record NetworkParameters( String network, boolean geofencingZones, boolean allowKeepingAtDestination -) { - public NetworkParameters withName(String network) { - return new NetworkParameters(network, geofencingZones, allowKeepingAtDestination); - } -} +) {} From d083bfd57dfbee377a74dca7a91031ebb6feb185 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 8 Jul 2024 11:36:29 +0200 Subject: [PATCH 119/132] Update docs --- doc-templates/sandbox/VehicleRentalServiceDirectory.md | 10 +++++----- docs/sandbox/VehicleRentalServiceDirectory.md | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/doc-templates/sandbox/VehicleRentalServiceDirectory.md b/doc-templates/sandbox/VehicleRentalServiceDirectory.md index d550fe27dc2..787a17e90e4 100644 --- a/doc-templates/sandbox/VehicleRentalServiceDirectory.md +++ b/doc-templates/sandbox/VehicleRentalServiceDirectory.md @@ -1,10 +1,10 @@ # Vehicle Rental Service Directory API support -This adds support for the GBFS service directory endpoint component located at -https://github.com/entur/lamassu. OTP uses the service directory to lookup and connect to all GBFS -endpoints registered in the directory. This simplifies the management of the GBFS endpoints, since -multiple services/components like OTP can connect to the directory and get the necessary -configuration from it. +This adds support for the GBFS service directory endpoint component +[Lamassu](https://github.com/entur/lamassu). +OTP uses the service directory to lookup and connects to all GBFS endpoints registered in the +directory. This simplifies the management of the GBFS endpoints, since multiple services/components +like OTP can connect to the directory and get the necessary configuration from it. ## Contact Info diff --git a/docs/sandbox/VehicleRentalServiceDirectory.md b/docs/sandbox/VehicleRentalServiceDirectory.md index 140dab5ecc5..fc9aed8b379 100644 --- a/docs/sandbox/VehicleRentalServiceDirectory.md +++ b/docs/sandbox/VehicleRentalServiceDirectory.md @@ -1,10 +1,10 @@ # Vehicle Rental Service Directory API support -This adds support for the GBFS service directory endpoint component located at -https://github.com/entur/lamassu. OTP uses the service directory to lookup and connect to all GBFS -endpoints registered in the directory. This simplifies the management of the GBFS endpoints, since -multiple services/components like OTP can connect to the directory and get the necessary -configuration from it. +This adds support for the GBFS service directory endpoint component +[Lamassu](https://github.com/entur/lamassu). +OTP uses the service directory to lookup and connects to all GBFS endpoints registered in the +directory. This simplifies the management of the GBFS endpoints, since multiple services/components +like OTP can connect to the directory and get the necessary configuration from it. ## Contact Info From 95544871de507dedb6a4c0b12224cca82a5af2f5 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Mon, 8 Jul 2024 09:42:34 +0000 Subject: [PATCH 120/132] Add changelog entry for #5942 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index ca97c053229..5712915216c 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -40,6 +40,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Require valid polygons for AreaStop [#5915](https://github.com/opentripplanner/OpenTripPlanner/pull/5915) - Fix NullPointerException in stop transfer priority cost vector generation [#5943](https://github.com/opentripplanner/OpenTripPlanner/pull/5943) - Convert transferSlack configuration to duration [#5897](https://github.com/opentripplanner/OpenTripPlanner/pull/5897) +- Expose stop transfer priority in Transmodel API [#5942](https://github.com/opentripplanner/OpenTripPlanner/pull/5942) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From b6d4aeb5689db55d99817986f158ca840e55cac5 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 8 Jul 2024 12:49:31 +0200 Subject: [PATCH 121/132] Use hyphenated anchors --- docs/sandbox/VehicleRentalServiceDirectory.md | 4 ++-- .../sandbox/VehicleRentalServiceDirectoryFetcherConfig.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/sandbox/VehicleRentalServiceDirectory.md b/docs/sandbox/VehicleRentalServiceDirectory.md index fc9aed8b379..1be5418e155 100644 --- a/docs/sandbox/VehicleRentalServiceDirectory.md +++ b/docs/sandbox/VehicleRentalServiceDirectory.md @@ -81,7 +81,7 @@ Enables `allowKeepingVehicleAtDestination` for the given network. Configures if a vehicle rented from a station must be returned to another one or can be kept at the end of the trip. -See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information. +See the regular [GBFS documentation](../UpdaterConfig.md#gbfs-vehicle-rental-systems) for more information.

geofencingZones

@@ -91,7 +91,7 @@ See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental sys Enables geofencingZones for the given network -See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information. +See the regular [GBFS documentation](../UpdaterConfig.md#gbfs-vehicle-rental-systems) for more information. diff --git a/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java b/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java index 811915f3061..f8ed1184c04 100644 --- a/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/sandbox/VehicleRentalServiceDirectoryFetcherConfig.java @@ -81,7 +81,7 @@ private static List mapNetworkParameters( .since(V2_4) .summary("Enables geofencingZones for the given network") .description( - "See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information." + "See the regular [GBFS documentation](../UpdaterConfig.md#gbfs-vehicle-rental-systems) for more information." ) .asBoolean(false), c @@ -93,7 +93,7 @@ private static List mapNetworkParameters( Configures if a vehicle rented from a station must be returned to another one or can be kept at the end of the trip. - See the regular [GBFS documentation](../UpdaterConfig.md#GBFS vehicle rental systems) for more information. + See the regular [GBFS documentation](../UpdaterConfig.md#gbfs-vehicle-rental-systems) for more information. """ ) .asBoolean(false) From b06433000a7b05265519d7e40b181f540c3445d4 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Mon, 8 Jul 2024 18:57:52 +0000 Subject: [PATCH 122/132] Add changelog entry for #5909 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 5712915216c..38fb046f344 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -41,6 +41,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Fix NullPointerException in stop transfer priority cost vector generation [#5943](https://github.com/opentripplanner/OpenTripPlanner/pull/5943) - Convert transferSlack configuration to duration [#5897](https://github.com/opentripplanner/OpenTripPlanner/pull/5897) - Expose stop transfer priority in Transmodel API [#5942](https://github.com/opentripplanner/OpenTripPlanner/pull/5942) +- Add rental system to GraphQL API [#5909](https://github.com/opentripplanner/OpenTripPlanner/pull/5909) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From 0579e22f62266975b73fc9f46c183ec5e7a4abe9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 07:42:48 +0000 Subject: [PATCH 123/132] Update micrometer.version to v1.13.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b177a1e1d41..8ecd21a9a75 100644 --- a/pom.xml +++ b/pom.xml @@ -63,7 +63,7 @@ 2.17.1 3.1.7 5.10.3 - 1.13.0 + 1.13.2 5.5.3 1.5.6 9.11.1 From 0a34d24d26001ff34220930b9e37c9b9fbbcc4a2 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 9 Jul 2024 10:42:05 +0200 Subject: [PATCH 124/132] Increase container image pruning to 365 days [ci skip] --- .github/workflows/prune-container-images.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prune-container-images.yml b/.github/workflows/prune-container-images.yml index f3987a064a9..c1653701c3b 100644 --- a/.github/workflows/prune-container-images.yml +++ b/.github/workflows/prune-container-images.yml @@ -19,4 +19,4 @@ jobs: # remove all snapshot container images that have not been pulled for over a year # --keep-semver makes sure that any image with a x.y.z version scheme is unaffected by this pip install prune-container-repo==0.0.4 - prune-container-repo -u ${CONTAINER_REGISTRY_USER} -r ${CONTAINER_REPO} --days=90 --keep-semver --activate + prune-container-repo -u ${CONTAINER_REGISTRY_USER} -r ${CONTAINER_REPO} --days=365 --keep-semver --activate From 203db5de5b894605fb9447656daf40c1b86c8a6f Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Tue, 9 Jul 2024 09:09:56 +0000 Subject: [PATCH 125/132] Add changelog entry for #5931 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 38fb046f344..6dd08114790 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -42,6 +42,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Convert transferSlack configuration to duration [#5897](https://github.com/opentripplanner/OpenTripPlanner/pull/5897) - Expose stop transfer priority in Transmodel API [#5942](https://github.com/opentripplanner/OpenTripPlanner/pull/5942) - Add rental system to GraphQL API [#5909](https://github.com/opentripplanner/OpenTripPlanner/pull/5909) +- Improve handling of SIRI added trip with unresolvable agency [#5931](https://github.com/opentripplanner/OpenTripPlanner/pull/5931) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From d283fdf25de92f4a792e62b162269e1717821ff0 Mon Sep 17 00:00:00 2001 From: Vincent Paturet Date: Wed, 10 Jul 2024 08:47:50 +0200 Subject: [PATCH 126/132] Inline isDirty variable --- src/main/java/org/opentripplanner/model/TimetableSnapshot.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java index 7ddeb6aaa77..7c660a11391 100644 --- a/src/main/java/org/opentripplanner/model/TimetableSnapshot.java +++ b/src/main/java/org/opentripplanner/model/TimetableSnapshot.java @@ -314,8 +314,7 @@ public boolean revertTripToScheduledTripPattern(FeedScopedId tripId, LocalDate s if (tripTimesToRemove != null) { for (Timetable originalTimetable : sortedTimetables) { - boolean isDirty = originalTimetable.getTripTimes().contains(tripTimesToRemove); - if (isDirty) { + if (originalTimetable.getTripTimes().contains(tripTimesToRemove)) { Timetable updatedTimetable = copyTimetable(pattern, serviceDate, originalTimetable); updatedTimetable.getTripTimes().remove(tripTimesToRemove); } From 07bdb99d5bf18d352047662abee623a62eb23ba1 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 10 Jul 2024 14:39:24 +0200 Subject: [PATCH 127/132] Fix typo --- .../openstreetmap/wayproperty/SafetyFeatures.java | 2 +- .../java/org/opentripplanner/generate/doc/OsmMapperDocTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java index 37669984405..ab68fd978c2 100644 --- a/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java +++ b/src/main/java/org/opentripplanner/openstreetmap/wayproperty/SafetyFeatures.java @@ -16,7 +16,7 @@ public boolean modifies() { /** * Does forward and back have the same value? */ - public boolean isSymetric() { + public boolean isSymmetric() { return forward == back; } } diff --git a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java index 443b01fbeb0..3090c696e37 100644 --- a/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java +++ b/src/test/java/org/opentripplanner/generate/doc/OsmMapperDocTest.java @@ -105,7 +105,7 @@ private static Table mixinTable(WayPropertySet wps) { private static String tableValues(SafetyFeatures safety) { if (!safety.modifies()) { return ""; - } else if (safety.isSymetric()) { + } else if (safety.isSymmetric()) { return Double.toString(safety.forward()); } else { return "forward: %s
back: %s".formatted(safety.forward(), safety.back()); From 6dfc0be1356a29200a2fc85ff746dc36a92495b0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 10 Jul 2024 22:15:16 +0000 Subject: [PATCH 128/132] chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.3.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3991bd1936c..cb331acccd5 100644 --- a/pom.xml +++ b/pom.xml @@ -242,7 +242,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.3.0 + 3.3.1 me.fabriciorby From 31af1035e22d89b47490ff4a9559c6df050d5b57 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 11 Jul 2024 09:05:42 +0000 Subject: [PATCH 129/132] Add changelog entry for #5941 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 6dd08114790..6ddc5fc5ad9 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -43,6 +43,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Expose stop transfer priority in Transmodel API [#5942](https://github.com/opentripplanner/OpenTripPlanner/pull/5942) - Add rental system to GraphQL API [#5909](https://github.com/opentripplanner/OpenTripPlanner/pull/5909) - Improve handling of SIRI added trip with unresolvable agency [#5931](https://github.com/opentripplanner/OpenTripPlanner/pull/5931) +- Fix copy-on-write in TimetableSnapshot [#5941](https://github.com/opentripplanner/OpenTripPlanner/pull/5941) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From 962d128f8940d9b1326289c13f4c3f724e9232c0 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 11 Jul 2024 10:59:53 +0000 Subject: [PATCH 130/132] Add changelog entry for #5929 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 6ddc5fc5ad9..cb9b91dcb8c 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -44,6 +44,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Add rental system to GraphQL API [#5909](https://github.com/opentripplanner/OpenTripPlanner/pull/5909) - Improve handling of SIRI added trip with unresolvable agency [#5931](https://github.com/opentripplanner/OpenTripPlanner/pull/5931) - Fix copy-on-write in TimetableSnapshot [#5941](https://github.com/opentripplanner/OpenTripPlanner/pull/5941) +- Generate documentation for OSM tag mappers [#5929](https://github.com/opentripplanner/OpenTripPlanner/pull/5929) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From 2a397c7b2ae36dd450e7ddd2d8d228d615ca133d Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 11 Jul 2024 11:08:26 +0000 Subject: [PATCH 131/132] Add changelog entry for #5948 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index cb9b91dcb8c..6d84b377de7 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -45,6 +45,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Improve handling of SIRI added trip with unresolvable agency [#5931](https://github.com/opentripplanner/OpenTripPlanner/pull/5931) - Fix copy-on-write in TimetableSnapshot [#5941](https://github.com/opentripplanner/OpenTripPlanner/pull/5941) - Generate documentation for OSM tag mappers [#5929](https://github.com/opentripplanner/OpenTripPlanner/pull/5929) +- Disable Legacy REST API by default [#5948](https://github.com/opentripplanner/OpenTripPlanner/pull/5948) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.5.0 (2024-03-13) From 6d9ff333beed9ab229d382fe6bff324c0623946c Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 11 Jul 2024 14:00:16 +0200 Subject: [PATCH 132/132] Update documentation on REST API [ci skip] --- docs/apis/Apis.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/apis/Apis.md b/docs/apis/Apis.md index ab6b41a25cd..9e8f31f6eeb 100644 --- a/docs/apis/Apis.md +++ b/docs/apis/Apis.md @@ -25,5 +25,5 @@ The [Geocoder API](../sandbox/GeocoderAPI.md) allows you to geocode stop names a The OTP REST API used to power many apps and frontends. For years it was the only way to access OTP programmatically. -Over time it has been replaced by the GraphQL APIs and is scheduled to be disabled by default -and eventually removed completely. It's therefore not recommended to use it. +Over time it has been replaced by the GraphQL APIs and is now disabled by default +and will eventually be removed completely. It's therefore not recommended to use it.