openapi: 3.1.1
info:
  title: SpatialConstraint
  version: 2.0.0
  description: "Container schemas fetched from beckn.yaml. This cannot be extended as it is a reserved schema in beckn protocol. Any additional properties added to this schema can only be made using its *Attributes property"
  license:
    name: CC-BY-NC-SA 4.0 International
  contact:
    name: Beckn Labs
    url: https://beckn.io
components:
  schemas:
    SpatialConstraint:
      x-iri: https://schema.nfh.global/SpatialConstraint/v2.0
      description: "**Spatial predicate** using **OGC CQL2 (JSON semantics)** applied\
        \ to one or more geometry targets in an item. This is where clients express\
        \ spatial intent. Key ideas: - `targets`: one or more **JSONPath-like** pointers\
        \ that locate geometry    fields within each item document (e.g., `$['availableAt'][*]['geo']`). \
        - `op`: spatial operator (CQL2). Common ones:      • `S_WITHIN`     (A is\
        \ completely inside B)     • `S_INTERSECTS` (A intersects B)     • `S_CONTAINS`\
        \   (A contains B)     • `S_DWITHIN`    (A within distance of B) - `geometry`:\
        \ **GeoJSON** literal used as the predicate reference geometry. - `distanceMeters`:\
        \ required for `S_DWITHIN` when using a GeoJSON Point/shape. - `quantifier`:\
        \ if a target resolves to an array, choose whether **ANY** (default),  \
        \  **ALL**, or **NONE** of elements must satisfy the predicate.  CRS: unless\
        \ otherwise stated, all coordinates are **EPSG:4326**. "
      title: SpatialConstraint
      type: object
      properties:
        op:
          description: OGC CQL2 spatial operator.
          type: string
          enum:
          - S_WITHIN
          - S_CONTAINS
          - S_INTERSECTS
          - S_DISJOINT
          - S_OVERLAPS
          - S_CROSSES
          - S_TOUCHES
          - S_EQUALS
          - S_DWITHIN
        targets:
          description: '''One or more JSONPath-like pointers to geometry fields within
            the item.  Example pointers:  - `$[''''availableAt''''][*][''''geo'''']`
            (array of site Points)  - `$[''''itemAttributes''''][''''ride:dropOff''''][''''geo'''']`
            (drop zone Polygon)''

            '
          oneOf:
          - type: string
          - type: array
            items:
              type: string
        geometry:
          type: object
          properties:
            bbox:
              type: array
              minItems: 4
              maxItems: 4
              items:
                type: number
            coordinates:
              type: array
              items: {}
            geometries:
              type: array
              items:
                $ref: 'https://schema.nfh.global/GeoJSONGeometry/v2.0/attributes.yaml#/components/schemas/GeoJSONGeometry'
            type:
              type: string
              enum:
              - Point
              - LineString
              - Polygon
              - MultiPoint
              - MultiLineString
              - MultiPolygon
              - GeometryCollection
          required:
          - type
          additionalProperties: true
        distanceMeters:
          description: 'For `S_DWITHIN`: maximum distance in meters from the target
            geometry to `geometry` (e.g., "within 5000 m of this Point"). Ignored
            for other ops.'
          type: number
          minimum: 0
        quantifier:
          description: '''How to evaluate when `targets` resolves to an array - -
            **any**: at least one element matches (default) - **all**: every element
            must match  - **none**: no element may match''

            '
          type: string
          enum:
          - ANY
          - ALL
          - NONE
          default: any
        srid:
          description: Coordinate Reference System identifier for `geometry`. Default
            is `"EPSG:4326"`. If provided, servers MAY reproject to EPSG:4326 internally.
          type: string
          example: EPSG:4326
      required:
      - op
      - targets
      additionalProperties: false
      x-tags:
      - common
