+++ /dev/null
-openapi: 3.0.0
-info:
- version: 1.0.1
- title: GeoJSON format
- description: >
- This document defines the GeoJSON format as an OpenAPI.
- It contains the definitions for 'Feature' object and 'FeatureCollection'
- objects, as well as the definitions for all 'Geometry' objects.
- It conforms with the 'RFC-7946' standard from IETF (August 2016 version)
-
- Kudos to @bubbobne and @idkw whose code helped me not start from scratch
- https://gist.github.com/bubbobne/fe5f2db65acf039be6a9fd92fc9c7233
-
- termsOfService: 'no'
- contact:
- name: Zitoun
- email: 'zitoun@gmail.com'
- license:
- name: GPLv3
- url: 'https://www.gnu.org/licenses/gpl-3.0.html'
-
-#•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-externalDocs:
- description: 'Official GeoJSON specification – IETF RFC-7946 (August 2016)'
- url: 'https://tools.ietf.org/html/rfc7946'
-
-#•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-security:
- - UserSecurity: []
-
-#•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-servers:
- - url: 'http://myHost/'
-
-#•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-paths:
- #=============================================================================
- '/geometry':
- get:
- summary: Get an array of GeoJSON Geometry objects
- responses:
- '200':
- description: Successful response
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/GeometryCollection'
- '400':
- $ref: '#/components/responses/Error400BadRequest'
- '401':
- $ref: '#/components/responses/Error401Unauthorized'
- '500':
- $ref: '#/components/responses/Error500InternalServerError'
- post:
- summary: Create new GeoJSON Geometry object
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Geometry'
- required: true
- responses:
- '201':
- description: New GeoJSON Geometry object created
- '400':
- $ref: '#/components/responses/Error400BadRequest'
- '401':
- $ref: '#/components/responses/Error401Unauthorized'
- '403':
- $ref: '#/components/responses/Error403Forbidden'
- '500':
- $ref: '#/components/responses/Error500InternalServerError'
-
-#•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
-components:
-
- #=============================================================================
- schemas:
-
- #---------------------------------------------------------------------------
- 'GeoJsonObject':
- description: >
- GeoJSon object
-
- The coordinate reference system for all GeoJSON coordinates is a
- geographic coordinate reference system, using the World Geodetic System
- 1984 (WGS 84) datum, with longitude and latitude units of decimal
- degrees.
- This is equivalent to the coordinate reference system identified by the
- Open Geospatial Consortium (OGC) URN
- An OPTIONAL third-position element SHALL be the height in meters above
- or below the WGS 84 reference ellipsoid.
- In the absence of elevation values, applications sensitive to height or
- depth SHOULD interpret positions as being at local ground or sea level.
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3'
- type: object
- properties:
- 'type':
- type: string
- enum:
- - Feature
- - FeatureCollection
- - Point
- - MultiPoint
- - LineString
- - MultiLineString
- - Polygon
- - MultiPolygon
- - GeometryCollection
- 'bbox':
- description: >
- A GeoJSON object MAY have a member named "bbox" to include
- information on the coordinate range for its Geometries, Features, or
- FeatureCollections. The value of the bbox member MUST be an array of
- length 2*n where n is the number of dimensions represented in the
- contained geometries, with all axes of the most southwesterly point
- followed by all axes of the more northeasterly point. The axes order
- of a bbox follows the axes order of geometries.
- type: array
- items:
- type: number
- required:
- - type
- discriminator:
- propertyName: type
-
- #---------------------------------------------------------------------------
- 'Geometry':
- description: >
- Abstract type for all GeoJSon object except Feature and
- FeatureCollection
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3'
- allOf:
- - $ref: '#/components/schemas/GeoJsonObject'
- - type: object
- properties:
- 'type':
- type: string
- enum:
- - Point
- - MultiPoint
- - LineString
- - MultiLineString
- - Polygon
- - MultiPolygon
- - GeometryCollection
- required:
- - type
- discriminator:
- propertyName: type
-
- #---------------------------------------------------------------------------
- 'GeometryElement':
- description: >
- Abstract type for all GeoJSon 'Geometry' object the type of which is not
- 'GeometryCollection'
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3'
- allOf:
- - $ref: '#/components/schemas/Geometry'
- - type: object
- properties:
- 'type':
- type: string
- enum:
- - Point
- - MultiPoint
- - LineString
- - MultiLineString
- - Polygon
- - MultiPolygon
- required:
- - type
- discriminator:
- propertyName: type
-
- #---------------------------------------------------------------------------
- 'Feature':
- description: GeoJSon 'Feature' object
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3.2'
- allOf:
- - $ref: '#/components/schemas/GeoJsonObject'
- - type: object
- required:
- - geometry
- - properties
- properties:
- 'geometry':
- allOf:
- - nullable: true
- - $ref: '#/components/schemas/Geometry'
- 'properties':
- type: object
- nullable: true
- 'id':
- oneOf:
- - type: number
- - type: string
-
- #---------------------------------------------------------------------------
- 'FeatureCollection':
- description: GeoJSon 'FeatureCollection' object
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3.3'
- allOf:
- - $ref: '#/components/schemas/GeoJsonObject'
- - type: object
- required:
- - features
- properties:
- 'features':
- type: array
- items:
- $ref: '#/components/schemas/Feature'
-
- #---------------------------------------------------------------------------
- 'Position':
- description: >
- GeoJSon fundamental geometry construct.
-
- A position is an array of numbers. There MUST be two or more elements.
- The first two elements are longitude and latitude, or easting and
- northing, precisely in that order and using decimal numbers.
- Altitude or elevation MAY be included as an optional third element.
-
- Implementations SHOULD NOT extend positions beyond three elements
- because the semantics of extra elements are unspecified and ambiguous.
- Historically, some implementations have used a fourth element to carry
- a linear referencing measure (sometimes denoted as "M") or a numerical
- timestamp, but in most situations a parser will not be able to properly
- interpret these values. The interpretation and meaning of additional
- elements is beyond the scope of this specification, and additional
- elements MAY be ignored by parsers.
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3.1.1'
- type: array
- minItems: 2
- maxItems: 3
- items:
- type: number
-
- #---------------------------------------------------------------------------
- 'LineStringCoordinates':
- description: >
- GeoJSon fundamental geometry construct, array of two or more positions.
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3.1.4'
- type: array
- items:
- $ref: '#/components/schemas/Position'
- minItems: 2
-
- #---------------------------------------------------------------------------
- 'LinearRing':
- description: >
- A linear ring is a closed LineString with four or more positions.
-
- The first and last positions are equivalent, and they MUST contain
- identical values; their representation SHOULD also be identical.
-
- A linear ring is the boundary of a surface or the boundary of a hole in
- a surface.
-
- A linear ring MUST follow the right-hand rule with respect to the area
- it bounds, i.e., exterior rings are counterclockwise, and holes are
- clockwise.
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3.1.6'
- type: array
- items:
- $ref: '#/components/schemas/Position'
- minItems: 4
-
- #---------------------------------------------------------------------------
- 'Point':
- description: GeoJSon geometry
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3.1.2'
- allOf:
- - $ref: '#/components/schemas/GeometryElement'
- - type: object
- required:
- - type
- - coordinates
- properties:
- 'type':
- type: 'string'
- enum: [Point]
- 'coordinates':
- $ref: '#/components/schemas/Position'
-
- #---------------------------------------------------------------------------
- 'MultiPoint':
- description: GeoJSon geometry
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3.1.3'
- allOf:
- - $ref: '#/components/schemas/GeometryElement'
- - type: object
- required:
- - coordinates
- properties:
- 'coordinates':
- type: array
- items:
- $ref: '#/components/schemas/Position'
-
- #---------------------------------------------------------------------------
- 'LineString':
- description: GeoJSon geometry
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3.1.4'
- allOf:
- - $ref: '#/components/schemas/GeometryElement'
- - type: object
- required:
- - coordinates
- properties:
- 'coordinates':
- $ref: '#/components/schemas/LineStringCoordinates'
-
- #---------------------------------------------------------------------------
- 'MultiLineString':
- description: GeoJSon geometry
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3.1.5'
- allOf:
- - $ref: '#/components/schemas/GeometryElement'
- - type: object
- required:
- - coordinates
- properties:
- 'coordinates':
- type: array
- items:
- $ref: '#/components/schemas/LineStringCoordinates'
-
- #---------------------------------------------------------------------------
- 'Polygon':
- description: GeoJSon geometry
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3.1.6'
- allOf:
- - $ref: '#/components/schemas/GeometryElement'
- - type: object
- required:
- - coordinates
- properties:
- 'coordinates':
- type: array
- items:
- $ref: '#/components/schemas/LinearRing'
-
- #---------------------------------------------------------------------------
- 'MultiPolygon':
- description: GeoJSon geometry
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3.1.7'
- allOf:
- - $ref: '#/components/schemas/GeometryElement'
- - type: object
- required:
- - coordinates
- properties:
- 'coordinates':
- type: array
- items:
- type: array
- items:
- $ref: '#/components/schemas/LinearRing'
-
- #---------------------------------------------------------------------------
- 'GeometryCollection':
- type: object
- description: >
- GeoJSon geometry collection
-
- GeometryCollections composed of a single part or a number of parts of a
- single type SHOULD be avoided when that single part or a single object
- of multipart type (MultiPoint, MultiLineString, or MultiPolygon) could
- be used instead.
- externalDocs:
- url: 'https://tools.ietf.org/html/rfc7946#section-3.1.8'
- allOf:
- - $ref: '#/components/schemas/Geometry'
- - type: object
- required:
- - geometries
- properties:
- 'geometries':
- type: array
- items:
- $ref: '#/components/schemas/GeometryElement'
- minItems: 0
-
- #=============================================================================
- responses:
-
- #---------------------------------------------------------------------------
- 'Error400BadRequest':
- description: The JSON is not valid.
- content:
- application/json:
- schema:
- type: object
- properties:
- 'status_code':
- type: integer
- enum: [400]
- 'message':
- type: string
- enum: ['The JSON is not valid.']
- #---------------------------------------------------------------------------
- 'Error401Unauthorized':
- description: The request requires an user authentication.
- content:
- application/json:
- schema:
- type: object
- properties:
- 'status_code':
- type: integer
- enum: [401]
- 'message':
- type: string
- enum: ['The request requires an user authentication.']
- #---------------------------------------------------------------------------
- 'Error403Forbidden':
- description: The access is not allowed.
- content:
- application/json:
- schema:
- type: object
- properties:
- 'status_code':
- type: integer
- enum: [403]
- 'message':
- type: string
- enum: ['The access is not allowed.']
- #---------------------------------------------------------------------------
- 'Error404NotFound':
- description: The resource was not found.
- content:
- application/json:
- schema:
- type: object
- properties:
- 'status_code':
- type: integer
- enum: [404]
- 'message':
- type: string
- enum: ['The resource was not found.']
- #---------------------------------------------------------------------------
- 'Error405MethodNotAllowed':
- description:
- Request method is not supported for the requested resource.
- content:
- application/json:
- schema:
- type: object
- properties:
- 'status_code':
- type: integer
- enum: [405]
- 'message':
- type: string
- enum: ['Request method is not supported for the requested resource.']
- #---------------------------------------------------------------------------
- 'Error406NotAcceptable':
- description:
- Headers sent in the request are not compatible with the service.
- content:
- application/json:
- schema:
- type: object
- properties:
- 'status_code':
- type: integer
- enum: [406]
- 'message':
- type: string
- enum: ['Headers sent in the request are not compatible with the service.']
- #---------------------------------------------------------------------------
- 'Error408RequestTimeout':
- description: >
- The client did not produce a request within the time that the server was
- prepared to wait. The client may repeat the request without
- modifications at any later time.
- content:
- application/json:
- schema:
- type: object
- properties:
- 'status_code':
- type: integer
- enum: [408]
- 'message':
- type: string
- enum: ['The client did not produce a request within the time that the server was prepared to wait. The client may repeat the request without modifications at any later time.']
- #---------------------------------------------------------------------------
- 'Error410Gone':
- description: >
- The requested resource is no longer available and will not be available
- again. The resource should be purged from the client system.
- content:
- application/json:
- schema:
- type: object
- properties:
- 'status_code':
- type: integer
- enum: [410]
- 'message':
- type: string
- enum: ['The requested resource is no longer available and will not be available again. The resource should be purged from the client system.']
- #---------------------------------------------------------------------------
- 'Error423Locked':
- description: The resource that is being accessed is locked.
- content:
- application/json:
- schema:
- type: object
- properties:
- 'status_code':
- type: integer
- enum: [423]
- 'message':
- type: string
- enum: ['The resource that is being accessed is locked.']
- #---------------------------------------------------------------------------
- 'Error429TooManyRequests':
- description: The user has sent too many requests in a short period.
- content:
- application/json:
- schema:
- type: object
- properties:
- 'status_code':
- type: integer
- enum: [429]
- 'message':
- type: string
- enum: ['The user has sent too many requests in a short period.']
- #---------------------------------------------------------------------------
- 'Error500InternalServerError':
- description: An unexpected error occured.
- content:
- application/json:
- schema:
- type: object
- properties:
- 'status_code':
- type: integer
- enum: [500]
- 'message':
- type: string
- enum: ['An unexpected error occured.']
- #---------------------------------------------------------------------------
- 'Error503ServiceUnavailable':
- description: The server is currently unable to handle the request.
- content:
- application/json:
- schema:
- type: object
- properties:
- 'status_code':
- type: integer
- enum: [503]
- 'message':
- type: string
- enum: ['The server is currently unable to handle the request.']
- #=============================================================================
- securitySchemes:
- 'UserSecurity':
- type: http
- scheme: basic
-
-#•••••••••••••••••••••••••••••••••••[ EOF ]••••••••••••••••••••••••••••••••••••#
\ No newline at end of file