Загрузка в растровый каталог
Для загрузки файлов в растровый каталог необходимо выполнить POST-запрос:
POST {host}/scheduler/tasks#type=tiling
Content-Type: application/json
JSON body
{
"target": {
"serviceName": "string",
"attributesConfiguration": {
"idAttribute": "string",
"titleAttribute": "string",
"geometryAttribute": "string",
"tableName": "string",
"attributes": [
{
"attributeName": "string",
"columnName": "string",
"alias": "string",
"subType": "None",
"isEditable": true,
"isDisplayed": true,
"aggregation": "None",
"expression": "string",
"stringFormat": {
"scalingFactor": 0,
"unitsLabel": "string",
"format": "string",
"culture": "string",
"splitDigitGroup": true,
"rounding": 0
}
}
],
"tableReferences": [
{
"tableName": "string",
"referenceColumn": "string",
"targetColumn": "string",
"attributes": [
{
"attributeName": "string",
"columnName": "string",
"alias": "string",
"subType": "None",
"isEditable": true,
"isDisplayed": true,
"aggregation": "None",
"expression": "string",
"stringFormat": {
"scalingFactor": 0,
"unitsLabel": "string",
"format": "string",
"culture": "string",
"splitDigitGroup": true,
"rounding": 0
}
}
],
"tableReferences": [
{}
]
}
]
}
},
"files": [
"string"
],
"attributes": {
"property1": null,
"property2": null
},
"maxZoomLevel": 0,
"polygonize": true,
"useCog": true
}
Параметры
target
- описание целевого ресурса, в который будут скопированы данные (обязательный параметр). Подробнее об описаниях ресурсов;files
- список/массив названий загружаемых файлов во временном хранилище (обязательный параметр). Подробнее о загрузке файлов;attributes
- значения атрибутов для загружаемых файлов;polygonize
- извлечь геометрию по границе пикселей растра (true
илиfalse
). Еслиtrue
, ограничивающий полигон растра будет извлечён исходя из границ непустых значений растра. Еслиfale
, ограничивающим полигоном будет его bbox.useCog
- привести растр к виду Cloud Optimized GeoTIFF (true
илиfalse
). Рекомендуется использовать эту опцию.maxZoomLevel
- количество уровней детализации для Cloud Optimized GeoTIFF.
Описание атрибутов растра
Параметр загрузки растра attributes
представляет собой JSON-объект, ключами которого являются названия атрибутов растрового каталога. Этим ключам сопоставляются значения атрибутов, которые будут присвоены загружаемым файлам. К примеру, если растровый каталог со спутниковыми снимками имеет атрибуты name
(название снимка) и dateofimage
(дата съёмки), объект attributes
для загружаемого растра может выглядеть следующим образом:
{
"name": "Снимок Landsat-8",
"dateofimage": "2023-12-08T12:00:00+00:00"
}
Если в files
указано несколько файлов для загрузки, им всем будут присвоены одинаковые значения атрибутов, указанные в attributes
. Поэтому в большинстве случаев для загрузки нескольких файлов целесообразно использовать отдельные запросы.
Пример
Загрузим растровый файл landsat_test_image.tif
из временного хранилища в растровый каталог username.landsat_images
.
Подробнее о том, как загрузить файл в хранилище.
Python
import requests
import json
def login(username, password): # производит авторизацию и возвращает объект сессии
authUrl = f'{host}/account/login/'
login_data = {
"username": username,
"password": password
}
headers = {'Content-type': 'application/json'}
# создание объекта сессии
s = requests.Session()
# авторизация и получение JWT-токена
s.post(url=authUrl, data=json.dumps(login_data), headers=headers)
return s
host = 'https://evergis.ru/sp'
username = 'username'
password = 'password'
# авторизация
session = login(username, password)
# определяем параметры для задачи копирования
files = ["landsat_test_image.tif"]
attributes = {
"name": "Снимок Landsat-8",
"dateofimage": "2023-12-08T12:00:00+00:00"
}
polygonize = False
serviceName = f"{username}.landsat_images"
target = {
"type": "tileFeatureLayerTaskDataStorage",
"serviceName": serviceName,
"createNewService": False
}
useCog = True
tilingProps = {
"files": files,
"attributes": attributes,
"polygonize": polygonize,
"target": target,
"useCog": useCog
}
# выполнение запроса
tilingTaskUrl = f'{host}/scheduler/tasks'
params={'type': 'tiling'}
headers = {'Content-type': 'application/json'}
taskProps = session.post(url=tilingTaskUrl, params=params, data=json.dumps(tilingProps), headers=headers).json()
taskProps
{'taskId': '91126928-4189-4c20-890a-fc5c56001d26',
'status': 'Scheduled',
'taskResult': None}
Проверяем статус задачи:
taskId = taskProps['taskId']
checkTaskUrl = f'{host}/scheduler/tasks/{taskId}/progress'
taskStatus = session.get(url = checkTaskUrl, headers=headers).json()
taskStatus
{'id': '91126928-4189-4c20-890a-fc5c56001d26',
'status': 'Completed',
'taskResult': {'message': None,
'stepResults': [{'stepName': None,
'inputSource': None,
'outSource': None,
'startedTime': '2023-12-18T01:08:18.0832029Z',
'endedTime': '2023-12-18T01:08:26.4759883Z',
'batchErrors': None,
'batchCount': 1,
'inputObjectCount': 1,
'errorCount': 0,
'outputObjectCount': 1,
'resultDetails': {'Tiles created': 97}}],
'inputObjectCount': 1,
'errorCount': 0,
'outputObjectCount': 1},
'stepCount': 0,
'currentStepId': 0,
'currentStepAlreadyDone': 0,
'currentStepObjectCount': 0,
'resultDetails': None}
URL и JSON запроса
Для работы с запросом в Postman или аналогичном приложении
POST https://evergis.ru/sp/scheduler/tasks#type=tiling
Content-Type: application/json
JSON body:
{
"files": ["landsat_test_image.tif"],
"attributes": {
"name": "Снимок Landsat-8",
"dateofimage": "2023-12-08T12:00:00+00:00"
},
"polygonize": false,
"target": {
"type": "tileFeatureLayerTaskDataStorage",
"serviceName": "username.landsat_images",
"createNewService": false
}
}