Создание карт
Чтобы создать карту (проект), необходимо выполнить POST-запрос:
POST {host}/projects
Content-Type: application/json
JSON body
{
"content": {
"resolution": 0,
"position": [
0,
0
],
"srid": 0,
"baseMapName": "string",
"clientData": null,
"items": [
{
"name": "string",
"opacity": 1,
"isVisible": true,
"isExpanded": false,
"isLegendExpanded": false,
"minScale": 0,
"maxScale": 0,
"isBasemap": true,
"children": [
{}
]
}
],
"bookmarks": [
{
"title": "string",
"position": [
0,
0
],
"resolution": 0,
"image": "string"
}
]
},
"layersCount": 0,
"name": "string",
"alias": "string",
"owner": "string",
"description": "string",
"preview": "string",
"createdDate": "2019-08-24T14:15:22Z",
"changedDate": "2019-08-24T14:15:22Z",
"permissions": "none",
"acl": {
"data": [
{
"role": "string",
"permissions": "none"
}
]
},
"icon": "string",
"invisibleInCatalog": true
}
Обязательными параметрами при создании карты являются её уникальное системное имя name
и конфигурация content
.
Системное имя карты
Системное имя карты строится аналогичным с именами таблиц и слоёв образом и указывается в формате "namespace.name"
, где namespace
- пространство имён, в котором создаётся карта. В общем случае оно совпадает с логином пользователя. Также карта может создаваться в пространетсве имён temp
: temp.name
. Такая карта является временной и будет удалёна после завершения пользовательской сессии. В название карты могут входить латинские буквы, цифры, а также символы _$-.
Конфигурация карты
Конфигурация карты (проекта) задаётся json-объектом, описывающим параметры:
resolution
- показатель масштаба карты, может варьироваться от 0 (самый детальный) до 20000 (самый мелкий);position
- координаты центральной точки карты [X, Y];srid
- система координат карты (EPSG-код, например, 4326 - WGS84 или 3857 - Web Mercator WGS84);baseMapName
- базовая карта проекта (“подложка”);items
- список/массив json-объектов, описывающих входящие в карту слои;bookmarks
- список/массив json-объектов, описывающих закладки для карты.
Описание слоёв карты
Описание items
входящих в карту слоёв внутри content
состоит из параметров:
name
- системное имя слоя (обязательный параметр);opacity
- непрозрачность слоя (может принимать значения от 0 до 1);isVisible
- видимость слоя (true
илиfalse
);isExpanded
- развернуть список дочерних элементов в интерфейсе (true
илиfalse
);isLegendExpanded
- развернуть легенду слоя в интерфейсе (true
илиfalse
);minScale
- минимальный масштабный уровень, при котором слой виден;maxScale
- максимальный масштабный уровень, при котором слой виден;isBasemap
- слой является базовой картой (true
илиfalse
);children
- дочерние элементы, описываются по такому же формату что иitems
;
Другие параметры создания карты
Помимо обязательных параметров при создании слоя можно указать:
alias
- отображаемое в интерфейсе имя (псевдоним);description
- текстовое описание карты;acl
- Access Control List (описание настроек доступа к карте).
Полный перечень и описание параметров создания карты
Пример
Создадим карту инфраструктуры города на основе слоёв зданий, дорог и коммуникаций. Слой зданий был создан ранее в примере. Остальные слои могут быть созданы по аналогии.
Python
import requests
import json
def login(username, password): # производит авторизацию и возвращает объект сессии
authUrl = f'{host}/account/login/'
login_data = {
"username": username,
"password": password
}
# создание объекта сессии
s = requests.Session()
# авторизация и получение JWT-токена
s.post(url=authUrl, data=json.dumps(login_data), headers=headers)
return s
host = 'https://evergis.ru/sp'
username = 'username'
password = 'password'
headers = {'Content-type': 'application/json'}
# авторизация
session = login(username, password)
# описание параметров создания карты
projectName = f'{username}.infrastructure_map'
projectAlias = 'Инфраструктура'
projectDescription = 'Карта городской инфраструктуры (здания и сооружения, дороги, коммуникации)'
projectContent = {
'srid': 3857,
'position': [4338599.937933926, 5627602.295701091],
'resolution': 20,
'baseMapName': '2gis',
'items': [
{'name': f'{username}.buildings_layer'},
{'name': f'{username}.roads_layer'},
{'name': f'{username}.communications_layer'}
]
}
projectProps = {
"name": projectName,
"alias": projectAlias,
"description": projectDescription,
"content": projectContent
}
createProjectUrl = f'{host}/projects'
# выполнение запроса
r = session.post(url=createProjectUrl, data=json.dumps(projectProps), headers=headers).json()
URL и JSON запроса
Для работы с запросом в Postman или аналогичном приложении
POST https://evergis.ru/sp/projects
Content-Type: application/json
JSON body:
{
"name": "username.infrastructure_map",
"alias": "Инфраструктура",
"description": "Карта городской инфраструктуры (здания, сооружения, дороги, коммуникации)",
"content": {
"srid": 3857,
"position": [4338599.937933926, 5627602.295701091],
"resolution": 20,
"baseMapName": "2gis",
"items": [
{"name": "username.buildings_layer"},
{"name": "username.roads_layer"},
{"name": "username.communications_layer"}
]
}
}
Получение свойств карты
Чтобы получить свойства карты, достаточно выполнить GET-запрос с её системным именем:
GET {host}/projects/{name}
На примере только что созданной карты:
projectInfoUrl = f'{host}/projects/{projectName}'
projectInfo = session.get(url=projectInfoUrl)
projectInfo
Просмотреть ответ сервера
{'content': {'resolution': 20.0,
'position': [4338599.937933926, 5627602.295701091],
'srid': 3857,
'baseMapName': '2gis',
'clientData': None,
'items': [{'name': 'username.buildings_layer',
'opacity': 1.0,
'isVisible': True,
'isExpanded': False,
'isLegendExpanded': False,
'minScale': 0.0,
'maxScale': 0.0,
'isBasemap': False,
'children': None},
{'name': 'username.roads_layer',
'opacity': 1.0,
'isVisible': True,
'isExpanded': False,
'isLegendExpanded': False,
'minScale': 0.0,
'maxScale': 0.0,
'isBasemap': False,
'children': None},
{'name': 'username.communications_layer',
'opacity': 1.0,
'isVisible': True,
'isExpanded': False,
'isLegendExpanded': False,
'minScale': 0.0,
'maxScale': 0.0,
'isBasemap': False,
'children': None}],
'bookmarks': None},
'layersCount': 1,
'name': 'username.infrastructure_map',
'alias': 'Инфраструктура',
'owner': 'username',
'description': 'Карта городской инфраструктуры (здания и сооружения, дороги, коммуникации)',
'preview': None,
'createdDate': '2023-11-29T11:54:02.289284Z',
'changedDate': '2023-11-29T11:54:02.289285Z',
'permissions': 'read,write,configure',
'acl': {'data': [{'role': '__username',
'permissions': 'read,write,configure'}]},
'icon': None,
'invisibleInCatalog': False}