openapi: 3.0.3 info: title: Transformation API version: 1.0.0 description: > The Transformation API is a service for transformation between different coordinate reference systems (CRS), using the official RDNAPTRANS™ transformation procedure. Currently supported coordinate reference systems: - 3D RD&NAP (EPSG:7415), which is a compound CRS of RD (EPSG:28992) and NAP (EPSG:5709). - 3D ETRS89 realisation ETRF2000 (EPSG:7931), which has a 2D equivalent (EPSG:9067) and is a member of the datum ensemble 3D ETRS89 (EPSG:4937) with 2D equivalent (EPSG:4258). When using the input for (or using the output as) an ITRS realisation like 2D WGS84 (EPSG:4326) instead of the ETRS89 realisation 3D ETRF2000 (EPSG:7931), this gives an approximation of about 1 metre. When the input contains 3D coordinates outside the bounds of the quasi-geoid grid or 2D coordinates, this will result in a 2D transformation for these coordinates. Next to the transformation of coordinates, the Transformation API checks the maximum length of line segments. When the input contains line segments longer than allowed for the user specified value for the accepted deviation of long line segments (input property: acceptDeviationLongLineSegments), this will result in a bad request with the following message: "The input contains one or more line segments of more than ___ km. To guarantee an accuracy within the accepted deviation of ___ m for long line segments, this is not allowed. Please insert additional vertices according to the intended trajectory, e.g. a geodesic, a loxodrome, a straight line in RD or a straight line in another map projection." contact: name: NSGI paths: /transform: post: summary: Coordinate transformation parameters: - $ref: '#/components/parameters/acceptCrs' - $ref: '#/components/parameters/contentType' - $ref: '#/components/parameters/contentCrs' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Input' responses: 200: description: OK content: application/json: schema: $ref: '#/components/schemas/Result' headers: API-Version: $ref: '#/components/headers/API-Version' Content-Crs: $ref: '#/components/headers/Content-Crs' 400: $ref: '#/components/responses/400' 401: $ref: '#/components/responses/401' 406: $ref: '#/components/responses/406' 500: $ref: '#/components/responses/500' 503: $ref: '#/components/responses/503' components: headers: API-Version: description: API version schema: type: string Content-Crs: description: CRS of the transformed geometry schema: enum: - 'EPSG:7415' - 'EPSG:7931' type: string parameters: acceptCrs: description: Target CRS in: header name: Accept-Crs required: true schema: enum: - 'EPSG:7415' - 'EPSG:7931' type: string contentCrs: description: Source CRS in: header name: Content-Crs required: true schema: enum: - 'EPSG:7415' - 'EPSG:7931' type: string contentType: description: Content Type in: header name: Content-Type required: false schema: default: 'application/json' enum: - 'application/json' type: string responses: 400: content: application/problem+json: schema: $ref: '#/components/schemas/ExtendedError' description: Bad request. The request body does not contain valid JSON or the query is not supported by the API. headers: API-Version: $ref: '#/components/headers/API-Version' 401: content: application/problem+json: schema: $ref: '#/components/schemas/Error' description: Unauthorized. You probably did not include a valid `X-Api-Key` header. headers: API-Version: $ref: '#/components/headers/API-Version' 406: content: application/problem+json: schema: $ref: '#/components/schemas/Error406' description: >- Not Acceptable. Currently the API can only return `application / json` headers: API-Version: $ref: '#/components/headers/API-Version' 500: content: application/problem+json: schema: $ref: '#/components/schemas/Error5xx' description: Internal server error. There is a malfunction. headers: API-Version: $ref: '#/components/headers/API-Version' 503: content: application/problem+json: schema: $ref: '#/components/schemas/Error' description: Service Unavailable. There may be (planned) maintenance or a malfunction." headers: API-Version: $ref: '#/components/headers/API-Version' schemas: Input: type: object required: - data properties: data: oneOf: - $ref: https://geojson.org/schema/Geometry.json - $ref: https://geojson.org/schema/GeometryCollection.json acceptDeviationLongLineSegments: type: number description: A numeric value greater or equal to 0.001 metre (-1 to ignore validation) default: 0.001 example: 0.001 Result: type: object required: - data - timestamp - transformationMethod - projVersion properties: data: oneOf: - $ref: https://geojson.org/schema/Geometry.json - $ref: https://geojson.org/schema/GeometryCollection.json timestamp: type: string example: '2021-03-01T15:00:00+01:00' transformationMethod: type: string description: Currently the API only supports the RDNAPTRANS™ 2018 version. example: 'RDNAPTRANS2018' projVersion: type: string example: '7.1.2' maxDeviationLongLineSegments: type: number description: Max deviation of long line segment in metre Error: type: object description: 'Object specified according to https://tools.ietf.org/html/rfc7807.' required: - title - status - detail properties: type: type: string description: URI to a page with more information about this error. example: 'about:blank' title: type: string example: Not Found status: type: integer format: int32 example: 404 detail: type: string example: HTTP 404 Not Found instance: type: string example: self Error406: type: object description: 'Object specified according to https://tools.ietf.org/html/rfc7807.' required: - title - status - detail - acceptable properties: type: type: string description: >- URI to a page with more information about this error. example: 'about:blank' title: type: string example: Not Acceptable status: type: integer format: int32 example: 406 detail: type: string example: HTTP 406 Not Acceptable instance: type: string example: self acceptable: type: array items: type: string example: '[application/json]' Error5xx: type: object description: 'Object specified according to https://tools.ietf.org/html/rfc7807.' required: - title - status - detail properties: type: type: string description: >- URI to a page with more information about this error. example: 'about:blank' title: type: string example: Service Unavailable status: type: integer format: int32 example: 503 detail: type: string example: HTTP 503 Service Unavailable instance: type: string example: self ExtendedError: type: object description: 'Object specified according to https://tools.ietf.org/html/rfc7807.' required: - title - status - detail - invalidParams properties: type: type: string description: URI to a page with more information about this error. example: 'about:blank' title: type: string example: Bad Request status: type: integer format: int32 example: 400 detail: type: string example: Request parameters didn't validate. instance: type: string example: self invalidParams: type: array items: type: object required: - name - reason properties: name: type: string example: validation.request.parameter.enum.invalid reason: type: string example: >- Value `epsg:dummy` for parameter `Accept-Crs` is not allowed. Allowed values are <[EPSG:7415, EPSG:7931]>. securitySchemes: apiKey: description: >- The API key you have been given must be submitted with every request to the API via the `X-Api-Key` request header. If this is not sent correctly, or it is an invalid key, you will receive an `403 Forbidden` response. in: header name: X-Api-Key type: apiKey security: - apiKey: [ ]