$schema: https://json-schema.org/draft/2020-12/schema
title: 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: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.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:
    - theme
    - type
    - subtype
    allOf:
    - title: Common Segment Properties
      properties:
        subclass_rules:
          $ref: '#/$defs/propertyContainers/subclassRulesContainer'
        access_restrictions:
          $ref: '#/$defs/propertyContainers/accessContainer'
        level:
          $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyDefinitions/level
          x-jsonld-id: https://w3id.org/ogc/om/hasLevel
        level_rules:
          $ref: '#/$defs/propertyContainers/levelRulesContainer'
    - $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyContainers/overtureFeaturePropertiesContainer
    - $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyContainers/namesContainer
    oneOf:
    - title: Road-Specific Properties
      required:
      - class
      properties:
        subtype:
          const: road
        class:
          $ref: '#/$defs/propertyDefinitions/roadClass'
        destinations:
          $ref: '#/$defs/propertyDefinitions/destinations'
        prohibited_transitions:
          $ref: '#/$defs/propertyContainers/prohibitedTransitionsContainer'
        road_surface:
          $ref: '#/$defs/propertyContainers/surfaceContainer'
          x-jsonld-id: osm:hasSurfaceType
          x-jsonld-base: https://w3id.org/ogc/om/surfaces/
        road_flags:
          $ref: '#/$defs/propertyContainers/roadFlagsContainer'
        speed_limits:
          $ref: '#/$defs/propertyContainers/speedLimitsContainer'
          x-jsonld-id: https://w3id.org/ogc/om/hasSpeedLimit
        width_rules:
          $ref: '#/$defs/propertyContainers/widthRulesContainer'
        subclass:
          $ref: '#/$defs/propertyDefinitions/subclass'
    - title: Rail-Specific Properties
      required:
      - class
      properties:
        subtype:
          const: rail
        class:
          $ref: '#/$defs/propertyDefinitions/railClass'
        rail_flags:
          $ref: '#/$defs/propertyContainers/railFlagsContainer'
    - title: Water-Specific Properties
      properties:
        subtype:
          const: water
    properties:
      theme:
        const: transportation
      type:
        const: segment
      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 which this segment is physically connected
          to and their relative location. Each connector is a possible routing decision
          point, meaning it defines a place along the segment in which there is possibility
          to transition to other segments which share the same connector.
        type: array
        items:
          type: object
          $comment: Contains the GERS ID and relative position between 0 and 1 of
            a connector feature along the segment.
          unevaluatedProperties: false
          required:
          - connector_id
          - at
          properties:
            connector_id:
              $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyDefinitions/id
            at:
              $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyDefinitions/linearlyReferencedPosition
        uniqueItems: true
        minItems: 2
        default: []
      routes:
        $ref: '#/$defs/propertyDefinitions/routes'
    x-jsonld-id: '@nest'
$defs:
  propertyDefinitions:
    destinationLabelType:
      description: The type of object of the destination label.
      type: string
      enum:
      - street
      - country
      - route_ref
      - toward_route_ref
      - unknown
    destinations:
      description: Describes objects that can be reached by following a transportation
        segment in the same way those objects are described on signposts or ground
        writing that a traveller following the segment would observe in the real world.
        This allows navigation systems to refer to signs and observable writing that
        a traveller actually sees.
      type: array
      items:
        type: object
        unevaluatedProperties: false
        required:
        - from_connector_id
        - to_connector_id
        - to_segment_id
        - final_heading
        anyOf:
        - required:
          - labels
        - required:
          - symbols
        properties:
          labels:
            description: Labeled destinations that can be reached by following the
              segment.
            type: array
            items:
              type: object
              unevaluatedProperties: false
              required:
              - value
              - type
              properties:
                value:
                  description: Names the object that is reached
                  type: string
                  pattern: ^(\S.*)?\S$
                type:
                  $ref: '#/$defs/propertyDefinitions/destinationLabelType'
            minItems: 1
            uniqueItems: true
          symbols:
            description: A collection of symbols or icons present on the sign next
              to current destination label.
            type: array
            items:
              $ref: '#/$defs/propertyDefinitions/destinationSignSymbol'
            uniqueItems: true
            minLength: 1
          from_connector_id:
            description: Identifies the point of physical connection on this segment
              before which the destination sign or marking is visible.
            type: string
          to_segment_id:
            description: Identifies the segment to transition to reach the destination(s)
              labeled on the sign or marking.
            type: string
          to_connector_id:
            description: Identifies the point of physical connection on the segment
              identified by 'to_segment_id' to transition to for reaching the destination(s).
            type: string
          when:
            allOf:
            - $ref: '#/$defs/propertyContainers/headingScopeContainer'
            minProperties: 1
            unevaluatedProperties: false
          final_heading:
            description: Direction of travel on the segment identified by 'to_segment_id'
              that leads to the destination.
            $ref: '#/$defs/propertyDefinitions/heading'
    roadClass:
      description: Captures the kind of road and its position in the road network
        hierarchy.
      type: string
      enum:
      - motorway
      - primary
      - secondary
      - tertiary
      - residential
      - living_street
      - trunk
      - unclassified
      - service
      - pedestrian
      - footway
      - steps
      - path
      - track
      - cycleway
      - bridleway
      - unknown
    railClass:
      description: Captures the kind of rail segment.
      type: string
      enum:
      - funicular
      - light_rail
      - monorail
      - narrow_gauge
      - standard_gauge
      - subway
      - tram
      - unknown
    heading:
      description: Enumerates possible travel headings along segment geometry.
      type: string
      enum:
      - forward
      - backward
    travelMode:
      description: Enumerates possible travel modes. Some modes represent groups of
        modes.
      type: string
      enum:
      - vehicle
      - motor_vehicle
      - car
      - truck
      - motorcycle
      - foot
      - bicycle
      - bus
      - hgv
      - hov
      - emergency
      $comment: motor_vehicle includes car, truck and motorcycle
    destinationSignSymbol:
      description: Indicates what special symbol/icon is present on a signpost, visible
        as road marking or similar.
      type: string
      enum:
      - motorway
      - airport
      - hospital
      - center
      - industrial
      - parking
      - bus
      - train_station
      - rest_area
      - ferry
      - motorroad
      - fuel
      - viewpoint
      - fuel_diesel
      - food
      - lodging
      - info
      - camp_site
      - interchange
      - restrooms
    roadFlag:
      description: Simple flags that can be on or off for a road segment. Specifies
        physical characteristics and can overlap.
      type: string
      enum:
      - is_bridge
      - is_link
      - is_tunnel
      - is_under_construction
      - is_abandoned
      - is_covered
      - is_indoor
    railFlag:
      description: Simple flags that can be on or off for a railway segment. Specifies
        physical characteristics and can overlap.
      type: string
      enum:
      - is_bridge
      - is_tunnel
      - is_under_construction
      - is_abandoned
      - is_covered
      - is_passenger
      - is_freight
      - is_disused
    roadSurface:
      description: Physical surface of the road
      type: string
      enum:
      - unknown
      - paved
      - unpaved
      - gravel
      - dirt
      - paving_stones
      - metal
    routes:
      description: Routes this segment belongs to
      type: array
      items:
        type: object
        unevaluatedProperties: false
        allOf:
        - $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyContainers/geometricRangeScopeContainer
        properties:
          name:
            description: Full name of the route
            type: string
            minLength: 1
            pattern: ^(\S.*)?\S$
          network:
            description: Name of the highway system this route belongs to
            type: string
            minLength: 1
            pattern: ^(\S.*)?\S$
          ref:
            description: Code or number used to reference the route
            type: string
            minLength: 1
            pattern: ^(\S.*)?\S$
          symbol:
            description: URL or description of route signage
            type: string
            minLength: 1
            pattern: ^(\S.*)?\S$
          wikidata:
            $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyDefinitions/wikidata
    subclass:
      description: Refines expected usage of the segment, must not overlap.
      type: string
      enum:
      - link
      - sidewalk
      - crosswalk
      - parking_aisle
      - driveway
      - alley
      - cycle_crossing
    speed:
      description: A speed value, i.e. a certain number of distance units travelled
        per unit time.
      type: object
      properties:
        value:
          description: Speed value
          type: integer
          minimum: 1
          maximum: 350
          x-jsonld-id: rdf:value
        unit:
          description: Speed unit
          type: string
          enum:
          - km/h
          - mph
          x-jsonld-id: http://qudt.org/schema/qudt/hasUnit
      required:
      - value
      - unit
      unevaluatedProperties: false
    purposeOfUse:
      description: Reason why a person or entity travelling on the transportation
        network is using a particular location.
      type: string
      enum:
      - as_customer
      - at_destination
      - to_deliver
      - to_farm
      - for_forestry
    recognizedStatus:
      description: Status of the person or entity travelling as recognized by authorities
        controlling the particular location
      type: string
      enum:
      - as_permitted
      - as_private
      - as_disabled
      - as_employee
      - as_student
    integerRelation:
      description: "Completes an integer relational expression of the form <lhs> <operator>
        <integer_value>. An example of such an expression is:\n  `{ axle_count: {
        is_more_than: 2 } }`."
      type: object
      unevaluatedProperties: false
      oneOf:
      - required:
        - is_more_than
        properties:
          is_more_than:
            type: integer
      - required:
        - is_at_least
        properties:
          is_at_least:
            type: integer
      - required:
        - is_equal_to
        properties:
          is_equal_to:
            type: integer
      - required:
        - is_at_most
        properties:
          is_at_most:
            type: integer
      - required:
        - is_less_than
        properties:
          is_less_than:
            type: integer
    vehicleScopeDimension:
      description: Enumerates possible vehicle dimensions for use in restrictions
      type: string
      enum:
      - axle_count
      - height
      - length
      - weight
      - width
    vehicleScopeComparison:
      description: Enumerates possible comparison operators for use in scoping
      type: string
      enum:
      - greater_than
      - greater_than_equal
      - equal
      - less_than
      - less_than_equal
    vehicleScopeUnit:
      description: Parent enum of both length and width for use in vehicle scoping
      anyOf:
      - $ref: '#/$defs/propertyDefinitions/lengthUnit'
      - $ref: '#/$defs/propertyDefinitions/weightUnit'
    lengthUnit:
      description: Enumerates length units supported by the Overture schema.
      $comment: Keep in sync with `combobulib/measure.py`.
      type: string
      enum:
      - in
      - ft
      - yd
      - mi
      - cm
      - m
      - km
    lengthValueWithUnit:
      description: Combines a length value with a length unit.
      type: object
      unevaluatedProperties: false
      required:
      - value
      - unit
      properties:
        value:
          type: number
          minimum: 0
        unit:
          $ref: '#/$defs/propertyDefinitions/lengthUnit'
    lengthRelation:
      description: "Completes a length relational expression of the form <lhs> <operator>
        <length_value>. An example of such an expression is:\n  `{ height: { is_less_than:
        { value: 3, unit: 'm' } } }`."
      type: object
      unevaluatedProperties: false
      oneOf:
      - required:
        - is_more_than
        properties:
          is_more_than:
            allOf:
            - $ref: '#/$defs/propertyDefinitions/lengthValueWithUnit'
      - required:
        - is_at_least
        properties:
          is_at_least:
            allOf:
            - $ref: '#/$defs/propertyDefinitions/lengthValueWithUnit'
      - required:
        - is_equal_to
        properties:
          is_equal_to:
            allOf:
            - $ref: '#/$defs/propertyDefinitions/lengthValueWithUnit'
      - required:
        - is_at_most
        properties:
          is_at_most:
            allOf:
            - $ref: '#/$defs/propertyDefinitions/lengthValueWithUnit'
      - required:
        - is_less_than
        properties:
          is_less_than:
            allOf:
            - $ref: '#/$defs/propertyDefinitions/lengthValueWithUnit'
    weightUnit:
      description: Enumerates weight units supported by the Overture schema.
      $comment: Keep in sync with `combobulib/measure.py`.
      type: string
      enum:
      - oz
      - lb
      - st
      - lt
      - g
      - kg
      - t
    weightValueWithUnit:
      description: Combines a weight value with a weight unit.
      type: object
      unevaluatedProperties: false
      required:
      - value
      - unit
      properties:
        value:
          type: number
          minimum: 0
        unit:
          $ref: '#/$defs/propertyDefinitions/weightUnit'
    weightRelation:
      description: "Completes a weight relational expression of the form <lhs> <operator>
        <weight_value>. An example of such an expression is:\n  `{ weight: { is_more_than:
        { value: 2, unit: 't' } } }`."
      type: object
      unevaluatedProperties: false
      oneOf:
      - required:
        - is_more_than
        properties:
          is_more_than:
            allOf:
            - $ref: '#/$defs/propertyDefinitions/weightValueWithUnit'
      - required:
        - is_at_least
        properties:
          is_at_least:
            allOf:
            - $ref: '#/$defs/propertyDefinitions/weightValueWithUnit'
      - required:
        - is_equal_to
        properties:
          is_equal_to:
            allOf:
            - $ref: '#/$defs/propertyDefinitions/weightValueWithUnit'
      - required:
        - is_at_most
        properties:
          is_at_most:
            allOf:
            - $ref: '#/$defs/propertyDefinitions/weightValueWithUnit'
      - required:
        - is_less_than
        properties:
          is_less_than:
            allOf:
            - $ref: '#/$defs/propertyDefinitions/weightValueWithUnit'
    width:
      type: number
      exclusiveMinimum: 0
    sequenceEntry:
      description: A segment/connector pair in a prohibited transition sequence.
      type: object
      required:
      - connector_id
      - segment_id
      properties:
        connector_id:
          description: Identifies the point of physical connection between the previous
            segment in the sequence and the segment in this sequence entry.
          type: string
        segment_id:
          description: Identifies the segment that the previous segment in the sequence
            is physically connected to via the sequence entry's connector.
          type: string
  propertyContainers:
    headingScopeContainer:
      description: Properties defining travel headings that match a rule.
      properties:
        heading:
          $ref: '#/$defs/propertyDefinitions/heading'
    purposeOfUseScopeContainer:
      description: Properties defining usage purposes that match a rule.
      properties:
        using:
          type: array
          items:
            $ref: '#/$defs/propertyDefinitions/purposeOfUse'
          uniqueItems: true
          minLength: 1
    temporalScopeContainer:
      $comment: Temporal scoping properties defining the time spans when a recurring
        rule is active.
      properties:
        during:
          $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyDefinitions/openingHours
    travelModeScopeContainer:
      description: Properties defining travel modes that match a rule.
      type: object
      properties:
        mode:
          description: Travel mode(s) to which the rule applies
          type: array
          items:
            $ref: '#/$defs/propertyDefinitions/travelMode'
          uniqueItems: true
          minLength: 1
    recognizedStatusScopeContainer:
      description: Properties defining statuses that match a rule.
      properties:
        recognized:
          type: array
          items:
            $ref: '#/$defs/propertyDefinitions/recognizedStatus'
          uniqueItems: true
          minLength: 1
    vehicleScopeContainer:
      description: Properties defining vehicle attributes for which a rule is active.
      type: object
      properties:
        vehicle:
          description: Vehicle attributes for which the rule applies
          type: array
          uniqueItems: true
          minLength: 1
          items:
            description: An individual vehicle scope rule
            type: object
            unevaluatedProperties: false
            required:
            - dimension
            - comparison
            - value
            properties:
              dimension:
                $ref: '#/$defs/propertyDefinitions/vehicleScopeDimension'
              comparison:
                $ref: '#/$defs/propertyDefinitions/vehicleScopeComparison'
              value:
                type: number
                minimum: 0
                x-jsonld-id: rdf:value
              unit:
                $ref: '#/$defs/propertyDefinitions/vehicleScopeUnit'
                x-jsonld-id: http://qudt.org/vocab/unit/
    speedLimitsContainer:
      description: Rules governing speed on this road segment
      type: array
      items:
        description: An individual speed limit rule
        $comment: 'TODO: Speed limits probably have directionality, so should factor
          out a headingScopeContainer for this purpose and use it to introduce an
          optional direction property in each rule.'
        type: object
        anyOf:
        - required:
          - min_speed
        - required:
          - max_speed
        allOf:
        - $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyContainers/geometricRangeScopeContainer
        unevaluatedProperties: false
        properties:
          min_speed:
            $ref: '#/$defs/propertyDefinitions/speed'
            x-jsonld-id: https://w3id.org/ogc/om/hasMinSpeed
          max_speed:
            $ref: '#/$defs/propertyDefinitions/speed'
            x-jsonld-id: https://w3id.org/ogc/om/hasMaxSpeed
          is_max_speed_variable:
            description: Indicates a variable speed corridor
            type: boolean
            default: false
            x-jsonld-id: https://w3id.org/ogc/om/isMaxSpeedVariable
          when:
            allOf:
            - $ref: '#/$defs/propertyContainers/temporalScopeContainer'
            - $ref: '#/$defs/propertyContainers/headingScopeContainer'
            - $ref: '#/$defs/propertyContainers/purposeOfUseScopeContainer'
            - $ref: '#/$defs/propertyContainers/recognizedStatusScopeContainer'
            - $ref: '#/$defs/propertyContainers/travelModeScopeContainer'
            - $ref: '#/$defs/propertyContainers/vehicleScopeContainer'
            minProperties: 1
            unevaluatedProperties: false
            x-jsonld-id: https://w3id.org/ogc/om/when
            x-jsonld-type: '@json'
      minLength: 1
      uniqueItems: true
    accessContainer:
      description: Rules governing access to this road segment
      type: array
      items:
        type: object
        unevaluatedProperties: false
        allOf:
        - $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyContainers/geometricRangeScopeContainer
        required:
        - access_type
        properties:
          access_type:
            type: string
            enum:
            - allowed
            - denied
            - designated
          when:
            allOf:
            - $ref: '#/$defs/propertyContainers/temporalScopeContainer'
            - $ref: '#/$defs/propertyContainers/headingScopeContainer'
            - $ref: '#/$defs/propertyContainers/purposeOfUseScopeContainer'
            - $ref: '#/$defs/propertyContainers/recognizedStatusScopeContainer'
            - $ref: '#/$defs/propertyContainers/travelModeScopeContainer'
            - $ref: '#/$defs/propertyContainers/vehicleScopeContainer'
            minProperties: 1
            unevaluatedProperties: false
        minLength: 1
        uniqueItems: true
    prohibitedTransitionsContainer:
      description: Rules preventing transitions from this segment to another segment.
      type: array
      items:
        type: object
        unevaluatedProperties: false
        allOf:
        - $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyContainers/geometricRangeScopeContainer
        required:
        - sequence
        - final_heading
        properties:
          sequence:
            description: Ordered sequence of connector/segment pairs that it is prohibited
              to follow from this segment.
            type: array
            items:
              description: Pair of segment and connector IDs along the sequence
              $ref: '#/$defs/propertyDefinitions/sequenceEntry'
            minItems: 1
            uniqueItems: true
          final_heading:
            description: Direction of travel that is prohibited on the destination
              segment of the sequence.
            $ref: '#/$defs/propertyDefinitions/heading'
          when:
            allOf:
            - $ref: '#/$defs/propertyContainers/headingScopeContainer'
            - $ref: '#/$defs/propertyContainers/temporalScopeContainer'
            - $ref: '#/$defs/propertyContainers/purposeOfUseScopeContainer'
            - $ref: '#/$defs/propertyContainers/recognizedStatusScopeContainer'
            - $ref: '#/$defs/propertyContainers/travelModeScopeContainer'
            - $ref: '#/$defs/propertyContainers/vehicleScopeContainer'
            minProperties: 1
            unevaluatedProperties: false
    roadFlagsContainer:
      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:
        type: object
        allOf:
        - $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyContainers/geometricRangeScopeContainer
        unevaluatedProperties: false
        properties:
          values:
            type: array
            items:
              $ref: '#/$defs/propertyDefinitions/roadFlag'
            uniqueItems: true
            minLength: 1
      uniqueItems: true
      minLength: 1
    railFlagsContainer:
      description: Set of boolean attributes applicable to railways. May be specified
        either as a single flag array of flag values, or as an array of flag rules.
      type: array
      items:
        type: object
        allOf:
        - $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyContainers/geometricRangeScopeContainer
        unevaluatedProperties: false
        properties:
          values:
            type: array
            items:
              $ref: '#/$defs/propertyDefinitions/railFlag'
            uniqueItems: true
            minLength: 1
      uniqueItems: true
      minLength: 1
    levelRulesContainer:
      description: Defines the Z-order, i.e. stacking order, of the road segment.
      type: array
      items:
        description: A single level rule defining the Z-order, i.e. stacking order,
          applicable within a given scope on the road segment.
        type: object
        allOf:
        - $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyContainers/geometricRangeScopeContainer
        unevaluatedProperties: false
        required:
        - value
        properties:
          value:
            $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyDefinitions/level
    subclassRulesContainer:
      description: Set of subclasses scoped along segment
      type: array
      items:
        type: object
        allOf:
        - $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyContainers/geometricRangeScopeContainer
        unevaluatedProperties: false
        properties:
          value:
            $ref: '#/$defs/propertyDefinitions/subclass'
    surfaceContainer:
      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.
      type: array
      items:
        type: object
        allOf:
        - $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyContainers/geometricRangeScopeContainer
        unevaluatedProperties: false
        properties:
          value:
            $ref: '#/$defs/propertyDefinitions/roadSurface'
            x-jsonld-id: '@id'
      minItems: 1
      uniqueItems: true
      $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.
    widthRulesContainer:
      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: array
      items:
        type: object
        allOf:
        - $ref: https://ogcincubator.github.io/bblocks-overturemaps/build/annotated/overturemaps/schemas/definitions/schema.yaml#/$defs/propertyContainers/geometricRangeScopeContainer
        required:
        - value
        properties:
          value:
            $ref: '#/$defs/propertyDefinitions/width'
        unevaluatedProperties: false
      minItems: 1
      uniqueItems: true
x-jsonld-prefixes:
  om: https://w3id.org/ogc/om/
  qudt: http://qudt.org/schema/qudt/
