segment
Segments are paths which can be traveled by people or things.
Geometry Type | LineString |
---|---|
Theme | transportation |
Type | segment |
Segment geometry represents the center-line of a path which may be traveled. Segment properties describe both the physical attributes (e.g. road surface and width) and non-physical attributes (e.g. access restriction rules) of that path.
Two Segments are physically connected if a common Connector
is referenced from the connectors
property of both Segments. Where
this occurs, both Segment geometries must contain the common Connector's
coordinates. A physical connection between Segments indicates that it
may be possible to travel from one segment to the next at the
connected location, provided the Segment properties do not indicate a
restriction, such as a turn restriction, which would prevent the
transition in a particular case. Conversely, two segments are not
physically connected—even if their geometries intersect—if they do not
share a Connector in common.
Sub-Types
A segment may have one of three possible sub-types.
- Road
- Railway
- Waterway
subType | road |
---|
A road
segment represents a section of any kind of road, street, or
path, including a dedicated path for walking or cycling (but excluding
a railway).
subType | rail |
---|
The schema for rail
segments is under development.
subType | water |
---|
The schema for water
segments is under development.
Schema
- Browsable
- YAML
---
"$schema": https://json-schema.org/draft/2020-12/schema
title: Transportation Segment
description: >-
Segments are paths which can be traveled by people or things. Segments
are compatible with GeoJSON LineString features.
type: object
properties:
id:
"$ref": ../defs.yaml#/$defs/propertyDefinitions/id
geometry:
description: >-
Segment's geometry which MUST be a LineSting as defined by GeoJSON
schema.
unevaluatedProperties: false
allOf:
- "$ref": https://geojson.org/schema/LineString.json
properties:
unevaluatedProperties: false
required: [subType]
allOf:
- title: "Conditional Properties"
if: { properties: { subType: { enum: [road] } } }
then:
properties:
road: { "$ref": "#/$defs/propertyDefinitions/road" }
width: { "$ref": "#/$defs/propertyDefinitions/roadWidth"}
- "$ref": ../defs.yaml#/$defs/propertyContainers/overtureFeaturePropertiesContainer
- "$ref": ../defs.yaml#/$defs/propertyContainers/levelContainer
properties:
subType:
description: Broad category of transportation segment.
type: string
enum: [road, rail, water]
"$comment": >-
Should not be confused with a transport mode. A segment
kind has an (implied) set of default transport modes.
connectors:
description: >-
List of connectors this segment is physically connected to. Each connector is a possible routing decision point
meaning it defines place along segment in which there is possibility to transition to other segments which share same connector.
type: array
items:
type: string
"$comment": >-
Each entry in this array is the GERS ID of a transportation connector feature.
uniqueItems: true
default: []
"$defs":
propertyDefinitions:
lane:
description: Properties for a single lane of traffic.
type: object
unevaluatedProperties: false
required: [direction]
properties:
direction: { "$ref": "#/$defs/propertyDefinitions/laneDirection" }
restrictions:
description: Restrictions on how the lane may be used
"$comment": >-
Lane restrictions may be defined in the same way as for whole roads with the exception
of turns; there are no turn restrictions for lanes.
type: object
unevaluatedProperties: false
properties:
speedLimits:
"$ref": "#/$defs/propertyContainers/speedLimitsContainer"
access:
"$ref": "#/$defs/propertyContainers/accessContainer"
minOccupancy:
description: >-
Minimal occupancy restrictions relate to HOV (high occupancy vehicles) travel modes.
If a lane is restricted for use only by HOVs, then the default minimum vehicle
occupancy qualifying as HOV is 2+ passengers (including the driver). This
restriction can be provided to override the default definition of HOV.
oneOf:
- "$ref": "#/$defs/propertyDefinitions/relationalExpression"
- type: array
items:
type: object
unevaluatedProperties: false
allOf:
- "$ref": "#/$defs/propertyContainers/ruleContainer"
- "$ref": "#/$defs/propertyDefinitions/relationalExpression"
laneDirection:
type: string
enum:
- forward # Traffic flows in the segment direction.
- backward # Traffic flows against the segment direction.
- bothWays # Traffic flows simultaneously in both directions as, e.g., on a sidewalk.
- alternating # Traffic flows alternately forward and backward following a predictable rhythm.
- reversible # Traffic flows forward, but may be arbitrarily reversed by traffic authorities at any time.
direction:
description: >-
Enumerates direction of travel or connectivity with
another segment.
type: string
enum: [ forward, backward, both ]
mode:
description: >-
Enumerates possible travel modes. Some modes represent groups
of modes.
type: string
enum: [ motorVehicle, car, truck, motorcycle, foot, bicycle, bus, hgv, hov, emergency ]
"$comment": >-
motorVehicle includes car, truck and motorcycle
road:
description: >-
Properties for segments whose segment subType is road. The road
subType includes any variety of road, street, or path, including
dedicated paths for walking and cycling.
type: object
unevaluatedProperties: false
default: {}
properties:
class:
description: >-
Captures the kind of road and its position in the road
network hierarchy.
type: string
enum:
- motorway
- primary
- secondary
- tertiary
- residential
- livingStreet # similar as residential but has implied legal restriction for motor vehicles (which can vary country by country)
- trunk
- unclassified # known roads, paved but of low importance which does not meet definition of being motorway, trunk, primary, secondary, tertiary
- parkingAisle # service road intended for parking
- driveway # service road intended for deliveries
- pedestrian
- footway
- steps
- track
- cycleway
- bridleway # similar as track but has implied access only for horses
- unknown
default:
enum: [ unknown ]
roadNames:
unevaluatedProperties: false
oneOf:
- type: object
allOf:
- { "$ref": "../defs.yaml#/$defs/propertyDefinitions/names" }
- type: array
items:
type: object
required: [at]
unevaluatedProperties: false
allOf:
- { "$ref": "#/$defs/propertyContainers/atRangeContainer" }
- { "$ref": "../defs.yaml#/$defs/propertyDefinitions/names" }
minItems: 1
uniqueItems: true
surface:
description: Physical surface of the road. May either be
specified as a single global value for the segment, or as
an array of surface rules.
oneOf:
- { "$ref": "#/$defs/propertyDefinitions/roadSurface" }
- type: array
items:
type: object
allOf:
- { "$ref": "#/$defs/propertyContainers/atRangeContainer" }
unevaluatedProperties: false
properties:
value: { "$ref": "#/$defs/propertyDefinitions/roadSurface" }
minItems: 1
uniqueItems: true
default:
enum: [unknown]
"$comment": >-
We should likely restrict the available surface types to
the subset of the common OSM surface=* tag values that are
useful both for routing and for map tile rendering.
flags:
description: >-
Set of boolean attributes applicable to roads. May be
specified either as a single flag array of flag values, or
as an array of flag rules.
type: array
items:
oneOf:
- { "$ref": "#/$defs/propertyDefinitions/roadFlag" }
- type: object
allOf:
- { "$ref": "#/$defs/propertyContainers/atRangeContainer" }
- { "$ref": "#/$defs/propertyContainers/duringContainer" }
unevaluatedProperties: false
properties:
values:
type: array
items: { "$ref": "#/$defs/propertyDefinitions/roadFlag" }
uniqueItems: true
uniqueItems: true
lanes:
description: >-
Describes the layout of lanes on the road plus lane-related
information, including where appropriate: physical lane location,
allowed travel modes, and more.
oneOf:
- type: array
items: { "$ref": "#/$defs/propertyDefinitions/lane" }
minItems: 1
- type: array
items:
type: object
allOf:
- "$ref": "#/$defs/propertyContainers/atRangeContainer"
default:
- 0
- 100
unevaluatedProperties: false
properties:
value:
type: array
items: { "$ref": "#/$defs/propertyDefinitions/lane" }
minItems: 1
minItems: 1
restrictions:
description: Restrictions on how the road may be used
"$comment": >-
Restrictions define two kinds of rerstriction on this segemnt
Travel Restrictions defines how certain modes of transportation
may be limited on this segment, for example trucks are not
permitted from 7AM to 7PM
Turn restrictions defines restrcited tunrs that orignates from
this segment, for example against driving side turn from this
segment to another connected segment is blocked.
type: object
unevaluatedProperties: false
properties:
speedLimits: { "$ref": "#/$defs/propertyContainers/speedLimitsContainer" }
access: { "$ref": "#/$defs/propertyContainers/accessContainer" }
prohibitedTransitions:
description: Turn restriction from this segment to other segments.
type: array
items:
unevaluatedProperties: false
allOf:
- "$ref": "#/$defs/propertyContainers/ruleContainer"
- "$ref": "#/$defs/propertyContainers/duringContainer"
type: object
properties:
reason:
description: for turn restrictions, a rough description as to why the restriction exist
type: string
enum:
- legal
- divider
- gatedPermission
- gatedKey
default:
enum: [legal]
sequence:
description: Ordered sequence of segments that needs to be traversed in order for the relation to be effective
type: array
items:
description: Pair of segment and connector IDs along the sequence
"$ref": "#/$defs/propertyDefinitions/relationTarget"
minItems: 1
uniqueItems: true
finalHeading:
description: Direction of travel that is prohibited on the destination segment of the sequence.
"$ref": "#/$defs/propertyDefinitions/direction"
roadFlag:
description: Simple flags that can be on or off for a road segment
type: string
enum:
- isBridge
- isLink
- isPrivate
- isTunnel
- isUnderConstruction
roadSurface:
description: Physical surface of the road
type: string
enum:
- unknown
- paved
- unpaved
- gravel
- dirt
- pavingStones
- metal
roadWidth:
description: >-
Edge-to-edge width of the road modeled by this segment, in
meters.
Examples: (1) If this segment models a carriageway without
sidewalk, this value represents the edge-to-edge width of the
carriageway, inclusive of any shoulder. (2) If this segment
models a sidewalk by itself, this value represents the
edge-to-edge width of the sidewalk. (3) If this segment models a
combined sidewalk and carriageway, this value represents the
edge-to-edge width inclusive of sidewalk.
type: number
exclusiveMinimum: 0
speed:
description: >-
A speed value, i.e. a certain number of distance units
travelled per unit time.
type: array
prefixItems:
- description: Number of speed units
type: integer
minimum: 20
- description: One speed unit
type: string
enum: [ "km/h", "mph" ]
additionalItems: false
accessOption:
description: access option (restriction) for a given segment
type: string
enum:
- allowed
- denied
usageOption:
description: describes reason for which a person or entity travelling on the transportation network is using a particular location
type: string
enum:
- asCustomer
- atDestination
- toDeliver
- toFarm
- forForestry
recognizedOption:
description: describes the status of the person or entity travelling as recognized by authorities controlling the particular location
type: string
enum:
- asPermitted
- asPrivate
- asDisabled
- asEmployee
- asStudent
relationalExpression:
description: Represents a relational operator for describing simple relational expression in the data
oneOf:
- type: object
required: [isMoreThan]
properties:
isMoreThan:
type: number
- type: object
required: [isAtLeast]
properties:
isAtLeast:
type: number
- type: object
required: [isEqualTo]
properties:
isEqualTo:
type: number
- type: object
required: [isAtMost]
properties:
isAtMost:
type: number
- type: object
required: [isLessThan]
properties:
isLessThan:
type: number
relationTarget:
description: >-
A tripe that uniquely identifies that target
of a relation
type: object
properties:
segmentId:
description: >-
Segment ID of the target that the relation refers to
(TODO replace with GERS ID schema)
type: string
connectorId:
description: Connector ID of the this segment that the relationship connects to
"$comment": >-
A segment can connect to another segment at multiple connector. So a
connector id is necessary to uniquely identify the exact connection point.
However this is not a required property since a relationship target may not
necessarily be conncted to the source of the relation (for example signposts)
(TODO replace with GERS ID)
type: string
required: [segmentId, connectorId]
propertyContainers:
atRangeContainer:
description: >-
Geometric scoping properties defining the range of positions on
the segment where something is physically located or where a
rule is active.
properties:
at:
"$ref": ../defs.yaml#/$defs/propertyDefinitions/linearlyReferencedRange
duringContainer:
"$comment": >-
Temporal scoping properties defining the time spans when a
recurring rule is active.
properties:
during:
"$ref": ../defs.yaml#/$defs/propertyDefinitions/openingHours
modesContainer:
description: >-
Properties defining travel modes for which a rule is active.
type: object
oneOf:
- not:
anyOf:
- required: [mode]
- required: [modeNot]
- required: [mode]
properties:
mode:
description: Travel mode to which the rule applies
type: array
items:
"$ref": "#/$defs/propertyDefinitions/mode"
uniqueItems: true
minLength: 1
- required: [modeNot]
properties:
modeNot:
description: Travel modes to which the rule does not apply
type: array
items:
"$ref": "#/$defs/propertyDefinitions/mode"
uniqueItems: true
minLength: 1
"$comment": >-
If neither mode nor modeNot is specified, the rule has the
default travel modes for the segment subType.
headingContainer:
description: properties defining direction for which a rule is active
properties:
heading:
"$ref": "#/$defs/propertyDefinitions/direction"
speedLimitsContainer:
description: Rules governing speed on this road segment or lane
type: array
items:
description: An individual speed limit rule
"$comment": >-
TODO: Speed limits probably have directionality, so
should factor out a headingContainer for this
purpose and use it to introduce an optional
direction property in each rule.
type: object
anyOf:
- required: [ minSpeed ]
- required: [ maxSpeed ]
allOf:
- "$ref": "#/$defs/propertyContainers/modesContainer"
- "$ref": "#/$defs/propertyContainers/atRangeContainer"
- "$ref": "#/$defs/propertyContainers/duringContainer"
unevaluatedProperties: false
properties:
minSpeed: { "$ref": "#/$defs/propertyDefinitions/speed" }
maxSpeed: { "$ref": "#/$defs/propertyDefinitions/speed" }
isMaxSpeedVariable:
description: Indicates a variable speed corridor
type: boolean
default: false
accessContainer:
description: Rules governing access to this road segment or lane
type: array
items:
oneOf:
- "$ref": "#/$defs/propertyDefinitions/accessOption"
- type: object
oneOf:
- required: [ allowed ]
properties:
allowed:
type: object
unevaluatedProperties: false
allOf:
- { "$ref": "#/$defs/propertyContainers/atRangeContainer" }
- { "$ref": "#/$defs/propertyContainers/duringContainer" }
- { "$ref": "#/$defs/propertyContainers/ruleContainer" }
- { "$ref": "#/$defs/propertyContainers/headingContainer" }
- required: [ designated ]
properties:
designated:
type: object
unevaluatedProperties: false
allOf:
- { "$ref": "#/$defs/propertyContainers/atRangeContainer" }
- { "$ref": "#/$defs/propertyContainers/duringContainer" }
- { "$ref": "#/$defs/propertyContainers/ruleContainer" }
- { "$ref": "#/$defs/propertyContainers/headingContainer" }
- required: [ denied ]
properties:
denied:
type: object
unevaluatedProperties: false
allOf:
- { "$ref": "#/$defs/propertyContainers/atRangeContainer" }
- { "$ref": "#/$defs/propertyContainers/duringContainer" }
- { "$ref": "#/$defs/propertyContainers/ruleContainer" }
- { "$ref": "#/$defs/propertyContainers/headingContainer" }
minLength: 1
ruleContainer:
description: >-
Properties that allow defining rules from environmental and subjective scoping properties .
type: object
properties:
when:
description: describes a set of condition
type: object
allOf:
- "$ref": "#/$defs/propertyContainers/modesContainer"
- "$ref": "#/$defs/propertyContainers/headingContainer"
unevaluatedProperties: false
properties:
using:
type: array
items:
"$ref": "#/$defs/propertyDefinitions/usageOption"
recognized:
type: array
items:
"$ref": "#/$defs/propertyDefinitions/recognizedOption"
vehicle:
type: object
properties:
axleCount:
"$ref": "#/$defs/propertyDefinitions/relationalExpression"
length:
"$ref": "#/$defs/propertyDefinitions/relationalExpression"
weight:
"$ref": "#/$defs/propertyDefinitions/relationalExpression"
Examples
- Simple Road
- Lanes
- Access Restrictions
- Turn Restrictions
{
"id": "overture:transportation:example:simple-road",
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
-123.13538016118466,
49.28584368472093
],
[
-123.13430200328841,
49.28656927229528
],
[
-123.13325122717998,
49.28727252390803
]
]
},
"properties": {
"theme": "transportation",
"type": "segment",
"version": 3,
"updateTime": "2023-06-01T16:42:00-06:00",
"subType": "road",
"connectors": [
"overture:transportation:example:simple-road-connector-1",
"overture:transportation:example:simple-road-connector-2"
],
"road": {
"roadNames": {
"common": [
{
"language": "local",
"value": "Nicola Street"
}
]
},
"class": "residential",
"surface": "paved",
"lanes": [
{
"direction": "backward"
},
{
"direction": "forward"
}
]
}
}
}
{
"id": "overture:transportation:example:simple-road2",
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
-122.2421117,
47.6382849
],
[
-122.2429835,
47.6384385
],
[
-122.2442307,
47.6386337
],
[
-122.2445016,
47.6386753
]
]
},
"properties": {
"theme": "transportation",
"type": "segment",
"subType": "road",
"updateTime": "2023-06-08T12:02:30-08:00",
"version": 0,
"road": {
"class": "secondary",
"restrictions": {
"speedLimits": [
{
"maxSpeed": [
100,
"km/h"
]
}
]
},
"lanes": [
{
"direction": "forward",
"restrictions": {
"access": [
{
"allowed": {
"when": {
"mode": [
"hov"
]
}
}
}
],
"minOccupancy": {
"isAtLeast": 3
}
}
},
{
"direction": "forward"
},
{
"direction": "forward"
}
]
}
}
}
{
"id": "overture:transportation:example:simple-road1",
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
-122.152944,
47.629681
],
[
-122.152916,
47.629686
],
[
-122.152501,
47.62977
],
[
-122.152188,
47.62984
],
[
-122.151813,
47.629934
],
[
-122.151747,
47.629952
]
]
},
"properties": {
"theme": "transportation",
"type": "segment",
"version": 3,
"updateTime": "2023-06-06T16:42:00-06:00",
"subType": "road",
"connectors": [
"overture:transportation:example:simple-road-connector-1",
"overture:transportation:example:simple-road-connector-2"
],
"road": {
"roadNames": {
"common": [
{
"language": "local",
"value": "SR 520"
}
]
},
"class": "motorway",
"surface": "paved",
"restrictions": {
"access": [
{
"denied": {
"when": {
"mode": [
"foot"
]
}
}
}
]
}
}
}
}
Source segment
{
"id": "overture:transportation:example:via-turn-restriction-source",
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
-71.1100226929593,
42.30156668552357
],
[
-71.11055493812631,
42.30157222996385
],
[
-71.11102971081017,
42.30157407811038
],
[
-71.11143701579662,
42.30156114108277
],
[
-71.11197425857047,
42.30152602627953
],
[
-71.11234408150312,
42.30149091145671
],
[
-71.1126589307566,
42.30147612626226
],
[
-71.11301376086777,
42.301494607754876
],
[
-71.11320616874515,
42.301516785538524
]
]
},
"properties": {
"theme": "transportation",
"type": "segment",
"version": 4,
"updateTime": "2023-08-18T11:05:03-07:00",
"subType": "road",
"connectors": [
"overture:transportation:example:via-turn-restriction-connector1"
],
"road": {
"roadNames": {
"common": [
{
"language": "local",
"value": "Arborway"
}
]
},
"class": "primary",
"surface": "paved",
"restrictions": {
"prohibitedTransitions": [
{
"sequence": [
{
"segmentId": "overture:transportation:example:via-turn-restriction-target",
"connectorId": "overture:transportation:example:via-turn-restriction-connector2"
},
{
"segmentId": "overture:transportation:example:via-turn-restriction-via",
"connectorId": "overture:transportation:example:via-turn-restriction-connector1"
}
],
"finalHeading": "forward",
"reason": "legal",
"when": {
"heading": "forward"
},
"during": "Mo-Fr 06:00-09:00, 15:00-19:00"
}
]
}
}
}
}
Connector 1
{
"id": "overture:transportation:example:via-turn-restriction-connector1",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-71.11234408150312,
42.30149091145671
]
},
"properties": {
"theme": "transportation",
"type": "connector",
"version": 1,
"updateTime": "2023-08-18T11:21:00-06:00"
}
}
Via segment
{
"id": "overture:transportation:example:simple-road2",
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
-71.11213418200086,
42.3017182333833
],
[
-71.11234408150312,
42.30149091145671
],
[
-71.11248901211202,
42.3013264259736
],
[
-71.11283634581244,
42.30093831245662
]
]
},
"properties": {
"theme": "transportation",
"type": "segment",
"version": 4,
"updateTime": "2023-08-18T11:22:30-06:00",
"subType": "road",
"connectors": [
"overture:transportation:example:via-turn-restriction-connector1",
"overture:transportation:example:via-turn-restriction-connector2"
],
"road": {
"roadNames": {
"common": [
{
"language": "local",
"value": "Washington Street"
}
]
},
"class": "secondary",
"surface": "paved"
}
}
}
Connector 2
{
"id": "overture:transportation:example:via-turn-restriction-connector2",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-71.11248901211202,
42.3013264259736
]
},
"properties": {
"theme": "transportation",
"type": "connector",
"version": 1,
"updateTime": "2023-08-18T11:21:00-06:00"
}
}
Target segment
{
"id": "overture:transportation:example:turn-restriction-target",
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[
-71.11325364601365,
42.301374477956756
],
[
-71.11278137213321,
42.3013264259736
],
[
-71.11248901211202,
42.3013264259736
],
[
-71.11157195119078,
42.30139295947919
],
[
-71.1109997251666,
42.301428074356636
],
[
-71.11058492376937,
42.30143177065813
],
[
-71.11002519176327,
42.301415137298676
]
]
},
"properties": {
"theme": "transportation",
"type": "segment",
"version": 4,
"updateTime": "2023-08-18T11:22:00-06:00",
"subType": "road",
"connectors": [
"overture:transportation:example:via-turn-restriction-connector2"
],
"road": {
"roadNames": {
"common": [
{
"language": "local",
"value": "Arborway"
}
]
},
"class": "primary",
"surface": "paved"
}
}
}