Изменение карты

Для внесения изменений в свойства карты (добавление и удаление слоёв, изменение их видимости и др.) необходимо выполнить PATCH-запрос с новыми параметрами карты:

PATCH {host}/projects/{name}
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. Все параметры изменения карты аналогичны параметрам её создания: новые значения перезаписывают старые. Для внесения точечных изменений целесообразно сначала получить текущее состояние карты с помощью GET-запроса, изменить необходимые значения в JSON, а затем выполнить PATCH-запрос с изменёнными параметрами.

Пример

Изменим созданную ранее карту: удалим слой дорог, изменим описание и базовую карту.

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'
projectDescription = 'Карта городской инфраструктуры (здания и сооружения, коммуникации)'
baseMapName = 'openstreetmap_humanitarian'

# получение текущего состояния карты
projectInfoUrl = f'{host}/projects/{projectName}'
projectProps = session.get(url=projectInfoUrl).json()

# изменение конфигурации карты
projectUpdateProps = projectProps.copy()
projectUpdateProps['description'] = projectDescription
projectUpdateProps['content']['baseMapName'] = baseMapName

oldItems = projectProps['content']['items']
updatedItems = [i for i in oldItems if i['name'] != f'{username}.roads_layer']
projectUpdateProps['content']['items'] = updatedItems

# выполнение PATCH-запроса
r = session.patch(url=projectInfoUrl, data=json.dumps(projectUpdateProps), headers=headers).json()

URL и JSON запроса

Для работы с запросом в Postman или аналогичном приложении

PATCH https://evergis.ru/sp/projects/username.infrastructure_map
Content-Type: application/json

JSON body:

{
    "content": {
        "resolution": 19.10925707128908, 
        "position": [4341573.076967801, 5627640.917870802], 
        "srid": 3857, 
        "baseMapName": "openstreetmap_humanitarian", 
        "clientData": {"dateFilter": {"isVisible": false}}, 
        "items": [
            {
                "name": "username.buildings_layer", 
                "opacity": 1.0, 
                "isVisible": true, 
                "isExpanded": false, 
                "isLegendExpanded": false, 
                "minScale": 0.0, 
                "maxScale": 0.0, 
                "isBasemap": false, 
                "children": null
            },
            {
                "name": "username.communications_layer", 
                "opacity": 1.0, 
                "isVisible": true, 
                "isExpanded": false, 
                "isLegendExpanded": false, 
                "minScale": 0.0, 
                "maxScale": 0.0, 
                "isBasemap": false, 
                "children": null
            }
        ], 
        "bookmarks": null
    }, 
    "layersCount": 1, 
    "name": "username.infrastructure_map", 
    "alias": "Инфраструктура", 
    "owner": "username", 
    "description": "Карта городской инфраструктуры (здания и сооружения, коммуникации)", 
    "preview": null, 
    "createdDate": "2023-11-23T19:02:00.776637Z", 
    "changedDate": "2023-11-23T19:03:42.055655Z", 
    "permissions": "read,write,configure", 
    "acl": {"data": [{"role": "__username", "permissions": "read,write,configure"}]}, 
    "icon": null, "invisibleInCatalog": false
}