ORBISmap REST API v2.3

ORBISmap REST API позволяет взаимодействовать с картами, слоями и объектами внутри ORBISmap. Вы можете использовать ORBISmap REST API для создания, изменения или удаления карт, слоёв и объектов или для построения выборок данных опубликованных карт для того, чтобы использовать их на Вашем web-сайте или в Вашем приложении.

Доступные функции

Пример использования ORBISmap REST API

С примером взаимодействия с ORBISmap REST API можно ознакомиться здесь.

Описание параметров

Описание параметров функций API, участвующих в URL запроса

Сервер принимает GET,POST,PUT,PATCH,DELETE запросы. Обратиться можно только к карте, для которой включена публикация. С учётом прав доступа и активной сессии. Все функции редактирования данных в обязательном порядке требуют предварительной авторизации.

Код каталога (project) выводится в верхней панели в строке навигации первым элементом. На рисунке ниже project="oms_tests_docker"

Если указан код несуществующего каталога, то сервер вернет ошибку со статусом 500. Подробнее про описание ошибок.

Описание дополнительных необязательных параметров всех функций API


Аутентификация

Аутентификация на проекте

POST http://<host>/api/2.3/<project_code>/login/

Здесь и далее считается, что за авторизованную сессию отвечает только параметр token. Он выдается как результат функции аутентификации и является идентификатором сессии. Сессия хранится на сервере в течении 10 минут после последнего запроса с ее участием, после чего автоматически уничтожается. Идентификатор сессии необходим при выполнении любых операций создания/изменения/удаления с использованием REST API. Для этого идентификатор сессии нужно передать в параметре token запроса. Результат выполнения любых операций REST API (как получения, так и изменения) зависит от настроек прав доступа пользователей в OMS. Если token не передан в функцию, результат будет зависеть от настроек прав доступа публичного пользователя, иначе - от настроек прав доступа пользователя, определяемого переданным token.

Обязательные параметры запроса:

Ответ

{
    "token": "Токен авторизации"
}

Если указан несуществующий логин или не верный пароль для существующего логина, то сервер вернет ошибку со статусом 403. Подробнее про описание ошибок.

Проверка авторизации

GET http://<host>/api/2.3/<project_code>/authorized/

Обязательные параметры запроса:

Ответ

True

Если пользователь авторизован в системе администрирования (но не через API), или не авторизован - вернет False

Завершить авторизованную сессию

POST http://<host>/api/2.3/<project_code>/logout/

Обязательные параметры запроса:

Ответ

{
    "token": ""
}

Работа с картой

Публичная карта отображает результат настройки карты в конструкторе интерфейсов

Создать карту

Созданные через API карты автоматически публикуются. Что такое опубликованная карта описано в разделе Публичная карта

Для выполнения запроса необходим токен авторизации.

POST http://<host>/api/2.3/<project_code>/
{
    "code": "new_map",
    "name": "Новая карта",
    "css_style": "CartoCSS-стиль отображения карты - подложка для рисования слоев"
}

Где: - code (обязательный) - код создаваемой карты. - name (необязательный) - имя карты. Если не указано, то не будет заполнено. - css_style (необязательный) - CartoCSS-стиль отображения карты. Если не указан, то будет использован стиль отображения по умолчанию.

Ответ

Структура ответа на создание объекта карты соответствует ответу на запрос получения объекта карты.

Получить объект карты

GET http://<host>/api/2.3/<project_code>/<map_code>/

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

Ответ

{
    "id": 1,
    "code": "map1",
    "name": "Карта 1",
    "css_style": "CartoCSS-стиль отображения карты - подложка для рисования слоев",
    "group_layers": 0,
    "has_publication": true
}

Где:

Если указан код несуществующей карты, то сервер вернет ошибку со статусом 404. Подробнее про описание ошибок.

Получить дерево слоев

Для чего используется дерево слоев публикации описано в подразделе Виджет “Список слоёв” раздела Конструктор публикаций.

GET http://<host>/api/2.3/<project_code>/<map_code>/layers/

Необязательные параметры запроса:

Ответ

[
    {
        "id": 1,
        "type": "layer",
        "code": "layer1",
        "name": "Слой 1",
        "sort": 1,
        "bbox": {
            "sw" : [Lat, Lon],
            "ne" : [Lat, Lon]
        },
        "parent_id": 0,
        "selected": false,
        "map_layer_id": 1,
        "icon": "static/path/icon.png",
        "icon_retina": "static/path/icon.png",
        "g_type": "Point|LineString|Polygon|Unknown",
        "render_type": 0,
    },
    ...
]

При запросе "дерева публикации" (значение параметра type = publish) в ответ попадут только опубликованные слои. При запросе полного дерева (значение параметра type = full) в ответ попадут все слои текущей карты.

Если указан код несуществующей карты, то сервер вернет ошибку со статусом 404. Подробнее про описание ошибок.

Ответ

Структура каждого элемента в ответе на запрос дерева слоев соответствует ответу на запрос получения объекта слоя карты, за исключением элементов с типом folder, которые являются папками.

Сохранить дерево публикации

Дерево слоев публикации - это наполнение виджета “Список слоёв”

Для выполнения запроса необходим токен авторизации.

POST http://<host>/api/2.3/<project_code>/<map_code>/publish/

Формат запроса:

[
    {
        "id": 1,
        "sort": 1,
        "parent_id": 0,
        "selected": true,
        "map_layer_id": 1,
        "icon": "static/path/icon.png",
        "icon_retina": "static/path/icon.png",
    },
    {
        "id": 2,
        "sort": 1,
        "parent_id": 1,
        "selected": true,
        "map_layer_id": 2,
        "icon": "static/path/icon.png",
        "icon_retina": "static/path/icon.png",
    },
    {
        "id": 3,
        "sort": 2,
        "parent_id": 1,
        "selected": true,
        "map_layer_id": 3,
        "icon": "static/path/icon.png",
        "icon_retina": "static/path/icon.png",
    },
    ...
]

Где:

Примечание: Параметр `id` должен быть целочисленным и уникальным в пределах одного запроса.

Ответ

Формат ответа совпадает с функцией Получить дерево слоев с параметрами по умолчанию.

Получение начальных настроек публичной карты.

GET http://<host>/api/2.3/<project_code>/

Формат запроса:

{
    "map_code": "new_map",
}

Полученный файл конфигурации инициализирует первоначальную работу ORBISmap JS API


Работа со слоями

Слой карты содержит объекты с геопространственными данными и должен принадлежать карте. Слои бывают нескольких типов:

Так же, слои карты, по типу геопространственных данных подразделяются на:

Создать слой

Для выполнения запроса необходим токен авторизации.

POST http://<host>/api/2.3/<project_code>/<map_code>/layers/
{
    "code": "new_layer",
    "localized_name": true,
    "name": "Имя",
    "parent_id": 2,
    "sort": 3.5,
    "css_style": "CartoCSS-стиль отображения слоя"
}

Где:

- `code` (*необязательный*) - код создаваемого слоя. Если не указан, то будет сгенерирован автоматически.
- `localized_name` (*необязательный*) - флаг, локализовать ли название слоя.  Значение по умолчанию = `false`.
- `name` (*необязательный*) - имя слоя. Если не указано, то не будет заполнено.
- `parent_id` (*необязательный*) - идентификатор родительского контейнера (`карта/папка`), в котором будет находиться слой в дереве. По умолчанию слой будет создаваться непосредственно в указанной (в url-пути) карте.
- `sort` (*необязательный*) - значение сортировки для создаваемого слоя. Если параметр не указан, то по умолчанию слой будет добавлять последним для указанного `parent_id`. *При изменении сортировки сервер выполнит пересортировку всех элементов в пределах указанного `parent_id`, в результате чего значение сортировки для каждого контейнера будет целочисленным.*
- `css_style` (*необязательный*) - CartoCSS-стиль отображения слоя. В случае отсутствия значения будет использован стиль отображения по умолчанию.

Ответ

Структура ответа на запрос создания слоя соответствует ответу на запрос получения объекта слоя карты.

Если указан несуществующий идентификатор родительского контейнера, или родительский контейнер принадлежит другой карте, то сервер вернет ошибку со статусом 404. Если указан не валидный CartoCSS-стиль отображения слоя, то сервер вернет ошибку со статусом 500. Подробнее про описание ошибок.

Получить слой карты

GET http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/

Ответ

{
    "id": 1,
    "type": "layer",
    "code": "layer1",
    "name": "Слой 1",
    "sort": 1,
    "bbox": {
        "sw" : ["Lat", "Lon"],
        "ne" : ["Lat", "Lon"]
    },
    "parent_id": 0,
    "selected": false,
    "map_layer_id": 1,
    "icon": "static/path/icon.png",
    "icon_retina": "static/path/icon.png",
    "g_type": "Point|LineString|Polygon|Unknown",
    "css_style": "CartoCSS-стиль отображения слоя",
    "render_type": 0
}

Где:

Описанный выше ответ может отличаться от реального в следующих случаях:

На данный момент существует 7 типов визуализаций:

{
    "...": "...",
    "visualSettings": {
        "id": 16,
        "type": 1,
        "column": 5274,
        "columnCode": "population",
        "algorithm": 3,
        "classesCount": 9,
        "classesSettings": {
            "opacity": 80,
            "lineWidth": 1.0,
            "midColor": "#00bfaf",
            "linePattern": 1,
            "minColor": "#ffffcc",
            "maxColor": "#002080"
        },
        "pointSettings": {
            "size": 10.0,
            "allowOverlap": true,
            "sizeEnabled": false
        },
        "showBorder": true,
        "borderSettings": {
            "opacity": 100,
            "pattern": 1,
            "width": 1.0,
            "color": "#FFFFFF"
        },
        "showText": true,
        "textSettings": {
            "fontSize": 12.0,
            "halo": true,
            "haloOpacity": 100,
            "fontOpacity": 100,
            "fontFamily": "Arial Bold",
            "allowOverlap": false,
            "haloWidth": 1.0,
            "haloColor": "#ffffff",
            "column": "orbis_id",
            "fontColor": "#000000",
            "textOffset": 10.0,
            "offsetEnabled": false
        },
        "showLegend": true,
        "showLegendName": true,
        "legendName": "Тематическая карта [mir]",
        "legendNames": [
            {
                "ru": "Тематическая карта [mir]"
            }, 
            {
                "fr": ""
            },
            {
                "en": ""
            }
        ],
        "showValues": false
    }
}

Где:

{
    "...": "...",
    "visualSettings": {
        "id": 17,
        "type": 2,
        "column": 5277,
        "columnCode": "orbis_id",
        "algorithm": 1,
        "classesCount": 9,
        "classesSettings": {
          "opacity": 80,
          "linePattern": 1,
          "defaultClass": {
            "count": 46,
            "value": "Остальные",
            "icon": null,
            "checked": true,
            "useIcon": false,
            "color": "#05cfba"
          },
          "lineWidth": 1.0,
          "classes": [
            {
              "count": 1,
              "value": 2,
              "icon": null,
              "checked": true,
              "useIcon": false,
              "color": "#80f320"
            },
            {
              "count": 1,
              "value": 3,
              "icon": null,
              "checked": true,
              "useIcon": false,
              "color": "#86f11c"
            },
            {
                "...": "..."
            },
            {
              "count": 1,
              "value": 100,
              "icon": null,
              "checked": true,
              "useIcon": false,
              "color": "#02c4c5"
            },
            {
              "count": 1,
              "value": 101,
              "icon": null,
              "checked": true,
              "useIcon": false,
              "color": "#03cac0"
            }
          ]
        },
        "pointSettings": {
          "sizeEnabled": false,
          "allowOverlap": true,
          "size": 10.0
        },
        "showBorder": true,
        "borderSettings": {
          "opacity": 100,
          "pattern": 1,
          "width": 1.0,
          "color": "#FFFFFF"
        },
        "showText": false,
        "textSettings": {
          "fontSize": 12.0,
          "haloOpacity": 100,
          "fontOpacity": 100,
          "fontFamily": "Arial Bold",
          "haloWidth": 1.0,
          "haloColor": "#ffffff",
          "textOffset": 10.0,
          "column": "orbis_id",
          "halo": true,
          "allowOverlap": false,
          "fontColor": "#000000",
          "offsetEnabled": false
        },
        "showLegend": false,
        "showLegendName": true,
        "legendName": "Категории [mir]",
        "legendNames": [
          {
            "ru": "Категории [mir]"
          },
          {
            "fr": ""
          },
          {
            "en": ""
          }
        ],
        "showValues": false    
    }
}

Где:

{
    "...": "...",
    "visualSettings": {
        "id": 18,
        "type": 3,
        "column": 5281,
        "columnCode": "orbis_id",
        "algorithm": 1,
        "classesCount": 9,
        "classesSettings": {
            "pointSizeMax": 50.0,
            "icon": null,
            "opacity": 80,
            "pointSizeMin": 10.0,
            "useIcon": false,
            "color": "#ff6666"
        },
        "pointSettings": {
            "size": 10.0,
            "allowOverlap": true,
            "sizeEnabled": false
        },
        "showBorder": true,
        "borderSettings": {
            "opacity": 100,
            "pattern": 1,
            "width": 1.0,
            "color": "#FFFFFF"
        },
        "showText": false,
        "textSettings": {
            "fontSize": 12.0,
            "halo": true,
            "haloOpacity": 100,
            "fontOpacity": 100,
            "fontFamily": "Arial Bold",
            "allowOverlap": false,
            "haloWidth": 1.0,
            "haloColor": "#ffffff",
            "column": "orbis_id",
            "fontColor": "#000000",
            "textOffset": 10.0,
            "offsetEnabled": false
        },
        "showLegend": false,
        "showLegendName": true,
        "legendName": "Пузырьковая диаграмма [mir]",
        "legendNames": [
          {
            "ru": "Пузырьковая диаграмма [mir]"
          },
          {
            "fr": ""
          },
          {
            "en": ""
          }
        ],
        "showValues": false
    }
}

Где:

{
    "...": "...",
    "visualSettings": {
        "id": 19,
        "type": 4,
        "column": 5285,
        "columnCode": "orbis_id",
        "algorithm": 1,
        "classesCount": 9,
        "classesSettings": {
            "sizeFrom": 60,
            "showScale": false,
            "sizeColumnCode": "orbis_id",
            "sizeTo": 200,
            "allowOverlap": false,
            "opacity": 80,
            "columns": [
                {
                    "code": "orbis_id",
                    "id": 5285,
                    "color": "#d4b301"
                }
            ],
            "sizeValue": 100,
            "sizeType": 1,
            "sizeColumn": 5285
        },
        "pointSettings": {
            "size": 10.0,
            "allowOverlap": true,
            "sizeEnabled": false
        },
       "showBorder": true,
        "borderSettings": {
            "opacity": 100,
            "pattern": 1,
            "width": 1.0,
            "color": "#FFFFFF"
        },
        "showText": false,
        "textSettings": {
            "fontSize": 12.0,
            "halo": true,
            "haloOpacity": 100,
            "fontOpacity": 100,
            "fontFamily": "Arial Bold",
            "allowOverlap": false,
            "haloWidth": 1.0,
            "haloColor": "#ffffff",
            "column": "orbis_id",
            "fontColor": "#000000",
            "textOffset": 10.0,
            "offsetEnabled": false
        },
        "showLegend": false,
        "showLegendName": true,
        "legendName": "Круговые диаграммы [mir]",
        "legendNames": [
          {
            "ru": "Круговые диаграммы [mir]"
          },
          {
            "fr": ""
          },
          {
            "en": ""
          }
        ],
        "showValues": false
    }
}

Где:

{
    "...": "...",
    "visualSettings": {
        "id": 20,
        "type": 5,
        "column": 5289,
        "columnCode": "orbis_id",
        "algorithm": 1,
        "classesCount": 9,
        "classesSettings": {
            "sizeFrom": 60,
            "showScale": true,
            "sizeColumnCode": "orbis_id",
            "sizeTo": 200,
            "allowOverlap": false,
            "opacity": 80,
            "columns": [
                {
                  "code": "orbis_id",
                  "id": 5289,
                  "label": "orbis_id",
                  "color": "#fe3f38"
                }
            ],
            "sizeValue": 60,
            "sizeType": 1,
            "sizeColumn": 5289
        },
        "pointSettings": {
            "size": 10.0,
            "allowOverlap": true,
            "sizeEnabled": false
        },
        "showBorder": true,
        "borderSettings": {
            "opacity": 100,
            "pattern": 1,
            "width": 1.0,
            "color": "#FFFFFF"
        },
        "showText": false,
        "textSettings": {
            "fontSize": 12.0,
            "halo": true,
            "haloOpacity": 100,
            "fontOpacity": 100,
            "fontFamily": "Arial Bold",
            "allowOverlap": false,
            "haloWidth": 1.0,
            "haloColor": "#ffffff",
            "column": "orbis_id",
            "fontColor": "#000000",
            "textOffset": 10.0,
            "offsetEnabled": false
        },
        "showLegend": false,
        "showLegendName": true,
        "legendName": "Столбчатые диаграммы [mir]",
        "legendNames": [
            {
                "ru": "Столбчатые диаграммы [mir]"
            },
            {
                "fr": ""
            },
            {
                "en": ""
            }
        ],
        "showValues": false
    }
}

Где:

{
    "...": "...",
    "visualSettings": {
        "id": 21,
        "type": 6,
        "column": 5293,
        "columnCode": "orbis_id",
        "algorithm": 1,
        "classesCount": 9,
        "classesSettings": {
            "sizeFrom": 60,
            "showScale": true,
            "sizeColumnCode": "orbis_id",
            "sizeTo": 200,
            "allowOverlap": false,
            "opacity": 80,
            "columns": [
                {
                  "code": "population",
                  "id": 5296,
                  "color": "#dc0a86"
                }
            ],
            "sizeValue": 60,
            "sizeType": 1,
            "sizeColumn": 5293
        },
        "pointSettings": {
            "size": 10.0,
            "allowOverlap": true,
            "sizeEnabled": false
        },
        "showBorder": true,
        "borderSettings": {
            "opacity": 100,
            "pattern": 1,
            "width": 1.0,
            "color": "#FFFFFF"
        },
        "showText": false,
        "textSettings": {
            "fontSize": 12.0,
            "halo": true,
            "haloOpacity": 100,
            "fontOpacity": 100,
            "fontFamily": "Arial Bold",
            "allowOverlap": false,
            "haloWidth": 1.0,
            "haloColor": "#ffffff",
            "column": "orbis_id",
            "fontColor": "#000000",
            "textOffset": 10.0,
            "offsetEnabled": false
        },
        "showLegend": false,
        "showLegendName": true,
        "legendName": "Линейные диаграммы [mir]",
        "legendNames": [
            {
                "ru": "Линейные диаграммы [mir]"
            },
            {
                "fr": ""
            },
            {
                "en": ""
            }
        ],
        "showValues": false
    }
}

Где:

{
    "...": "...",
    "visualSettings": {
        "id": 22,
        "type": 7,
        "column": 5297,
        "columnCode": "orbis_id",
        "algorithm": 1,
        "classesCount": 9,
        "classesSettings": {
            "markerSizeMin": 60,
            "layerOpacity": 80,
            "weightNormalizeMax": 10,
            "useWeight": false,
            "markerSizeType": "fixed",
            "linkToScale": false,
            "markerSizeMax": 200,
            "weightNormalizeMin": 0.1,
            "markerOpacity": 80,
            "markerSize": 35.0,
            "useWeightField": 5297,
            "markerSizeField": 5297,
            "linkToScaleZoom": 10,
            "colors": [
                "#0000ff",
                "#00ffff",
                "#90EE90",
                "#ffff00",
                "#ffa500",
                "#ff0000"
            ],
            "weightNormalize": false
        },
        "pointSettings": {
            "size": 10.0,
            "allowOverlap": true,
            "sizeEnabled": false
        },
        "showBorder": true,
        "borderSettings": {
            "opacity": 100,
            "pattern": 1,
            "width": 1.0,
            "color": "#FFFFFF"
        },
        "showText": false,
        "textSettings": {
            "fontSize": 12.0,
            "halo": true,
            "haloOpacity": 100,
            "fontOpacity": 100,
            "fontFamily": "Arial Bold",
            "allowOverlap": false,
            "haloWidth": 1.0,
            "haloColor": "#ffffff",
            "column": "orbis_id",
            "fontColor": "#000000",
            "textOffset": 10.0,
            "offsetEnabled": false
        },
        "showLegend": false,
        "showLegendName": true,
        "legendName": "Тепловая карта [mir]",
        "legendNames": [
            {
                "ru": "Тепловая карта [mir]"
            },
            {
                "fr": ""
            },
            {
                "en": ""
            }
        ],
        "showValues": false
    }
}

Где:

{
    "...": "...",
    "vectorSettings": {
        "stylesPolygon": {},
        "stylesText": {},
        "minZoom": 2,
        "clusterSettings": {
            "objectsCountDx": 0,
            "icon": null,
            "showObjectsCount": true,
            "iconSizeMax": 25,
            "radius": 40,
            "iconSizeEnabled": false,
            "iconDx": 0,
            "iconEnabled": false,
            "iconOffsetEnabled": false,
            "iconDy": 0,
            "iconSizeMin": 15,
            "clusteringType": "client",
            "objectsCountDy": 0,
            "maxZoom": 12,
            "maxZoomEnabled": false,
            "splitByCategories": false
        },
        "popupColumn": 1065,
        "maxZoom": 5,
        "popupColumnCode": "orbis_id",
        "showPopup": false,
        "zoomsEnabled": false,
        "clusteringEnabled": true,
        "id": 21,
        "stylesPoint": {
            "icon": null,
            "iconDx": 0,
            "iconOffsetEnabled": true,
            "iconDy": 0
        },
        "stylesLine": {}
    }
}

Где:

Изменить слой

Для изменения слоя используйте метод PUT, если необходимо изменить объект слоя полностью, или PATCH, если необходимо изменить отдельные поля.

PUT/PATCH http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/

Для выполнения запроса необходим токен авторизации.

{
    "code": "new_code",
    "localized_name": true,
    "name": "Имя",
    "parent_id": 2,
    "sort": 3.5,
    "css_style": "CartoCSS-стиль отображения слоя"
}

Где:

- `code` (*необязательный*) - новый код слоя. Если не указан, то значение останется прежним.
- `localized_name` (*необязательный*) - флаг, локализовать ли название слоя. Если не указан, то значение останется прежним.  
- `name` (*необязательный*) - имя слоя. Если не указан, то значение останется прежним.
- `parent_id` (**обязательный**) - идентификатор родительского контейнера.
- `sort` (*необязательный*) - значение сортировки слоя. Если не указан, то значение останется прежним.
- `css_style` (*необязательный*) - CartoCSS-стиль отображения слоя. Если не указан, то значение останется прежним.

Ответ

Структура ответа на запрос изменения слоя соответствует ответу на запрос получения объекта слоя карты.

Если не указан идентификатор родительского контейнера, указан несуществующий, или родительский контейнер принадлежит другой карте, то сервер вернет ошибку со статусом 404. Если указан не валидный CartoCSS-стиль отображения слоя, то сервер вернет ошибку со статусом 500. Подробнее про описание ошибок.

Получить легенду слоя карты

Получить легенду можно только для слоя с типом Визуализация.

GET http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/legend/

Ответ

{
    "name": "Название легенды",
    "column": "orbis_id",
    "showValues": true,
    "showLegend": true,
    "minValue": 1,
    "maxValue": 200,
    "type": 5,
    "classificators": [
        {
            "value": "orbis_id"     
,

,       "fill":"#f82851",
            "isIcon": false
        }
    ],
}

Где:

Если запрошен несуществующий слой или запрошен слой с типом отличным от Визуализация, то сервер вернет ошибку со статусом 404. Подробнее про описание ошибок.


Работа со структурой слоя

Любой слой имеет, как минимум, 2 поля:

Дополнительно, к перечисленным выше обязательным полям, слой может содержать достаточно большое количество пользовательских полей. Максимальное количество зависит от типа создаваемых полей и примерно равно 1000, но желательно не создавать более 500.

Код пользовательских полей:

Возможные типы полей, и их соответствие типам в базе данных:

Примечание: В базе данных слой соответствует таблице.

Получить структуру слоя

GET http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/structure/

Ответ

[
    {
        "id":48,
        "sort":1,
        "parent_id":0,
        "code":"orbis_id",
        "name":"",
        "required": true,
        "type":"number",
        "localized_name":false,
        "localized_value":false
    },
    {
        "id":49,
        "sort":2,
        "parent_id":0,
        "code":"geom",
        "name":"",
        "required": false,
        "type":"geom",
        "localized_name":false,
        "localized_value":false
    },
    {
        "id":50,
        "sort":3,
        "parent_id":0,
        "code":"titles",
        "name":"Подписи",
        "type":"title",
        "localized_name":true,
        "localized_value":false
    },
    {
        "id":51,
        "sort":1,
        "parent_id":50,
        "code":"label_en",
        "name":"Подпись английская",
        "required": true,
        "type":"title|number|string|text|datetime|bool|file|geom",
        "localized_name":true,
        "localized_value":false
    },
    {
        "id":52,
        "sort":2,
        "parent_id":50,
        "code":"label_ru",
        "name":"Подпись русская",
        "required": false,
        "type":"title|number|string|text|datetime|bool|file|geom",
        "localized_name":true,
        "localized_value":false
    }
]

Каждый элемент списка описывает 1 поле слоя. Где:

Если запрошен несуществующий слой, то сервер вернет ошибку со статусом 404. Подробнее про описание ошибок.

Изменить колонку

Для изменения колонки слоя используйте метод PUT, если необходимо изменить все поля колонки, или PATCH, если необходимо изменить отдельные поля.

PUT/PATCH http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/structure/<field_code>/

Для выполнения запроса необходим токен авторизации.

{
    "code": "New_column_1",
    "name": "Новая колонка 1",
    "localized_name": true,
    "localized_value": false,
    "required": false,
    "type": "number",
    "sort":4.5,
    "parent_id": 50,
    "...": "..."
}

Где:

Ответ

Структура ответа на запрос изменения колонки слоя соответствует структуре элемента в ответе на запрос получения структуры слоя. Описание параметров можно посмотреть тут.

Если не указан тип поля, то сервер вернет ошибку со статусом 500. Подробнее про описание ошибок.


Работа с данными слоя

Загрузка данных в слой

POST http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/import/

Для выполнения запроса необходим токен авторизации.

Загрузка данных поддерживает следующие форматы:

Вектор:

Растр:

Возможные способы загрузки:

Обязательные параметры:

либо

Дополнительные необязательные параметры:

Ответ

Структура ответа на запрос загрузки данных в слой соответствует ответу на запрос получения объекта слоя карты.

Выгрузка данных слоя

GET http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/export/

Выгрузка данных поддерживает следующие форматы:

Вектор:

Растр:

Обязательные GET-параметры:

Необязательные дополнительные GET-параметры:

Дополнительные GET-параметры для экспорта CSV

Ответ zip-архив (для типов shp, mif) или файл (для типов geojson, kml, kmz, xls, csv) с результатом. Если указан параметр zip, то файлы любого типа (кроме kmz) будут сжаты в *.zip. Экспорт в kmz всегда возвращает файл *.kmz, вне зависимости от наличия параметра сжатия.

Если указан недопустимый формат, то сервер вернет ошибку со статусом 500. Подробнее про описание ошибок.


Работа с объектами слоя

При работе с объектами слоя, в структуре которого есть локализованные по значению колонки, необходимо указывать код мета-колонки (одним из свойств параметра fields) и код языка (параметр lng), для которого необходимо получить/изменить значение. Здесь и далее считается, что если не указан код языка через параметр lng, то будет использоваться язык по умолчанию. Подробнее об этом будет описано ниже.

Получить количество объектов слоя

GET http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/count/

Необязательные параметры запроса:

Ответ

50

Получить список объектов слоя

GET http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/objects/

Необязательные параметры запроса:

Ответ

Каждый элемент ответа на запрос получения списков объектов слоя по структуре соответствует ответу на запрос получения информации по объекту, кроме состава полей в свойстве fields, т.к. текущий запрос может не иметь данного свойства (не указан параметр fields в запросе), либо иметь ограниченный набор полей (в параметре fields перечислены не все поля структуры слоя).

Получить информацию по объекту слоя

GET http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/objects/<object_id>/

Необязательные параметры запроса:

Ответ

{
    "id": 1,
    "fields": {
        "field_1": "Значение колонки 1",
        "field_2": "Значение колонки 2",
        "field_3": 3
    },
    "geom": { 
        "type": "Polygon", 
        "coordinates": [ 
            [ 
                [ 39.674470691019003, 45.201854294024443 ], 
                [ 39.672229085150633, 45.164807545385699 ], 
                [ 39.728412719962421, 45.151394461232584 ],  
                [ 39.674470691019003, 45.201854294024443 ] 
            ] 
        ] 
    },
    "bbox": {
        "sw" : [39.67222, 45.20185],
        "ne" : [39.72841, 45.15139]
    }
}

Где:

Если запрошен несуществующий объект, то ответ будет:

{
    "id": 1000,
    "fields": {}
}

Где:

Создать объект слоя

POST http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/objects/

Для выполнения запроса необходим токен авторизации.

{
    "fields": {
        "field_1": "Значение колонки 1",
        "field_2": "Значение колонки 2",
        "field_3": 3
    },
    "geom": { 
        "type": "Polygon", 
        "coordinates": [ 
            [ 
                [ 39.674470691019003, 45.201854294024443 ], 
                [ 39.672229085150633, 45.164807545385699 ], 
                [ 39.728412719962421, 45.151394461232584 ],  
                [ 39.674470691019003, 45.201854294024443 ] 
            ] 
        ] 
    }
}

Где:

Если слой имеет локализованную по значению колонку, и в нее необходимо установить значение для определенного языка, то в свойстве fields указывается код колонки, а язык передается параметром запроса lng, например, lng=ru. Если в fields указан код локализованной колонки и не указан параметр lng, то значение будет установлено для языка по умолчанию.

Ответ

Ответ на запрос создания объекта слоя по структуре соответствует ответу на запрос получения информации по объекту.

Изменить объект слоя

PUT http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/objects/<object_id>/

Для выполнения запроса необходим токен авторизации.

Формат запроса на изменение объекта соответствует формату запроса на создание объекта с одной оговоркой - нет необходимости указывать обязательные для заполнения поля, если нет необходимости их изменять.

Ответ

Ответ на запрос изменения объекта слоя по структуре соответствует ответу на запрос получения информации по объекту. Если запрошен несуществующий объект, то сервер вернет ошибку со статусом 404. Подробнее про описание ошибок.

Удалить объект слоя

DELETE http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/objects/<object_id>/

Для выполнения запроса необходим токен авторизации.

Ответ

true

Если запрошен несуществующий объект, то сервер вернет ошибку со статусом 404. Подробнее про описание ошибок.

Получить геопространственные данные объекта слоя

GET http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/objects/<object_id>/geom/

Для выполнения запроса необходим токен авторизации.

Ответ

{ 
    "type": "Point",
    "coordinates": [ 3673543.19617802882567, 3895303.963393894489855 ] 
}

Ответом будут геопространственные данные объекта в формате geojson. Если запрошены геопространственные данные несуществующего объекта, то сервер вернет ошибку со статусом 404. Подробнее про описание ошибок.

Изменить геопространственные данные объекта слоя

PUT http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/objects/<object_id>/geom/

Для выполнения запроса необходим токен авторизации.

Необязательные параметры запроса:

{
    "coordinates": [61.33891, 35.83611],
    "type": "Point"
}

Ответ

Ответ на запрос изменения геопространственных данных объекта слоя по структуре соответствует ответу на запрос получения геопространственных данных объекта. Если запрошено изменение геопространственных данных несуществующего объекта, то сервер вернет ошибку со статусом 404. Подробнее про описание ошибок.


Работа с файлами

Файлы можно добавлять только к объектам имеющим файловые поля. Код поля, в которое необходимо добавить файл, указывается одним из параметров при запросе. Если необходимо добавить файл в локализованную по значению колонку, то указывается параметр запроса языка lng, например, lng=ru. Если, при добавлении файла в локализованную по значению колонку, параметр lng не указать, то файл будет добавлен в значение языка по умолчанию.

Добавить файл к объекту

POST http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/objects/<object_id>/files/

Для выполнения запроса необходим токен авторизации.

Обязательные параметры запроса

Ответ

{
    "name": "имя загруженного файла.m4a", 
    "path": "//<host>/static/content_files/oms_tests_docker/0bb97e774aee56cf3e7b0b0717ab62ce.m4a", 
    "mime": "audio/x-m4a", 
    "id": 3, 
    "uuid": "754279f7-fdf1-4f75-a5d8-1bbd18c3dd5b"
}

Где:

Удалить файл объекта

Код поля, из которого необходимо удалить файл, указывается одним из параметров при запросе. Если необходимо удалить файл из локализованной по значению колонки, то укажите язык параметром запроса lng, например, lng=ru. Если параметр lng не указать при удалении файла из локализованной по значению колонки, то файл будет удален из значения языка по умолчанию.

DELETE http://<host>/api/2.3/<project_code>/<map_code>/layers/<layer_code>/objects/<object_id>/files/<file_id>/

Для выполнения запроса необходим токен авторизации.

Обязательные параметры запроса

Ответ

null

Поиск

Поиск по слоям и метаданным

GET http://<host>/api/2.3/<project_code>/<map_code>/search/

Ищет по полному или частичному совпадению слов в фразе и данных для поиска. При поиске по слоям учитывается поле name. Поиск по метаданным (объектам слоев) использует настройки, которые можно сохранить при публикации карты. Результаты сортированы по приоритетам, затем по типу, затем по значению. Если найдено достаточное количество объектов с точным совпадением, то поиск не продолжается (другие слои, ниже по списку в настройках поиска, не участвуют). При равных приоритетах слои важнее объектов.

Обязательные параметры запроса

Необязательные параметры запроса:

Ответ

[
    {
        "id": 103,
        "code": "visual",
        "name": "Визуализация для поиска",
        "priority": 20,
        "type": "layer",
        "icon": "/static/geoicons/visual.png"
    },
    {
        "id": 101,
        "code": "layer",
        "name": "Слой для поиска",
        "priority": 20,
        "type": "layer",
        "icon": "/static/geoicons/polygon.png"
    },
    {
        "name": 3,
        "orbis_id": 3,
        "priority": 20,
        "layer": "layer",
        "type": "object",
        "name_column": "orbis_id",
        "search_column": "data",
        "layer_name": "Слой для поиска",
        "layer_icon": "/static/geoicons/polygon.png",
        "value": ""
    },
    {
        "name": 8,
        "orbis_id": 8,
        "priority": 20,
        "layer": "layer",
        "type": "object",
        "name_column": "orbis_id",
        "search_column": "data",
        "layer_name": "Слой для поиска",
        "layer_icon": "/static/geoicons/polygon.png",
        "value": ""
    }
]

Где:

Поля слоя карты:

Поля объекта слоя:


Запрос изображений

Позволяет на лету изменить размер любого изображения, привязанного к любому объекту в системе. Например создать уменьшенную копию изображения.

GET http://<host>/api/2.3/<project_code>/image/<file_uuid>/

Необязательные параметры запроса:


Запрос тайлов

GET http://<host>/tms/<project_code>/<map_code>/?x={x}&y={-y}&z={z}

Дополнительные необязательные параметры запроса:


Обработка ошибок

HTTP-статусы выполнения запросов:

{
    "error": "error|warning|notice",
    "code": "код_ошибки",
    "message": "Описание ошибки выполнения запроса",
    "data": {}
}

Где: - data - всегда json-объект, который может содержать дополнительную информацию по ошибке. Например, список обязательных параметров запроса или колонок, установление значения для которых вызывало ошибку при редактировании объекта.

Ответы со статусами 401, 403, 404 приходят в виде HTML. Со статусами 200 и 500 - json-объект.


Changelog


Версии API