From 6186451c845dc4e29b70963d2edb5694c2038f3f Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Thu, 21 Nov 2024 19:14:22 +0100 Subject: [PATCH 01/21] Split the shaded jar out of application --- application/pom.xml | 81 +------------------------- pom.xml | 3 + raptor/pom.xml | 2 +- shaded-jar/pom.xml | 134 ++++++++++++++++++++++++++++++++++++++++++++ utils/pom.xml | 2 +- 5 files changed, 142 insertions(+), 80 deletions(-) create mode 100644 shaded-jar/pom.xml diff --git a/application/pom.xml b/application/pom.xml index 3fc0193d0af..4b11f1f6527 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -8,7 +8,7 @@ otp-root 2.7.0-SNAPSHOT - otp + application OpenTripPlanner - Application @@ -20,12 +20,12 @@ ${project.groupId} - otp-utils + utils ${project.version} ${project.groupId} - otp-raptor + raptor ${project.version} @@ -456,81 +456,6 @@ - - - - org.apache.maven.plugins - maven-shade-plugin - 3.6.0 - - - package - - shade - - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - true - shaded - false - - - - - - - org.opentripplanner.standalone.OTPMain - - Java Advanced Imaging Image I/O - Tools - - 1.1 - Sun Microsystems, Inc. - com.sun.media.imageio - 1.1 - Sun Microsystems, Inc. - com.sun.media.imageio - - - - - - - com.github.bohnman package-info-maven-plugin diff --git a/pom.xml b/pom.xml index b520f3cad63..346dadf50c9 100644 --- a/pom.xml +++ b/pom.xml @@ -98,6 +98,7 @@ gtfs-realtime-protobuf utils raptor + shaded-jar @@ -131,6 +132,7 @@ ${otp.serialization.version.id} + true @@ -143,6 +145,7 @@ ${basedir}/doc/javadoc javadoc + true diff --git a/raptor/pom.xml b/raptor/pom.xml index d2d93e36f9d..b0bb86317e1 100644 --- a/raptor/pom.xml +++ b/raptor/pom.xml @@ -9,7 +9,7 @@ 2.7.0-SNAPSHOT - otp-raptor + raptor OpenTripPlanner - Raptor diff --git a/shaded-jar/pom.xml b/shaded-jar/pom.xml new file mode 100644 index 00000000000..fbea5d99fca --- /dev/null +++ b/shaded-jar/pom.xml @@ -0,0 +1,134 @@ + + + 4.0.0 + + org.opentripplanner + otp-root + 2.7.0-SNAPSHOT + + shaded-jar + pom + OpenTripPlanner - Shaded Jar + + + skip + + + + + + ${project.groupId} + application + ${project.version} + + + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.6.0 + + + ${build.directory}/otp-${project.version}-shaded.jar + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + true + + false + + + + + + + org.opentripplanner.standalone.OTPMain + + Java Advanced Imaging Image I/O + Tools + + 1.1 + Sun Microsystems, Inc. + com.sun.media.imageio + 1.1 + Sun Microsystems, Inc. + + com.sun.media.imageio + + + + + + + + + + shaded-jar + + + + org.apache.maven.plugins + maven-shade-plugin + + + install + + shade + + + + + + + + + diff --git a/utils/pom.xml b/utils/pom.xml index 7a223488dd0..2e70554a678 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -9,7 +9,7 @@ 2.7.0-SNAPSHOT - otp-utils + utils OpenTripPlanner - Utils From 8f66e1a0c4bd3c5aad1934493b56b671393cdd40 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 26 Nov 2024 13:22:54 +0100 Subject: [PATCH 02/21] refactor: Use ${project.build.directory} not ${build.directory} inMaven POM --- shaded-jar/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shaded-jar/pom.xml b/shaded-jar/pom.xml index fbea5d99fca..beb88b5d08a 100644 --- a/shaded-jar/pom.xml +++ b/shaded-jar/pom.xml @@ -59,7 +59,7 @@ "otp-SNAPSHOT-shaded.pom". Changing the packaging of the project is not what we want either. --> - ${build.directory}/otp-${project.version}-shaded.jar + ${project.build.directory}/otp-${project.version}-shaded.jar From 51faf2c23efcca1ed8711b887c18c4df409a3e77 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 26 Nov 2024 15:07:42 +0100 Subject: [PATCH 03/21] refactor: Fix the raptor dependency on otp utils. --- pom.xml | 5 ++--- raptor/pom.xml | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 346dadf50c9..72c80bfc662 100644 --- a/pom.xml +++ b/pom.xml @@ -94,10 +94,10 @@ - application - gtfs-realtime-protobuf utils raptor + gtfs-realtime-protobuf + application shaded-jar @@ -132,7 +132,6 @@ ${otp.serialization.version.id} - true diff --git a/raptor/pom.xml b/raptor/pom.xml index b0bb86317e1..faf38e5f6b3 100644 --- a/raptor/pom.xml +++ b/raptor/pom.xml @@ -17,7 +17,7 @@ ${project.groupId} - otp-utils + utils ${project.version} From f6e71491b53f78a843de8addae0a450fc59e1dde Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 26 Nov 2024 16:15:40 +0100 Subject: [PATCH 04/21] refactor: Enable shade-jar by default, skip with '-DskipShadeJar' --- pom.xml | 10 ++++++++++ shaded-jar/pom.xml | 30 ++++++++---------------------- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/pom.xml b/pom.xml index 72c80bfc662..97fcdc3b52f 100644 --- a/pom.xml +++ b/pom.xml @@ -101,7 +101,17 @@ shaded-jar + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.6.0 + + + org.apache.maven.plugins diff --git a/shaded-jar/pom.xml b/shaded-jar/pom.xml index beb88b5d08a..5709ef8245f 100644 --- a/shaded-jar/pom.xml +++ b/shaded-jar/pom.xml @@ -14,6 +14,7 @@ skip + false @@ -48,7 +49,6 @@ properly if some input files are missing a terminating newline) --> org.apache.maven.plugins maven-shade-plugin - 3.6.0 true @@ -107,28 +108,13 @@ + + + build-shaded-jar + shade + + - - - shaded-jar - - - - org.apache.maven.plugins - maven-shade-plugin - - - install - - shade - - - - - - - - From 7df8f99371d16c45229285cc9697bd67bb8db6c0 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 26 Nov 2024 20:50:31 +0100 Subject: [PATCH 05/21] Analysis and design documentation --- DEVELOPMENT_DECISION_RECORDS.md | 6 +++ doc/dev/decisionrecords/AnalysesAndDesign.md | 51 ++++++++++++++++++++ doc/dev/images/DomainModelNotation.svg | 4 ++ 3 files changed, 61 insertions(+) create mode 100644 doc/dev/decisionrecords/AnalysesAndDesign.md create mode 100644 doc/dev/images/DomainModelNotation.svg diff --git a/DEVELOPMENT_DECISION_RECORDS.md b/DEVELOPMENT_DECISION_RECORDS.md index 44aa031954f..2625be325e8 100644 --- a/DEVELOPMENT_DECISION_RECORDS.md +++ b/DEVELOPMENT_DECISION_RECORDS.md @@ -19,6 +19,12 @@ Use established terminology from GTFS, NeTEx or the existing OTP code. Make sure to read and understand. [Follow naming conventions](doc/dev/decisionrecords/NamingConventions.md#naming-conventions) . +## Do Analysis-and-design if needed + +Be prepared to provide [analyses and/or design documentation](doc/dev/decisionrecords/AnalysesAndDesign.md) +if a task is complex, changes the core model and/or the main APIs. + + ## Write-Code-Documentation - Use JavaDoc Document the business intention and decisions in the relevant code. Do not repeat the logic diff --git a/doc/dev/decisionrecords/AnalysesAndDesign.md b/doc/dev/decisionrecords/AnalysesAndDesign.md new file mode 100644 index 00000000000..dbfca09c693 --- /dev/null +++ b/doc/dev/decisionrecords/AnalysesAndDesign.md @@ -0,0 +1,51 @@ +# Analysis and design + +We want to get better at design, so we want some documentation up font for large changes. If a +problem is complex, changes the core OTP model, and/or the API significantly, then the developer +requesting a change should be prepared to provide some design documentation. + +The analysis should be started and at least mapped out in an issue. The design can be documented +in the issue or the PR. + + +## Analysis & Design + +A discussion in a developer meeting is usually a good point to start. + +- Ask what is expected? +- Diagrams beat words in most cases, and help focus on the problem - not implementation details. + + +### Artifacts + +We usually do not require a long list of requirements and analyses documentation. But these +artifacts may help, none of these are required. Ask in the developer meeting what to expect. + + - [ ] Summarise the discussion in the developer meeting in the issue or PR. + - [ ] List use-cases, one sentence per use-case is often enough. + - [ ] In/out matrix, list features you are NOT planning to implement. + - [ ] Draw diagrams + - [ ] **Domain model** — If the core model or APIs are significantly changed + - [ ] State diagram + - [ ] Collaboration diagram + + +## Domain model + +A domain model focus on the language and the relationships. All implementation details can be left +out. Details witch is not relevant for the problem you are solving can also be left out, focus on +the elements witch helps understand the problem. Use plain english and not tech to describe +the model. For example, only listing the field name, and not the type is ok if the type is obvious. + +Notation is not important, but try to follow the UML syntax below. You may use more advanced UML +syntax if you want, but keep in mind that you should be able to use the diagram to discuss the +problem with a none developer. A product-owner or other person who knows the domain should with +a little help be able to understand the main parts of the drawing. + +When doing review, focus on the domain problem, not syntax — ask about things you do not understand. + + +### Domain model - notation cheat sheet + +![Domain Model Notation](../images/DomainModelNotation.svg) + diff --git a/doc/dev/images/DomainModelNotation.svg b/doc/dev/images/DomainModelNotation.svg new file mode 100644 index 00000000000..836363f4372 --- /dev/null +++ b/doc/dev/images/DomainModelNotation.svg @@ -0,0 +1,4 @@ + + + +ServicecanceledTrips(...) : TripOnDateEntityfield : basic type / scalarA<<interface>>Baseid : IDEvent/Moment/IntervalValueObjectvalue : String
Colors
Colors
Types
Types
objectName : Type/Class<<interface>>Interface/abstract class
Relationship
Relation...
Afield : basic type / scalarB
b
b
?
?
AB
b
b
B
Inheritance
Inherita...
<< use >>
<< use >>
AB
Dependency
Dependen...
[ Bike only ]
[ Bike only ]
Amode : Mode[ GTFS only ]B
Constraint
Constrai...
  • We usually provide a class name only, but you can provide an object name and/or class. 
  • If something is an abstract class or an interface is a implementation detail. Use the <<interface>>` qualifier to tag interfaces.
We usually provide a class name only, but you can...
  • Relationship can be one way (arrow) or both-ways (no arrows).
  • Naming the relationship is optional.
  • Default cardinality is 1. Other values:
    • ? - optional
    • * - many
    • 2 - exact two
    • 3..n - three or more
  • A simple relationship is included as a field. A good indication when to use a field and not an arrow is when the type is a basic type(int, float, boolean, String), enumeration or ValueObject. PS! It is not wrong to use either, both forms are equivalent
Relationship can be one way (arrow) or both-ways (...
2..n
2..n
*
*
AB
a
a
b
b
  • If you are in doubt model things as relationships, do not use inheritance.
  • Interfaces exist:
    • if there is a reference to it - the named interface play a role.
    • if at least one shared operation/field/relationship exist.  
If you are in doubt model things as relationships,...
  • We draw dependencies when they are important and not part of a relationship. For example if we want to map out the details of a ValueObject.
  • The qualifier text << use >> is optonal.
We draw dependencies when they are important and n...
  • Use "[]" to add a constraint.
  • A constraint can be added to all arrows and types.
  • Be careful with constraints, they add a lot of noice to the diagram. It is sometimes better to just list tem in text.
Use "[]" to add a constraint.A constraint can be a...
A has a field b of type B.
A has a field b of type B.
A has a 2 or more b's of type B. B has many a's of type A.
A has a 2 or more b's of type B. B has many a's of type...
We use color for classify the a type by its life-cycle. A service is request or application scoped, an entity is sable - but may change, a ValueObject do not change, and a Event are temporary. A ValueObject can not reference a Entity, an Entity can not reference a Service and always pay close attention to the design of Events - they are hard to model.  
We use color for classify the a type by its life-cycle. A service is request or application scoped, an entity is sable - but may c...
A has a relationship b, if mode is Bike.
B only exist for GTFS imported elements.
A has a relationship b, if mode is Bike....
Text is not SVG - cannot display
\ No newline at end of file From bfea1bc154195e2cb2a06611dd01f9742e64752c Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 27 Nov 2024 10:56:18 +0100 Subject: [PATCH 06/21] Apply suggestions from code review Co-authored-by: Leonard Ehrenfried --- doc/dev/decisionrecords/AnalysesAndDesign.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/dev/decisionrecords/AnalysesAndDesign.md b/doc/dev/decisionrecords/AnalysesAndDesign.md index dbfca09c693..4658336812b 100644 --- a/doc/dev/decisionrecords/AnalysesAndDesign.md +++ b/doc/dev/decisionrecords/AnalysesAndDesign.md @@ -1,6 +1,6 @@ # Analysis and design -We want to get better at design, so we want some documentation up font for large changes. If a +We want to get better at design, so we want some documentation up front for large changes. If a problem is complex, changes the core OTP model, and/or the API significantly, then the developer requesting a change should be prepared to provide some design documentation. @@ -19,7 +19,7 @@ A discussion in a developer meeting is usually a good point to start. ### Artifacts We usually do not require a long list of requirements and analyses documentation. But these -artifacts may help, none of these are required. Ask in the developer meeting what to expect. +artifacts may help, but none of these are required. Ask in the developer meeting what to expect. - [ ] Summarise the discussion in the developer meeting in the issue or PR. - [ ] List use-cases, one sentence per use-case is often enough. @@ -32,14 +32,14 @@ artifacts may help, none of these are required. Ask in the developer meeting wha ## Domain model -A domain model focus on the language and the relationships. All implementation details can be left -out. Details witch is not relevant for the problem you are solving can also be left out, focus on +A domain model focusses on the language and the relationships. All implementation details can be left +out. Details which is not relevant for the problem you are solving can also be left out, focus on the elements witch helps understand the problem. Use plain english and not tech to describe the model. For example, only listing the field name, and not the type is ok if the type is obvious. Notation is not important, but try to follow the UML syntax below. You may use more advanced UML syntax if you want, but keep in mind that you should be able to use the diagram to discuss the -problem with a none developer. A product-owner or other person who knows the domain should with +problem with a non-developer. A product-owner or other person who knows the domain should with a little help be able to understand the main parts of the drawing. When doing review, focus on the domain problem, not syntax — ask about things you do not understand. From 307e5393e855d29f513ad28ec410fc53ead905b3 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 27 Nov 2024 11:26:27 +0100 Subject: [PATCH 07/21] doc: Add recommendation for drawing tool --- doc/dev/decisionrecords/AnalysesAndDesign.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/dev/decisionrecords/AnalysesAndDesign.md b/doc/dev/decisionrecords/AnalysesAndDesign.md index 4658336812b..b6c585ba71f 100644 --- a/doc/dev/decisionrecords/AnalysesAndDesign.md +++ b/doc/dev/decisionrecords/AnalysesAndDesign.md @@ -29,6 +29,9 @@ artifacts may help, but none of these are required. Ask in the developer meeting - [ ] State diagram - [ ] Collaboration diagram +We recommend using [draw.io](https://www.drawio.com/). It is free and available as an Intellij +plugin (Diagrams.net), web application and desktop application. + ## Domain model From 90068af8a875600964e8d5adde966fefb7118379 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 27 Nov 2024 11:26:42 +0100 Subject: [PATCH 08/21] doc: Fix broken links --- ARCHITECTURE.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index cf3efcd84a3..36ab454789a 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -55,7 +55,7 @@ Used to import NeTEx transit data files. ### Transit Routing -#### [Raptor transit routing](application/src/main/java/org/opentripplanner/raptor/package.md) +#### [Raptor transit routing](raptor/src/main/java/org/opentripplanner/raptor/package.md) This is the OTP2 new transit routing engine implemented using the Raptor algorithm. It explains how Raptor works, the important concepts and the design. It might be worth reading even if you are not a @@ -71,9 +71,9 @@ implementation is highly critical code, hence we set the bar higher with respect OTP provides transit data to Raptor by implementing the _raptor/spi_. The [RoutingService](application/src/main/java/org/opentripplanner/routing/service/DefaultRoutingService.java) is responsible for mapping from the OTP context to a -[RaptorRequest](application/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java) +[RaptorRequest](raptor/src/main/java/org/opentripplanner/raptor/api/request/RaptorRequest.java) and then map the -result, [Raptor Path](application/src/main/java/org/opentripplanner/raptor/api/path/RaptorPath.java), back to +result, [Raptor Path](raptor/src/main/java/org/opentripplanner/raptor/api/path/RaptorPath.java), back to the OTP internal domain. This might seem like a lot of unnecessary mapping, but mapping is simple - routing is not. From e1d3a22a4f9db80d27176a348a47ccacaeaeb05e Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 28 Nov 2024 10:57:42 +0100 Subject: [PATCH 09/21] Make ways with motorroad=yes car-only --- .../osm/tagmapping/FinlandMapper.java | 3 -- .../osm/tagmapping/OsmTagMapper.java | 4 +- .../osm/tagmapping/OsmTagMapperTest.java | 42 +++++++++++++------ doc/user/osm/Finland.md | 2 +- doc/user/osm/Germany.md | 1 + doc/user/osm/OsmTag.md | 1 + doc/user/osm/UK.md | 1 + 7 files changed, 36 insertions(+), 18 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/osm/tagmapping/FinlandMapper.java b/application/src/main/java/org/opentripplanner/osm/tagmapping/FinlandMapper.java index e9ac9478552..d9ddd1ede76 100644 --- a/application/src/main/java/org/opentripplanner/osm/tagmapping/FinlandMapper.java +++ b/application/src/main/java/org/opentripplanner/osm/tagmapping/FinlandMapper.java @@ -84,9 +84,6 @@ else if (speedLimit <= 16.65f) { // Don't recommend walking in trunk road tunnels props.setProperties("highway=trunk;tunnel=yes", withModes(CAR).bicycleSafety(7.47)); - // Do not walk on "moottoriliikennetie" - props.setProperties("motorroad=yes", withModes(CAR).bicycleSafety(7.47)); - // Remove informal and private roads props.setProperties("highway=*;informal=yes", withModes(NONE)); props.setProperties("highway=service;access=private", withModes(NONE)); diff --git a/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java b/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java index 2df3c22d6a9..60cd8d0ac74 100644 --- a/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java +++ b/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java @@ -14,7 +14,6 @@ import org.opentripplanner.osm.wayproperty.WayProperties; import org.opentripplanner.osm.wayproperty.WayPropertySet; import org.opentripplanner.osm.wayproperty.specifier.BestMatchSpecifier; -import org.opentripplanner.osm.wayproperty.specifier.Condition; import org.opentripplanner.osm.wayproperty.specifier.ExactMatchSpecifier; import org.opentripplanner.osm.wayproperty.specifier.LogicalOrSpecifier; import org.opentripplanner.routing.services.notes.StreetNotesService; @@ -104,6 +103,9 @@ public void populateProperties(WayPropertySet props) { props.setProperties("highway=trunk", withModes(CAR).bicycleSafety(7.47)); props.setProperties("highway=motorway", withModes(CAR).bicycleSafety(8)); + // Do not walk on "moottoriliikennetie"/"Kraftfahrstrasse" + props.setProperties(new ExactMatchSpecifier("motorroad=yes"), withModes(CAR)); + /* cycleway=lane */ props.setProperties( "highway=*;cycleway=lane", diff --git a/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java b/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java index b3ee57f9710..c5124fbd55a 100644 --- a/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java +++ b/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java @@ -3,15 +3,18 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.opentripplanner.street.model.StreetTraversalPermission.ALL; import static org.opentripplanner.street.model.StreetTraversalPermission.CAR; import org.junit.jupiter.api.Test; import org.opentripplanner.osm.model.OsmWithTags; +import org.opentripplanner.osm.wayproperty.WayPropertySet; +import org.opentripplanner.osm.wayproperty.specifier.WayTestData; -public class OsmTagMapperTest { +class OsmTagMapperTest { @Test - public void isMotorThroughTrafficExplicitlyDisallowed() { + void isMotorThroughTrafficExplicitlyDisallowed() { OsmWithTags o = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -34,7 +37,7 @@ public void isMotorThroughTrafficExplicitlyDisallowed() { } @Test - public void isBicycleThroughTrafficExplicitlyDisallowed() { + void isBicycleThroughTrafficExplicitlyDisallowed() { OsmTagMapper osmTagMapper = new OsmTagMapper(); assertTrue( osmTagMapper.isBicycleThroughTrafficExplicitlyDisallowed(way("bicycle", "destination")) @@ -45,14 +48,14 @@ public void isBicycleThroughTrafficExplicitlyDisallowed() { } @Test - public void isWalkThroughTrafficExplicitlyDisallowed() { + void isWalkThroughTrafficExplicitlyDisallowed() { OsmTagMapper osmTagMapper = new OsmTagMapper(); assertTrue(osmTagMapper.isWalkThroughTrafficExplicitlyDisallowed(way("foot", "destination"))); assertTrue(osmTagMapper.isWalkThroughTrafficExplicitlyDisallowed(way("access", "destination"))); } @Test - public void testAccessNo() { + void testAccessNo() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -64,7 +67,7 @@ public void testAccessNo() { } @Test - public void testAccessPrivate() { + void testAccessPrivate() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -76,7 +79,7 @@ public void testAccessPrivate() { } @Test - public void testFootModifier() { + void testFootModifier() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -89,7 +92,7 @@ public void testFootModifier() { } @Test - public void testVehicleDenied() { + void testVehicleDenied() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -101,7 +104,7 @@ public void testVehicleDenied() { } @Test - public void testVehicleDeniedMotorVehiclePermissive() { + void testVehicleDeniedMotorVehiclePermissive() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -114,7 +117,7 @@ public void testVehicleDeniedMotorVehiclePermissive() { } @Test - public void testVehicleDeniedBicyclePermissive() { + void testVehicleDeniedBicyclePermissive() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -127,7 +130,7 @@ public void testVehicleDeniedBicyclePermissive() { } @Test - public void testMotorcycleModifier() { + void testMotorcycleModifier() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -140,7 +143,7 @@ public void testMotorcycleModifier() { } @Test - public void testBicycleModifier() { + void testBicycleModifier() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -153,7 +156,7 @@ public void testBicycleModifier() { } @Test - public void testBicyclePermissive() { + void testBicyclePermissive() { OsmWithTags tags = new OsmWithTags(); OsmTagMapper osmTagMapper = new OsmTagMapper(); @@ -165,6 +168,19 @@ public void testBicyclePermissive() { assertTrue(osmTagMapper.isWalkThroughTrafficExplicitlyDisallowed(tags)); } + @Test + void motorroad() { + OsmTagMapper osmTagMapper = new OsmTagMapper(); + WayPropertySet wps = new WayPropertySet(); + osmTagMapper.populateProperties(wps); + + var way = WayTestData.carTunnel(); + assertEquals(ALL, wps.getDataForWay(way).getPermission()); + + way.addTag("motorroad","yes"); + assertEquals(CAR, wps.getDataForWay(way).getPermission()); + } + public OsmWithTags way(String key, String value) { var way = new OsmWithTags(); way.addTag(key, value); diff --git a/doc/user/osm/Finland.md b/doc/user/osm/Finland.md index 8a60b5f0b13..a5a0341bf94 100644 --- a/doc/user/osm/Finland.md +++ b/doc/user/osm/Finland.md @@ -41,7 +41,6 @@ Lower safety values make an OSM way more desirable and higher values less desira | `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` | | | @@ -105,6 +104,7 @@ Lower safety values make an OSM way more desirable and higher values less desira | `highway=motorway_link` | `CAR` | 2.06 | | | `highway=trunk` | `CAR` | 7.47 | | | `highway=motorway` | `CAR` | 8.0 | | +| `motorroad=yes` | `CAR` | | | | `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | | `highway=service; cycleway=lane` | `ALL` | 0.77 | | | `highway=residential; cycleway=lane` | `ALL` | 0.77 | | diff --git a/doc/user/osm/Germany.md b/doc/user/osm/Germany.md index 922aa3af836..ee9e3982362 100644 --- a/doc/user/osm/Germany.md +++ b/doc/user/osm/Germany.md @@ -70,6 +70,7 @@ Lower safety values make an OSM way more desirable and higher values less desira | `highway=motorway_link` | `CAR` | 2.06 | | | `highway=trunk` | `CAR` | 7.47 | | | `highway=motorway` | `CAR` | 8.0 | | +| `motorroad=yes` | `CAR` | | | | `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | | `highway=service; cycleway=lane` | `ALL` | 0.77 | | | `highway=residential; cycleway=lane` | `ALL` | 0.77 | | diff --git a/doc/user/osm/OsmTag.md b/doc/user/osm/OsmTag.md index 814420b791f..9456dbc9fa5 100644 --- a/doc/user/osm/OsmTag.md +++ b/doc/user/osm/OsmTag.md @@ -61,6 +61,7 @@ Lower safety values make an OSM way more desirable and higher values less desira | `highway=motorway_link` | `CAR` | 2.06 | | | `highway=trunk` | `CAR` | 7.47 | | | `highway=motorway` | `CAR` | 8.0 | | +| `motorroad=yes` | `CAR` | | | | `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | | `highway=service; cycleway=lane` | `ALL` | 0.77 | | | `highway=residential; cycleway=lane` | `ALL` | 0.77 | | diff --git a/doc/user/osm/UK.md b/doc/user/osm/UK.md index 34c4d1c1778..f9d8678fd3c 100644 --- a/doc/user/osm/UK.md +++ b/doc/user/osm/UK.md @@ -77,6 +77,7 @@ Lower safety values make an OSM way more desirable and higher values less desira | `highway=motorway_link` | `CAR` | 2.06 | | | `highway=trunk` | `CAR` | 7.47 | | | `highway=motorway` | `CAR` | 8.0 | | +| `motorroad=yes` | `CAR` | | | | `present(highway); cycleway=lane` | `PEDESTRIAN_AND_BICYCLE` | 0.87 | | | `highway=service; cycleway=lane` | `ALL` | 0.77 | | | `highway=residential; cycleway=lane` | `ALL` | 0.77 | | From 906819c304bbf1f8801e9cf72c2609326a0b5d89 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 28 Nov 2024 11:15:27 +0100 Subject: [PATCH 10/21] Add test in Finland --- .../osm/tagmapping/FinlandMapperTest.java | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/application/src/test/java/org/opentripplanner/osm/tagmapping/FinlandMapperTest.java b/application/src/test/java/org/opentripplanner/osm/tagmapping/FinlandMapperTest.java index f8b07e06bf6..84d9d0ca14e 100644 --- a/application/src/test/java/org/opentripplanner/osm/tagmapping/FinlandMapperTest.java +++ b/application/src/test/java/org/opentripplanner/osm/tagmapping/FinlandMapperTest.java @@ -2,6 +2,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.opentripplanner.street.model.StreetTraversalPermission.ALL; +import static org.opentripplanner.street.model.StreetTraversalPermission.CAR; import static org.opentripplanner.street.model.StreetTraversalPermission.NONE; import static org.opentripplanner.street.model.StreetTraversalPermission.PEDESTRIAN; import static org.opentripplanner.street.model.StreetTraversalPermission.PEDESTRIAN_AND_BICYCLE; @@ -12,15 +14,16 @@ import org.opentripplanner.osm.model.OsmWithTags; import org.opentripplanner.osm.wayproperty.WayProperties; import org.opentripplanner.osm.wayproperty.WayPropertySet; +import org.opentripplanner.osm.wayproperty.specifier.WayTestData; -public class FinlandMapperTest { +class FinlandMapperTest { private WayPropertySet wps; private OsmTagMapper mapper; static float epsilon = 0.01f; @BeforeEach - public void setup() { + void setup() { this.wps = new WayPropertySet(); this.mapper = new FinlandMapper(); this.mapper.populateProperties(this.wps); @@ -30,7 +33,7 @@ public void setup() { * Test that bike and walk safety factors are calculated accurately */ @Test - public void testSafety() { + void testSafety() { OsmWithTags primaryWay = new OsmWithTags(); primaryWay.addTag("highway", "primary"); primaryWay.addTag("oneway", "no"); @@ -141,7 +144,7 @@ public void testSafety() { } @Test - public void testSafetyWithMixins() { + void testSafetyWithMixins() { OsmWithTags wayWithMixins = new OsmWithTags(); // highway=service has no custom bicycle or walk safety wayWithMixins.addTag("highway", "unclassified"); @@ -179,7 +182,7 @@ public void testSafetyWithMixins() { } @Test - public void testTagMapping() { + void testTagMapping() { OsmWithTags way; WayProperties wayData; @@ -206,7 +209,7 @@ public void testTagMapping() { * Test that biking is not allowed in footway areas and transit platforms */ @Test - public void testArea() { + void testArea() { OsmWithTags way; WayProperties wayData; @@ -227,10 +230,21 @@ public void testArea() { } @Test - public void serviceNoThroughTraffic() { + void serviceNoThroughTraffic() { var way = new OsmWay(); way.addTag("highway", "residential"); way.addTag("service", "driveway"); assertTrue(mapper.isMotorVehicleThroughTrafficExplicitlyDisallowed(way)); } + + @Test + void motorroad() { + OsmTagMapper osmTagMapper = new FinlandMapper(); + WayPropertySet wps = new WayPropertySet(); + osmTagMapper.populateProperties(wps); + var way = WayTestData.carTunnel(); + assertEquals(ALL, wps.getDataForWay(way).getPermission()); + way.addTag("motorroad","yes"); + assertEquals(CAR, wps.getDataForWay(way).getPermission()); + } } From 66acd4546379c8b7c7d5a2a85228d84bc07f6cc6 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 28 Nov 2024 11:24:25 +0100 Subject: [PATCH 11/21] Add more test parameters --- .../osm/tagmapping/FinlandMapperTest.java | 2 +- .../osm/tagmapping/OsmTagMapperTest.java | 21 +++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/application/src/test/java/org/opentripplanner/osm/tagmapping/FinlandMapperTest.java b/application/src/test/java/org/opentripplanner/osm/tagmapping/FinlandMapperTest.java index 84d9d0ca14e..ecbd2eec3be 100644 --- a/application/src/test/java/org/opentripplanner/osm/tagmapping/FinlandMapperTest.java +++ b/application/src/test/java/org/opentripplanner/osm/tagmapping/FinlandMapperTest.java @@ -244,7 +244,7 @@ void motorroad() { osmTagMapper.populateProperties(wps); var way = WayTestData.carTunnel(); assertEquals(ALL, wps.getDataForWay(way).getPermission()); - way.addTag("motorroad","yes"); + way.addTag("motorroad", "yes"); assertEquals(CAR, wps.getDataForWay(way).getPermission()); } } diff --git a/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java b/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java index c5124fbd55a..5448f84294d 100644 --- a/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java +++ b/application/src/test/java/org/opentripplanner/osm/tagmapping/OsmTagMapperTest.java @@ -6,7 +6,10 @@ import static org.opentripplanner.street.model.StreetTraversalPermission.ALL; import static org.opentripplanner.street.model.StreetTraversalPermission.CAR; +import java.util.List; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.osm.model.OsmWithTags; import org.opentripplanner.osm.wayproperty.WayPropertySet; import org.opentripplanner.osm.wayproperty.specifier.WayTestData; @@ -168,16 +171,26 @@ void testBicyclePermissive() { assertTrue(osmTagMapper.isWalkThroughTrafficExplicitlyDisallowed(tags)); } - @Test - void motorroad() { + public static List roadCases() { + return List.of( + WayTestData.carTunnel(), + WayTestData.southwestMayoStreet(), + WayTestData.southeastLaBonitaWay(), + WayTestData.fiveLanes(), + WayTestData.highwayTertiary() + ); + } + + @ParameterizedTest + @MethodSource("roadCases") + void motorroad(OsmWithTags way) { OsmTagMapper osmTagMapper = new OsmTagMapper(); WayPropertySet wps = new WayPropertySet(); osmTagMapper.populateProperties(wps); - var way = WayTestData.carTunnel(); assertEquals(ALL, wps.getDataForWay(way).getPermission()); - way.addTag("motorroad","yes"); + way.addTag("motorroad", "yes"); assertEquals(CAR, wps.getDataForWay(way).getPermission()); } From ff8c23155d7adde12585837f6026054e5fbe2a04 Mon Sep 17 00:00:00 2001 From: Zsombor Welker Date: Tue, 3 Dec 2024 06:40:31 +0100 Subject: [PATCH 12/21] Remove CAR_PICKUP snapshot transfer test --- .../mapping/CarPickupSnapshotTest.java | 71 - .../__snapshots__/CarPickupSnapshotTest.snap | 3438 ----------------- 2 files changed, 3509 deletions(-) delete mode 100644 application/src/test/java/org/opentripplanner/routing/algorithm/mapping/CarPickupSnapshotTest.java delete mode 100644 application/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarPickupSnapshotTest.snap diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/CarPickupSnapshotTest.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/CarPickupSnapshotTest.java deleted file mode 100644 index c233d0c6bbc..00000000000 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/CarPickupSnapshotTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.opentripplanner.routing.algorithm.mapping; - -import au.com.origin.snapshots.junit5.SnapshotExtension; -import java.util.List; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.opentripplanner.model.GenericLocation; -import org.opentripplanner.model.modes.ExcludeAllTransitFilter; -import org.opentripplanner.routing.api.request.RouteRequest; -import org.opentripplanner.routing.api.request.StreetMode; -import org.opentripplanner.routing.api.request.request.filter.AllowAllTransitFilter; - -@ExtendWith(SnapshotExtension.class) -public class CarPickupSnapshotTest extends SnapshotTestBase { - - static GenericLocation p0 = new GenericLocation( - "SE Stark St. & SE 17th Ave. (P0)", - null, - 45.519320, - -122.648567 - ); - - static GenericLocation p1 = new GenericLocation( - "SE Morrison St. & SE 17th Ave. (P1)", - null, - 45.51726, - -122.64847 - ); - - static GenericLocation p2 = new GenericLocation( - "NW Northrup St. & NW 22nd Ave. (P2)", - null, - 45.53122, - -122.69659 - ); - - @BeforeAll - public static void beforeClass() { - loadGraphBeforeClass(false); - } - - @Test - public void test_trip_planning_with_car_pickup_only() { - RouteRequest request = createTestRequest(2009, 11, 17, 10, 0, 0); - - request.journey().direct().setMode(StreetMode.CAR_PICKUP); - request.journey().transit().setFilters(List.of(ExcludeAllTransitFilter.of())); - - request.setFrom(p0); - request.setTo(p2); - - expectRequestResponseToMatchSnapshot(request); - } - - @Test - public void test_trip_planning_with_car_pickup_transfer() { - RouteRequest request = createTestRequest(2009, 11, 17, 10, 0, 0); - - request.journey().access().setMode(StreetMode.WALK); - request.journey().egress().setMode(StreetMode.WALK); - request.journey().direct().setMode(StreetMode.WALK); - request.journey().transfer().setMode(StreetMode.CAR_PICKUP); - request.journey().transit().setFilters(List.of(AllowAllTransitFilter.of())); - - request.setFrom(p0); - request.setTo(p2); - - expectRequestResponseToMatchSnapshot(request); - } -} diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarPickupSnapshotTest.snap b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarPickupSnapshotTest.snap deleted file mode 100644 index a3a515f82b4..00000000000 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarPickupSnapshotTest.snap +++ /dev/null @@ -1,3438 +0,0 @@ -org.opentripplanner.routing.algorithm.mapping.CarPickupSnapshotTest.test_trip_planning_with_car_pickup_only=[ - [ - { - "arrivedAtDestinationWithRentedBicycle" : false, - "duration" : 634, - "elevationGained" : 0.0, - "elevationLost" : 0.0, - "endTime" : "2009-11-17T18:10:34.000+00:00", - "fare" : { - "details" : { }, - "fare" : { } - }, - "generalizedCost" : 1005, - "legs" : [ - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 5050.5, - "endTime" : "2009-11-17T18:10:34.000+00:00", - "from" : { - "departure" : "2009-11-17T18:00:00.000+00:00", - "lat" : 45.51932, - "lon" : -122.648567, - "name" : "SE Stark St. & SE 17th Ave. (P0)", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 1005, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 200, - "points" : "unytGpxqkVA??dACpB@P?f@?p@?j@?dAAhE?jE?vD?PK?aC?{BAS?mC??hE?nEAfE?hE?hEAnC?^?Z?pB?J?~@?J}B?O?OAo@?A?w@?U?S?iB?O??Z?xC?XAJ?P?R@H@FBFBFBDDDBBDBF@F?d@@H@D@FBFD@BBDBF@H@L?L?b@@RBTGpJCjEA|CArAAxAAxAAdBEzHClF?@Ax@GTAjBAZQ?qBBuA@Y@[@aCDM@K?aCBCV@pCDZ@|D@N@vD?L?F?JBbD?D?N?BK?uBBM?K?uBBI@K?aBBSAM@M@K?GBEDEHIJUX_@f@KNQRSVGFCBQPIHGDGBIBK@W@a@?mA@E?C@C@A?CBQTKJEHIJeC~CYZo@v@g@d@IJAFAD?L@vC@hB@p@?X?T@P?N@P@nA?j@AX?L@`B@dA?R?RBbD?T?NBbD?R?P@|D@jB?x@@J?N?B?P?LBjD@N@fD?T?LBdD?R?PF`K?RDlJ?R?PFlJ?J" - }, - "mode" : "CAR", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:00:00.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 0.69, - "elevation" : "", - "lat" : 45.51932, - "lon" : -122.6485648, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Southeast 17th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 395.42, - "elevation" : "", - "lat" : 45.5193262, - "lon" : -122.6485648, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Stark Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 238.05, - "elevation" : "", - "lat" : 45.5193421, - "lon" : -122.6536397, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Southeast 12th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 553.35, - "elevation" : "", - "lat" : 45.5214829, - "lon" : -122.6536226, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Ash Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 158.48, - "elevation" : "", - "lat" : 45.5215062, - "lon" : -122.6607251, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Southeast Grand Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 78.88, - "elevation" : "", - "lat" : 45.5229315, - "lon" : -122.6607174, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Northeast Grand Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 168.84, - "elevation" : "", - "lat" : 45.5236409, - "lon" : -122.6607123, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northeast Couch Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "SOUTHWEST", - "area" : false, - "bogusName" : false, - "distance" : 64.13, - "elevation" : "", - "lat" : 45.5231423, - "lon" : -122.6623136, - "relativeDirection" : "SLIGHTLY_RIGHT", - "stayOn" : true, - "streetName" : "Northeast Couch Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 144.26, - "elevation" : "", - "lat" : 45.522964, - "lon" : -122.6630306, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "East Burnside Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 407.38, - "elevation" : "", - "lat" : 45.523001, - "lon" : -122.6648816, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Burnside Bridge", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 178.19, - "elevation" : "", - "lat" : 45.5231054, - "lon" : -122.6701087, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "West Burnside Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 310.7, - "elevation" : "", - "lat" : 45.5231958, - "lon" : -122.6723802, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest 2nd Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 317.18, - "elevation" : "", - "lat" : 45.5259887, - "lon" : -122.6724927, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Flanders Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 238.16, - "elevation" : "", - "lat" : 45.5259105, - "lon" : -122.6765581, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest 6th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 465.44, - "elevation" : "", - "lat" : 45.5280515, - "lon" : -122.6766232, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Northwest Station Way", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 1331.38, - "elevation" : "", - "lat" : 45.5315452, - "lon" : -122.679511, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:10:34.000+00:00", - "lat" : 45.53122, - "lon" : -122.69659, - "name" : "NW Northrup St. & NW 22nd Ave. (P2)", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - } - ], - "startTime" : "2009-11-17T18:00:00.000+00:00", - "tooSloped" : false, - "transfers" : 0, - "transitTime" : 0, - "waitingTime" : 0, - "walkDistance" : 5050.5, - "walkLimitExceeded" : false, - "walkTime" : 634 - } - ] -] - - -org.opentripplanner.routing.algorithm.mapping.CarPickupSnapshotTest.test_trip_planning_with_car_pickup_transfer=[ - [ - { - "arrivedAtDestinationWithRentedBicycle" : false, - "duration" : 3804, - "elevationGained" : 0.0, - "elevationLost" : 0.0, - "endTime" : "2009-11-17T19:03:24.000+00:00", - "fare" : { - "details" : { }, - "fare" : { } - }, - "generalizedCost" : 7384, - "legs" : [ - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 4875.79, - "endTime" : "2009-11-17T19:03:24.000+00:00", - "from" : { - "departure" : "2009-11-17T18:00:00.000+00:00", - "lat" : 45.51932, - "lon" : -122.648567, - "name" : "SE Stark St. & SE 17th Ave. (P0)", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 7384, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 252, - "points" : "unytGpxqkVA??dACpB@P?f@?p@?j@?dAAhE?jE?vD?P?RK?GFCDCFADABADADAF?D?FADCF?B?B?@?D@DADABCBC?A?C?AA??GICAAAA?A?A?AACAC?A@ABABC@CDCBCBC@CBABABCJ?J?@?@MR?hE?fEAdB?dB?lE?`A?T?pBA|D?J?x@?r@y@??bBuA?y@AU?{@?O?}@?E?y@?_@Aa@?u@?W??J@N?hA@x@Ap@ATETGpJCjEA|CArAAxAAxAAdBEzHClF?@Ax@GTAjBAZ?R@hC@h@Q@cBBM?M?_CDsA@Y?Q@O?K?Q?mBB[?C?W@[?]@E?IDI@]DO@SBM?S@G@A?GDEJQ|@AL?L@nA?j@@L?V?d@@~@@NI?E?W@Q?Q?m@@Q@AF?DAJBzB?V?NANM@K?GBEDEHIJUX_@f@KNQRSVGFCBQPIHGDGBIBK@W@a@?mA@E?C@C@A?CBQTKJEHIJeC~CYZo@v@g@d@IJAFAD?L@vC@hB@p@?X?T@P?N@P@nA?j@AX?L@`B@dA?R?RBbD?T?NBbD?R?P@|D@jB?x@@J?N?B?P?LBjD@N@fD?T?LBdD?R?PF`K?RDlJ?R?PFlJ?J" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:00:00.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 0.69, - "elevation" : "", - "lat" : 45.51932, - "lon" : -122.6485648, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Southeast 17th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 402.49, - "elevation" : "", - "lat" : 45.5193262, - "lon" : -122.6485648, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Stark Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : true, - "distance" : 131.76, - "elevation" : "", - "lat" : 45.5193421, - "lon" : -122.6537305, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "path", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 516.5, - "elevation" : "", - "lat" : 45.5200623, - "lon" : -122.6546522, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Oak Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : true, - "distance" : 70.84, - "elevation" : "", - "lat" : 45.5200842, - "lon" : -122.6612814, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "parking aisle", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 284.75, - "elevation" : "", - "lat" : 45.5203736, - "lon" : -122.661783, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Southeast Martin Luther King, Junior Boulevard", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 243.45, - "elevation" : "", - "lat" : 45.5229343, - "lon" : -122.6617665, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "East Burnside Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 407.38, - "elevation" : "", - "lat" : 45.523001, - "lon" : -122.6648816, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Burnside Bridge", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 256.85, - "elevation" : "", - "lat" : 45.5231054, - "lon" : -122.6701087, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "West Burnside Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 460.65, - "elevation" : "", - "lat" : 45.5231776, - "lon" : -122.6733895, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest 3rd Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 145.82, - "elevation" : "", - "lat" : 45.5272866, - "lon" : -122.6737165, - "relativeDirection" : "SLIGHTLY_LEFT", - "stayOn" : false, - "streetName" : "Northwest Hoyt Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 77.35, - "elevation" : "", - "lat" : 45.5273496, - "lon" : -122.6755629, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest 5th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 80.53, - "elevation" : "", - "lat" : 45.5280449, - "lon" : -122.6755935, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Irving Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 465.44, - "elevation" : "", - "lat" : 45.5280515, - "lon" : -122.6766232, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest Station Way", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 1331.38, - "elevation" : "", - "lat" : 45.5315452, - "lon" : -122.679511, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T19:03:24.000+00:00", - "lat" : 45.53122, - "lon" : -122.69659, - "name" : "NW Northrup St. & NW 22nd Ave. (P2)", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - } - ], - "startTime" : "2009-11-17T18:00:00.000+00:00", - "tooSloped" : false, - "transfers" : 0, - "transitTime" : 0, - "waitingTime" : 0, - "walkDistance" : 4875.79, - "walkLimitExceeded" : false, - "walkTime" : 3804 - }, - { - "arrivedAtDestinationWithRentedBicycle" : false, - "duration" : 1815, - "elevationGained" : 0.0, - "elevationLost" : 0.0, - "endTime" : "2009-11-17T18:34:19.000+00:00", - "fare" : { - "details" : { }, - "fare" : { }, - "legProducts" : [ - { - "legIndices" : [ - 1 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - }, - { - "legIndices" : [ - 5 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - } - ] - }, - "generalizedCost" : 3832, - "legs" : [ - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 673.56, - "endTime" : "2009-11-17T18:12:58.000+00:00", - "from" : { - "departure" : "2009-11-17T18:04:04.000+00:00", - "lat" : 45.51932, - "lon" : -122.648567, - "name" : "SE Stark St. & SE 17th Ave. (P0)", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 1031, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 42, - "points" : "unytGpxqkVA??dACpB@PoC?_CAM?aC??A?A?A?A??AA?AAA??AAA???A?A?A???A@A??@A@?@??A@?@?BcC?mCAmCAmC?QBIYIWOH" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:04:04.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 0.69, - "elevation" : "", - "lat" : 45.51932, - "lon" : -122.6485648, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Southeast 17th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 79.12, - "elevation" : "", - "lat" : 45.5193262, - "lon" : -122.6485648, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Stark Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 402.13, - "elevation" : "", - "lat" : 45.5193388, - "lon" : -122.6495798, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Southeast 16th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 168.89, - "elevation" : "", - "lat" : 45.5228912, - "lon" : -122.6495528, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Northeast 16th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTHEAST", - "area" : false, - "bogusName" : false, - "distance" : 22.74, - "elevation" : "", - "lat" : 45.524409, - "lon" : -122.6495675, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northeast Sandy Boulevard", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:12:58.000+00:00", - "departure" : "2009-11-17T18:12:58.000+00:00", - "lat" : 45.524581, - "lon" : -122.649367, - "name" : "NE Sandy & 16th", - "stopCode" : "5060", - "stopId" : "prt:5060", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 2119.06, - "endTime" : "2009-11-17T18:19:00.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:12:58.000+00:00", - "departure" : "2009-11-17T18:12:58.000+00:00", - "lat" : 45.524581, - "lon" : -122.649367, - "name" : "NE Sandy & 16th", - "stopCode" : "5060", - "stopId" : "prt:5060", - "stopIndex" : 92, - "stopSequence" : 93, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 962, - "headsign" : "Beaverton TC", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:13:32.000+00:00", - "departure" : "2009-11-17T18:13:32.000+00:00", - "lat" : 45.523767, - "lon" : -122.651428, - "name" : "NE Sandy & 14th", - "stopCode" : "5058", - "stopId" : "prt:5058", - "stopIndex" : 93, - "stopSequence" : 94, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:14:00.000+00:00", - "departure" : "2009-11-17T18:14:00.000+00:00", - "lat" : 45.523103, - "lon" : -122.653064, - "name" : "NE Sandy & 12th", - "stopCode" : "5055", - "stopId" : "prt:5055", - "stopIndex" : 94, - "stopSequence" : 95, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:14:47.000+00:00", - "departure" : "2009-11-17T18:14:47.000+00:00", - "lat" : 45.523024, - "lon" : -122.656526, - "name" : "E Burnside & NE 9th", - "stopCode" : "819", - "stopId" : "prt:819", - "stopIndex" : 95, - "stopSequence" : 96, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:15:24.000+00:00", - "departure" : "2009-11-17T18:15:24.000+00:00", - "lat" : 45.523012, - "lon" : -122.659365, - "name" : "E Burnside & NE 6th", - "stopCode" : "805", - "stopId" : "prt:805", - "stopIndex" : 96, - "stopSequence" : 97, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:15:52.000+00:00", - "departure" : "2009-11-17T18:15:52.000+00:00", - "lat" : 45.523015, - "lon" : -122.661534, - "name" : "E Burnside & NE M L King", - "stopCode" : "705", - "stopId" : "prt:705", - "stopIndex" : 97, - "stopSequence" : 98, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:18:00.000+00:00", - "departure" : "2009-11-17T18:18:00.000+00:00", - "lat" : 45.523249, - "lon" : -122.671269, - "name" : "W Burnside & Burnside Bridge", - "stopCode" : "689", - "stopId" : "prt:689", - "stopIndex" : 98, - "stopSequence" : 99, - "vertexType" : "TRANSIT", - "zoneId" : "0" - } - ], - "legGeometry" : { - "length" : 50, - "points" : "coztGd}qkVNl@r@`CZhA`A`D??Ph@l@tBb@rARh@Pd@???BPj@@jA?jEAhE?pD???VAjE?hE?dB?b@???`AAhE?dD???l@C`EAhEEhE?bAA|@?XAZ@\\AzACnGKbKAjC?bE???JEnE@fEDlE@hE@~A" - }, - "mode" : "BUS", - "pathway" : false, - "realTime" : false, - "route" : "Burnside/Stark", - "routeId" : "prt:20", - "routeLongName" : "Burnside/Stark", - "routeShortName" : "20", - "routeType" : 3, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:12:58.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:19:00.000+00:00", - "departure" : "2009-11-17T18:19:00.000+00:00", - "lat" : 45.523169, - "lon" : -122.675893, - "name" : "W Burnside & NW 5th", - "stopCode" : "782", - "stopId" : "prt:782", - "stopIndex" : 99, - "stopSequence" : 100, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - "transitLeg" : true, - "tripBlockId" : "2002", - "tripId" : "prt:200W1200" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 0.0, - "endTime" : "2009-11-17T18:19:00.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:19:00.000+00:00", - "departure" : "2009-11-17T18:19:00.000+00:00", - "lat" : 45.523169, - "lon" : -122.675893, - "name" : "W Burnside & NW 5th", - "stopCode" : "782", - "stopId" : "prt:782", - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - "generalizedCost" : 1, - "interlineWithPreviousLeg" : false, - "legElevation" : "", - "legGeometry" : { - "length" : 2, - "points" : "wfztGjcwkVD?" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:19:00.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:19:00.000+00:00", - "departure" : "2009-11-17T18:19:00.000+00:00", - "lat" : 45.5231324, - "lon" : -122.6758917, - "name" : "West Burnside Street", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 1767.93, - "endTime" : "2009-11-17T18:24:16.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:19:00.000+00:00", - "departure" : "2009-11-17T18:19:00.000+00:00", - "lat" : 45.5231324, - "lon" : -122.6758917, - "name" : "West Burnside Street", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 510, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 97, - "points" : "qfztGjcwkV@`B?H?BM?iBBI?K?wBBK?K?sBDM@M@sB@K?K?uBBM?K?uBBI@K?aBBSAM@M@K?GBEDEHIJUX_@f@KNQRSVGFCBQPIHGDGBIBK@W@a@?mA@E?C@C@A?CBQTKJEHIJeC~CYZo@v@g@d@IJAFAD?L@vC@hB@p@?X?T@P?N@P@nA?j@AX?L@`B@dA?R?RBbD?T?NBbD?R?P@|D@jB?x@@J?N?B?P?LBjD@N" - }, - "mode" : "CAR", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:19:00.000+00:00", - "steps" : [ - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 44.21, - "elevation" : "", - "lat" : 45.5231324, - "lon" : -122.6758917, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "West Burnside Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 548.38, - "elevation" : "", - "lat" : 45.5231221, - "lon" : -122.676459, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest 6th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 465.44, - "elevation" : "", - "lat" : 45.5280515, - "lon" : -122.6766232, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Northwest Station Way", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 709.95, - "elevation" : "", - "lat" : 45.5315452, - "lon" : -122.679511, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:24:16.000+00:00", - "departure" : "2009-11-17T18:24:16.000+00:00", - "lat" : 45.5313992, - "lon" : -122.6886162, - "name" : "corner of Northwest Northrup Street and path", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 70.46, - "endTime" : "2009-11-17T18:26:18.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:24:16.000+00:00", - "departure" : "2009-11-17T18:24:16.000+00:00", - "lat" : 45.5313992, - "lon" : -122.6886162, - "name" : "corner of Northwest Northrup Street and path", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 233, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 7, - "points" : "ez{tGzrykVC?I?@nBBH?d@??" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:24:16.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : true, - "distance" : 7.61, - "elevation" : "", - "lat" : 45.5313992, - "lon" : -122.6886162, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "path", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 62.85, - "elevation" : "", - "lat" : 45.5314676, - "lon" : -122.6886182, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:26:18.000+00:00", - "departure" : "2009-11-17T18:31:26.000+00:00", - "lat" : 45.531434, - "lon" : -122.689417, - "name" : "NW Northrup & 18th", - "stopCode" : "10776", - "stopId" : "prt:10776", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 547.79, - "endTime" : "2009-11-17T18:33:55.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:26:18.000+00:00", - "departure" : "2009-11-17T18:31:26.000+00:00", - "lat" : 45.531434, - "lon" : -122.689417, - "name" : "NW Northrup & 18th", - "stopCode" : "10776", - "stopId" : "prt:10776", - "stopIndex" : 20, - "stopSequence" : 21, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 1057, - "headsign" : "NW 23rd Ave", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:33:13.000+00:00", - "departure" : "2009-11-17T18:33:13.000+00:00", - "lat" : 45.531346, - "lon" : -122.694455, - "name" : "NW Northrup & 21st", - "stopCode" : "10777", - "stopId" : "prt:10777", - "stopIndex" : 21, - "stopSequence" : 22, - "vertexType" : "TRANSIT", - "zoneId" : "1" - } - ], - "legGeometry" : { - "length" : 8, - "points" : "cz{tGzwykV?VBhEFtKDvJ??@\\DnJ" - }, - "mode" : "TRAM", - "pathway" : false, - "realTime" : false, - "route" : "Portland Streetcar", - "routeId" : "prt:193", - "routeLongName" : "Portland Streetcar", - "routeType" : 0, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:31:26.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:33:55.000+00:00", - "departure" : "2009-11-17T18:33:55.000+00:00", - "lat" : 45.531308, - "lon" : -122.696445, - "name" : "NW Northrup & 22nd", - "stopCode" : "10778", - "stopId" : "prt:10778", - "stopIndex" : 22, - "stopSequence" : 23, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : true, - "tripBlockId" : "9384", - "tripId" : "prt:1930W1210" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 18.81, - "endTime" : "2009-11-17T18:34:19.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:33:55.000+00:00", - "departure" : "2009-11-17T18:33:55.000+00:00", - "lat" : 45.531308, - "lon" : -122.696445, - "name" : "NW Northrup & 22nd", - "stopCode" : "10778", - "stopId" : "prt:10778", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 37, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 7, - "points" : "sy{tGxc{kV???LABF?B??J" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:33:55.000+00:00", - "steps" : [ - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 18.81, - "elevation" : "", - "lat" : 45.5313019, - "lon" : -122.6964448, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:34:19.000+00:00", - "lat" : 45.53122, - "lon" : -122.69659, - "name" : "NW Northrup St. & NW 22nd Ave. (P2)", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - } - ], - "startTime" : "2009-11-17T18:04:04.000+00:00", - "tooSloped" : false, - "transfers" : 1, - "transitTime" : 511, - "waitingTime" : 308, - "walkDistance" : 2530.76, - "walkLimitExceeded" : false, - "walkTime" : 996 - }, - { - "arrivedAtDestinationWithRentedBicycle" : false, - "duration" : 1598, - "elevationGained" : 0.0, - "elevationLost" : 0.0, - "endTime" : "2009-11-17T18:35:19.000+00:00", - "fare" : { - "details" : { }, - "fare" : { }, - "legProducts" : [ - { - "legIndices" : [ - 1 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - }, - { - "legIndices" : [ - 5 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - } - ] - }, - "generalizedCost" : 3378, - "legs" : [ - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 408.65, - "endTime" : "2009-11-17T18:14:00.000+00:00", - "from" : { - "departure" : "2009-11-17T18:08:41.000+00:00", - "lat" : 45.51932, - "lon" : -122.648567, - "name" : "SE Stark St. & SE 17th Ave. (P0)", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 623, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 16, - "points" : "unytGpxqkVA??dACpB@P?f@?p@?j@?dAAhE?jE?vD?PJ?J@?S" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:08:41.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 0.69, - "elevation" : "", - "lat" : 45.51932, - "lon" : -122.6485648, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Southeast 17th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 395.42, - "elevation" : "", - "lat" : 45.5193262, - "lon" : -122.6485648, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Stark Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "SOUTH", - "area" : false, - "bogusName" : false, - "distance" : 12.54, - "elevation" : "", - "lat" : 45.5193421, - "lon" : -122.6536397, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast 12th Avenue", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:14:00.000+00:00", - "departure" : "2009-11-17T18:14:00.000+00:00", - "lat" : 45.519229, - "lon" : -122.653546, - "name" : "SE 12th & Stark", - "stopCode" : "6594", - "stopId" : "prt:6594", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 439.45, - "endTime" : "2009-11-17T18:16:00.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:14:00.000+00:00", - "departure" : "2009-11-17T18:14:00.000+00:00", - "lat" : 45.519229, - "lon" : -122.653546, - "name" : "SE 12th & Stark", - "stopCode" : "6594", - "stopId" : "prt:6594", - "stopIndex" : 32, - "stopSequence" : 33, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 720, - "headsign" : "Rose Qtr TC", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:14:44.000+00:00", - "departure" : "2009-11-17T18:14:44.000+00:00", - "lat" : 45.520674, - "lon" : -122.653544, - "name" : "SE 12th & Pine", - "stopCode" : "6589", - "stopId" : "prt:6589", - "stopIndex" : 33, - "stopSequence" : 34, - "vertexType" : "TRANSIT", - "zoneId" : "1" - } - ], - "legGeometry" : { - "length" : 11, - "points" : "cnytGdxrkVW?mC?{BA??Q?oC?mC?kBAa@?w@?" - }, - "mode" : "BUS", - "pathway" : false, - "realTime" : false, - "route" : "12th Ave", - "routeId" : "prt:70", - "routeLongName" : "12th Ave", - "routeShortName" : "70", - "routeType" : 3, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:14:00.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:16:00.000+00:00", - "departure" : "2009-11-17T18:16:00.000+00:00", - "lat" : 45.52318, - "lon" : -122.653507, - "name" : "NE 12th & Sandy", - "stopCode" : "6592", - "stopId" : "prt:6592", - "stopIndex" : 34, - "stopSequence" : 35, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : true, - "tripBlockId" : "7004", - "tripId" : "prt:700W1150" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 0.0, - "endTime" : "2009-11-17T18:16:00.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:16:00.000+00:00", - "departure" : "2009-11-17T18:16:00.000+00:00", - "lat" : 45.52318, - "lon" : -122.653507, - "name" : "NE 12th & Sandy", - "stopCode" : "6592", - "stopId" : "prt:6592", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 1, - "interlineWithPreviousLeg" : false, - "legElevation" : "", - "legGeometry" : { - "length" : 2, - "points" : "{fztGlwrkV?V" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:16:00.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:16:00.000+00:00", - "departure" : "2009-11-17T18:16:00.000+00:00", - "lat" : 45.5231819, - "lon" : -122.6536285, - "name" : "Northeast 12th Avenue", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 1607.0, - "endTime" : "2009-11-17T18:21:03.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:16:00.000+00:00", - "departure" : "2009-11-17T18:16:00.000+00:00", - "lat" : 45.5231819, - "lon" : -122.6536285, - "name" : "Northeast 12th Avenue", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 473, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 81, - "points" : "{fztGdxrkVc@?C?_@AM?O?oBAO??jE?hEAhE?jE?hEAjE?lD?R?FO?]?qA?O?UBmE?k@EU??X?tC?X?P?HAjG?j@ARANCRG\\KFM\\IXCPKXELCJAHMd@?HM\\O`@KPKNKHMLKFIFYJk@P]JIBM@M@O@O?W@O?O?O?q@?Q@K@IBKDIFGFEFGLSFGHEHKZELGP" - }, - "mode" : "CAR", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:16:00.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 128.28, - "elevation" : "", - "lat" : 45.5231819, - "lon" : -122.6536285, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Northeast 12th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 553.03, - "elevation" : "", - "lat" : 45.5243354, - "lon" : -122.6536083, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northeast Davis Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 243.39, - "elevation" : "", - "lat" : 45.5243542, - "lon" : -122.6607071, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northeast Grand Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 542.09, - "elevation" : "", - "lat" : 45.5265408, - "lon" : -122.6606919, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northeast Lloyd Boulevard", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 140.22, - "elevation" : "", - "lat" : 45.5286604, - "lon" : -122.6657552, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "North Interstate Avenue", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:21:03.000+00:00", - "departure" : "2009-11-17T18:21:03.000+00:00", - "lat" : 45.5297183, - "lon" : -122.6664542, - "name" : "corner of North Interstate Avenue and path", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 43.34, - "endTime" : "2009-11-17T18:22:49.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:21:03.000+00:00", - "departure" : "2009-11-17T18:21:03.000+00:00", - "lat" : 45.5297183, - "lon" : -122.6664542, - "name" : "corner of North Interstate Avenue and path", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 196, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 13, - "points" : "uo{tGjhukVKIC?CDABCDABEFCHGCEEGK@A" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:21:03.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTHEAST", - "area" : false, - "bogusName" : true, - "distance" : 28.77, - "elevation" : "", - "lat" : 45.5297183, - "lon" : -122.6664542, - "relativeDirection" : "SLIGHTLY_RIGHT", - "stayOn" : false, - "streetName" : "path", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTHEAST", - "area" : false, - "bogusName" : false, - "distance" : 14.56, - "elevation" : "", - "lat" : 45.5299086, - "lon" : -122.6665929, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Rose Quarter Transit Center", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:22:49.000+00:00", - "departure" : "2009-11-17T18:25:00.000+00:00", - "lat" : 45.530005, - "lon" : -122.666476, - "name" : "Rose Quarter Transit Center", - "stopCode" : "2592", - "stopId" : "prt:2592", - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 2905.12, - "endTime" : "2009-11-17T18:34:55.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:22:49.000+00:00", - "departure" : "2009-11-17T18:25:00.000+00:00", - "lat" : 45.530005, - "lon" : -122.666476, - "name" : "Rose Quarter Transit Center", - "stopCode" : "2592", - "stopId" : "prt:2592", - "stopIndex" : 84, - "stopSequence" : 85, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - "generalizedCost" : 1326, - "headsign" : "Montgomery Park", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:28:20.000+00:00", - "departure" : "2009-11-17T18:28:20.000+00:00", - "lat" : 45.526655, - "lon" : -122.676462, - "name" : "NW Glisan & 6th", - "stopCode" : "10803", - "stopId" : "prt:10803", - "stopIndex" : 85, - "stopSequence" : 86, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:29:15.000+00:00", - "departure" : "2009-11-17T18:29:15.000+00:00", - "lat" : 45.528799, - "lon" : -122.677238, - "name" : "NW Station Way & Union Station", - "stopCode" : "12801", - "stopId" : "prt:12801", - "stopIndex" : 86, - "stopSequence" : 87, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:31:00.000+00:00", - "departure" : "2009-11-17T18:31:00.000+00:00", - "lat" : 45.531582, - "lon" : -122.681193, - "name" : "NW Northrup & 10th", - "stopCode" : "12802", - "stopId" : "prt:12802", - "stopIndex" : 87, - "stopSequence" : 88, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:31:33.000+00:00", - "departure" : "2009-11-17T18:31:33.000+00:00", - "lat" : 45.531534, - "lon" : -122.683319, - "name" : "NW 12th & Northrup", - "stopCode" : "12796", - "stopId" : "prt:12796", - "stopIndex" : 88, - "stopSequence" : 89, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:32:04.000+00:00", - "departure" : "2009-11-17T18:32:04.000+00:00", - "lat" : 45.531503, - "lon" : -122.685357, - "name" : "NW Northrup & 14th", - "stopCode" : "10775", - "stopId" : "prt:10775", - "stopIndex" : 89, - "stopSequence" : 90, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:33:07.000+00:00", - "departure" : "2009-11-17T18:33:07.000+00:00", - "lat" : 45.531434, - "lon" : -122.689417, - "name" : "NW Northrup & 18th", - "stopCode" : "10776", - "stopId" : "prt:10776", - "stopIndex" : 90, - "stopSequence" : 91, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:34:24.000+00:00", - "departure" : "2009-11-17T18:34:24.000+00:00", - "lat" : 45.531346, - "lon" : -122.694455, - "name" : "NW Northrup & 21st", - "stopCode" : "10777", - "stopId" : "prt:10777", - "stopIndex" : 91, - "stopSequence" : 92, - "vertexType" : "TRANSIT", - "zoneId" : "1" - } - ], - "legGeometry" : { - "length" : 76, - "points" : "eq{tG`hukVNXJPPVJFf@Vf@Pp@Nd@NRLB@RNXZR\\vAhC@BhAhD`AhClAbDBrDCnG@n@@^@d@HdAP`CBjEDvD???LqCFmCDYBGDEBGJkAzAQR??KNa@b@MJuBBY?OHW@u@~@aD`EcBhBBrD@xC??@l@BlE@lD???XBjEBpD???VBlE?dA@t@?b@?h@BfEBrD???VBhEFtKDvJ??@\\DnJ" - }, - "mode" : "BUS", - "pathway" : false, - "realTime" : false, - "route" : "Broadway/Halsey", - "routeId" : "prt:77", - "routeLongName" : "Broadway/Halsey", - "routeShortName" : "77", - "routeType" : 3, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:25:00.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:34:55.000+00:00", - "departure" : "2009-11-17T18:34:55.000+00:00", - "lat" : 45.531308, - "lon" : -122.696445, - "name" : "NW Northrup & 22nd", - "stopCode" : "10778", - "stopId" : "prt:10778", - "stopIndex" : 92, - "stopSequence" : 93, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : true, - "tripBlockId" : "7736", - "tripId" : "prt:771W1160" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 18.81, - "endTime" : "2009-11-17T18:35:19.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:34:55.000+00:00", - "departure" : "2009-11-17T18:34:55.000+00:00", - "lat" : 45.531308, - "lon" : -122.696445, - "name" : "NW Northrup & 22nd", - "stopCode" : "10778", - "stopId" : "prt:10778", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 37, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 7, - "points" : "sy{tGxc{kV???LABF?B??J" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:34:55.000+00:00", - "steps" : [ - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 18.81, - "elevation" : "", - "lat" : 45.5313019, - "lon" : -122.6964448, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:35:19.000+00:00", - "lat" : 45.53122, - "lon" : -122.69659, - "name" : "NW Northrup St. & NW 22nd Ave. (P2)", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - } - ], - "startTime" : "2009-11-17T18:08:41.000+00:00", - "tooSloped" : false, - "transfers" : 1, - "transitTime" : 715, - "waitingTime" : 131, - "walkDistance" : 2077.8, - "walkLimitExceeded" : false, - "walkTime" : 752 - }, - { - "arrivedAtDestinationWithRentedBicycle" : false, - "duration" : 2077, - "elevationGained" : 0.0, - "elevationLost" : 0.0, - "endTime" : "2009-11-17T18:38:41.000+00:00", - "fare" : { - "details" : { }, - "fare" : { }, - "legProducts" : [ - { - "legIndices" : [ - 1 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - } - ] - }, - "generalizedCost" : 3914, - "legs" : [ - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 673.56, - "endTime" : "2009-11-17T18:12:58.000+00:00", - "from" : { - "departure" : "2009-11-17T18:04:04.000+00:00", - "lat" : 45.51932, - "lon" : -122.648567, - "name" : "SE Stark St. & SE 17th Ave. (P0)", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 1031, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 42, - "points" : "unytGpxqkVA??dACpB@PoC?_CAM?aC??A?A?A?A??AA?AAA??AAA???A?A?A???A@A??@A@?@??A@?@?BcC?mCAmCAmC?QBIYIWOH" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:04:04.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 0.69, - "elevation" : "", - "lat" : 45.51932, - "lon" : -122.6485648, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Southeast 17th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 79.12, - "elevation" : "", - "lat" : 45.5193262, - "lon" : -122.6485648, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Stark Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 402.13, - "elevation" : "", - "lat" : 45.5193388, - "lon" : -122.6495798, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Southeast 16th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 168.89, - "elevation" : "", - "lat" : 45.5228912, - "lon" : -122.6495528, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Northeast 16th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTHEAST", - "area" : false, - "bogusName" : false, - "distance" : 22.74, - "elevation" : "", - "lat" : 45.524409, - "lon" : -122.6495675, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northeast Sandy Boulevard", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:12:58.000+00:00", - "departure" : "2009-11-17T18:12:58.000+00:00", - "lat" : 45.524581, - "lon" : -122.649367, - "name" : "NE Sandy & 16th", - "stopCode" : "5060", - "stopId" : "prt:5060", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 3602.73, - "endTime" : "2009-11-17T18:25:49.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:12:58.000+00:00", - "departure" : "2009-11-17T18:12:58.000+00:00", - "lat" : 45.524581, - "lon" : -122.649367, - "name" : "NE Sandy & 16th", - "stopCode" : "5060", - "stopId" : "prt:5060", - "stopIndex" : 92, - "stopSequence" : 93, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 1371, - "headsign" : "Beaverton TC", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:13:32.000+00:00", - "departure" : "2009-11-17T18:13:32.000+00:00", - "lat" : 45.523767, - "lon" : -122.651428, - "name" : "NE Sandy & 14th", - "stopCode" : "5058", - "stopId" : "prt:5058", - "stopIndex" : 93, - "stopSequence" : 94, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:14:00.000+00:00", - "departure" : "2009-11-17T18:14:00.000+00:00", - "lat" : 45.523103, - "lon" : -122.653064, - "name" : "NE Sandy & 12th", - "stopCode" : "5055", - "stopId" : "prt:5055", - "stopIndex" : 94, - "stopSequence" : 95, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:14:47.000+00:00", - "departure" : "2009-11-17T18:14:47.000+00:00", - "lat" : 45.523024, - "lon" : -122.656526, - "name" : "E Burnside & NE 9th", - "stopCode" : "819", - "stopId" : "prt:819", - "stopIndex" : 95, - "stopSequence" : 96, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:15:24.000+00:00", - "departure" : "2009-11-17T18:15:24.000+00:00", - "lat" : 45.523012, - "lon" : -122.659365, - "name" : "E Burnside & NE 6th", - "stopCode" : "805", - "stopId" : "prt:805", - "stopIndex" : 96, - "stopSequence" : 97, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:15:52.000+00:00", - "departure" : "2009-11-17T18:15:52.000+00:00", - "lat" : 45.523015, - "lon" : -122.661534, - "name" : "E Burnside & NE M L King", - "stopCode" : "705", - "stopId" : "prt:705", - "stopIndex" : 97, - "stopSequence" : 98, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:18:00.000+00:00", - "departure" : "2009-11-17T18:18:00.000+00:00", - "lat" : 45.523249, - "lon" : -122.671269, - "name" : "W Burnside & Burnside Bridge", - "stopCode" : "689", - "stopId" : "prt:689", - "stopIndex" : 98, - "stopSequence" : 99, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:19:00.000+00:00", - "departure" : "2009-11-17T18:19:00.000+00:00", - "lat" : 45.523169, - "lon" : -122.675893, - "name" : "W Burnside & NW 5th", - "stopCode" : "782", - "stopId" : "prt:782", - "stopIndex" : 99, - "stopSequence" : 100, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:20:17.000+00:00", - "departure" : "2009-11-17T18:20:17.000+00:00", - "lat" : 45.523115, - "lon" : -122.678939, - "name" : "W Burnside & NW Park", - "stopCode" : "716", - "stopId" : "prt:716", - "stopIndex" : 100, - "stopSequence" : 101, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:21:25.000+00:00", - "departure" : "2009-11-17T18:21:25.000+00:00", - "lat" : 45.523048, - "lon" : -122.681606, - "name" : "W Burnside & NW 10th", - "stopCode" : "10791", - "stopId" : "prt:10791", - "stopIndex" : 101, - "stopSequence" : 102, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:22:14.000+00:00", - "departure" : "2009-11-17T18:22:14.000+00:00", - "lat" : 45.523, - "lon" : -122.683535, - "name" : "W Burnside & NW 12th", - "stopCode" : "11032", - "stopId" : "prt:11032", - "stopIndex" : 102, - "stopSequence" : 103, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:24:09.000+00:00", - "departure" : "2009-11-17T18:24:09.000+00:00", - "lat" : 45.522985, - "lon" : -122.688091, - "name" : "W Burnside & NW 17th", - "stopCode" : "10809", - "stopId" : "prt:10809", - "stopIndex" : 103, - "stopSequence" : 104, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:25:00.000+00:00", - "departure" : "2009-11-17T18:25:00.000+00:00", - "lat" : 45.523097, - "lon" : -122.690083, - "name" : "W Burnside & NW 19th", - "stopCode" : "735", - "stopId" : "prt:735", - "stopIndex" : 104, - "stopSequence" : 105, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:25:21.000+00:00", - "departure" : "2009-11-17T18:25:21.000+00:00", - "lat" : 45.523176, - "lon" : -122.692139, - "name" : "W Burnside & NW 20th", - "stopCode" : "741", - "stopId" : "prt:741", - "stopIndex" : 105, - "stopSequence" : 106, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:25:31.000+00:00", - "departure" : "2009-11-17T18:25:31.000+00:00", - "lat" : 45.52322, - "lon" : -122.69313, - "name" : "W Burnside & NW 20th Pl", - "stopCode" : "742", - "stopId" : "prt:742", - "stopIndex" : 106, - "stopSequence" : 107, - "vertexType" : "TRANSIT", - "zoneId" : "1" - } - ], - "legGeometry" : { - "length" : 94, - "points" : "coztGd}qkVNl@r@`CZhA`A`D??Ph@l@tBb@rARh@Pd@???BPj@@jA?jEAhE?pD???VAjE?hE?dB?b@???`AAhE?dD???l@C`EAhEEhE?bAA|@?XAZ@\\AzACnGKbKAjC?bE???JEnE@fEDlE@hE@~A??@rBBzDBpE@~A???Z@tD@RBnEB|A???@BdB?lEBjA??BnBApF@dB?X?^@r@?f@@bCAx@EtB???VChAE|BGnD??AXKnEGnD???XGjD??AZEfCC`AEzB" - }, - "mode" : "BUS", - "pathway" : false, - "realTime" : false, - "route" : "Burnside/Stark", - "routeId" : "prt:20", - "routeLongName" : "Burnside/Stark", - "routeShortName" : "20", - "routeType" : 3, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:12:58.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:25:49.000+00:00", - "departure" : "2009-11-17T18:25:49.000+00:00", - "lat" : 45.523312, - "lon" : -122.694901, - "name" : "W Burnside & NW King", - "stopCode" : "747", - "stopId" : "prt:747", - "stopIndex" : 107, - "stopSequence" : 108, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : true, - "tripBlockId" : "2002", - "tripId" : "prt:200W1200" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 999.1, - "endTime" : "2009-11-17T18:38:41.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:25:49.000+00:00", - "departure" : "2009-11-17T18:25:49.000+00:00", - "lat" : 45.523312, - "lon" : -122.694901, - "name" : "W Burnside & NW King", - "stopCode" : "747", - "stopId" : "prt:747", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 1511, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 29, - "points" : "ugztGdzzkVL?ATClAI|DK?G?mCBkCDoCDmCBoCDkCBoCB[?sBD]?Y@eA@K?C?K?W@{A@M@C@I?_CB?G" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:25:49.000+00:00", - "steps" : [ - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 113.27, - "elevation" : "", - "lat" : 45.5232491, - "lon" : -122.6949067, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "West Burnside Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 882.16, - "elevation" : "", - "lat" : 45.5233204, - "lon" : -122.696357, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest 22nd Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "EAST", - "area" : false, - "bogusName" : false, - "distance" : 3.68, - "elevation" : "", - "lat" : 45.5312508, - "lon" : -122.6966386, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:38:41.000+00:00", - "lat" : 45.53122, - "lon" : -122.69659, - "name" : "NW Northrup St. & NW 22nd Ave. (P2)", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - } - ], - "startTime" : "2009-11-17T18:04:04.000+00:00", - "tooSloped" : false, - "transfers" : 0, - "transitTime" : 771, - "waitingTime" : 0, - "walkDistance" : 1672.66, - "walkLimitExceeded" : false, - "walkTime" : 1306 - }, - { - "arrivedAtDestinationWithRentedBicycle" : false, - "duration" : 1646, - "elevationGained" : 0.0, - "elevationLost" : 0.0, - "endTime" : "2009-11-17T18:39:22.000+00:00", - "fare" : { - "details" : { }, - "fare" : { }, - "legProducts" : [ - { - "legIndices" : [ - 1 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - } - ] - }, - "generalizedCost" : 2662, - "legs" : [ - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 290.72, - "endTime" : "2009-11-17T18:15:40.000+00:00", - "from" : { - "departure" : "2009-11-17T18:11:56.000+00:00", - "lat" : 45.51932, - "lon" : -122.648567, - "name" : "SE Stark St. & SE 17th Ave. (P0)", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 442, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 6, - "points" : "unytGpxqkVjC?lC@nC@?fCG?" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:11:56.000+00:00", - "steps" : [ - { - "absoluteDirection" : "SOUTH", - "area" : false, - "bogusName" : false, - "distance" : 237.26, - "elevation" : "", - "lat" : 45.51932, - "lon" : -122.6485648, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Southeast 17th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 53.47, - "elevation" : "", - "lat" : 45.5171863, - "lon" : -122.6485801, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Southeast Morrison Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:15:40.000+00:00", - "departure" : "2009-11-17T18:15:40.000+00:00", - "lat" : 45.517226, - "lon" : -122.649266, - "name" : "SE Morrison & 16th", - "stopCode" : "4019", - "stopId" : "prt:4019", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 5218.86, - "endTime" : "2009-11-17T18:35:54.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:15:40.000+00:00", - "departure" : "2009-11-17T18:15:40.000+00:00", - "lat" : 45.517226, - "lon" : -122.649266, - "name" : "SE Morrison & 16th", - "stopCode" : "4019", - "stopId" : "prt:4019", - "stopIndex" : 50, - "stopSequence" : 51, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 1814, - "headsign" : "Montgomery Park", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:16:15.000+00:00", - "departure" : "2009-11-17T18:16:15.000+00:00", - "lat" : 45.517253, - "lon" : -122.651354, - "name" : "SE Morrison & 14th", - "stopCode" : "4016", - "stopId" : "prt:4016", - "stopIndex" : 51, - "stopSequence" : 52, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:17:00.000+00:00", - "departure" : "2009-11-17T18:17:00.000+00:00", - "lat" : 45.517299, - "lon" : -122.654067, - "name" : "SE Morrison & 12th", - "stopCode" : "4014", - "stopId" : "prt:4014", - "stopIndex" : 52, - "stopSequence" : 53, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:17:38.000+00:00", - "departure" : "2009-11-17T18:17:38.000+00:00", - "lat" : 45.517292, - "lon" : -122.656563, - "name" : "SE Morrison & 9th", - "stopCode" : "4026", - "stopId" : "prt:4026", - "stopIndex" : 53, - "stopSequence" : 54, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:18:08.000+00:00", - "departure" : "2009-11-17T18:18:08.000+00:00", - "lat" : 45.517322, - "lon" : -122.65847, - "name" : "SE Morrison & 7th", - "stopCode" : "4025", - "stopId" : "prt:4025", - "stopIndex" : 54, - "stopSequence" : 55, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:18:39.000+00:00", - "departure" : "2009-11-17T18:18:39.000+00:00", - "lat" : 45.517298, - "lon" : -122.660523, - "name" : "SE Morrison & Grand", - "stopCode" : "4013", - "stopId" : "prt:4013", - "stopIndex" : 55, - "stopSequence" : 56, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:20:03.000+00:00", - "departure" : "2009-11-17T18:20:03.000+00:00", - "lat" : 45.517351, - "lon" : -122.66601, - "name" : "Morrison Bridge", - "stopCode" : "4029", - "stopId" : "prt:4029", - "stopIndex" : 56, - "stopSequence" : 57, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:22:27.000+00:00", - "departure" : "2009-11-17T18:22:27.000+00:00", - "lat" : 45.51959, - "lon" : -122.674599, - "name" : "SW Washington & 3rd", - "stopCode" : "6158", - "stopId" : "prt:6158", - "stopIndex" : 57, - "stopSequence" : 58, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:23:00.000+00:00", - "departure" : "2009-11-17T18:23:00.000+00:00", - "lat" : 45.520129, - "lon" : -122.676635, - "name" : "SW Washington & 5th", - "stopCode" : "6160", - "stopId" : "prt:6160", - "stopIndex" : 58, - "stopSequence" : 59, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:23:52.000+00:00", - "departure" : "2009-11-17T18:23:52.000+00:00", - "lat" : 45.520695, - "lon" : -122.678657, - "name" : "SW Washington & Broadway", - "stopCode" : "6137", - "stopId" : "prt:6137", - "stopIndex" : 59, - "stopSequence" : 60, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:24:34.000+00:00", - "departure" : "2009-11-17T18:24:34.000+00:00", - "lat" : 45.521124, - "lon" : -122.6803, - "name" : "SW Washington & 9th", - "stopCode" : "6169", - "stopId" : "prt:6169", - "stopIndex" : 60, - "stopSequence" : 61, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:25:47.000+00:00", - "departure" : "2009-11-17T18:25:47.000+00:00", - "lat" : 45.521094, - "lon" : -122.682819, - "name" : "SW 11th & Alder", - "stopCode" : "9600", - "stopId" : "prt:9600", - "stopIndex" : 61, - "stopSequence" : 62, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:26:36.000+00:00", - "departure" : "2009-11-17T18:26:36.000+00:00", - "lat" : 45.52055, - "lon" : -122.683933, - "name" : "SW Morrison & 12th", - "stopCode" : "9598", - "stopId" : "prt:9598", - "stopIndex" : 62, - "stopSequence" : 63, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - { - "arrival" : "2009-11-17T18:27:25.000+00:00", - "departure" : "2009-11-17T18:27:25.000+00:00", - "lat" : 45.521063, - "lon" : -122.685848, - "name" : "SW Morrison & 14th", - "stopCode" : "9708", - "stopId" : "prt:9708", - "stopIndex" : 63, - "stopSequence" : 64, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:28:18.000+00:00", - "departure" : "2009-11-17T18:28:18.000+00:00", - "lat" : 45.521641, - "lon" : -122.687932, - "name" : "SW Morrison & 16th", - "stopCode" : "9613", - "stopId" : "prt:9613", - "stopIndex" : 64, - "stopSequence" : 65, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:29:00.000+00:00", - "departure" : "2009-11-17T18:29:00.000+00:00", - "lat" : 45.52206, - "lon" : -122.689577, - "name" : "SW Morrison & 17th", - "stopCode" : "9599", - "stopId" : "prt:9599", - "stopIndex" : 65, - "stopSequence" : 66, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:29:54.000+00:00", - "departure" : "2009-11-17T18:29:54.000+00:00", - "lat" : 45.523097, - "lon" : -122.690083, - "name" : "W Burnside & NW 19th", - "stopCode" : "735", - "stopId" : "prt:735", - "stopIndex" : 66, - "stopSequence" : 67, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:30:31.000+00:00", - "departure" : "2009-11-17T18:30:31.000+00:00", - "lat" : 45.523176, - "lon" : -122.692139, - "name" : "W Burnside & NW 20th", - "stopCode" : "741", - "stopId" : "prt:741", - "stopIndex" : 67, - "stopSequence" : 68, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:30:48.000+00:00", - "departure" : "2009-11-17T18:30:48.000+00:00", - "lat" : 45.52322, - "lon" : -122.69313, - "name" : "W Burnside & NW 20th Pl", - "stopCode" : "742", - "stopId" : "prt:742", - "stopIndex" : 68, - "stopSequence" : 69, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:31:20.000+00:00", - "departure" : "2009-11-17T18:31:20.000+00:00", - "lat" : 45.523312, - "lon" : -122.694901, - "name" : "W Burnside & NW King", - "stopCode" : "747", - "stopId" : "prt:747", - "stopIndex" : 69, - "stopSequence" : 70, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:32:18.000+00:00", - "departure" : "2009-11-17T18:32:18.000+00:00", - "lat" : 45.523512, - "lon" : -122.698081, - "name" : "W Burnside & NW 23rd", - "stopCode" : "755", - "stopId" : "prt:755", - "stopIndex" : 70, - "stopSequence" : 71, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:33:11.000+00:00", - "departure" : "2009-11-17T18:33:11.000+00:00", - "lat" : 45.525416, - "lon" : -122.698381, - "name" : "NW 23rd & Flanders", - "stopCode" : "7157", - "stopId" : "prt:7157", - "stopIndex" : 71, - "stopSequence" : 72, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:34:05.000+00:00", - "departure" : "2009-11-17T18:34:05.000+00:00", - "lat" : 45.527543, - "lon" : -122.698473, - "name" : "NW 23rd & Irving", - "stopCode" : "7161", - "stopId" : "prt:7161", - "stopIndex" : 72, - "stopSequence" : 73, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:35:00.000+00:00", - "departure" : "2009-11-17T18:35:00.000+00:00", - "lat" : 45.529681, - "lon" : -122.698529, - "name" : "NW 23rd & Lovejoy", - "stopCode" : "7163", - "stopId" : "prt:7163", - "stopIndex" : 73, - "stopSequence" : 74, - "vertexType" : "TRANSIT", - "zoneId" : "1" - } - ], - "legGeometry" : { - "length" : 135, - "points" : "kaytG||qkVA~@?jE?tC???r@AhE?jE?rA???tBAjE?nD???X?hE?xC??Ah@?pE?~C???J?`@?vAAvBEbE?jEAlE?`BAbB@d@??@tAAj@Cx@Cb@Cp@_@dEcAtFoA`IS~@i@`BmAzDi@zAc@pAi@~C??Id@u@jEm@bD??If@u@jEk@bD??If@u@|DW`B??CPs@|Du@lElBz@??VJbCfAk@dD??Id@w@rEWvAId@AF??Q~@s@`Ei@~C??Ib@u@dEWzA??]jB]MQSe@WOKOKIIQe@GWE]GnD??AXKnEGnD???XGjD??AZEfCC`AEzB??AXCfAGxDE|AEtBIlC??APkAh@o@?sCB{BD??S?mCDmCDyBB??U?mCDmCDyBB??S?oCDmCDmCBo@@" - }, - "mode" : "BUS", - "pathway" : false, - "realTime" : false, - "route" : "Belmont/NW 23rd", - "routeId" : "prt:15", - "routeLongName" : "Belmont/NW 23rd", - "routeShortName" : "15", - "routeType" : 3, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:15:40.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:35:54.000+00:00", - "departure" : "2009-11-17T18:35:54.000+00:00", - "lat" : 45.532159, - "lon" : -122.698634, - "name" : "NW 23rd & Overton", - "stopCode" : "8981", - "stopId" : "prt:8981", - "stopIndex" : 74, - "stopSequence" : 75, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : true, - "tripBlockId" : "1549", - "tripId" : "prt:150W1400" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 266.21, - "endTime" : "2009-11-17T18:39:22.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:35:54.000+00:00", - "departure" : "2009-11-17T18:35:54.000+00:00", - "lat" : 45.532159, - "lon" : -122.698634, - "name" : "NW 23rd & Overton", - "stopCode" : "8981", - "stopId" : "prt:8981", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 405, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 13, - "points" : "}~{tGnq{kV?LVAF?J?L?rBCLA?Q?EAyAEcH?G" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:35:54.000+00:00", - "steps" : [ - { - "absoluteDirection" : "SOUTH", - "area" : false, - "bogusName" : false, - "distance" : 104.46, - "elevation" : "", - "lat" : 45.5321578, - "lon" : -122.6987026, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Northwest 23rd Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "EAST", - "area" : false, - "bogusName" : false, - "distance" : 161.77, - "elevation" : "", - "lat" : 45.5312188, - "lon" : -122.6986675, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:39:22.000+00:00", - "lat" : 45.53122, - "lon" : -122.69659, - "name" : "NW Northrup St. & NW 22nd Ave. (P2)", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - } - ], - "startTime" : "2009-11-17T18:11:56.000+00:00", - "tooSloped" : false, - "transfers" : 0, - "transitTime" : 1214, - "waitingTime" : 0, - "walkDistance" : 556.93, - "walkLimitExceeded" : false, - "walkTime" : 432 - }, - { - "arrivedAtDestinationWithRentedBicycle" : false, - "duration" : 1635, - "elevationGained" : 0.0, - "elevationLost" : 0.0, - "endTime" : "2009-11-17T18:46:19.000+00:00", - "fare" : { - "details" : { }, - "fare" : { }, - "legProducts" : [ - { - "legIndices" : [ - 1 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - }, - { - "legIndices" : [ - 5 - ], - "products" : [ - { - "amount" : { - "cents" : 200, - "currency" : { - "currency" : "USD", - "currencyCode" : "USD", - "defaultFractionDigits" : 2, - "symbol" : "$" - } - }, - "id" : "prt:8", - "name" : "regular" - } - ] - } - ] - }, - "generalizedCost" : 3652, - "legs" : [ - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 673.56, - "endTime" : "2009-11-17T18:27:58.000+00:00", - "from" : { - "departure" : "2009-11-17T18:19:04.000+00:00", - "lat" : 45.51932, - "lon" : -122.648567, - "name" : "SE Stark St. & SE 17th Ave. (P0)", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 1031, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 42, - "points" : "unytGpxqkVA??dACpB@PoC?_CAM?aC??A?A?A?A??AA?AAA??AAA???A?A?A???A@A??@A@?@??A@?@?BcC?mCAmCAmC?QBIYIWOH" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:19:04.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 0.69, - "elevation" : "", - "lat" : 45.51932, - "lon" : -122.6485648, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Southeast 17th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 79.12, - "elevation" : "", - "lat" : 45.5193262, - "lon" : -122.6485648, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Southeast Stark Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 402.13, - "elevation" : "", - "lat" : 45.5193388, - "lon" : -122.6495798, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Southeast 16th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 168.89, - "elevation" : "", - "lat" : 45.5228912, - "lon" : -122.6495528, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Northeast 16th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTHEAST", - "area" : false, - "bogusName" : false, - "distance" : 22.74, - "elevation" : "", - "lat" : 45.524409, - "lon" : -122.6495675, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northeast Sandy Boulevard", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:27:58.000+00:00", - "departure" : "2009-11-17T18:27:58.000+00:00", - "lat" : 45.524581, - "lon" : -122.649367, - "name" : "NE Sandy & 16th", - "stopCode" : "5060", - "stopId" : "prt:5060", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 2119.06, - "endTime" : "2009-11-17T18:34:00.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:27:58.000+00:00", - "departure" : "2009-11-17T18:27:58.000+00:00", - "lat" : 45.524581, - "lon" : -122.649367, - "name" : "NE Sandy & 16th", - "stopCode" : "5060", - "stopId" : "prt:5060", - "stopIndex" : 92, - "stopSequence" : 93, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 962, - "headsign" : "23rd Ave to Tichner", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:28:32.000+00:00", - "departure" : "2009-11-17T18:28:32.000+00:00", - "lat" : 45.523767, - "lon" : -122.651428, - "name" : "NE Sandy & 14th", - "stopCode" : "5058", - "stopId" : "prt:5058", - "stopIndex" : 93, - "stopSequence" : 94, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:29:00.000+00:00", - "departure" : "2009-11-17T18:29:00.000+00:00", - "lat" : 45.523103, - "lon" : -122.653064, - "name" : "NE Sandy & 12th", - "stopCode" : "5055", - "stopId" : "prt:5055", - "stopIndex" : 94, - "stopSequence" : 95, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:29:47.000+00:00", - "departure" : "2009-11-17T18:29:47.000+00:00", - "lat" : 45.523024, - "lon" : -122.656526, - "name" : "E Burnside & NE 9th", - "stopCode" : "819", - "stopId" : "prt:819", - "stopIndex" : 95, - "stopSequence" : 96, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:30:24.000+00:00", - "departure" : "2009-11-17T18:30:24.000+00:00", - "lat" : 45.523012, - "lon" : -122.659365, - "name" : "E Burnside & NE 6th", - "stopCode" : "805", - "stopId" : "prt:805", - "stopIndex" : 96, - "stopSequence" : 97, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:30:52.000+00:00", - "departure" : "2009-11-17T18:30:52.000+00:00", - "lat" : 45.523015, - "lon" : -122.661534, - "name" : "E Burnside & NE M L King", - "stopCode" : "705", - "stopId" : "prt:705", - "stopIndex" : 97, - "stopSequence" : 98, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - { - "arrival" : "2009-11-17T18:33:00.000+00:00", - "departure" : "2009-11-17T18:33:00.000+00:00", - "lat" : 45.523249, - "lon" : -122.671269, - "name" : "W Burnside & Burnside Bridge", - "stopCode" : "689", - "stopId" : "prt:689", - "stopIndex" : 98, - "stopSequence" : 99, - "vertexType" : "TRANSIT", - "zoneId" : "0" - } - ], - "legGeometry" : { - "length" : 50, - "points" : "coztGd}qkVNl@r@`CZhA`A`D??Ph@l@tBb@rARh@Pd@???BPj@@jA?jEAhE?pD???VAjE?hE?dB?b@???`AAhE?dD???l@C`EAhEEhE?bAA|@?XAZ@\\AzACnGKbKAjC?bE???JEnE@fEDlE@hE@~A" - }, - "mode" : "BUS", - "pathway" : false, - "realTime" : false, - "route" : "Burnside/Stark", - "routeId" : "prt:20", - "routeLongName" : "Burnside/Stark", - "routeShortName" : "20", - "routeType" : 3, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:27:58.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:34:00.000+00:00", - "departure" : "2009-11-17T18:34:00.000+00:00", - "lat" : 45.523169, - "lon" : -122.675893, - "name" : "W Burnside & NW 5th", - "stopCode" : "782", - "stopId" : "prt:782", - "stopIndex" : 99, - "stopSequence" : 100, - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - "transitLeg" : true, - "tripBlockId" : "2071", - "tripId" : "prt:200W1210" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 0.0, - "endTime" : "2009-11-17T18:34:00.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:34:00.000+00:00", - "departure" : "2009-11-17T18:34:00.000+00:00", - "lat" : 45.523169, - "lon" : -122.675893, - "name" : "W Burnside & NW 5th", - "stopCode" : "782", - "stopId" : "prt:782", - "vertexType" : "TRANSIT", - "zoneId" : "0" - }, - "generalizedCost" : 1, - "interlineWithPreviousLeg" : false, - "legElevation" : "", - "legGeometry" : { - "length" : 2, - "points" : "wfztGjcwkVD?" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:34:00.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:34:00.000+00:00", - "departure" : "2009-11-17T18:34:00.000+00:00", - "lat" : 45.5231324, - "lon" : -122.6758917, - "name" : "West Burnside Street", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 1767.93, - "endTime" : "2009-11-17T18:39:16.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:34:00.000+00:00", - "departure" : "2009-11-17T18:34:00.000+00:00", - "lat" : 45.5231324, - "lon" : -122.6758917, - "name" : "West Burnside Street", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 510, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 97, - "points" : "qfztGjcwkV@`B?H?BM?iBBI?K?wBBK?K?sBDM@M@sB@K?K?uBBM?K?uBBI@K?aBBSAM@M@K?GBEDEHIJUX_@f@KNQRSVGFCBQPIHGDGBIBK@W@a@?mA@E?C@C@A?CBQTKJEHIJeC~CYZo@v@g@d@IJAFAD?L@vC@hB@p@?X?T@P?N@P@nA?j@AX?L@`B@dA?R?RBbD?T?NBbD?R?P@|D@jB?x@@J?N?B?P?LBjD@N" - }, - "mode" : "CAR", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:34:00.000+00:00", - "steps" : [ - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 44.21, - "elevation" : "", - "lat" : 45.5231324, - "lon" : -122.6758917, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "West Burnside Street", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 548.38, - "elevation" : "", - "lat" : 45.5231221, - "lon" : -122.676459, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "Northwest 6th Avenue", - "walkingBike" : false - }, - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : false, - "distance" : 465.44, - "elevation" : "", - "lat" : 45.5280515, - "lon" : -122.6766232, - "relativeDirection" : "CONTINUE", - "stayOn" : false, - "streetName" : "Northwest Station Way", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 709.95, - "elevation" : "", - "lat" : 45.5315452, - "lon" : -122.679511, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:39:16.000+00:00", - "departure" : "2009-11-17T18:39:16.000+00:00", - "lat" : 45.5313992, - "lon" : -122.6886162, - "name" : "corner of Northwest Northrup Street and path", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 70.46, - "endTime" : "2009-11-17T18:41:18.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:39:16.000+00:00", - "departure" : "2009-11-17T18:39:16.000+00:00", - "lat" : 45.5313992, - "lon" : -122.6886162, - "name" : "corner of Northwest Northrup Street and path", - "vertexType" : "NORMAL" - }, - "generalizedCost" : 233, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 7, - "points" : "ez{tGzrykVC?I?@nBBH?d@??" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:39:16.000+00:00", - "steps" : [ - { - "absoluteDirection" : "NORTH", - "area" : false, - "bogusName" : true, - "distance" : 7.61, - "elevation" : "", - "lat" : 45.5313992, - "lon" : -122.6886162, - "relativeDirection" : "RIGHT", - "stayOn" : false, - "streetName" : "path", - "walkingBike" : false - }, - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 62.85, - "elevation" : "", - "lat" : 45.5314676, - "lon" : -122.6886182, - "relativeDirection" : "LEFT", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:41:18.000+00:00", - "departure" : "2009-11-17T18:43:26.000+00:00", - "lat" : 45.531434, - "lon" : -122.689417, - "name" : "NW Northrup & 18th", - "stopCode" : "10776", - "stopId" : "prt:10776", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : false, - "walkingBike" : false - }, - { - "agencyId" : "prt:prt", - "agencyName" : "TriMet", - "agencyTimeZoneOffset" : -28800000, - "agencyUrl" : "http://trimet.org", - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 547.79, - "endTime" : "2009-11-17T18:45:55.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:41:18.000+00:00", - "departure" : "2009-11-17T18:43:26.000+00:00", - "lat" : 45.531434, - "lon" : -122.689417, - "name" : "NW Northrup & 18th", - "stopCode" : "10776", - "stopId" : "prt:10776", - "stopIndex" : 20, - "stopSequence" : 21, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 877, - "headsign" : "NW 23rd Ave", - "interlineWithPreviousLeg" : false, - "intermediateStops" : [ - { - "arrival" : "2009-11-17T18:45:13.000+00:00", - "departure" : "2009-11-17T18:45:13.000+00:00", - "lat" : 45.531346, - "lon" : -122.694455, - "name" : "NW Northrup & 21st", - "stopCode" : "10777", - "stopId" : "prt:10777", - "stopIndex" : 21, - "stopSequence" : 22, - "vertexType" : "TRANSIT", - "zoneId" : "1" - } - ], - "legGeometry" : { - "length" : 8, - "points" : "cz{tGzwykV?VBhEFtKDvJ??@\\DnJ" - }, - "mode" : "TRAM", - "pathway" : false, - "realTime" : false, - "route" : "Portland Streetcar", - "routeId" : "prt:193", - "routeLongName" : "Portland Streetcar", - "routeType" : 0, - "serviceDate" : "2009-11-17", - "startTime" : "2009-11-17T18:43:26.000+00:00", - "steps" : [ ], - "to" : { - "arrival" : "2009-11-17T18:45:55.000+00:00", - "departure" : "2009-11-17T18:45:55.000+00:00", - "lat" : 45.531308, - "lon" : -122.696445, - "name" : "NW Northrup & 22nd", - "stopCode" : "10778", - "stopId" : "prt:10778", - "stopIndex" : 22, - "stopSequence" : 23, - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "transitLeg" : true, - "tripBlockId" : "9385", - "tripId" : "prt:1930W1220" - }, - { - "agencyTimeZoneOffset" : -28800000, - "arrivalDelay" : 0, - "departureDelay" : 0, - "distance" : 18.81, - "endTime" : "2009-11-17T18:46:19.000+00:00", - "from" : { - "arrival" : "2009-11-17T18:45:55.000+00:00", - "departure" : "2009-11-17T18:45:55.000+00:00", - "lat" : 45.531308, - "lon" : -122.696445, - "name" : "NW Northrup & 22nd", - "stopCode" : "10778", - "stopId" : "prt:10778", - "vertexType" : "TRANSIT", - "zoneId" : "1" - }, - "generalizedCost" : 37, - "interlineWithPreviousLeg" : false, - "legGeometry" : { - "length" : 7, - "points" : "sy{tGxc{kV???LABF?B??J" - }, - "mode" : "WALK", - "pathway" : false, - "realTime" : false, - "rentedBike" : false, - "route" : "", - "startTime" : "2009-11-17T18:45:55.000+00:00", - "steps" : [ - { - "absoluteDirection" : "WEST", - "area" : false, - "bogusName" : false, - "distance" : 18.81, - "elevation" : "", - "lat" : 45.5313019, - "lon" : -122.6964448, - "relativeDirection" : "DEPART", - "stayOn" : false, - "streetName" : "Northwest Northrup Street", - "walkingBike" : false - } - ], - "to" : { - "arrival" : "2009-11-17T18:46:19.000+00:00", - "lat" : 45.53122, - "lon" : -122.69659, - "name" : "NW Northrup St. & NW 22nd Ave. (P2)", - "vertexType" : "NORMAL" - }, - "transitLeg" : false, - "walkingBike" : false - } - ], - "startTime" : "2009-11-17T18:19:04.000+00:00", - "tooSloped" : false, - "transfers" : 1, - "transitTime" : 511, - "waitingTime" : 128, - "walkDistance" : 2530.76, - "walkLimitExceeded" : false, - "walkTime" : 996 - } - ] -] \ No newline at end of file From 7aea107162e71b32c672bf1563a78bf378c51c2c Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 3 Dec 2024 08:21:07 +0100 Subject: [PATCH 13/21] Switch GTFS flex durations back to seconds --- .../java/org/opentripplanner/gtfs/mapping/TripMapper.java | 2 +- .../java/org/opentripplanner/gtfs/mapping/TripMapperTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java b/application/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java index daf20445767..7b1614aa4d5 100644 --- a/application/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java +++ b/application/src/main/java/org/opentripplanner/gtfs/mapping/TripMapper.java @@ -84,7 +84,7 @@ private Optional mapSafeTimePenalty(org.onebusaway.gtfs.model.Trip } else { var offset = rhs.getSafeDurationOffset() == null ? Duration.ZERO - : Duration.ofMinutes(rhs.getSafeDurationOffset().longValue()); + : Duration.ofSeconds(rhs.getSafeDurationOffset().longValue()); var factor = rhs.getSafeDurationFactor() == null ? 1d : rhs.getSafeDurationFactor().doubleValue(); diff --git a/application/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java b/application/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java index 4132b73826c..12df141eaf4 100644 --- a/application/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java +++ b/application/src/test/java/org/opentripplanner/gtfs/mapping/TripMapperTest.java @@ -150,8 +150,8 @@ void testFlexFactorAndOffset( private static Stream provideOffsetAndFactor() { return Stream.of( - Arguments.of(1.5d, 60d, 1.5d, Duration.ofHours(1)), - Arguments.of(null, 120d, 1d, Duration.ofHours(2)), + Arguments.of(1.5d, 60d, 1.5d, Duration.ofMinutes(1)), + Arguments.of(null, 120d, 1d, Duration.ofMinutes(2)), Arguments.of(1.5d, null, 1.5d, Duration.ZERO) ); } From 2aefc16ccb38fc241965faa8fe70e8570c0b6d77 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 3 Dec 2024 14:46:02 +0100 Subject: [PATCH 14/21] Add English word as well --- .../java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java b/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java index 60cd8d0ac74..55bc87f5cad 100644 --- a/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java +++ b/application/src/main/java/org/opentripplanner/osm/tagmapping/OsmTagMapper.java @@ -103,7 +103,8 @@ public void populateProperties(WayPropertySet props) { props.setProperties("highway=trunk", withModes(CAR).bicycleSafety(7.47)); props.setProperties("highway=motorway", withModes(CAR).bicycleSafety(8)); - // Do not walk on "moottoriliikennetie"/"Kraftfahrstrasse" + // Do not walk on "moottoriliikennetie"/"Kraftfahrstrasse"/"Limited access road" + // https://en.wikipedia.org/wiki/Limited-access_road props.setProperties(new ExactMatchSpecifier("motorroad=yes"), withModes(CAR)); /* cycleway=lane */ From 3c4f03a93e45320a712ad37f315d0323816eaf7a Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Tue, 3 Dec 2024 13:54:26 +0000 Subject: [PATCH 15/21] Add changelog entry for #6288 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index 17a54ede4ae..c1fb8d42d13 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -54,6 +54,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Fix problem with relaxed-generalized-cost-at-destination [#6255](https://github.com/opentripplanner/OpenTripPlanner/pull/6255) - Reject SIRI-ET updates with empty StopPointRefs [#6266](https://github.com/opentripplanner/OpenTripPlanner/pull/6266) - Allow GTFS fuzzy trip matching even when trip descriptor has an id [#6250](https://github.com/opentripplanner/OpenTripPlanner/pull/6250) +- Make `motorroad=yes` car-only [#6288](https://github.com/opentripplanner/OpenTripPlanner/pull/6288) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 69e6f64f2566a58a81fa7d67c128bfd66041fdb7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Dec 2024 17:42:32 +0000 Subject: [PATCH 16/21] chore(deps): update debug ui dependencies (non-major) --- client/package-lock.json | 263 ++++++++++++++++++++++----------------- client/package.json | 16 +-- 2 files changed, 159 insertions(+), 120 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 36c05bdf4f1..bbed0b8e4fa 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -15,13 +15,13 @@ "graphql-request": "7.1.2", "maplibre-gl": "4.7.1", "react": "18.3.1", - "react-bootstrap": "2.10.5", + "react-bootstrap": "2.10.6", "react-dom": "18.3.1", "react-map-gl": "7.1.7" }, "devDependencies": { "@graphql-codegen/cli": "5.0.3", - "@graphql-codegen/client-preset": "4.5.0", + "@graphql-codegen/client-preset": "4.5.1", "@graphql-codegen/introspection": "4.0.3", "@parcel/watcher": "2.5.0", "@testing-library/react": "16.0.1", @@ -30,19 +30,19 @@ "@typescript-eslint/eslint-plugin": "7.18.0", "@typescript-eslint/parser": "7.18.0", "@vitejs/plugin-react": "4.3.4", - "@vitest/coverage-v8": "2.1.5", + "@vitest/coverage-v8": "2.1.8", "eslint": "8.57.1", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-react": "7.37.2", "eslint-plugin-react-hooks": "5.0.0", - "eslint-plugin-react-refresh": "0.4.14", + "eslint-plugin-react-refresh": "0.4.16", "jsdom": "25.0.1", - "prettier": "3.3.3", - "typescript": "5.6.3", - "vite": "6.0.1", - "vitest": "2.1.5" + "prettier": "3.4.1", + "typescript": "5.7.2", + "vite": "6.0.2", + "vitest": "2.1.8" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -989,9 +989,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1623,21 +1623,21 @@ } }, "node_modules/@graphql-codegen/client-preset": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.5.0.tgz", - "integrity": "sha512-0fFGSjpDhB7Jp6v+FQWDIeNJhL8VEiy3zeazyus3mGUELPaRQsoos2NczkDWnyMjSB1NHn4GrI53DB4TXkTAog==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.5.1.tgz", + "integrity": "sha512-UE2/Kz2eaxv35HIXFwlm2QwoUH77am6+qp54aeEWYq+T+WPwmIc6+YzqtGiT/VcaXgoOUSgidREGm9R6jKcf9g==", "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.11", + "@graphql-codegen/gql-tag-operations": "4.0.12", "@graphql-codegen/plugin-helpers": "^5.1.0", - "@graphql-codegen/typed-document-node": "^5.0.11", - "@graphql-codegen/typescript": "^4.1.1", - "@graphql-codegen/typescript-operations": "^4.3.1", - "@graphql-codegen/visitor-plugin-common": "^5.5.0", + "@graphql-codegen/typed-document-node": "^5.0.12", + "@graphql-codegen/typescript": "^4.1.2", + "@graphql-codegen/typescript-operations": "^4.4.0", + "@graphql-codegen/visitor-plugin-common": "^5.6.0", "@graphql-tools/documents": "^1.0.0", "@graphql-tools/utils": "^10.0.0", "@graphql-typed-document-node/core": "3.2.0", @@ -1666,14 +1666,14 @@ } }, "node_modules/@graphql-codegen/gql-tag-operations": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.11.tgz", - "integrity": "sha512-EUQuBsYB5RtNlzBb/O0nJvbWC8HvPRWwVTHRf0ElOoQlJfRgfDom2GWmEM5hXa2afzMqB7AWxOH24ibOqiYnMQ==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.12.tgz", + "integrity": "sha512-v279i49FJ5dMmQXIGUgm6FtnnkxtJjVJWDNYh9JK4ppvOixdHp+PmEzW227DkLN6avhVxNnYdp/1gdRBwdWypw==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.1.0", - "@graphql-codegen/visitor-plugin-common": "5.5.0", + "@graphql-codegen/visitor-plugin-common": "5.6.0", "@graphql-tools/utils": "^10.0.0", "auto-bind": "~4.0.0", "tslib": "~2.6.0" @@ -1736,14 +1736,14 @@ } }, "node_modules/@graphql-codegen/typed-document-node": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.0.11.tgz", - "integrity": "sha512-btENKrSIUZ5UllS8sFhVZ+Y91VL0knK9gHxW/6/WzaCTxBQ+wOk07vQNeoWlvMrkl0QeUsGt6YvSo0SoPtsKdA==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.0.12.tgz", + "integrity": "sha512-Wsbc1AqC+MFp3maWPzrmmyHLuWCPB63qBBFLTKtO6KSsnn0KnLocBp475wkfBZnFISFvzwpJ0e6LV71gKfTofQ==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.1.0", - "@graphql-codegen/visitor-plugin-common": "5.5.0", + "@graphql-codegen/visitor-plugin-common": "5.6.0", "auto-bind": "~4.0.0", "change-case-all": "1.0.15", "tslib": "~2.6.0" @@ -1756,15 +1756,15 @@ } }, "node_modules/@graphql-codegen/typescript": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.1.tgz", - "integrity": "sha512-+o5LOT71K9hdO4lDVnRGkkET5RdlKvxlQGug8dZgRGrhE2/xoPBsKfLhg9AoJGYMauNZxKj3blABQxHOKEku6Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.2.tgz", + "integrity": "sha512-GhPgfxgWEkBrvKR2y77OThus3K8B6U3ESo68l7+sHH1XiL2WapK5DdClViblJWKQerJRjfJu8tcaxQ8Wpk6Ogw==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.1.0", "@graphql-codegen/schema-ast": "^4.0.2", - "@graphql-codegen/visitor-plugin-common": "5.5.0", + "@graphql-codegen/visitor-plugin-common": "5.6.0", "auto-bind": "~4.0.0", "tslib": "~2.6.0" }, @@ -1776,15 +1776,15 @@ } }, "node_modules/@graphql-codegen/typescript-operations": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.3.1.tgz", - "integrity": "sha512-yW5Iia6IK1VKiPm3oeukYMQN5pEBLwRlG8ZzQA9beeLQ8PskKyz6mjar6U7dJ2hc8pv/qT4R8kcJOQ2RloniAQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.4.0.tgz", + "integrity": "sha512-oVlos2ySx8xIbbe8r5ZI6mOpI+OTeP14RmS2MchBJ6DL+S9G16O6+9V3Y8V22fTnmBTZkTfAAaBv4HYhhDGWVA==", "dev": true, "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.1.0", - "@graphql-codegen/typescript": "^4.1.1", - "@graphql-codegen/visitor-plugin-common": "5.5.0", + "@graphql-codegen/typescript": "^4.1.2", + "@graphql-codegen/visitor-plugin-common": "5.6.0", "auto-bind": "~4.0.0", "tslib": "~2.6.0" }, @@ -1796,9 +1796,9 @@ } }, "node_modules/@graphql-codegen/visitor-plugin-common": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.5.0.tgz", - "integrity": "sha512-FSkxe/o4qKbpK+ipIT/jxZLYH0+3+XdIrJWsKlCW9wwJMF9mEJLJtzZNcxHSjz7+Eny6SUElAT2dqZ5XByxkog==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.6.0.tgz", + "integrity": "sha512-PowcVPJbUqMC9xTJ/ZRX1p/fsdMZREc+69CM1YY+AlFng2lL0zsdBskFJSRoviQk2Ch9IPhKGyHxlJCy9X22tg==", "dev": true, "license": "MIT", "dependencies": { @@ -3008,19 +3008,19 @@ } }, "node_modules/@restart/ui": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.6.9.tgz", - "integrity": "sha512-mUbygUsJcRurjZCt1f77gg4DpheD1D+Sc7J3JjAkysUj7t8m4EBJVOqWC9788Qtbc69cJ+HlJc6jBguKwS8Mcw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.9.1.tgz", + "integrity": "sha512-qghR21ynHiUrpcIkKCoKYB+3rJtezY5Y7ikrwradCL+7hZHdQ2Ozc5ffxtpmpahoAGgc31gyXaSx2sXXaThmqA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.21.0", - "@popperjs/core": "^2.11.6", + "@babel/runtime": "^7.26.0", + "@popperjs/core": "^2.11.8", "@react-aria/ssr": "^3.5.0", - "@restart/hooks": "^0.4.9", - "@types/warning": "^3.0.0", + "@restart/hooks": "^0.5.0", + "@types/warning": "^3.0.3", "dequal": "^2.0.3", "dom-helpers": "^5.2.0", - "uncontrollable": "^8.0.1", + "uncontrollable": "^8.0.4", "warning": "^4.0.3" }, "peerDependencies": { @@ -3028,6 +3028,18 @@ "react-dom": ">=16.14.0" } }, + "node_modules/@restart/ui/node_modules/@restart/hooks": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.5.0.tgz", + "integrity": "sha512-wS+h6IusJCPjTkmOOrRZxIPICD/mtFA3PRZviutoM23/b7akyDGfZF/WS+nIFk27u7JDhPE2+0GBdZxjSqHZkg==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/@restart/ui/node_modules/uncontrollable": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", @@ -3742,9 +3754,9 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.5.tgz", - "integrity": "sha512-/RoopB7XGW7UEkUndRXF87A9CwkoZAJW01pj8/3pgmDVsjMH2IKy6H1A38po9tmUlwhSyYs0az82rbKd9Yaynw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.8.tgz", + "integrity": "sha512-2Y7BPlKH18mAZYAW1tYByudlCYrQyl5RGvnnDYJKW5tCiO5qg3KSAy3XAxcxKz900a0ZXxWtKrMuZLe3lKBpJw==", "dev": true, "license": "MIT", "dependencies": { @@ -3765,8 +3777,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "2.1.5", - "vitest": "2.1.5" + "@vitest/browser": "2.1.8", + "vitest": "2.1.8" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -3775,14 +3787,14 @@ } }, "node_modules/@vitest/expect": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.5.tgz", - "integrity": "sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.8.tgz", + "integrity": "sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.5", - "@vitest/utils": "2.1.5", + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", "chai": "^5.1.2", "tinyrainbow": "^1.2.0" }, @@ -3791,9 +3803,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.5.tgz", - "integrity": "sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz", + "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3804,13 +3816,13 @@ } }, "node_modules/@vitest/runner": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.5.tgz", - "integrity": "sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.8.tgz", + "integrity": "sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.5", + "@vitest/utils": "2.1.8", "pathe": "^1.1.2" }, "funding": { @@ -3818,13 +3830,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.5.tgz", - "integrity": "sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.8.tgz", + "integrity": "sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.5", + "@vitest/pretty-format": "2.1.8", "magic-string": "^0.30.12", "pathe": "^1.1.2" }, @@ -3833,9 +3845,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.5.tgz", - "integrity": "sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.8.tgz", + "integrity": "sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==", "dev": true, "license": "MIT", "dependencies": { @@ -3846,13 +3858,13 @@ } }, "node_modules/@vitest/utils": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.5.tgz", - "integrity": "sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", + "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.5", + "@vitest/pretty-format": "2.1.8", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" }, @@ -5792,13 +5804,13 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.14.tgz", - "integrity": "sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==", + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.16.tgz", + "integrity": "sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==", "dev": true, "license": "MIT", "peerDependencies": { - "eslint": ">=7" + "eslint": ">=8.40" } }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { @@ -8896,9 +8908,9 @@ } }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.1.tgz", + "integrity": "sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==", "dev": true, "license": "MIT", "bin": { @@ -9022,14 +9034,14 @@ } }, "node_modules/react-bootstrap": { - "version": "2.10.5", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.5.tgz", - "integrity": "sha512-XueAOEn64RRkZ0s6yzUTdpFtdUXs5L5491QU//8ZcODKJNDLt/r01tNyriZccjgRImH1REynUc9pqjiRMpDLWQ==", + "version": "2.10.6", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.6.tgz", + "integrity": "sha512-fNvKytSp0nHts1WRnRBJeBEt+I9/ZdrnhIjWOucEduRNvFRU1IXjZueDdWnBiqsTSJ7MckQJi9i/hxGolaRq+g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.24.7", "@restart/hooks": "^0.4.9", - "@restart/ui": "^1.6.9", + "@restart/ui": "^1.9.0", "@types/react-transition-group": "^4.4.6", "classnames": "^2.3.2", "dom-helpers": "^5.2.1", @@ -10374,9 +10386,9 @@ } }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -10583,10 +10595,11 @@ } }, "node_modules/vite": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.1.tgz", - "integrity": "sha512-Ldn6gorLGr4mCdFnmeAOLweJxZ34HjKnDm4HGo6P66IEqTxQb36VEdFJQENKxWjupNfoIjvRUnswjn1hpYEpjQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.2.tgz", + "integrity": "sha512-XdQ+VsY2tJpBsKGs0wf3U/+azx8BBpYRHFAyKm5VeEZNOJZRB63q7Sc8Iup3k0TrN3KO6QgyzFf+opSbfY1y0g==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.24.0", "postcss": "^8.4.49", @@ -10654,9 +10667,9 @@ } }, "node_modules/vite-node": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.5.tgz", - "integrity": "sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz", + "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==", "dev": true, "license": "MIT", "dependencies": { @@ -11142,19 +11155,19 @@ } }, "node_modules/vitest": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.5.tgz", - "integrity": "sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.8.tgz", + "integrity": "sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "2.1.5", - "@vitest/mocker": "2.1.5", - "@vitest/pretty-format": "^2.1.5", - "@vitest/runner": "2.1.5", - "@vitest/snapshot": "2.1.5", - "@vitest/spy": "2.1.5", - "@vitest/utils": "2.1.5", + "@vitest/expect": "2.1.8", + "@vitest/mocker": "2.1.8", + "@vitest/pretty-format": "^2.1.8", + "@vitest/runner": "2.1.8", + "@vitest/snapshot": "2.1.8", + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", "chai": "^5.1.2", "debug": "^4.3.7", "expect-type": "^1.1.0", @@ -11166,7 +11179,7 @@ "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.1.5", + "vite-node": "2.1.8", "why-is-node-running": "^2.3.0" }, "bin": { @@ -11181,8 +11194,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.5", - "@vitest/ui": "2.1.5", + "@vitest/browser": "2.1.8", + "@vitest/ui": "2.1.8", "happy-dom": "*", "jsdom": "*" }, @@ -11215,6 +11228,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" @@ -11231,6 +11245,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -11247,6 +11262,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -11263,6 +11279,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -11279,6 +11296,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -11295,6 +11313,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -11311,6 +11330,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -11327,6 +11347,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -11343,6 +11364,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -11359,6 +11381,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -11375,6 +11398,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -11391,6 +11415,7 @@ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -11407,6 +11432,7 @@ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -11423,6 +11449,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -11439,6 +11466,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -11455,6 +11483,7 @@ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -11471,6 +11500,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -11487,6 +11517,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -11503,6 +11534,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -11519,6 +11551,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -11535,6 +11568,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -11551,6 +11585,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -11567,6 +11602,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -11576,12 +11612,13 @@ } }, "node_modules/vitest/node_modules/@vitest/mocker": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.5.tgz", - "integrity": "sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.8.tgz", + "integrity": "sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.5", + "@vitest/spy": "2.1.8", "estree-walker": "^3.0.3", "magic-string": "^0.30.12" }, @@ -11607,6 +11644,7 @@ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -11644,6 +11682,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", diff --git a/client/package.json b/client/package.json index 57320f35540..f930bcd67d5 100644 --- a/client/package.json +++ b/client/package.json @@ -24,13 +24,13 @@ "graphql-request": "7.1.2", "maplibre-gl": "4.7.1", "react": "18.3.1", - "react-bootstrap": "2.10.5", + "react-bootstrap": "2.10.6", "react-dom": "18.3.1", "react-map-gl": "7.1.7" }, "devDependencies": { "@graphql-codegen/cli": "5.0.3", - "@graphql-codegen/client-preset": "4.5.0", + "@graphql-codegen/client-preset": "4.5.1", "@graphql-codegen/introspection": "4.0.3", "@parcel/watcher": "2.5.0", "@testing-library/react": "16.0.1", @@ -39,18 +39,18 @@ "@typescript-eslint/eslint-plugin": "7.18.0", "@typescript-eslint/parser": "7.18.0", "@vitejs/plugin-react": "4.3.4", - "@vitest/coverage-v8": "2.1.5", + "@vitest/coverage-v8": "2.1.8", "eslint": "8.57.1", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-react": "7.37.2", "eslint-plugin-react-hooks": "5.0.0", - "eslint-plugin-react-refresh": "0.4.14", + "eslint-plugin-react-refresh": "0.4.16", "jsdom": "25.0.1", - "prettier": "3.3.3", - "typescript": "5.6.3", - "vite": "6.0.1", - "vitest": "2.1.5" + "prettier": "3.4.1", + "typescript": "5.7.2", + "vite": "6.0.2", + "vitest": "2.1.8" } } From 4a61e111ed779810462623437c742228b7cb1288 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Wed, 4 Dec 2024 00:34:22 +0000 Subject: [PATCH 17/21] Add changelog entry for #6281 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index c1fb8d42d13..e216ef85fe0 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -55,6 +55,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Reject SIRI-ET updates with empty StopPointRefs [#6266](https://github.com/opentripplanner/OpenTripPlanner/pull/6266) - Allow GTFS fuzzy trip matching even when trip descriptor has an id [#6250](https://github.com/opentripplanner/OpenTripPlanner/pull/6250) - Make `motorroad=yes` car-only [#6288](https://github.com/opentripplanner/OpenTripPlanner/pull/6288) +- Add decision record for analysis and design documentation [#6281](https://github.com/opentripplanner/OpenTripPlanner/pull/6281) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 2de435c42ec9b82fd11b908f2c232d8e072dc9cb Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 4 Dec 2024 08:14:18 +0100 Subject: [PATCH 18/21] Apply new format --- .../src/components/ItineraryList/ItineraryLegDetails.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/client/src/components/ItineraryList/ItineraryLegDetails.tsx b/client/src/components/ItineraryList/ItineraryLegDetails.tsx index d23563331b5..65d790902a8 100644 --- a/client/src/components/ItineraryList/ItineraryLegDetails.tsx +++ b/client/src/components/ItineraryList/ItineraryLegDetails.tsx @@ -24,8 +24,11 @@ export function ItineraryLegDetails({ leg, isLast }: { leg: Leg; isLast: boolean {formatDistance(leg.distance)}, {formatDuration(leg.duration)} - -{' '} - + -
{leg.mode}{' '} {leg.line && ( From 27b18bd07ee13dc848eb84e3b3354c9f668b9682 Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Wed, 4 Dec 2024 08:22:57 +0000 Subject: [PATCH 19/21] Upgrade debug client to version 2024/12/2024-12-04T08:22 --- application/src/client/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/src/client/index.html b/application/src/client/index.html index 19ee598b816..391458fba41 100644 --- a/application/src/client/index.html +++ b/application/src/client/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +
From 20502170aa7a195ce4f557c59c463414d05fd702 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Wed, 4 Dec 2024 13:42:31 +0000 Subject: [PATCH 20/21] Add changelog entry for #6298 [ci skip] --- doc/user/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/user/Changelog.md b/doc/user/Changelog.md index e216ef85fe0..f6f9a55fb77 100644 --- a/doc/user/Changelog.md +++ b/doc/user/Changelog.md @@ -56,6 +56,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Allow GTFS fuzzy trip matching even when trip descriptor has an id [#6250](https://github.com/opentripplanner/OpenTripPlanner/pull/6250) - Make `motorroad=yes` car-only [#6288](https://github.com/opentripplanner/OpenTripPlanner/pull/6288) - Add decision record for analysis and design documentation [#6281](https://github.com/opentripplanner/OpenTripPlanner/pull/6281) +- Switch GTFS flex `safe_duration_offset` back to seconds [#6298](https://github.com/opentripplanner/OpenTripPlanner/pull/6298) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.6.0 (2024-09-18) From 3495393cf14fe2f1a2f8ba030e13fac413edceb6 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 4 Dec 2024 14:54:55 +0100 Subject: [PATCH 21/21] Change path --- scripts/prep-build-for-deploy-from-github-actions.sh | 4 ++-- smoke-tests/Makefile | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/prep-build-for-deploy-from-github-actions.sh b/scripts/prep-build-for-deploy-from-github-actions.sh index fc7ecbed434..c19293214a2 100755 --- a/scripts/prep-build-for-deploy-from-github-actions.sh +++ b/scripts/prep-build-for-deploy-from-github-actions.sh @@ -15,6 +15,6 @@ echo $JAR_VERSION # Create a deployment folder, and a folder for the branch. mkdir deploy # Add the JAR file. -cp application/target/*-shaded.jar deploy/otp-$JAR_VERSION.jar -cp application/target/*-shaded.jar deploy/otp-latest-$BRANCH.jar +cp shaded-jar/target/*-shaded.jar deploy/otp-$JAR_VERSION.jar +cp shaded-jar/target/*-shaded.jar deploy/otp-latest-$BRANCH.jar diff --git a/smoke-tests/Makefile b/smoke-tests/Makefile index ca800b1d69d..438359add28 100644 --- a/smoke-tests/Makefile +++ b/smoke-tests/Makefile @@ -1,7 +1,7 @@ CURL:=curl -L -\# --fail --create-dirs otp.jar: - cp ../application/target/otp-*-SNAPSHOT-shaded.jar otp.jar + cp ../shaded-jar/target/otp-*-SNAPSHOT-shaded.jar otp.jar atlanta/osm.pbf: ${CURL} http://osm.ibi-transit.com/vex/33.654066160697056,-84.759521484375,33.994611584814606,-84.30976867675781.pbf -o $@