From 1f4e07e4afef70caa7866982397a0529d6257942 Mon Sep 17 00:00:00 2001 From: Tzu-Jen Chan <126435471+tzujenchanmbd@users.noreply.github.com> Date: Fri, 7 Jul 2023 09:47:38 -0400 Subject: [PATCH 1/5] Replace "travel" by "trip Replace "travel" durations (rider-oriented) by "trip" durations (vehicle/service-oriented) --- spec/reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/reference.md b/spec/reference.md index b8d0f68..d479cbf 100644 --- a/spec/reference.md +++ b/spec/reference.md @@ -91,7 +91,7 @@ In order for a trip planner to provide a user with information about how to requ | `end_pickup_drop_off_window` | Time | **Conditionally Required** | Time that on-demand service ends in a GeoJSON location, stop area or stop.

**Conditionally Required**:
- **Required** if `stop_times.stop_id` refers to `stop_areas.area_id` or `id` from `locations.geojson`.
- **Forbidden** if `stop_times.arrival_time` or `stop_times.departure_time` are defined. | | `pickup_type` | Enum | **Conditionally Forbidden** | Indicates pickup method. Valid options are:

`0` or empty - Regularly scheduled pickup.
`1` - No pickup available.
`2` - Must phone agency to arrange pickup.
`3` - Must coordinate with driver to arrange pickup.

**Conditionally Forbidden**:
- `pickup_type=0` **forbidden** for `stop_times.stop_id` referring to `stop_areas.area_id` or `id` from `locations.geojson`.
- `pickup_type=3` **forbidden** for `stop_areas.area_id` or `locations.geojson`.
- Optional otherwise. | | `drop_off_type` | Enum | **Conditionally Forbidden** | Indicates drop off method. Valid options are:

`0` or empty - Regularly scheduled drop off.
`1` - No drop off available.
`2` - Must phone agency to arrange drop off.
`3` - Must coordinate with driver to arrange drop off.

**Conditionally Forbidden**:
- `drop_off_type=0` **forbidden** for `stop_times.stop_id` referring to `stop_areas.area_id` or `id` from `locations.geojson`.
- Optional otherwise. -| `mean_duration_factor`

and

`mean_duration_offset` | Float | **Conditionally Forbidden** | Together, `mean_duration_factor` and `mean_duration_offset` allow an estimation of the duration a rider’s trip will take, in minutes, using the on-demand service in a GeoJSON location or stop area.

Data consumers are expected to use `mean_duration_factor` and `mean_duration_offset` to make the following calculation:

`MeanTravelDuration = mean_duration_factor × DrivingDuration + mean_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `MeanTravelDuration` is the calculated average time one expects to travel the same trip using the on-demand service.

The `MeanTravelDuration` may be calculated for the time and the day of the trip to take into account traffic; in other words the consumer is expected to know that `DrivingDuration` is dynamic. Producers should thus provide values that reflect increases in `DrivingDuration` due to additional pickups and drop offs beyond that of the passenger. A downtown TNC will likely always have a `mean_duration_factor` of 1, with or without traffic, since it goes with the flow. But a shared service can have a factor of 2 or more if many additional pickups and drop offs are expected. `mean_duration_offset` can be utilized to increase travel times of shorter trips relatively more than times for longer trips.

While traveling through undefined space between GeoJSON locations or stop areas, it is assumed that:

`MeanTravelDuration = DrivingDuration`

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | +| `mean_duration_factor`

and

`mean_duration_offset` | Float | **Conditionally Forbidden** | Together, `mean_duration_factor` and `mean_duration_offset` allow an estimation of the duration a rider’s trip will take, in minutes, using the on-demand service in a GeoJSON location or stop area.

Data consumers are expected to use `mean_duration_factor` and `mean_duration_offset` to make the following calculation:

`MeanTripDuration = mean_duration_factor × DrivingDuration + mean_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `MeanTripDuration` is the calculated average time one expects to travel the same trip using the on-demand service.

The `MeanTripDuration` may be calculated for the time and the day of the trip to take into account traffic; in other words the consumer is expected to know that `DrivingDuration` is dynamic. Producers should thus provide values that reflect increases in `DrivingDuration` due to additional pickups and drop offs beyond that of the passenger. A downtown TNC will likely always have a `mean_duration_factor` of 1, with or without traffic, since it goes with the flow. But a shared service can have a factor of 2 or more if many additional pickups and drop offs are expected. `mean_duration_offset` can be utilized to increase travel times of shorter trips relatively more than times for longer trips.

While traveling through undefined space between GeoJSON locations or stop areas, it is assumed that:

`MeanTripDuration = DrivingDuration`

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | | `safe_duration_factor`

and

`safe_duration_offset` | Float | **Conditionally Forbidden** | Together, `safe_duration_factor` and `safe_duration_offset` allow an estimation of the longest amount of time a rider can expect the on-demand service in a GeoJSON location or stop areas may require, in minutes, for 95% of trips.

Data consumers are expected to use `safe_duration_factor` and `safe_duration_offset` to make the following calculation:

`SafeTravelDuration = safe_duration_factor × DrivingDuration + safe_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `SafeTravelDuration` is the longest amount of time a rider can expect the on-demand service in a GeoJSON location or stop area may require.

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | ## GTFS-BookingRules From 86bf83f7505407410a258e16b394d227ef8498a8 Mon Sep 17 00:00:00 2001 From: Tzu-Jen Chan <126435471+tzujenchanmbd@users.noreply.github.com> Date: Fri, 7 Jul 2023 10:17:39 -0400 Subject: [PATCH 2/5] Define "mean" & when start/end For mean_duration: - Better definition of the "mean" and "safe" concepts - Define when the trip durations start and end --- spec/reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/reference.md b/spec/reference.md index d479cbf..0cc889b 100644 --- a/spec/reference.md +++ b/spec/reference.md @@ -91,7 +91,7 @@ In order for a trip planner to provide a user with information about how to requ | `end_pickup_drop_off_window` | Time | **Conditionally Required** | Time that on-demand service ends in a GeoJSON location, stop area or stop.

**Conditionally Required**:
- **Required** if `stop_times.stop_id` refers to `stop_areas.area_id` or `id` from `locations.geojson`.
- **Forbidden** if `stop_times.arrival_time` or `stop_times.departure_time` are defined. | | `pickup_type` | Enum | **Conditionally Forbidden** | Indicates pickup method. Valid options are:

`0` or empty - Regularly scheduled pickup.
`1` - No pickup available.
`2` - Must phone agency to arrange pickup.
`3` - Must coordinate with driver to arrange pickup.

**Conditionally Forbidden**:
- `pickup_type=0` **forbidden** for `stop_times.stop_id` referring to `stop_areas.area_id` or `id` from `locations.geojson`.
- `pickup_type=3` **forbidden** for `stop_areas.area_id` or `locations.geojson`.
- Optional otherwise. | | `drop_off_type` | Enum | **Conditionally Forbidden** | Indicates drop off method. Valid options are:

`0` or empty - Regularly scheduled drop off.
`1` - No drop off available.
`2` - Must phone agency to arrange drop off.
`3` - Must coordinate with driver to arrange drop off.

**Conditionally Forbidden**:
- `drop_off_type=0` **forbidden** for `stop_times.stop_id` referring to `stop_areas.area_id` or `id` from `locations.geojson`.
- Optional otherwise. -| `mean_duration_factor`

and

`mean_duration_offset` | Float | **Conditionally Forbidden** | Together, `mean_duration_factor` and `mean_duration_offset` allow an estimation of the duration a rider’s trip will take, in minutes, using the on-demand service in a GeoJSON location or stop area.

Data consumers are expected to use `mean_duration_factor` and `mean_duration_offset` to make the following calculation:

`MeanTripDuration = mean_duration_factor × DrivingDuration + mean_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `MeanTripDuration` is the calculated average time one expects to travel the same trip using the on-demand service.

The `MeanTripDuration` may be calculated for the time and the day of the trip to take into account traffic; in other words the consumer is expected to know that `DrivingDuration` is dynamic. Producers should thus provide values that reflect increases in `DrivingDuration` due to additional pickups and drop offs beyond that of the passenger. A downtown TNC will likely always have a `mean_duration_factor` of 1, with or without traffic, since it goes with the flow. But a shared service can have a factor of 2 or more if many additional pickups and drop offs are expected. `mean_duration_offset` can be utilized to increase travel times of shorter trips relatively more than times for longer trips.

While traveling through undefined space between GeoJSON locations or stop areas, it is assumed that:

`MeanTripDuration = DrivingDuration`

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | +| `mean_duration_factor`

and

`mean_duration_offset` | Float | **Conditionally Forbidden** | Together, `mean_duration_factor` and `mean_duration_offset` allow an estimation of the mean trip duration, in minutes, of an on-demand service in a GeoJSON location or stop area. The mean trip duration represents the average time the rider travels in the vehicle based on historical data. The trip duration starts at rider pickup, and ends at rider drop off.

Data consumers are expected to use `mean_duration_factor` and `mean_duration_offset` to make the following calculation:

`MeanTripDuration = mean_duration_factor × DrivingDuration + mean_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `MeanTripDuration` is the calculated average time one expects to travel the same trip using the on-demand service.

The `MeanTripDuration` may be calculated for the time and the day of the trip to take into account traffic; in other words the consumer is expected to know that `DrivingDuration` is dynamic. Producers should thus provide values that reflect increases in `DrivingDuration` due to additional pickups and drop offs beyond that of the passenger. A downtown TNC will likely always have a `mean_duration_factor` of 1, with or without traffic, since it goes with the flow. But a shared service can have a factor of 2 or more if many additional pickups and drop offs are expected. `mean_duration_offset` can be utilized to increase travel times of shorter trips relatively more than times for longer trips.

While traveling through undefined space between GeoJSON locations or stop areas, it is assumed that:

`MeanTripDuration = DrivingDuration`

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | | `safe_duration_factor`

and

`safe_duration_offset` | Float | **Conditionally Forbidden** | Together, `safe_duration_factor` and `safe_duration_offset` allow an estimation of the longest amount of time a rider can expect the on-demand service in a GeoJSON location or stop areas may require, in minutes, for 95% of trips.

Data consumers are expected to use `safe_duration_factor` and `safe_duration_offset` to make the following calculation:

`SafeTravelDuration = safe_duration_factor × DrivingDuration + safe_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `SafeTravelDuration` is the longest amount of time a rider can expect the on-demand service in a GeoJSON location or stop area may require.

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | ## GTFS-BookingRules From 3c8fdbbd9c920712d0048a3a28d66565a05ef749 Mon Sep 17 00:00:00 2001 From: Tzu-Jen Chan <126435471+tzujenchanmbd@users.noreply.github.com> Date: Fri, 7 Jul 2023 10:23:28 -0400 Subject: [PATCH 3/5] Replace "travel times" by "the duration" --- spec/reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/reference.md b/spec/reference.md index 0cc889b..801acba 100644 --- a/spec/reference.md +++ b/spec/reference.md @@ -91,7 +91,7 @@ In order for a trip planner to provide a user with information about how to requ | `end_pickup_drop_off_window` | Time | **Conditionally Required** | Time that on-demand service ends in a GeoJSON location, stop area or stop.

**Conditionally Required**:
- **Required** if `stop_times.stop_id` refers to `stop_areas.area_id` or `id` from `locations.geojson`.
- **Forbidden** if `stop_times.arrival_time` or `stop_times.departure_time` are defined. | | `pickup_type` | Enum | **Conditionally Forbidden** | Indicates pickup method. Valid options are:

`0` or empty - Regularly scheduled pickup.
`1` - No pickup available.
`2` - Must phone agency to arrange pickup.
`3` - Must coordinate with driver to arrange pickup.

**Conditionally Forbidden**:
- `pickup_type=0` **forbidden** for `stop_times.stop_id` referring to `stop_areas.area_id` or `id` from `locations.geojson`.
- `pickup_type=3` **forbidden** for `stop_areas.area_id` or `locations.geojson`.
- Optional otherwise. | | `drop_off_type` | Enum | **Conditionally Forbidden** | Indicates drop off method. Valid options are:

`0` or empty - Regularly scheduled drop off.
`1` - No drop off available.
`2` - Must phone agency to arrange drop off.
`3` - Must coordinate with driver to arrange drop off.

**Conditionally Forbidden**:
- `drop_off_type=0` **forbidden** for `stop_times.stop_id` referring to `stop_areas.area_id` or `id` from `locations.geojson`.
- Optional otherwise. -| `mean_duration_factor`

and

`mean_duration_offset` | Float | **Conditionally Forbidden** | Together, `mean_duration_factor` and `mean_duration_offset` allow an estimation of the mean trip duration, in minutes, of an on-demand service in a GeoJSON location or stop area. The mean trip duration represents the average time the rider travels in the vehicle based on historical data. The trip duration starts at rider pickup, and ends at rider drop off.

Data consumers are expected to use `mean_duration_factor` and `mean_duration_offset` to make the following calculation:

`MeanTripDuration = mean_duration_factor × DrivingDuration + mean_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `MeanTripDuration` is the calculated average time one expects to travel the same trip using the on-demand service.

The `MeanTripDuration` may be calculated for the time and the day of the trip to take into account traffic; in other words the consumer is expected to know that `DrivingDuration` is dynamic. Producers should thus provide values that reflect increases in `DrivingDuration` due to additional pickups and drop offs beyond that of the passenger. A downtown TNC will likely always have a `mean_duration_factor` of 1, with or without traffic, since it goes with the flow. But a shared service can have a factor of 2 or more if many additional pickups and drop offs are expected. `mean_duration_offset` can be utilized to increase travel times of shorter trips relatively more than times for longer trips.

While traveling through undefined space between GeoJSON locations or stop areas, it is assumed that:

`MeanTripDuration = DrivingDuration`

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | +| `mean_duration_factor`

and

`mean_duration_offset` | Float | **Conditionally Forbidden** | Together, `mean_duration_factor` and `mean_duration_offset` allow an estimation of the mean trip duration, in minutes, of an on-demand service in a GeoJSON location or stop area. The mean trip duration represents the average time the rider travels in the vehicle based on historical data. The trip duration starts at rider pickup, and ends at rider drop off.

Data consumers are expected to use `mean_duration_factor` and `mean_duration_offset` to make the following calculation:

`MeanTripDuration = mean_duration_factor × DrivingDuration + mean_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `MeanTripDuration` is the calculated average time one expects to travel the same trip using the on-demand service.

The `MeanTripDuration` may be calculated for the time and the day of the trip to take into account traffic; in other words the consumer is expected to know that `DrivingDuration` is dynamic. Producers should thus provide values that reflect increases in `DrivingDuration` due to additional pickups and drop offs beyond that of the passenger. A downtown TNC will likely always have a `mean_duration_factor` of 1, with or without traffic, since it goes with the flow. But a shared service can have a factor of 2 or more if many additional pickups and drop offs are expected. `mean_duration_offset` can be utilized to increase the duration of shorter trips relatively more than times for longer trips.

While traveling through undefined space between GeoJSON locations or stop areas, it is assumed that:

`MeanTripDuration = DrivingDuration`

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | | `safe_duration_factor`

and

`safe_duration_offset` | Float | **Conditionally Forbidden** | Together, `safe_duration_factor` and `safe_duration_offset` allow an estimation of the longest amount of time a rider can expect the on-demand service in a GeoJSON location or stop areas may require, in minutes, for 95% of trips.

Data consumers are expected to use `safe_duration_factor` and `safe_duration_offset` to make the following calculation:

`SafeTravelDuration = safe_duration_factor × DrivingDuration + safe_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `SafeTravelDuration` is the longest amount of time a rider can expect the on-demand service in a GeoJSON location or stop area may require.

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | ## GTFS-BookingRules From 69d08820c2764be47ff19ef34e4b03506c62aab4 Mon Sep 17 00:00:00 2001 From: Tzu-Jen Chan <126435471+tzujenchanmbd@users.noreply.github.com> Date: Fri, 7 Jul 2023 10:37:24 -0400 Subject: [PATCH 4/5] Define "safe" & when start/end For safe_duration - Better definition of the "safe" concept - Define when the trip durations start and end - Replace "SafeTravelDuration" by "SafeTripDuration" --- spec/reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/reference.md b/spec/reference.md index 801acba..62c0765 100644 --- a/spec/reference.md +++ b/spec/reference.md @@ -92,7 +92,7 @@ In order for a trip planner to provide a user with information about how to requ | `pickup_type` | Enum | **Conditionally Forbidden** | Indicates pickup method. Valid options are:

`0` or empty - Regularly scheduled pickup.
`1` - No pickup available.
`2` - Must phone agency to arrange pickup.
`3` - Must coordinate with driver to arrange pickup.

**Conditionally Forbidden**:
- `pickup_type=0` **forbidden** for `stop_times.stop_id` referring to `stop_areas.area_id` or `id` from `locations.geojson`.
- `pickup_type=3` **forbidden** for `stop_areas.area_id` or `locations.geojson`.
- Optional otherwise. | | `drop_off_type` | Enum | **Conditionally Forbidden** | Indicates drop off method. Valid options are:

`0` or empty - Regularly scheduled drop off.
`1` - No drop off available.
`2` - Must phone agency to arrange drop off.
`3` - Must coordinate with driver to arrange drop off.

**Conditionally Forbidden**:
- `drop_off_type=0` **forbidden** for `stop_times.stop_id` referring to `stop_areas.area_id` or `id` from `locations.geojson`.
- Optional otherwise. | `mean_duration_factor`

and

`mean_duration_offset` | Float | **Conditionally Forbidden** | Together, `mean_duration_factor` and `mean_duration_offset` allow an estimation of the mean trip duration, in minutes, of an on-demand service in a GeoJSON location or stop area. The mean trip duration represents the average time the rider travels in the vehicle based on historical data. The trip duration starts at rider pickup, and ends at rider drop off.

Data consumers are expected to use `mean_duration_factor` and `mean_duration_offset` to make the following calculation:

`MeanTripDuration = mean_duration_factor × DrivingDuration + mean_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `MeanTripDuration` is the calculated average time one expects to travel the same trip using the on-demand service.

The `MeanTripDuration` may be calculated for the time and the day of the trip to take into account traffic; in other words the consumer is expected to know that `DrivingDuration` is dynamic. Producers should thus provide values that reflect increases in `DrivingDuration` due to additional pickups and drop offs beyond that of the passenger. A downtown TNC will likely always have a `mean_duration_factor` of 1, with or without traffic, since it goes with the flow. But a shared service can have a factor of 2 or more if many additional pickups and drop offs are expected. `mean_duration_offset` can be utilized to increase the duration of shorter trips relatively more than times for longer trips.

While traveling through undefined space between GeoJSON locations or stop areas, it is assumed that:

`MeanTripDuration = DrivingDuration`

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | -| `safe_duration_factor`

and

`safe_duration_offset` | Float | **Conditionally Forbidden** | Together, `safe_duration_factor` and `safe_duration_offset` allow an estimation of the longest amount of time a rider can expect the on-demand service in a GeoJSON location or stop areas may require, in minutes, for 95% of trips.

Data consumers are expected to use `safe_duration_factor` and `safe_duration_offset` to make the following calculation:

`SafeTravelDuration = safe_duration_factor × DrivingDuration + safe_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `SafeTravelDuration` is the longest amount of time a rider can expect the on-demand service in a GeoJSON location or stop area may require.

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | +| `safe_duration_factor`

and

`safe_duration_offset` | Float | **Conditionally Forbidden** | Together, `safe_duration_factor` and `safe_duration_offset` allow an estimation of the safe trip duration, in minutes, of an on-demand service in a GeoJSON location or stop area. The safe trip duration represents the 95th percentile of trip durations based on historical data. Statistically, the rider will travel in the vehicle for an amount of time equal to or less than safe trip duration for 95% of the time. The trip duration starts at rider pickup, and ends at rider drop off.

Data consumers are expected to use `safe_duration_factor` and `safe_duration_offset` to make the following calculation:

`SafeTripDuration = safe_duration_factor × DrivingDuration + safe_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `SafeTripDuration` is the longest amount of time a rider can expect the on-demand service in a GeoJSON location or stop area may require.

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | ## GTFS-BookingRules From e73c228e72a5b1c732e71f226b97efed4a7e3a2b Mon Sep 17 00:00:00 2001 From: Tzu-Jen Chan <126435471+tzujenchanmbd@users.noreply.github.com> Date: Tue, 11 Jul 2023 16:35:44 -0400 Subject: [PATCH 5/5] Remove "based on historical data" --- spec/reference.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/reference.md b/spec/reference.md index 62c0765..224b059 100644 --- a/spec/reference.md +++ b/spec/reference.md @@ -91,8 +91,8 @@ In order for a trip planner to provide a user with information about how to requ | `end_pickup_drop_off_window` | Time | **Conditionally Required** | Time that on-demand service ends in a GeoJSON location, stop area or stop.

**Conditionally Required**:
- **Required** if `stop_times.stop_id` refers to `stop_areas.area_id` or `id` from `locations.geojson`.
- **Forbidden** if `stop_times.arrival_time` or `stop_times.departure_time` are defined. | | `pickup_type` | Enum | **Conditionally Forbidden** | Indicates pickup method. Valid options are:

`0` or empty - Regularly scheduled pickup.
`1` - No pickup available.
`2` - Must phone agency to arrange pickup.
`3` - Must coordinate with driver to arrange pickup.

**Conditionally Forbidden**:
- `pickup_type=0` **forbidden** for `stop_times.stop_id` referring to `stop_areas.area_id` or `id` from `locations.geojson`.
- `pickup_type=3` **forbidden** for `stop_areas.area_id` or `locations.geojson`.
- Optional otherwise. | | `drop_off_type` | Enum | **Conditionally Forbidden** | Indicates drop off method. Valid options are:

`0` or empty - Regularly scheduled drop off.
`1` - No drop off available.
`2` - Must phone agency to arrange drop off.
`3` - Must coordinate with driver to arrange drop off.

**Conditionally Forbidden**:
- `drop_off_type=0` **forbidden** for `stop_times.stop_id` referring to `stop_areas.area_id` or `id` from `locations.geojson`.
- Optional otherwise. -| `mean_duration_factor`

and

`mean_duration_offset` | Float | **Conditionally Forbidden** | Together, `mean_duration_factor` and `mean_duration_offset` allow an estimation of the mean trip duration, in minutes, of an on-demand service in a GeoJSON location or stop area. The mean trip duration represents the average time the rider travels in the vehicle based on historical data. The trip duration starts at rider pickup, and ends at rider drop off.

Data consumers are expected to use `mean_duration_factor` and `mean_duration_offset` to make the following calculation:

`MeanTripDuration = mean_duration_factor × DrivingDuration + mean_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `MeanTripDuration` is the calculated average time one expects to travel the same trip using the on-demand service.

The `MeanTripDuration` may be calculated for the time and the day of the trip to take into account traffic; in other words the consumer is expected to know that `DrivingDuration` is dynamic. Producers should thus provide values that reflect increases in `DrivingDuration` due to additional pickups and drop offs beyond that of the passenger. A downtown TNC will likely always have a `mean_duration_factor` of 1, with or without traffic, since it goes with the flow. But a shared service can have a factor of 2 or more if many additional pickups and drop offs are expected. `mean_duration_offset` can be utilized to increase the duration of shorter trips relatively more than times for longer trips.

While traveling through undefined space between GeoJSON locations or stop areas, it is assumed that:

`MeanTripDuration = DrivingDuration`

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | -| `safe_duration_factor`

and

`safe_duration_offset` | Float | **Conditionally Forbidden** | Together, `safe_duration_factor` and `safe_duration_offset` allow an estimation of the safe trip duration, in minutes, of an on-demand service in a GeoJSON location or stop area. The safe trip duration represents the 95th percentile of trip durations based on historical data. Statistically, the rider will travel in the vehicle for an amount of time equal to or less than safe trip duration for 95% of the time. The trip duration starts at rider pickup, and ends at rider drop off.

Data consumers are expected to use `safe_duration_factor` and `safe_duration_offset` to make the following calculation:

`SafeTripDuration = safe_duration_factor × DrivingDuration + safe_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `SafeTripDuration` is the longest amount of time a rider can expect the on-demand service in a GeoJSON location or stop area may require.

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | +| `mean_duration_factor`

and

`mean_duration_offset` | Float | **Conditionally Forbidden** | Together, `mean_duration_factor` and `mean_duration_offset` allow an estimation of the mean trip duration, in minutes, of an on-demand service in a GeoJSON location or stop area. The mean trip duration represents the average time the rider travels in the vehicle. The trip duration starts at rider pickup, and ends at rider drop off.

Data consumers are expected to use `mean_duration_factor` and `mean_duration_offset` to make the following calculation:

`MeanTripDuration = mean_duration_factor × DrivingDuration + mean_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `MeanTripDuration` is the calculated average time one expects to travel the same trip using the on-demand service.

The `MeanTripDuration` may be calculated for the time and the day of the trip to take into account traffic; in other words the consumer is expected to know that `DrivingDuration` is dynamic. Producers should thus provide values that reflect increases in `DrivingDuration` due to additional pickups and drop offs beyond that of the passenger. A downtown TNC will likely always have a `mean_duration_factor` of 1, with or without traffic, since it goes with the flow. But a shared service can have a factor of 2 or more if many additional pickups and drop offs are expected. `mean_duration_offset` can be utilized to increase the duration of shorter trips relatively more than times for longer trips.

While traveling through undefined space between GeoJSON locations or stop areas, it is assumed that:

`MeanTripDuration = DrivingDuration`

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | +| `safe_duration_factor`

and

`safe_duration_offset` | Float | **Conditionally Forbidden** | Together, `safe_duration_factor` and `safe_duration_offset` allow an estimation of the safe trip duration, in minutes, of an on-demand service in a GeoJSON location or stop area. The safe trip duration represents the 95th percentile of trip durations. Statistically, the rider will travel in the vehicle for an amount of time equal to or less than safe trip duration for 95% of the time. The trip duration starts at rider pickup, and ends at rider drop off.

Data consumers are expected to use `safe_duration_factor` and `safe_duration_offset` to make the following calculation:

`SafeTripDuration = safe_duration_factor × DrivingDuration + safe_duration_offset`

Where `DrivingDuration` is the time it would take in a car to travel the distance being calculated for the on-demand service, and `SafeTripDuration` is the longest amount of time a rider can expect the on-demand service in a GeoJSON location or stop area may require.

**Conditionally Forbidden**:
- **Forbidden** if `stop_times.stop_id` does not refer to a `stop_areas.area_id` or an `id` from `locations.geojson`.
- Optional otherwise. | ## GTFS-BookingRules