Mapflow API

Авторизация в Mapflow API

Для доступа из внешних приложений, таких как плагин для QGIS, вам необходимо получить API token. Пользователи могут зарегистрироваться и получить токен по адресу https://app.mapflow.ai/account/api. Токен должен быть передан в Basic Auth параметрах, как в примере:

curl --location --request GET 'https://api.mapflow.ai/rest/projects/default' \
--header 'Authorization: Basic <YOUR TOKEN>'

Примечание

Ваш токен генерируется по запросу и состоит из <Email: API Token>

Вы можете декодировать его с помощью декодера base64 для использования в форме Basic Auth

Убедитесь, что вы сохранили токен, в противном случае вам нужно будет его переиздать.

Получение API токена

  1. Откройте веб-приложение Mapflow. Зарегистрируйте новый аккаунт или войдите, используя Google аккаунт.

  2. Перейдите в настройки профиля пользователя чтобы сгенерировать новый API токен.

Предварительный просмотр карты

Mapflow processing API

Внимание

Проекты и обработки, которые вы создаете в Mapflow.ai не будут доступны через API, и наоборот. Ваши кредиты Mapflow также не могут быть использованы для запуска процессов через API. Используйте API токен, чтобы начать использовать API, который вам необходимо сгенерировать в настройках профиля (см. авторизация для работы с Mapflow API).

Примечание

Предварительный просмотр результатов

Ознакомьтесь и запустите эту коллекцию Postman для 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 Geoalert 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": "495192d6-5dfc-4167-842e-3d76d8abe244",
            "name": "🚜 Fields (Sentinel-2)",
            "description": null,
            "created": "2022-10-20T14:54:59.748459Z",
            "updated": "2022-10-20T14:54:59.748459Z"
        },
        {
            "id": "9c2ceb15-2063-49b2-afec-d1752cbab2e1",
            "name": "🚗 Roads",
            "description": null,
            "created": "2022-10-20T14:54:59.865654Z",
            "updated": "2022-10-20T14:54:59.865654Z"
        },
        {
            "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/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.
        "source_type": "xyz",
        "url": "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}",
    },
    "meta": {                             #Arbitrary string key-value for this processing (metadata). Optional.
        "test": "test"
    }
}

Чтобы обработать предоставленный пользователем растр (см. раздел Загрузка GeoTIFF для обработки), задайте параметры следующим образом:

"params": {
    "source_type": "tif",
    "url": "s3://mapflow-rasters/9764750d-6047-407e-a972-5ebd6844be8a/raster.tif"
}

Ответ: созданная обработка.

Настройте обработку с помощью параметров рабочего процесса

POST https://api.mapflow.ai/rest/processings

Рабочий процесс обработки можно настроить, включив некоторые параметры модели. “Параметры” могут быть получены через user/status запрос как {"blocks": [{"name":<>, "displayName": <>, "optional":true, "price": <>}] в списке models.

Пример тела запроса

{
    "blocks": [
        {
            "name": "Simplification",
            "enabled": false
        },
        {
            "name": "OSM",
            "enabled": false
        }
    ]
}

Переименования обработки

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

Перезапускает провалившиеся разделы этой обработки. Не перезапускает не провалившиеся разделы. Каждый рабочий процесс перезапускается с первого неудачного этапа. Таким образом, выполняется наименьший возможный объем работы, чтобы попытаться привести обработку в успешное состояние.

Удалить обработку

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.

POST https://api.mapflow.ai/rest/rasters

Может использоваться для загрузки растра для дальнейшей обработки. Возвращает URL-адрес загруженного растра. На этот URL-адрес можно ссылаться при запуске обработки. Запрос представляет собой составной запрос с единственной частью “файл”, которая содержит растр. Пример запроса с cURL:

curl -X POST \
https://api.mapflow.ai/rest/rasters \
-H 'authorization: <Insert auth header value>' \
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-F file=@custom_raster.tif

Пример ответа:

{"url": "s3://mapflow-rasters/9764750d-6047-407e-a972-5ebd6844be8a/raster.tif"}

Значения параметров

ИИ модели по умолчанию

ЗНАЧЕНИЕ

ОПИСАНИЕ

Разрешение МОДЕЛИ (m/px), количество входных каналов

Здания

Распознает здания и классифицирует их

0.5, 3 (RGB)

Лес

Распознает древовидную растительность

2, 3 (RGB)

Дороги

Распознает дороги и возвращает их в виде полигонов / линий

1, 3 (RGB)

Поля (высокого разрешения)

Распознает пахотные поля

0.5, 3 (RGB)

Поля (Sentinel-2)

Распознает пахотные поля с помощью бесплатных изображений Sentinel-2

10 m/px, 10 (multispectral)

Строительство

Распознает пахотные поля

0.5, 3 (RGB)

тип_источника

ЗНАЧЕНИЕ

ОПИСАНИЕ

XYZ

URL на сервис изображений в формате “xyz”, например, https://tile.openstreetmap.org/{z}/{x}/{y}.png

TMS

Аналогично “xyz” с обратной координатой “y”

WMS

(❗️❗️Устарело) URL сервиса изображений в формате “wms”, например, https://services.nationalmap.gov/arcgis/services/ USGSNAIPImagery/ImageServer/WMSServer

Quadkey

Одномерный индексный ключ, который обычно сохраняет близость фрагментов в пространстве “xy” (формат тайлов Bing Maps)

tif/tiff

Файл изображения в формате tiff с географической привязкой (GeoTIFF)

статус

ЗНАЧЕНИЕ

ОПИСАНИЕ

UNPROCESSED

Обработка еще не начата

IN_PROGRESS

Обработка выполняется (или находится в очереди)

FAILED

Обработка завершилась неудачно - измените неправильные параметры или попробуйте перезапустить

OK

Обработка завершена на 100 процентов

Сообщения об ошибках в 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

Примечание

Предварительный просмотр результатов

Ознакомьтесь и запустите эту коллекцию Postman для 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/mosaic?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

Удалить мозаику

Внимание

Удаление мозаики также приводит к удалению всех связанных изображений и они не могут быть восстановлены

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

type: application/json

Возвращает список доступных изображений, отфильтрованных по метаданным.

Например:

{
    "aoi": {
        "type": "Polygon",
        "coordinates": [
            [
                [
                    69.1618,
                    41.2105
                ],
                [
                    69.1618,
                    41.3784
                ],
                [
                    69.3716,
                    41.3784
                ],
                [
                    69.3716,
                    41.2105
                ],
                [
                    69.1618,
                    41.2105
                ]
            ]
        ]
    },
    "acquisitionDateFrom": "2023-10-01T00:00:00Z",
    "acquisitionDateTo": "2022-10-10T00:00:00Z",
    "maxCloudCover": 0.1,
    "maxResolution": 0.5,
    "minResolution": 0.3
}

Пример ответа:

{
    "images": [
        {
            "id": "JL1GF03D15_PMS_20230913140838_200196307_108_0001_001_L1",
            "footprint": {
                "type": "Polygon",
                "coordinates": [
                    [
                        [
                            69.2325,
                            41.5352
                        ],
                        [
                            69.3602,
                            41.5151
                        ],
                        [
                            69.3182,
                            41.3647
                        ],
                        [
                            69.1906,
                            41.3848
                        ],
                        [
                            69.2325,
                            41.5352
                        ]
                    ]
                ]
            },
            "pixelResolution": 0.0,
            "acquisitionDate": "2023-09-13T14:08:40Z",
            "productType": "A",
            "sensor": "JL1GF03D15",
            "colorBandOrder": "unknown",
            "cloudCover": 0.0,
            "offNadirAngle": -12.49,
            "previewType": "png",
            "previewUrl": "https://home.sat-imagery.com/geoserver/rs_data/wms?SERVICE=WMS&VERSION=1.1.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&LAYERS=rs_data%3AJL1GF03D15_PMS_20230913140838_200196307_108_0001_001_L1&STYLES=&serverType=geoserver&crossOrigin=anonymous&tiled=false&angle=0&WIDTH=188&HEIGHT=253&SRS=EPSG%3A3857&BBOX=7702262.3596810745%2C5066284.571753241%2C7721142.145319615%2C5091606.951481916",
            "providerName": "sat_imagery"
        }
    ]
}

Примечание

aoi: geometry, - required, Geojson-like Polygon or Multipolygon
acquisitionDateFrom: UTC time string
acquisitionDateTo: UTC time string
minResolution: float, in meters
maxResolution: float, in meters
maxCloudCover: float, in percents
minOffNadirAngle: float, in degrees
maxOffNadirAngle: float, in degrees
minAoiIntersectionPercent: float, in percents

Предупреждение

Размер области поиска не может превышать лимита обработки AOI, назначенного конкретному пользователю.

Запуск обработки по идентификатору изображения

Подробное описание того, как запустить обработку с помощью Mapflow API, смотрите в разделе Mapflow Processing API – “Создать обработку”. Чтобы запустить обработку с использованием конкретного изображения, возвращаемого Search API, определите провайдера и ID изображения в параметрах следующим образом:

{"params": {"data_provider":<providerName>, "url":<id>}}