Mapflow API
Mapflow processing API
Внимание
Проекты и обработки, которые вы создаете в Mapflow.ai будут доступны через API, и наоборот. Также, ваши кредиты Mapflow используются для запуска обработок через API. Используйте API токен, чтобы начать использовать API, который вам необходимо сгенерировать в настройках профиля (см. авторизация для работы с Mapflow API).
Важно
Вы должны следовать требованиям, указанным на странице с описанием моделей, при загрузке собственных изображений для обработки через API платформы Mapflow. Отправьте запрос с использованием предварительной обработки данных на help@geoalert.io.
Статус пользователя
- Возвращает статус пользователя для данной учетной записи пользователя, включая:
Пользовательские ограничения
Модели ИИ-Картографирования по умолчанию и пользовательские (каждая учетная запись пользователя подключена к моделям по умолчанию, однако конкретные модели должны быть привязаны Администратором к учетной записи пользователя)
Спутниковые снимки по умолчанию и пользовательские (каждая учетная запись пользователя привязана к поставщикам данных по умолчанию, однако конкретные коммерческие поставщики должны быть привязаны Администратором к учетной записи пользователя)
Если учетная запись пользователя связана с командой - она также возвращает описание команды
Пример ответа:
{
"email": "admin@geoalert.io",
"processedArea": 45221388394,
"remainingArea": 54778611606,
"areaLimit": 100000000000,
"memoryLimit": 1000000000,
"models": [
{
"id": "30ddfd15-04aa-47f6-9ceb-68ce709fd710",
"name": "🏠 Buildings",
"description": "",
"created": "2023-02-01T08:17:03.871690Z",
"updated": "2023-05-11T14:24:31.456180Z",
"pricePerSqKm": 13.0,
"blocks": [
{
"name": "Classification",
"displayName": "Classification",
"optional": true,
"price": 3.0
},
{
"name": "Simplification",
"displayName": "Polygonization",
"optional": true,
"price": 5.0
},
{
"name": "OSM",
"displayName": "Merge with OSM",
"optional": true,
"price": 0.0
}
]
},
{
"id": "5d47a57c-3274-4014-aa04-daac416782f7",
"name": "🚗 Roads",
"description": "",
"created": "2023-02-01T08:17:03.371720Z",
"updated": "2023-05-11T14:24:31.605710Z",
"pricePerSqKm": 5.0
}
],
"teams": [
{
"teamId": "a6c5a4cf-c693-4441-8bef-028ac0f2d5d9",
"name": "My New Team",
"role": "OWNER",
"activeUntil": null,
"creditsLimit": null
}
]
}
Проекты
Получить проект
GET https://api.mapflow.ai/rest/projects/{projectId}
Возвращает проект с указанным идентификатором.
Пример ответа:
{
"id": "546d148f-19a1-40d8-8f16-d1e6dabfd204",
"name": "test",
"description": "test",
"progress": {
"status": "UNPROCESSED",
"percentCompleted": 0,
"details": []
},
"aoiCount": 0,
"area": 0,
"user": {
"id": "61cd6899-19e8-44a0-97db-b86f1a9b7af4",
"login": "user@user.com",
"email": "user@user.com",
"role": "USER",
"created": "2019-12-16T16:10:29.492358Z"
},
"isDefault": false,
"created": "2020-05-13T13:00:31.978Z",
"updated": "2020-05-13T13:00:31.978Z",
"workflowDefs": [
{
"id": "084474b5-e001-456f-a486-f62f5ee1ffe1",
"name": "🏠 Buildings",
"created": "2020-08-11T19:57:40.974170Z",
"updated": "2020-08-11T19:57:40.974172Z"
}
]
}
Получить проект по умолчанию
Важно
Проект по умолчанию создается для каждого пользователя при регистрации.
GET https://api.mapflow.ai/rest/projects/default
Возвращает имя и ID проекта пользователя по умолчанию и настройки учетной записи пользователя.
{
"id": "ea2281ab-53f0-4839-9d38-8e3648ee377f",
"name": "Default",
"description": null,
"progress": {
"status": "OK",
"percentCompleted": 100,
"details": [
{
"status": "OK",
"count": 1,
"area": 836643,
"statusUpdateDate": "2022-12-20T08:14:38.882673Z"
}
],
"completionDate": "2022-12-20T08:14:38.882673Z"
},
"aoiCount": 23,
"area": 20885015,
"user": {
"id": "25b12411-bd16-4a31-9842-728264a3aefd",
"login": "test_user@test.com",
"email": "test_user@test.com",
"role": "USER",
"areaLimit": 50000000,
"aoiAreaLimit": 50000000,
"processedArea": 21863903,
"created": "2022-10-20T14:54:59.630308Z",
"updated": "2022-12-06T14:00:53.051512Z",
"isPremium": false
},
"isDefault": true,
"created": "2022-10-20T14:54:59.636598Z",
"updated": "2022-10-20T14:54:59.636599Z",
"workflowDefs": [
{
"id": "ad7a5460-c903-402b-9c21-b12aa2fc9f69",
"name": "🏗️ Construction sites",
"description": null,
"created": "2022-10-20T14:54:59.690562Z",
"updated": "2022-10-20T14:54:59.690562Z"
},
{
"id": "decc5854-3a92-4b25-8e5b-895de9fa4ef3",
"name": "🌲↕️ Forest with heights",
"description": null,
"created": "2022-10-20T14:54:59.787793Z",
"updated": "2022-11-25T13:08:41.124862Z"
}
]
}
Получить все проекты
GET https://api.mapflow.ai/rest/projects
Возвращает список всех проектов пользователя.
Создать проект
POST https://api.mapflow.ai/rest/projects
Создает новый проект и возвращает его текущее состояние.
Пример тела запроса:
{
"name": "test",
"description": "test"
}
Имя проекта
Произвольное описание этого проекта
Ответ: вновь созданный проект содержит идентификатор проекта и описание ИИ моделей по умолчанию, поскольку они связаны с каждым новым проектом.
Предупреждение
Пользовательские ИИ модели не будут автоматически привязаны к новому проекту.
Переименовать проект
PUT https://api.mapflow.ai/rest/projects/{projectId}
Пример тела запроса:
{
"name": "new name (optional)",
"description": "new description (optional)"
}
Удалить проект
DELETE https://api.mapflow.ai/rest/projects/{projectId}
Удаляет проект. Каскадно удаляет все дочерние объекты.
Обработка
Получить все обработки
GET https://api.mapflow.ai/rest/processings
Возвращает список пользовательских обработок по проекту по умолчанию
Получить все обработки по Id проекта
GET https://api.mapflow.ai/rest/projects/{projectId}/processings
Возвращает список пользовательских обработок по пользовательскому проекту
Получить обработку по Id
GET https://api.mapflow.ai/rest/processings/{processingId}
Возвращает обработку с указанным Id.
Пример ответа:
{
"id": "65285409-ac88-4fc0-a937-193cf42c2343",
"name": "Test processing",
"description": null,
"projectId": "a45aa059-fc95-4da0-80e9-2f258fa42c3f",
"vectorLayer": {
"id": "726bdc81-4c43-44ba-9d1b-ca5ed53f23fe",
"name": "Test processing",
"tileJsonUrl": "https://app.mapflow.ai/api/layers/4f84c84a-3678-4a11-bd20-dac6f230b08f.json",
"tileUrl": "https://app.mapflow.ai/api/layers/4f84c84a-3678-4a11-bd20-dac6f230b08f/tiles/{z}/{x}/{y}.vector.pbf"
},
"rasterLayer": {
"id": "9cb1df8d-d26c-4458-8e4b-ffd03871edbf",
"tileJsonUrl": "https://app.mapflow.ai/api/v0/cogs/tiles.json?uri=s3://mapflow-rasters/db3f192f-010d-4fc5-9cbe-f44bc569ba59",
"tileUrl": "https://app.mapflow.ai/api/v0/cogs/tiles/{z}/{x}/{y}.png?uri=s3://mapflow-rasters/db3f192f-010d-4fc5-9cbe-f44bc569ba59"
},
"workflowDef": {
"id": "c6a71c32-972c-4d67-95a1-e9f3dfc033c9",
"name": "Buildings (⭐️ Aerial imagery)",
"description": "Custom model: segmentation of buildings in aerial imagery at resolution 10 cm/pixel",
"created": "2023-02-07T12:07:35.259144Z",
"updated": "2023-09-01T13:03:20.905987Z",
"pricePerSqKm": 33.0,
"blocks": []
},
"aoiCount": 1,
"area": 12010038,
"cost": 1638,
"status": "OK",
"reviewStatus": null,
"rating": null,
"percentCompleted": 100,
"params": {
"url": "https://rasters-production.mapflow.ai/api/v0/cogs/tiles/{z}/{x}/{y}.png?uri=s3://mapflow-rasters/4738260d-0fab-479f-beff-633d50a388f0",
"source_type": "xyz",
"crs": "EPSG:3857"
},
"blocks": [],
"meta": {
"source": "tif",
"source-app": "qgis",
"version": "1.7.0"
},
"messages": [],
"created": "2023-03-29T06:48:35.103854Z",
"updated": "2023-07-09T13:32:25.540726Z"
}
Если обработка провалилась, ответ также содержит код и параметры ошибки в разделе сообщения. Если разные AOI провалились с одной и той же ошибкой, возвращается только одна из повторяющихся ошибок. Пример ответа на провалившуюся обработку:
{
"id": "6ad89b64-38fd-408f-acbb-75035ec52787",
"status": "FAILED",
"percentCompleted": 0,
"messages": [
{
"code": "source-validator.PixelSizeTooHigh",
"parameters": {
"max_res": "1.2",
"level": "error",
"actual_res": "5.620983603290215"
}
}
]
}
Возможные коды ошибок, параметры и описания смотрите в разделе Error Messages
Стоимость обработки
POST https://api.mapflow.ai/rest/processing/cost
Если вы хотите узнать стоимость обработки, не запуская ее, вы можете воспользоваться этим методом. Возвращает стоимость обработки в кредитах на основе общей площади.
Пример тела запроса:
{
"wdId": "8cb13006-a299-4df6-b47d-91bd63de947f",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
37.29836940765381,
55.63619642594767
],
[
37.307724952697754,
55.63619642594767
],
[
37.307724952697754,
55.64024152130109
],
[
37.29836940765381,
55.64024152130109
],
[
37.29836940765381,
55.63619642594767
]
]
]
},
"params": {
"data_provider": "Mapbox"
}
}
Пример ответа:
30
Примечание
Вы можете узнать подробности, такие как определение сценария обработки ID
(wdId
), используя этот метод:
GET api.mapflow.ai/rest/user/status
Запустить обработку
POST https://api.mapflow.ai/rest/processings
Запускает обработку и возвращает ее текущее состояние. Образец тела запроса:
{
"name": "Test", //Name of this processing. Optional.
"description": "A simple test", //Arbitrary description of this processing. Optional.
"projectId": "20f05e39-ccea-4e26-a7f3-55b620bf4e31", //Project id. Optional. If not set, the user's default project will be applied.
"wdName": "🏠 Buildings", //The name of a workflow (AI model). Could be "🏠 Buildings", or "🌲 Forest", etc. See ref. below
"geometry": { //A geojson geometry of the area of processing.
"type": "Polygon",
"coordinates": [
[
[
37.29836940765381,
55.63619642594767
],
[
37.307724952697754,
55.63619642594767
],
[
37.307724952697754,
55.64024152130109
],
[
37.29836940765381,
55.64024152130109
],
[
37.29836940765381,
55.63619642594767
]
]
]
},
"params": { //Arbitrary string parameters of this processing. Optional.
"data_provider": "Mapbox",
},
"meta": { //Arbitrary string key-value for this processing (metadata). Optional.
"test": "test"
}
}
Примечание
Чтобы обработать предоставленный пользователем растр (см. раздел Загрузка изображений), задайте параметры следующим образом:
"params": {
"source_type": "local",
"url": "s3://users-data/user@email.com_eaf9e720-c6de-4d9b-8aec-52296d43f0c4/1e7fc660-7d0a-4632-9e6c-e95cf20e62b9/b97e9154-a356-450c-990b-fb1692d404ec.tif"
}
Ответ: созданная обработка.
✍️ Параметры для запуска обработки
Параметры |
Тип |
Описание |
---|---|---|
geometry* |
Array |
Область обработки в формате GeoJSON, тип – Полигон или Мультиполигон. |
name |
String |
Имя обработки. Если не указано, будет присвоен автоматически сгенерированный ID |
projectId |
String |
ID проекта, в котором создается обработка (если не указан, то он создается в проекте пользователя по умолчанию) |
wdId* / |
String |
ID сценария обработки (ИИ модель). Вместо этого может быть указан wdName |
wdName* |
String |
Название сценария обработки (ИИ модель). Вместо этого можно указать wdId |
params |
Array |
Параметры источника данных. Если не указано иное, будет использоваться первый источник данных по умолчанию. |
blocks |
Array |
Параметры обработки, указанные для модели. |
meta |
Array |
Опциональные метаданные в виде массива ключ:значение |
✍️ ИИ модели по умолчанию
ЗНАЧЕНИЕ |
ОПИСАНИЕ |
Разрешение МОДЕЛИ (m/px), количество входных каналов |
УРОВНЬ ZOOM |
ОПЦИИ |
---|---|---|---|---|
🏠 Здания |
Распознает здания и классифицирует их |
0.5, 1-3 (RGB) |
17–18 |
Полигонизация, Склейка с OSM, Классификация |
🌲 Лес |
Распознает древовидную растительность |
0.5, 3 (RGB) |
17-18 |
Высоты |
🚗 Дороги |
Распознает дороги и возвращает их в виде полигонов / линий |
0.5, 3 (RGB) |
17–18 |
|
🏗️ Строительство |
Распознает строительные площадки |
0.5, 3 (RGB) |
17–18 |
✍️ Параметры для указания источника данных
Параметры |
Тип |
Описание |
Примерные значения |
---|---|---|---|
name |
String |
Имя провайдера данных, если он доступен для текущего аккаунта. |
|
url |
String |
URL-адрес пользовательского поставщика данных |
«my-tile-server.com/{z}/{x}/{y}» |
source_type |
String |
Тип источника пользовательского поставщика данных. Для использования пользовательского файла из хранилища Mapflow можно указать тип «local» |
|
zoom |
String |
Уровень zoom |
«18» |
✍️ Параметры для указания «source_type»
ЗНАЧЕНИЕ |
ОПИСАНИЕ |
---|---|
XYZ |
The URL to the imagery service in “xyz” format |
TMS |
Аналогично “xyz” с обратной координатой “y” |
WMS |
(❗️❗️Устарело) URL на сервис изображений “wms” формате |
Quadkey |
Одномерный индексный ключ, который обычно сохраняет близость фрагментов в пространстве “xy” (формат тайлов Bing Maps) |
local |
Файл изображения в формате GeoTIFF |
Статус обработки
ЗНАЧЕНИЕ |
Описание |
---|---|
UNPROCESSED |
Обработка еще не начата |
IN_PROGRESS |
Обработка выполняется (или находится в очереди) |
FAILED |
Обработка завершилась неудачно - измените неправильные параметры или попробуйте перезапустить |
OK |
Обработка завершена на 100 процентов |
IN_REVIEW |
Дополнительный статус, включенный по запросу (если результаты находятся в стадии проверки) |
Настройте обработку с помощью параметров рабочего процесса
POST https://api.mapflow.ai/rest/processings
Рабочий процесс обработки можно настроить, включив или отключив некоторые параметры модели. Количество параметров зависит от модели и сценария.
Пример тела запроса
{
"blocks": [
{
"name": "Simplification",
"enabled": false
},
{
"name": "Classification",
"enabled": true
}
]
}
«Параметры» можно получить для каждой, связанной с пользователем, модели в разделе models
- с помощью запроса user/status
.
Пример ответа:
"models":
[
{
"id": "c2e857fe-1bf6-4e7a-b9f4-d5339c46d357",
"name": "Forest",
"description": "Default model: segmentation of forested areas with assinment of height classes; thresholds are 4 and 10 meters",
"created": "2023-07-26T08:14:18.739968Z",
"updated": "2023-08-11T04:58:40.907896Z",
"pricePerSqKm": 0.0,
"blocks": [
{
"name": "Segmentation",
"displayName": "Segmentation",
"optional": false,
"price": 8.0
},
{
"name": "Heights",
"displayName": "Height estimation",
"optional": true,
"price": 20.0
}
]
}
]
Переименования обработки
PUT https://api.mapflow.ai/rest/processing/{processingId}
Пример тела запроса:
{
"name": "new name (optional)",
"description": "new description (optional)"
}
Перезапуск обработки
POST https://api.mapflow.ai/rest/processings/{processingId}/restart
Перезапускает провалившиеся разделы этой обработки. Не перезапускает не провалившиеся разделы. Каждый рабочий процесс перезапускается с первого неудачного этапа. Таким образом, выполняется наименьший возможный объем работы, чтобы попытаться привести обработку в успешное состояние.
Связать обработку с другим проектом
PUT https://api.mapflow.ai/rest/processings/{processing_id}
Связывает обработку с другим проектом по идентификатору проекта
curl --location --request PUT 'https://api.mapflow.ai/rest/processings/{processing_id}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <YOUR TOKEN>' \
--data-raw '{"projectId": "new_project_id"}'
Удалить обработку
DELETE https://api.mapflow.ai/rest/processings/{processingId}
Удаляет обработку. Каскадно удаляет все дочерние объекты.
Получить AOI обработки
GET https://api.mapflow.ai/rest/processings/{processingId}/aois
Возвращает список определенных географических областей для обработки в GeoJSON.
Пример ответа:
[
{
"id": "b86127bb-38bc-43e7-9fa9-54b37a0e17af",
"status": "IN_PROGRESS",
"percentCompleted": 0,
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
37.29836940765381,
55.63619642594767
],
[
37.29836940765381,
55.64024152130109
],
[
37.307724952697754,
55.64024152130109
],
[
37.307724952697754,
55.63619642594767
],
[
37.29836940765381,
55.63619642594767
]
]
]
},
"area": 265197,
"messages": []
}
]
Загрузка результатов обработки
GET https://api.mapflow.ai/rest/processings/{processingId}/result
Возвращает результаты Geojson этой обработки в виде потока октетов. Должен вызываться только при успешно завершенной обработке.
Загрузка изображений
Примечание
❗️ Используйте Mapflow Data API для создания мозаики и загрузки одного или более изображений
Используйте s3 ссылку из
"image_url"
как параметр"url"
для Run the processing
Сообщения об ошибках в API
Код ошибки |
Параметры |
Описание |
---|---|---|
source-validator.UrlMustBeString |
url_type |
Ключ „url“ в вашем запросе должен быть строкой, вместо этого получено {url_type}. |
source-validator.UrlMustBeLink |
Ваш URL должен быть ссылкой, начинающейся с “http://” или “https://”. |
|
source-validator.UrlFormatInvalid |
parse_error_message |
Формат „url“ недопустим и не может быть проанализирован. Ошибка: {parse_error_message} |
source-validator.ZoomMustBeInteger |
actual_zoom |
Масштаб должен быть либо пустым, либо целым, получено {actual_zoom} |
source-validator.InvalidZoomValue |
actual_zoom} |
Масштаб должен быть от 0 до 22, получено {actual_zoom} |
source-validator.TooHighZoom |
max_zoom, actual_zoom |
Масштаб должен быть не выше {max_zoom}, получено {actual_zoom} |
source-validator.TooLowZoom |
min_zoom, actual_zoom |
Масштаб должен быть не ниже {min_zoom}, получено {actual_zoom} |
source-validator.UrlBlacklisted |
url |
Указанная базовая карта {url} недоступна для обработки, поскольку содержит карту, а не спутниковое изображение. Наши модели предназначены для спутниковых снимков. |
source-validator.ImageMetadataMustBeDict |
Метаданные изображения должны быть словарем (json) |
|
source-validator.ImageMetadataKeyError |
Метаданные изображения должны содержать следующие ключи: crs, transform, dtype, count |
|
source-validator.S3URLError |
actual_s3_link |
URL изображения в хранилище s3 должен быть строкой, начинающейся с s3://, получено {actual_s3_link} |
source-validator.LocalRequestKeyError |
Запрос должен содержать ключ „profile“, либо „url“ |
|
source-validator.ReadFromS3Failed |
s3_link |
Не удалось прочитать файл из {s3_link}. |
source-validator.ImageReadError |
Мы не смогли открыть и прочитать загруженное вами изображение |
|
source-validator.BadImageProfile |
profile, required_keys |
Профиль изображения (метаданные) должен иметь ключи {required_keys}, получен профиль {profile} |
source-validator.DtypeNotAllowed |
required_dtypes, request_dtype |
Тип данных изображения (Dtype) должен быть одним из {required_dtypes}, получено {request_dtype} |
source-validator.NChannelsNotAllowed |
required_nchannels, real_nchannels |
Количество каналов в изображении должно быть одним из {required_nchannels}. Получено {real_nchannels} |
source-validator.PixelSizeTooLow |
actual_res, min_res |
Пространственное разрешение вашего изображения слишком низкое: размер пикселя {actual_res}, минимально допустимый размер пикселя - {min_res} |
source-validator.PixelSizeTooHigh |
actual_res, max_res |
Пространственное разрешение вашего изображения слишком высокое: размер пикселя {actual_res}, максимально допустимый размер пикселя - {max_res} |
source-validator.ImageCheckError |
checked_param, message, metadata |
Произошла ошибка при проверке {checked_param} изображения: {message}. Метаданные изображения = {metadata}. |
source-validator.QuadkeyLinkFormatError |
Ваш „url“ не соответствует формату, базовая карта Quadkey должна быть ссылкой, содержащей заполнитель “q”. |
|
source-validator.SentinelInputStringKeyError |
Запрос Sentinel_L2A должен содержать поле с именем „url“ со строковым значением |
|
source-validator.SentinelInputStringFormatError |
input_string |
Входная строка {input_string} имеет неизвестный формат. Он должен представлять Sentinel-2 granule ID |
source-validator.GridCellOutOfBound |
actual_cell, allowed_cells |
Выбранная ячейка изображения Sentinel-2 - это {actual_cell}, эта модель предназначена для ячеек: {allowed_cells} |
source-validator.AOINotInCell |
actual_cell |
AOI не пересекает выбранную гранулу Sentinel-2 {actual_cell} |
source-validator.MonthOutOfBounds |
actual_month, allowed_months |
Выбранный месяц изображения Sentinel-2 это {actual_month}, эта модель предназначена для: {allowed_months} |
source-validator.TMSLinkFormatError |
Запрашиваемая вами ссылка на базовую карту TMS не соответствует формату, это должна быть ссылка, содержащая заполнители „{x}“, „{y}“, „{z}“, исправьте ее и начните обработку заново. |
|
source-validator.RequirementsMustBeDict |
requirements_type |
Требования должны быть словарем, получено {requirements_type}. |
source-validator.RequestMustBeDict |
request_type |
Запрос должен быть словарем, получено {request_type}. |
source-validator.RequestMustHaveSourceType |
Запрос должен содержать «source_type» ключ |
|
source-validator.SourceTypeIsNotAllowed |
source_type, allowed_sources |
Тип источника {source_type} недопустим. Используйте один из: {allowed_sources} |
source-validator.RequiredSectionMustBeDict |
required_section_type |
Раздел требований “Обязательные” должен содержать словарь, а не {required_section_type} |
source-validator.RecommendedSectionMustBeDict |
recommended_section_type |
Раздел требований “Рекомендуемые” должен содержать словарь, а не {recommended_section_type} |
source-validator.XYZLinkFormatError |
Ваша ссылка на базовую карту XYZ не соответствует формату, это должна быть ссылка, содержащая заполнители „{x}“, „{y}“, „{z}“. |
|
source-validator.TaskMustContainAoi |
Задание для проверки источника должно содержать область интереса (раздел „geometry“) |
|
source-validator.UnhandledException |
Внутренняя ошибка в процессе проверки источника данных. Мы работаем над исправлением, наша служба поддержки свяжется с вами. |
|
source-validator.internalError |
Внутренняя ошибка в процессе проверки источника данных. Мы работаем над исправлением, наша служба поддержки свяжется с вами. |
|
dataloader.internalError |
Внутренняя ошибка в процессе загрузки данных. Мы работаем над исправлением, наша служба поддержки свяжется с вами. |
|
dataloader.InternalError |
Внутренняя ошибка в процессе загрузки данных. Мы работаем над исправлением, наша служба поддержки свяжется с вами. |
|
dataloader.UnknownSourceType |
allowed_source_types, real_source_types |
Неправильный тип источника {real_source_type}. Укажите один из разрешенных типов {allowed_source_types}. |
dataloader.MemoryLimitExceeded |
allowed_size, estimated_size |
Для вашей задачи загрузки данных требуется {estimated_size} МБ памяти, который превысил допустимый лимит памяти {allowed_size} |
dataloader.LoaderArgsError |
argument_name, argument_type, expected_type |
Аргумент Dataloader {argument_name} имеет тип {argument_type}, который, как ожидается, будет {expected_type} |
dataloader.WrongChannelsNum |
expected_nchannels, real_nchannels |
Загруженный тайл содержит каналы {real_nchannels}, требуемое количество - {expected_nchannels} |
dataloader.WrongTileSize |
expected_size, real_size |
Загруженный тайл имеет размер {real_size}, ожидаемый размер тайла - {expected_size} |
dataloader.TileNotLoaded |
tile_location, status |
Тайл в местоположении {tile_location} не может быть загружен, ответ сервера - {status} |
dataloader.CrsIsNotSupported |
Внутренняя ошибка в процессе загрузки данных. Мы работаем над исправлением, наша служба поддержки свяжется с вами. |
|
dataloader.MaploaderInternalError |
Внутренняя ошибка в процессе загрузки данных. Мы работаем над исправлением, наша служба поддержки свяжется с вами. |
|
dataloader.SentinelLoaderInternalError |
Внутренняя ошибка в процессе загрузки данных. Мы работаем над исправлением, наша служба поддержки свяжется с вами. |
|
raster-processor.internalError |
Внутренняя ошибка в процессе подготовки данных. Мы работаем над исправлением, наша служба поддержки свяжется с вами. |
|
inference.internalError |
Внутренняя ошибка в процессе обработки данных. Мы работаем над исправлением, наша служба поддержки свяжется с вами |
|
vector-processor.internalError |
Внутренняя ошибка в процессе обработки данных. Мы работаем над исправлением, наша служба поддержки свяжется с вами |
Mapflow Data API
Примечание
Data API позволяет управлять вашими изображениями, организовывать их в коллекции (мозаики), повторно использовать для обработки с помощью Mapflow и просматривать их в виде слоев XYZ. 👉 Чтобы использовать API обработки изображений, ознакомьтесь с этой документацией
Управление мозаикой изображений
Примечание
Что такое “мозаика”? Это коллекция отдельных изображений, предназначенных для мгновенного предварительного просмотра и обработки. Это полезно в таких случаях, как объединение в мозаику количества отдельных аэрофотоснимков, охватывающих некоторую область, или пакетирование большого ортофотоплана для более быстрой загрузки и оптимизации его хранения в облаке.
Создать мозаику
POST https://api.mapflow.ai/rest/rasters/mosaic
Создает мозаику (пустую коллекцию изображений) и возвращает ее ID.
curl --location --request POST 'https://api.mapflow.ai/rest/rasters/mosaic' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <YOUR TOKEN>' \
--data-raw '{
"name": "mosaic-name",
"tags": [
"tag-1",
"tag-2"
]
}'
Создает мозаику и загружает изображения в мозаику
curl --location -g --request POST 'https://api.mapflow.ai/rest/rasters/mosaic/image?name={name}&tags={tag1}&tags={tag2}' \
--header 'Content-Type: multipart/form-data' \
--header 'Authorization: Basic <YOUR TOKEN>' \
--form 'file=@"/path/to/file"'
Получить мозаику
GET https://api.mapflow.ai/rest/rasters/mosaic/{mosaic_id}
Обновить мозаику
curl --location --request PUT 'https://api.mapflow.ai/rest/rasters/mosaic/{mosaic_id}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <YOUR TOKEN>' \
--data-raw '{
"name": "new-mosaic-name",
"tags": [
"new-tag-1",
"new-tag-2"
]
}'
Загрузить изображения в существующую мозаику
Внимание
⚠️ Загруженные изображения должны иметь одинаковую систему географической привязки, количество каналов и пространственное разрешение.
POST https://api.mapflow.ai/rest/rasters/mosaic/{mosaic_id}/image
Связать изображение с существующей мозаикой
POST https://api.mapflow.ai/rest/rasters/mosaic/{mosaic_id}/link-image
curl --location -g --request POST 'https://api.mapflow.ai/rest/rasters/mosaic/{mosaic_id}/link-image' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <YOUR TOKEN>' \
--data-raw '{
"url": "s3://users-data/user@email.com_045b8085-0ab8-42dc-8c65-c366cbaab5e0/8b6e9f1e-8ee6-4c15-9b39-c3bd6431f3f6/cog/area-5911389.tif"
}'
Пример ответа:
{
"message": "File successfully linked to a mosaic",
"mosaic_id": "6ee95ae6-f26e-41bd-8cb1-39bea545119f"
}
Получение изображений по ID мозаики
GET https://api.mapflow.ai/rest/rasters/mosaic/{mosaic_id}\image
Пример ответа:
[
{
"id": "6ae7f9e9-da2d-41e0-b16f-83396003af57",
"image_url": "s3://users-data/user@email.com_eaf9e720-c6de-4d9b-8aec-52296d43f0c4/90fe01b2-8c21-4d5b-9d4f-143b05d3e986/6ae7f9e9-da2d-41e0-b16f-83396003af57.tif",
"preview_url_l": "https://api.mapflow.ai/rest/rasters/image/6ae7f9e9-da2d-41e0-b16f-83396003af57/preview/l",
"preview_url_s": "https://api.mapflow.ai/rest/rasters/image/6ae7f9e9-da2d-41e0-b16f-83396003af57/preview/s",
"uploaded_at": "2023-01-26T13:58:32.122099",
"file_size": 68417439,
"footprint": "POLYGON ((1.991514383583533 48.76433046008412, 1.991514383583533 48.77553902852908, 1.968476220399751 48.77553902852908, 1.968476220399751 48.76433046008412, 1.991514383583533 48.76433046008412))",
"filename": "bd8b9969505748898adac2cfa80d3425.tif",
"checksum": "9d2d9e9bd347fc5204e5fd1add0982aadff21f17",
"meta_data": {
"crs": "EPSG:32631",
"count": 3,
"width": 5589,
"dtypes": [
"uint8",
"uint8",
"uint8"
],
"height": 4079,
"nodata": null,
"pixel_size": [
0.3000000000000021,
0.3000000000000457
]
},
"cog_link": "s3://users-data/user@email.com_eaf9e720-c6de-4d9b-8aec-52296d43f0c4/90fe01b2-8c21-4d5b-9d4f-143b05d3e986/cog/area-1101712.tif"
}
]
Удалить мозаику
Внимание
Удаление мозаики также приводит к удалению всех связанных изображений и они не могут быть восстановлены
DELETE https://api.mapflow.ai/rest/rasters/mosaic/{mosaic_id}
Управление изображениями
Получить метаданные изображения по ID изображения
GET https://api.mapflow.ai/rest/rasters/image/{image_id}
Удалить изображение
DELETE https://api.mapflow.ai/rest/rasters/image/{image_id}
Получить предварительный просмотр изображения
GET https://api.mapflow.ai/rest/rasters/{image_id}/preview/{preview_type}
Например:
curl --location --request GET 'https://api.mapflow.ai/rest/rasters/image/{image_id}/preview/s' \
--header 'Content-Type: image/jpg' \
--header 'Authorization: Basic <YOUR TOKEN>'
Пример ответа:
PREVIEW TYPE |
ОПИСАНИЕ |
---|---|
s |
изображение 256x256 |
l |
изображение 1024x1024 |
Внимание
Хранилище Mapflow
Получить лимиты хранилища пользователя
GET https://api.mapflow.ai/rest/rasters/memory
Этот метод позволяет проверить использование хранилища пользователем соответственно доступному лимиту.
Поиск изображений
Примечание
Это ранняя версия API Mapflow для поиска доступных спутниковых изображений, предоставляемых внешними поставщиками данных. API призван выполнять роль промежуточного звена между несколькими источниками изображений и Mapflow Processing API. API возвращает результаты поиска по поставщикам изображений, привязанным к конкретному пользователю. Если ни один провайдер не связан с пользователем, он возвращает все доступные провайдеры. Чтобы запустить обработку, необходимо привязать провайдера к своей учетной записи пользователя.
Получить метаданные доступных изображений
POST https://api.mapflow.ai/catalog/meta
Возвращает список доступных изображений, отфильтрованных по метаданным.
Пример запроса:
curl --location 'https://api.mapflow.ai/rest/catalog/meta' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic ******' \
--data '{
"aoi": {
"type": "Polygon",
"coordinates": [[[76.6755,43.2234],[76.6755,43.4712],[77.0163,43.4712],[77.0163,43.2234],[76.6755,43.2234]]]
},
"acquisitionDateFrom": "2022-04-01T00:00:00Z",
"acquisitionDateTo": "2022-11-01T00:00:00Z",
"maxCloudCover": 0.1,
"maxResolution": 0.5,
"minResolution": 0.3
}'
Примечание
aoi
: geometry, - обязательный, GeoJSON-подобный Полигон или Мультиполигон области поискаacquisitionDateFrom
: UTC time stringacquisitionDateTo
: UTC time stringminResolution
: float, in metersmaxResolution
: float, in metersmaxCloudCover
: float, in percentsminOffNadirAngle
: float, in degreesmaxOffNadirAngle
: float, in degreesminAoiIntersectionPercent
: float, in percents – минимальное пересечение контура изображения с aoiПредупреждение
Размер области поиска не может превышать лимита обработки AOI, назначенного конкретному пользователю.
Пример ответа – Scene:
{
"id": "JL1GF03A_PMS_20220607132729_200087596_103_0002_001_L1",
"footprint": {
"type": "Polygon",
"coordinates": [
[
[
76.5009,
43.3412
],
...
]
]
},
"pixelResolution": 1.06,
"acquisitionDate": "2022-06-07T13:27:33Z",
"productType": "Scene",
"sensor": "JL1GF03A",
"colorBandOrder": "B,G,R,NIR,PAN",
"cloudCover": 0.09,
"offNadirAngle": -3.91,
"previewType": "png",
"previewUrl": "https://cgwx-jpg.obs.cn-north-4.myhuaweicloud.com:443/thumbnail_mss/JL1GF03A_PMS_20220607132729_200087596_103_0002_001_L1.jpg",
"providerName": "CG"
}
Пример ответа – Mosaic:
{
"id": "JL1KF01A_PMS04_20220717131252_200093089_101_0005_001_L1",
"footprint": {
"type": "MultiPolygon",
"coordinates": [
[
[
[
76.903651508,
43.252856702
],
...
]
]
]
},
"pixelResolution": 0.0,
"acquisitionDate": "2022-07-17T00:00:00Z",
"productType": "Mosaic",
"sensor": "JL1KF01A",
"colorBandOrder": "RGB",
"cloudCover": 0.0,
"offNadirAngle": 3.0,
"previewType": "xyz",
"previewUrl": "https://app.mapflow.ai/tiles/charmingglobe/{z}/{x}/{-y}.png?year=2022",
"providerName": "CG_mosaic_2022"
}
Примечание
В API поиска изображений есть два типа продуктов, доступных для заказа; 1. Продукт Scene доступен по запросу, продолжается внедрение рабочего процесса. 1. Продукт Mosaic доступен для мгновенной обработки, если к вашей учетной записи Mapflow привязан соответствующий поставщик данных.
Запуск обработки по идентификатору изображения
Подробное описание того, как запустить обработку с помощью Mapflow API, смотрите в разделе Mapflow Processing API – “Создать обработку”. Чтобы запустить обработку с использованием конкретного изображения, возвращаемого Search API, определите провайдера и ID изображения в параметрах следующим образом:
{"params": {"data_provider":<providerName>, "url":<id>}}