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 токен.

Preview map

Mapflow processing API

Внимание

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

Примечание

Preview results

Ознакомьтесь и запустите эту коллекцию 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 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)"
}

Поделиться проектом

POST https://api.mapflow.ai/rest/projects/share

Поделиться проектом с внешним пользователем или участником команды в зависимости от прав на участие.

  1. Поделиться проектом с внешним пользователем:

{
    "projectId": "70f65cfd-285b-4f25-a058-1fd9103a78f9",
    "email": "some-external-user@email.com",
    "role": "readonly"
}
  1. Поделиться проектом с пользователем из команды

{
    "projectId": "70f65cfd-285b-4f25-a058-1fd9103a78f9",
    "email": "team-user@myteam.com",
    "role": "contributor"
}

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

Примечание

Роль «readonly» применима к любому пользователю. Роль «contributor+» применима для проектов, которыми поделились внутри команды.

KEY

ЗНАЧЕНИЕ

ОПИСАНИЕ

роль

readonly

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

роль

contributor

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

роль

maintainer

Пользователь может просматривать проект, скачивать результаты, создавать, запускать и удалять обработки + делиться проектом.

роль

owner

Пользователь может делать все, что описано выше, + назначать и удалять владельца проекта.

Удалить проект

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

Имя провайдера данных, если он доступен для текущего аккаунта.

  1. «Mapbox»

  2. «arcgis_world_imagery»

  3. «Global mosaic 2022»

url

String

URL-адрес пользовательского поставщика данных

«my-tile-server.com/{z}/{x}/{y}»

source_type

String

Тип источника пользовательского поставщика данных. Для использования пользовательского файла из хранилища Mapflow можно указать тип «local»

  1. «XYZ»

  2. «TMS»

  3. «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

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

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

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 этой обработки в виде потока октетов. Должен вызываться только при успешно завершенной обработке.

Загрузка изображений

Примечание

  1. ❗️ Используйте Mapflow Data API для создания мозаики и загрузки одного или более изображений

  2. Используйте 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

Примечание

Preview results

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

Получение изображений по 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>'

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

Image preview

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 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

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

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

  1. Пример ответа – 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"
}
Preview image

  1. Пример ответа – 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>}}