566 lines
16 KiB
YAML
566 lines
16 KiB
YAML
openapi: 3.1.0
|
||
info:
|
||
title: measurements
|
||
description: 'HTTP-сервис измерений по GeoTIFF-растрам (DEM/thermal), читаемым напрямую из S3/MinIO
|
||
через GDAL.
|
||
|
||
|
||
Все эндпоинты — POST под префиксом `/api`. `path` в теле запроса указывается в формате `<bucket>:<путь/к/файлу.tif>`;
|
||
система координат задаётся строкой `proj` (proj4). Пустой `proj` означает, что точки уже в системе
|
||
координат растра.
|
||
|
||
|
||
Аутентификация (JWT в заголовках `authorization`/`identity`) включается переменной `AUTH=1`.'
|
||
version: 0.0.1
|
||
paths:
|
||
/api/point:
|
||
post:
|
||
summary: Height/temperature at a single point
|
||
description: Возвращает высоту (h) и/или температуру (t) в одной точке по DEM/термо-растру из S3.
|
||
operationId: point_api_point_post
|
||
requestBody:
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/TiffPoint'
|
||
required: true
|
||
responses:
|
||
'200':
|
||
description: Successful Response
|
||
content:
|
||
application/json:
|
||
schema:
|
||
additionalProperties:
|
||
anyOf:
|
||
- type: number
|
||
- type: 'null'
|
||
type: object
|
||
title: Response Point Api Point Post
|
||
'422':
|
||
description: Validation Error
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/HTTPValidationError'
|
||
/api/points:
|
||
post:
|
||
summary: Height/temperature at multiple points
|
||
description: 'Батч-версия /point: массив высот/температур для списка точек.'
|
||
operationId: points_api_points_post
|
||
requestBody:
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/TiffPoints'
|
||
required: true
|
||
responses:
|
||
'200':
|
||
description: Successful Response
|
||
content:
|
||
application/json:
|
||
schema:
|
||
items:
|
||
additionalProperties:
|
||
anyOf:
|
||
- type: number
|
||
- type: 'null'
|
||
type: object
|
||
type: array
|
||
title: Response Points Api Points Post
|
||
'422':
|
||
description: Validation Error
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/HTTPValidationError'
|
||
/api/profile:
|
||
post:
|
||
summary: Elevation profile along a polyline
|
||
description: Профиль высот вдоль ломаной; между вершинами добавляются промежуточные точки.
|
||
operationId: profile_api_profile_post
|
||
requestBody:
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/TiffProfile'
|
||
required: true
|
||
responses:
|
||
'200':
|
||
description: Successful Response
|
||
content:
|
||
application/json:
|
||
schema:
|
||
items:
|
||
additionalProperties:
|
||
anyOf:
|
||
- type: number
|
||
- type: 'null'
|
||
type: object
|
||
type: array
|
||
title: Response Profile Api Profile Post
|
||
'422':
|
||
description: Validation Error
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/HTTPValidationError'
|
||
/api/volume:
|
||
post:
|
||
summary: Volume inside a polygon
|
||
description: Объём внутри полигона. mode=cv2 (по умолчанию) или pillow (DEM-режим, требует > 2 точек).
|
||
operationId: volume_api_volume_post
|
||
requestBody:
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/TiffVolume'
|
||
required: true
|
||
responses:
|
||
'200':
|
||
description: Successful Response
|
||
content:
|
||
application/json:
|
||
schema:
|
||
anyOf:
|
||
- additionalProperties:
|
||
type: number
|
||
type: object
|
||
- type: 'null'
|
||
title: Response Volume Api Volume Post
|
||
'422':
|
||
description: Validation Error
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/HTTPValidationError'
|
||
/api/multiple:
|
||
post:
|
||
summary: Volume difference between two DEMs
|
||
description: Разница объёмов между master- и slave-растром в пределах полигона.
|
||
operationId: multiple_api_multiple_post
|
||
requestBody:
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/TiffMultiple'
|
||
required: true
|
||
responses:
|
||
'200':
|
||
description: Successful Response
|
||
content:
|
||
application/json:
|
||
schema:
|
||
additionalProperties:
|
||
type: number
|
||
type: object
|
||
title: Response Multiple Api Multiple Post
|
||
'422':
|
||
description: Validation Error
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/HTTPValidationError'
|
||
/api/transform:
|
||
post:
|
||
summary: GeoTIFF affine transform
|
||
description: Возвращает 6 коэффициентов GDAL GeoTransform растра.
|
||
operationId: transform_api_transform_post
|
||
requestBody:
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/Tiff'
|
||
required: true
|
||
responses:
|
||
'200':
|
||
description: Successful Response
|
||
content:
|
||
application/json:
|
||
schema:
|
||
prefixItems:
|
||
- type: number
|
||
- type: number
|
||
- type: number
|
||
- type: number
|
||
- type: number
|
||
- type: number
|
||
type: array
|
||
maxItems: 6
|
||
minItems: 6
|
||
title: Response Transform Api Transform Post
|
||
'422':
|
||
description: Validation Error
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/HTTPValidationError'
|
||
/api/info:
|
||
post:
|
||
summary: GeoTIFF metadata
|
||
description: Метаданные растра (размер, проекция, geotransform и т.п.).
|
||
operationId: info_api_info_post
|
||
requestBody:
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/Tiff'
|
||
required: true
|
||
responses:
|
||
'200':
|
||
description: Successful Response
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
title: Response Info Api Info Post
|
||
'422':
|
||
description: Validation Error
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/HTTPValidationError'
|
||
/api/statistics:
|
||
post:
|
||
summary: Raster min/max statistics
|
||
description: Пара (min, max) значений растра.
|
||
operationId: statistics_api_statistics_post
|
||
requestBody:
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/Tiff'
|
||
required: true
|
||
responses:
|
||
'200':
|
||
description: Successful Response
|
||
content:
|
||
application/json:
|
||
schema:
|
||
prefixItems:
|
||
- type: number
|
||
- type: number
|
||
type: array
|
||
maxItems: 2
|
||
minItems: 2
|
||
title: Response Statistics Api Statistics Post
|
||
'422':
|
||
description: Validation Error
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/HTTPValidationError'
|
||
/api/bounds:
|
||
post:
|
||
summary: Tile bounds by zoom range
|
||
description: Границы тайлов (XYZ) для диапазона zoom_from..zoom_to.
|
||
operationId: bounds_api_bounds_post
|
||
requestBody:
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/Tiff'
|
||
required: true
|
||
responses:
|
||
'200':
|
||
description: Successful Response
|
||
content:
|
||
application/json:
|
||
schema:
|
||
additionalProperties:
|
||
items:
|
||
items:
|
||
type: integer
|
||
type: array
|
||
type: array
|
||
type: object
|
||
title: Response Bounds Api Bounds Post
|
||
'422':
|
||
description: Validation Error
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/HTTPValidationError'
|
||
components:
|
||
schemas:
|
||
HTTPValidationError:
|
||
properties:
|
||
detail:
|
||
items:
|
||
$ref: '#/components/schemas/ValidationError'
|
||
type: array
|
||
title: Detail
|
||
type: object
|
||
title: HTTPValidationError
|
||
Tiff:
|
||
properties:
|
||
path:
|
||
type: string
|
||
title: Path
|
||
zoom_to:
|
||
type: integer
|
||
title: Zoom To
|
||
default: 21
|
||
zoom_from:
|
||
type: integer
|
||
title: Zoom From
|
||
default: 14
|
||
type: object
|
||
required:
|
||
- path
|
||
title: Tiff
|
||
TiffMultiple:
|
||
properties:
|
||
master_path:
|
||
type: string
|
||
title: Master Path
|
||
slave_path:
|
||
type: string
|
||
title: Slave Path
|
||
proj:
|
||
type: string
|
||
title: Proj
|
||
default: ''
|
||
points:
|
||
items:
|
||
prefixItems:
|
||
- type: number
|
||
- type: number
|
||
type: array
|
||
maxItems: 2
|
||
minItems: 2
|
||
type: array
|
||
title: Points
|
||
type: object
|
||
required:
|
||
- master_path
|
||
- slave_path
|
||
- points
|
||
title: TiffMultiple
|
||
example:
|
||
- master_path: geotiff_dems/NTG030521_DEM.tif
|
||
points:
|
||
- - 37.34743572357015
|
||
- 55.68881158675471
|
||
- - 37.347128864435845
|
||
- 55.6888704629146
|
||
- - 37.34719182945381
|
||
- 55.68896771656465
|
||
- - 37.34732057806979
|
||
- 55.688942063559054
|
||
proj: +proj=tmerc +lat_0=0 +lon_0=60.05 +k=1 +x_0=1500000 +y_0=-5911057.63 +ellps=krass +towgs84=23.57,-140.95,-79.8,0,0.35,0.79,-0.22
|
||
+units=m +no_defs
|
||
slave_path: geotiff_dems/NTG030521_DEM.tif
|
||
TiffPoint:
|
||
properties:
|
||
altitude_path:
|
||
anyOf:
|
||
- type: string
|
||
- type: 'null'
|
||
title: Altitude Path
|
||
temperature_path:
|
||
anyOf:
|
||
- type: string
|
||
- type: 'null'
|
||
title: Temperature Path
|
||
proj:
|
||
type: string
|
||
title: Proj
|
||
default: ''
|
||
point:
|
||
prefixItems:
|
||
- type: number
|
||
- type: number
|
||
type: array
|
||
maxItems: 2
|
||
minItems: 2
|
||
title: Point
|
||
type: object
|
||
required:
|
||
- point
|
||
title: TiffPoint
|
||
example:
|
||
- altitude_path: geotiff_dems/ALTITUDE_DEM.tif
|
||
point:
|
||
- 59.95821631734607
|
||
- 57.9660901731621
|
||
proj: +proj=tmerc +lat_0=0 +lon_0=60.05 +k=1 +x_0=1500000 +y_0=-5911057.63 +ellps=krass +towgs84=23.57,-140.95,-79.8,0,0.35,0.79,-0.22
|
||
+units=m +no_defs
|
||
temperature_path: geotiff_dems/THERMAL_DEM.tif
|
||
- point:
|
||
- 1494214.348999979
|
||
- 516505.3900003205
|
||
proj: ''
|
||
temperature_path: geotiff_dems/THERMAL_DEM.tif
|
||
- altitude_path: geotiff_dems/ALTITUDE_DEM.tif
|
||
point:
|
||
- 1494214.348999979
|
||
- 516505.3900003205
|
||
proj: ''
|
||
TiffPoints:
|
||
properties:
|
||
altitude_path:
|
||
anyOf:
|
||
- type: string
|
||
- type: 'null'
|
||
title: Altitude Path
|
||
temperature_path:
|
||
anyOf:
|
||
- type: string
|
||
- type: 'null'
|
||
title: Temperature Path
|
||
proj:
|
||
type: string
|
||
title: Proj
|
||
default: ''
|
||
points:
|
||
items:
|
||
prefixItems:
|
||
- type: number
|
||
- type: number
|
||
type: array
|
||
maxItems: 2
|
||
minItems: 2
|
||
type: array
|
||
title: Points
|
||
type: object
|
||
required:
|
||
- points
|
||
title: TiffPoints
|
||
example:
|
||
- altitude_path: geotiff_dems/ALTITUDE_DEM.tif
|
||
points:
|
||
- - 59.95821631734607
|
||
- 57.9660901731621
|
||
- - 59.95452603553467
|
||
- 57.96567474229709
|
||
- - 59.95563056285039
|
||
- 57.966613723012216
|
||
proj: +proj=tmerc +lat_0=0 +lon_0=60.05 +k=1 +x_0=1500000 +y_0=-5911057.63 +ellps=krass +towgs84=23.57,-140.95,-79.8,0,0.35,0.79,-0.22
|
||
+units=m +no_defs
|
||
temperature_path: geotiff_dems/THERMAL_DEM.tif
|
||
- points:
|
||
- - 1494221.1549999786
|
||
- 516495.86600015266
|
||
- - 1494214.348999979
|
||
- 516505.3900003205
|
||
proj: ''
|
||
temperature_path: geotiff_dems/THERMAL_DEM.tif
|
||
TiffProfile:
|
||
properties:
|
||
path:
|
||
type: string
|
||
title: Path
|
||
proj:
|
||
type: string
|
||
title: Proj
|
||
default: ''
|
||
points:
|
||
items:
|
||
prefixItems:
|
||
- type: number
|
||
- type: number
|
||
type: array
|
||
maxItems: 2
|
||
minItems: 2
|
||
type: array
|
||
title: Points
|
||
type: object
|
||
required:
|
||
- path
|
||
- points
|
||
title: TiffProfile
|
||
example:
|
||
- path: geotiff_dems/NTG030521_DEM.tif
|
||
points:
|
||
- - 59.95821631734607
|
||
- 57.9660901731621
|
||
- - 59.95452603553467
|
||
- 57.96567474229709
|
||
proj: +proj=tmerc +lat_0=0 +lon_0=60.05 +k=1 +x_0=1500000 +y_0=-5911057.63 +ellps=krass +towgs84=23.57,-140.95,-79.8,0,0.35,0.79,-0.22
|
||
+units=m +no_defs
|
||
- path: geotiff_dems/BLG_080122_DEM.tif
|
||
points:
|
||
- - 3334617.713961677
|
||
- 590691.7743950449
|
||
- - 3334977.6348458366
|
||
- 590688.296080064
|
||
TiffVolume:
|
||
properties:
|
||
path:
|
||
type: string
|
||
title: Path
|
||
proj:
|
||
type: string
|
||
title: Proj
|
||
default: ''
|
||
level:
|
||
anyOf:
|
||
- type: number
|
||
- type: 'null'
|
||
title: Level
|
||
points:
|
||
items:
|
||
prefixItems:
|
||
- type: number
|
||
- type: number
|
||
type: array
|
||
maxItems: 2
|
||
minItems: 2
|
||
type: array
|
||
title: Points
|
||
mode:
|
||
allOf:
|
||
- $ref: '#/components/schemas/VolumeMode'
|
||
default: cv2
|
||
type: object
|
||
required:
|
||
- path
|
||
- points
|
||
title: TiffVolume
|
||
example:
|
||
- path: geotiff_dems/NTG030521_DEM.tif
|
||
points:
|
||
- - 59.95821631734607
|
||
- 57.9660901731621
|
||
- - 59.95452603553467
|
||
- 57.96567474229709
|
||
- - 59.95563056285039
|
||
- 57.966613723012216
|
||
proj: +proj=tmerc +lat_0=0 +lon_0=60.05 +k=1 +x_0=1500000 +y_0=-5911057.63 +ellps=krass +towgs84=23.57,-140.95,-79.8,0,0.35,0.79,-0.22
|
||
+units=m +no_defs
|
||
- mode: pillow
|
||
path: geotiff_dems/NTG030521_DEM.tif
|
||
points:
|
||
- - 1494221.1549999786
|
||
- 516495.86600015266
|
||
- - 1494214.348999979
|
||
- 516505.3900003205
|
||
proj: ''
|
||
ValidationError:
|
||
properties:
|
||
loc:
|
||
items:
|
||
anyOf:
|
||
- type: string
|
||
- type: integer
|
||
type: array
|
||
title: Location
|
||
msg:
|
||
type: string
|
||
title: Message
|
||
type:
|
||
type: string
|
||
title: Error Type
|
||
type: object
|
||
required:
|
||
- loc
|
||
- msg
|
||
- type
|
||
title: ValidationError
|
||
VolumeMode:
|
||
type: string
|
||
enum:
|
||
- cv2
|
||
- pillow
|
||
title: VolumeMode
|