Изменение слоя
Для внесения изменений в свойства слоя (добавление и удаление атрибутов, изменение описания, параметров доступа) необходимо выполнить PATCH-запрос с новыми параметрами слоя:
PATCH {host}/layers/{name}#type=PostgresLayerService
Content-Type: application/json
JSON body
{
"attributesConfiguration": {
"idAttribute": "string",
"titleAttribute": "string",
"geometryAttribute": "string",
"tableName": "string",
"attributes": [
{
"attributeName": "string",
"columnName": "string",
"alias": "string",
"subType": "None",
"isEditable": true,
"isDisplayed": true,
"aggregation": "None",
"expression": "string",
"stringFormat": {
"scalingFactor": 0,
"unitsLabel": "string",
"format": "string",
"culture": "string",
"splitDigitGroup": true,
"rounding": 0
}
}
],
"tableReferences": [
{
"tableName": "string",
"referenceColumn": "string",
"targetColumn": "string",
"attributes": [
{
"attributeName": "string",
"columnName": "string",
"alias": "string",
"subType": "None",
"isEditable": true,
"isDisplayed": true,
"aggregation": "None",
"expression": "string",
"stringFormat": {
"scalingFactor": 0,
"unitsLabel": "string",
"format": "string",
"culture": "string",
"splitDigitGroup": true,
"rounding": 0
}
}
],
"tableReferences": [
{}
]
}
]
},
"style": {
"title": "string",
"condition": "string",
"symbol": {
"size": {
"expression": "string",
"defaultValue": 0
},
"fillColor": {},
"strokeColor": {},
"strokeWidth": {
"expression": "string",
"defaultValue": 0
},
"offset": [
{
"expression": "string",
"defaultValue": 0
}
],
"angle": {
"expression": "string",
"defaultValue": 0
},
"disabled": true
},
"children": [
{}
],
"minResolution": 0,
"maxResolution": 0,
"disabled": true
},
"condition": "string",
"featuresLimit": 0,
"extentOffset": 0,
"name": "string",
"alias": "string",
"description": "string",
"acl": {
"data": [
{
"role": "string",
"permissions": "none"
}
]
},
"icon": "string",
"owner": "string",
"copyrightText": "string",
"tags": [
"string"
],
"invisibleInCatalog": true
}
Обязательными параметрами при изменении состояния слоя являются его уникальное системное имя name
и конфигурация атрибутов attributesConfiguration
, которая строится так же, как и при создании слоя.
Новое значение каждого параметра полностью перезаписывает старое, следовательно, если необходимо, к примеру, добавить атрибуты в attributesConfiguration
, необходимо добавить их к списку уже имеющихся атрибутов. Для внесения точечных изменений целесообразно сначала получить текущее состояние ресурса с помощью 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)
tableName = f'{username}.buildings_table'
layerName = f'{username}.buildings_layer'
layerDescription = 'Слой зданий с информацией об адресе, назначении, количестве этажей, годе постройки, количестве квартир и организаций'
# получение текущего состояния слоя
layerInfoUrl = f'{host}/layers/{layerName}'
params = {"type": "PostgresLayerService"} # тип ресурса
layerProps = session.get(url=layerInfoUrl, params=params).json()
# изменение конфигурации слоя
layerUpdateProps = layerProps['configuration']
oldAttributes = layerUpdateProps['attributesConfiguration']['attributes']
addedAttributes = [
{"attributeName": "aprtCount", "columnName": "aprtCount", "alias": "Количество квартир"},
{"attributeName": "firmCount", "columnName": "firmCount", "alias": "Количество организаций"},
]
updatedAttributes = [a for a in oldAttributes if a['attributeName'] != 'material'] + addedAttributes
layerUpdateProps['attributesConfiguration']['attributes'] = updatedAttributes
layerUpdateProps['description'] = layerDescription
# выполнение PATCH-запроса
r = session.patch(url=layerInfoUrl, data=json.dumps(layerUpdateProps), params=params, headers=headers).json()
URL и JSON запроса
Для работы с запросом в Postman или аналогичном приложении
PATCH https://evergis.ru/sp/layers/username.buildings_layer#type=PostgresLayerService
Content-Type: application/json
JSON body:
{
"attributesConfiguration": {
"idAttribute": "gid",
"titleAttribute": null,
"geometryAttribute": "geometry",
"tableName": "username.buildings_table",
"attributes": [
{
"attributeName": "gid", "columnName": "gid", "alias": null,
"subType": "None", "isEditable": true, "isDisplayed": true,
"aggregation": "None", "expression": null, "stringFormat": null
},
{
"attributeName": "geometry", "columnName": "geometry", "alias": null,
"subType": "None", "isEditable": true, "isDisplayed": true,
"aggregation": "None", "expression": null, "stringFormat": null
},
{
"attributeName": "address", "columnName": "address", "alias": "Адрес",
"subType": "None", "isEditable": true, "isDisplayed": true,
"aggregation": "None", "expression": null, "stringFormat": null
},
{
"attributeName": "purpose", "columnName": "purpose", "alias": "Назначение",
"subType": "None", "isEditable": true, "isDisplayed": true,
"aggregation": "None", "expression": null, "stringFormat": null
},
{
"attributeName": "floors", "columnName": "floors", "alias": "Количество этажей",
"subType": "None", "isEditable": true, "isDisplayed": true,
"aggregation": "None", "expression": null, "stringFormat": null
},
{
"attributeName": "year", "columnName": "year", "alias": "Год постройки",
"subType": "None", "isEditable": true, "isDisplayed": true,
"aggregation": "None", "expression": null, "stringFormat": {
"scalingFactor": 0.0, "unitsLabel": null, "format": "dd.MM.yyyy",
"culture": null, "splitDigitGroup": false, "rounding": 0
}
},
{"attributeName": "aprtCount", "columnName": "aprtCount", "alias": "Количество квартир"},
{"attributeName": "firmCount", "columnName": "firmCount", "alias": "Количество организаций"}
],
"tableReferences": null
},
"style": {
"title": null, "condition": null, "symbol": {
"type": "polygonSymbol",
"stroke": {"type": "solid", "color": "#00ffff80", "width": 2.0},
"fill": {"type": "solid", "color": "#00ffff80"},
"disabled": false
},
"children": null,
"minResolution": 0.0,
"maxResolution": 0.0,
"disabled": false
},
"condition": null,
"featuresLimit": 500,
"extentOffset": 0,
"name": "username.buildings_layer",
"alias": "Здания",
"description": "Слой зданий с информацией об адресе, назначении, количестве этажей, годе постройки, количестве квартир и организаций",
"acl": {"data": [{"role": "__username", "permissions": "read,write,configure"}]},
"icon": null,
"owner": "username",
"copyrightText": null,
"tags": null,
"invisibleInCatalog": false
}