Skip to content

Commit

Permalink
Write thorough docs on travel mode scoping
Browse files Browse the repository at this point in the history
  • Loading branch information
vcschapp committed Jun 23, 2023
1 parent 729366b commit d6801d7
Show file tree
Hide file tree
Showing 6 changed files with 300 additions and 9 deletions.
25 changes: 19 additions & 6 deletions docusaurus/docs/themes/transportation/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,6 @@ page.

</li>

<!--

TODO: A bullet for travel modes, and a page for travel modes.

-->

<li>

<p>
Expand All @@ -99,6 +93,25 @@ Read more about roads on the [Roads](roads) page.

</li>

<li>

<p>

**Travel Modes.** The Transportation theme supports a fuzzy concept called
travel mode which can be used as a way of controlling the scope of scoped
and rule-based properties.

</p>

<p>

Read more about the travel modes concept and how travel modes interact
with other scoping properties on the [Travel Modes](travel-modes) page.

</p>

</li>

</ul>

## Schema Reference
Expand Down
7 changes: 4 additions & 3 deletions docusaurus/docs/themes/transportation/scoping-rules.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ The Overture Transportation theme's schema model of the transportation
network uses two related concepts to capture the partial application of
facts and rules: Scoped values, and Rule-based properties.

## Scoped values
## Scoped values and Scoping properties

A *Scoped* value is a value which only applies within a limited scope.
Most scoped values are rules in the rule lists of
Expand All @@ -31,7 +31,7 @@ example a signpost property belonging to a road segment might be
geometrically scoped to its position along the road.

The scope in which a scoped value applies is controlled by one or more
special child properties of the value known as scoping properties.
special child properties of the value known as *Scoping* properties.

### Geometric scoping (linear referencing)

Expand Down Expand Up @@ -174,7 +174,8 @@ listed travel modes. Conversely, the construct
`when: { modeNot: [...] }` scopes the parent value to apply only when
the traveller is *not* using one of the listed travel modes.

To dive deeper into this topic, see the page on Travel Modes. **TODO: Link.**
To dive deeper into this topic, see the page on
[Travel Modes](travel-modes).

<!--

Expand Down
270 changes: 270 additions & 0 deletions docusaurus/docs/themes/transportation/travel-modes.mdx
Original file line number Diff line number Diff line change
@@ -1 +1,271 @@
# Travel Modes

In the real world, a travel mode can be thought of intuitively as a way
of getting from point A to point B. Travel modes can include non-vehicle
modes (foot), vehicle modes (a bicycle or motor vehicle), and
occasionally more granular details (that motor vehicle might be
classified as a "high occupancy vehicle" or a "heavy goods vehicle").

Within the Overture Transportation theme's schema model, the real world
intuition translates to the following definition: a travel mode is a
recognized mode by which a person or thing may use a
[Segment](/reference/transportation/segment) feature.

## Understanding travel modes

### Implied travel modes

Every segment has an *implied* set of travel modes that are allowed to
use the segment. For [Road](roads) segments, this implied set derives
from the [road class](roads#road-class), as well as local rules, norms,
and customs operative where the road segment is situated.

Since this implied set depends on locality or jurisdiction, and is
susceptible of varying over time, the Overture Transportation schema
does not try to specify the implied set. Resolution of the implied set
is done by the specific application in the case where this level of
detail is important for its proper functioning. (An accurate routing
engine may need this information, whereas a 2D map render or a geocoder
likely do not.)

### General definitions

Overture's recognized travel modes are defined in general terms that are
broadly applicable, for example `hov` is a high-occupancy vehicle and
`hgv` is a heavy goods vehicle. In most jurisdictions, these general
terms map to a concept that is in use within the jurisdiction, even
though the local name for the concept may vary, for example one
jurisdiction may say "heavy goods vehicle" and another may say
"large goods vehicle".

Despite being broadly-applicable, travel modes may have different
definitions in different places and at different times.

- In one jurisdiction, an `hgv` might mean any vehicle with a gross
vehicle weight in excess of 3.5 tonnes (3,500 kg). In another place,
an `hgv` might have a gross vehicle weight of at least 10,001 lbs.
- In one jurisdiction, an `hov` might require a minimum of 2 passengers
while in another place it might have a higher minimum passenger count,
or include battery-electric vehicles, or exclude certain classes of
vehicle or usage.

As a consequence of the variance in definition across place and time,
Overture gives only general definitions for travel modes, leaving
precise definition to those applications that require them.

### When is a travel mode recognized?

A travel mode is recognized by the Overture Transportation schema when
it becomes part of the [`mode`](https://github.com/OvertureMaps/schema/blob/5f82f1d6a916031cb32730e1fac7e1a353f10c60/schema/transportation/segment.yaml#L103)
enumeration. As of our draft schema release `v0.4.0`, this enumeration
is relatively small and contains only travel modes which we some
confidence will be generally-applicable both across jurisdictions and
over time. We expect the list to change in future schema updates, to be
larger once we reach a table `v1.0.0` schema, and to continue to expand
as the world changes and new information arises.

Our criteria for recognizing a proposed new travel mode are:

1. The proposed new travel mode should represent a *generally-accepted*
concept meaning that the concept exists in many places with roughly
the same definition.
2. The proposed new travel mode should be referred to with well-known
sign iconography or sign text in those jurisdictions where the
concept exists; and this iconography or sign text is preferably
somewhat consistent across many jurisdictions and over time.
3. It must be possible to give a relatively precise *definition* to the
proposed new travel mode and explain how it *differs* from, or
*intersects* with, other similar travel modes which are already
recognized in the Overture schema.
4. The proposed new travel mode should preferably not be trivially
expressible using another existing
[Scoping Property](scoping-rules#scoped-values-and-scoping-properties).
(*An example of such a trivially-expressible concept might be a
"three-axle vehicle" which is more appropriately phrased as
`vehicle: { axleCount: { isEqualTo: 3 } }`.*)
5. The proposed new travel mode must be supported by existing data in at
least one of Overture's upstream data sources.

There is a risk that the above-described approach will be too slow to
adapt to our users' needs in a vast, ever-changing world. One possible
avenue to mitigate this risk is supporting
[custom extensions](#should-we-support-extension-travel-modes) to the
built-in list of recognized travel modes.

## Travel mode schema

### Scoping to travel modes

Travel modes can used to change the scope of scoped and rule-based
properties within the schema. For example, they can affect the scope of
access restrictions, turn restrictions, or speed limits on [road](roads)
segments. Since travel modes are expressed via scoping properties, it
is recommended to read the section on
[Scoped and Rule-Based Properties](scoping-rules) before proceeding
further.

#### Travel mode scoping: `mode` and `modeNot`

Two scoping properties control whether a given scoped property applies
to a given travel mode: `mode` and `modeNot`.

If either `mode` or `modeNot` property is specified, the property value
must be a non-empty, array of travel modes, and is interpreted as a set.
Values must be unique, but order is not important.

The `mode` and `modeNot` properties are not mutually exclusive: in
places where scoping by travel mode is allowed, either `mode` or
`modeNot`, or both, may be provided.

1. **Neither**. When *neither* `mode` nor `modeNot` is provided, the
parent property's scope includes all possible travel modes.
2. **Only `mode`**. When `mode` is provided by itself, the parent
property is scoped to include only those travel modes that included
in the `mode` set.
3. **Only `modeNot`**. When `modeNot` is provided by itself, the parent
property is scoped to include all those travel modes that are not
included in the `modeNot` set.
4. **Both**. When both `mode` and `modeNot` are provided, the parent
property is scoped to include all those travel modes that are
included in the `mode` set *except* those that are included in the
`modeNot` set. (*For example,
`mode: [motorVehicle], modeNot: [motorcycle]` expresses the travel
mode scope "all motor vehicles except motorcycles".*)

#### Vehicle attribute scoping: `vehicle`

Because travel modes are an "fuzzy" concept, there are inevitably areas
of overlap between with the more precise, but more limited, `vehicle`
scoping property which is used for
[vehicle attributes scoping](scoping-rules#vehicle-attributes-scoping).

Where there is potential overlap, the method of scoping used in Overture
data releases will depend on how the upstream data source has expressed
the equivalent concept. Where there is choice, it is preferable to
select the scoping method that most accurately reflects the intention
expressed on local signage.

#### Similar scoping properties: `using` and `recognized`

The scoping properties `using` and `recognized` express concepts that
are meant to be orthogonal to (completely separate from) travel modes.

- The `using` property indicates
[purpose of use](scoping-rules#purpose-of-use-scoping) scoping, which
relates to the purpose for which the person or thing travelling is
using a given segment of the transportation network. Travel modes
should ideally not embed a purpose of use.
- The `recognized` property indicates
[status scoping](scoping-rules#status-scoping-membership-in-a-recognized-group),
which relates to a recognized status given to the person or thing
travelling, where the recognized status is distinct from the mode of
travel itself. Travel modes should ideally not embed a status.

### The travel modes taxonomy

Overture travel modes form a shallow taxonomy. Some travel modes are
more general, while others are more specific, and a more general travel
mode may contain a more specific one. For example, the general travel
mode `vehicle` contains the more specific mode `motorVehicle`.

The taxonomy supported in our draft schema `v0.4.0` can be visualized
in the diagram below.

<figure>

<div style={{ display: "flex", alignItems: "center" }}>

<div style={{ width: "72%", float: "left", paddingRight: "3px" }}>

![The Overture travel modes taxonomy](/img/transportation/travel-modes-taxonomy.svg)

</div>

<div style={{ width: "28%", float: "right", paddingLeft: "3px" }}>

![Legend graphic for Overture travel modes taxonomy](/img/transportation/travel-modes-legend.svg)

</div>

<div style={{ clear: "both" }}/>

</div>

<figcaption>

<div style={{ textAlign: "center" }}>

*The Overture travel modes taxonomy.*

</div>

</figcaption>

</figure>


As many of the above travel modes draw on the body of knowledge
accumulated in relation to OpenStreetMap
[transport mode access restrictions](https://wiki.openstreetmap.org/wiki/Key:access#Transport_mode_restrictions),
we would like acknowledge a intellectual debt to the OSM community in
relation to travel modes as well as to other aspects of the
Transportation schema.

## Open questions

This section discusses some open questions are debating internally with
regard to travel modes. We would love to hear
[your feedback](https://github.com/OvertureMaps/schema/discussions) on
these questions (and any others that you may have).

### Minimum required travel modes

We're not yet certain on the minimum set of recognized travel modes is
that will make the Overture Transportation schema as usable as possible
to as broad an audience as possible. What do you think we are missing?

### Should we support extension travel modes?

<!--
TODO: This open question relates to the feature request
https://github.com/OvertureMaps/schema-wg/issues/157.

We should update or delete the content of this documentation based
on what happens with that feature request.
-->

We live in a time of rapid technological and regulatory iteration in
the transportation space. The speed of change raises the possibility
that no matter how quickly we extend the travel modes recognized in the
Overture schema, the schema will always be behind the real world, at
least in some local areas and with regard to some technologies, customs,
or local rules.

One possibility to keep the Overture schema maximally usable for users
who are mapping at the cutting edge is to allow custom extensions to
the list of travel modes. If we did this consistently with how extension
properties <!-- TODO: This should be a link to a heading in the main
schema documentation, but that heading needs to be written first. -->
work for features, we could, for example, allow travel mode names with
the `ext*` to be ignored by the schema validation rules.

What do you think?

### Internal consistency

As alluded to [above](#vehicle-attribute-scoping-vehicle), there is some
overlap between the fuzzy concept of travel modes and vehicle attribute
scoping. We're aware of this overlap and view it as limited but
inevitable.

Our intention is, however, to reduce or eliminate the overlap between
travel modes and the other
[similar scoping properties](#similar-scoping-properties-using-and-recognized)
(`using` and `recognized`). One area where we may have been unsuccessful
is the `emergency` travel mode in the [current taxonomy](#the-travel-modes-taxonomy).
Arguably, `emergency` should be removed from the taxonomy, and an
`asEmergencyResponder` should be included in the status values
enumeration for the `recognized` property.

What are your suggestions relating to keeping the travel modes and other
scoping properties internally consistent and minimally overlapping?
1 change: 1 addition & 0 deletions docusaurus/sidebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ const sidebars = {
'themes/transportation/shape-connectivity',
'themes/transportation/scoping-rules',
'themes/transportation/roads',
'themes/transportation/travel-modes',
]
}
]
Expand Down
Loading

0 comments on commit d6801d7

Please sign in to comment.