Создание слоёв
Чтобы создать слой, нужно выполнить POST-запрос, содержащий параметры его создания:
POST {host}/layers#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
.
Системное имя слоя
Системное имя слоя строится аналогичным с именами таблиц образом и указывается в формате namespace.name
, где namespace
- пространство имён, в котором создаётся слой. В общем случае пространство имён совпадает с логином пользователя. Также слой может создаваться в пространетсве имён temp
: temp.name
. Такой слой является временным и будет удалён после завершения пользовательской сессии. Временные слои могут использоваться, к примеру, в качестве промежуточных этапов при расчётах с помощью инструментов геообработки. В название слоя name
могут входить латинские буквы, цифры, а также символы _$-.
Конфигурация атрибутов слоя
Конфигурация атрибутов attributesConfiguration
задаётся json-объектом, описывающим параметры атрибутов слоя.
idAttribute
- атрибут, который будет использоваться в качестве идентификатора объектов (обязательный параметр). По умолчанию должен использоваться атрибутgid
;titleAttribute
- атрибут, значение которого будет использоваться в качестве заголовка в карточке объекта;geometryAttribute
- атрибут геометрии слоя;tableName
- системное имя таблицы (источника данных), на основе которой создаётся слой (обязательный параметр);tableReferences
- список/массив json-объектов, описывающих атрибутивные связи с другими слоями или таблицами. Подробнее об атрибутивных связях;attributes
- список/массив json-объектов, описывающих атрибуты слоя.
Описание атрибута
Каждое описание атрибута в списке attributes
внутри attributesConfiguration
состоит из параметров:
attributeName
- системное название атрибута (обязательный параметр). В названии допустимы латинские буквы, цифры и символ_
;columnName
- системное название поля исходной таблицы, на основе которого создаётся атрибут;alias
- отображаемое в интерфейсе название атрибута (псевдоним);subType
- как интерпретировать текст (для строковых атрибутов):'None'
- как обычный текст;'Image'
- ссылка на изображение;'PkkCode'
- код ПКК;
isEditable
- разрешить редактирование значений атрибута (true
илиfalse
);isDisplayed
- отображать атрибут в карточке объекта (true
илиfalse
);aggregation
- функция агрегации для атрибутов, полученных с помощью атрибутивных связей;expression
- EQL-выражение для динамического вычисления значения атрибута;stringFormat
- json-объект, описывающий форматирование отображения значения слоя;
Другие параметры создания слоя
Помимо обязательных параметров при создании слоя можно указать:
alias
- отображаемое в интерфейсе имя (псевдоним);description
- текстовое описание слоя;copyrightText
- информация о копирайте;style
- настройки стиля слоя для визуализации. Подробнее о стилях;condition
- фильтр для отбора объектов. Подробнее о языке атрибутивных запросов;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)
# параметры создания слоя
tableName = f'{username}.buildings_table'
layerName = f'{username}.buildings_layer'
layerAlias = 'Здания'
layerDescription = 'Слой зданий с информацией об адресе, назначении, количестве этажей, годе постройки и материале'
attributesConfiguration = {
"idAttribute": "gid",
"geometryAttribute": "geometry",
"tableName": tableName,
"attributes":[
{"attributeName": "gid", "columnName": "gid"},
{"attributeName": "geometry", "columnName": "geometry"},
{"attributeName": "address", "columnName": "address", "alias": "Адрес"},
{"attributeName": "purpose", "columnName": "purpose", "alias": "Назначение"},
{"attributeName": "floors", "columnName": "floors", "alias": "Количество этажей"},
{"attributeName": "year", "columnName": "year", "alias": "Год постройки"},
{"attributeName": "material", "columnName": "material", "alias": "Материал"},
]
}
layerProps = {
"name": layerName,
"alias": layerAlias,
"description": layerDescription,
"attributesConfiguration": attributesConfiguration
}
createLayerUrl = f'{host}/layers'
params = {"type": "PostgresLayerService"} # тип создаваемого ресурса
# выполнение запроса
r = session.post(url=createLayerUrl, params=params, data=json.dumps(layerProps), headers=headers).json()
В ответ на этот запрос, если он выполнен успешно, сервер вернёт JSON с полным описанием слоя, которые будет содежржать в том числе те параметры, значения которых не были указаны и были выбраны сервером по умолчанию.
URL и JSON запроса
Для работы с запросом в Postman или аналогичном приложении
POST https://evergis.ru/sp/layers#type=PostgresLayerService
Content-Type: application/json
JSON body:
{
"name": "username.buildings_layer",
"alias": "Здания",
"description": "Слой зданий с информацией об адресе, назначении, количестве этажей, годе постройки и материале", "attributesConfiguration": {
"idAttribute": "gid",
"geometryAttribute": "geometry",
"tableName": "username.buildings_table",
"attributes": [
{"attributeName": "gid", "columnName": "gid"},
{"attributeName": "geometry", "columnName": "geometry"},
{"attributeName": "address", "columnName": "address", "alias": "Адрес"},
{"attributeName": "purpose", "columnName": "purpose", "alias": "Назначение"},
{"attributeName": "floors", "columnName": "floors", "alias": "Количество этажей"},
{"attributeName": "year", "columnName": "year", "alias": "Год постройки"},
{"attributeName": "material", "columnName": "material", "alias": "Материал"}
]
}
}
Получение свойств слоя
Чтобы получить свойства слоя, достаточно выполнить GET-запрос с его системным именем:
GET {host}/layers/{name}
На примере только что созданного слоя:
layerInfoUrl = f'{host}/layers/{layerName}'
layerInfo = session.get(url=layerInfoUrl)
layerInfo
Просмотреть ответ сервера
{'layerDefinition': {'idAttribute': 'gid',
'titleAttribute': None,
'geometryAttribute': 'geometry',
'geometryType': 'polygon',
'spatialReference': 3857,
'isEditable': True,
'attributes': {'gid': {'type': 'Int64',
'alias': None,
'isNullable': False,
'isEditable': True,
'isDisplayed': True,
'subType': 'None',
'isUnique': False,
'isCalculated': False,
'stringFormat': None},
'geometry': {'type': 'Polygon',
'alias': None,
'isNullable': True,
'isEditable': True,
'isDisplayed': True,
'subType': 'None',
'isUnique': False,
'isCalculated': False,
'stringFormat': None},
'address': {'type': 'String',
'alias': 'Адрес',
'isNullable': True,
'isEditable': True,
'isDisplayed': True,
'subType': 'None',
'isUnique': False,
'isCalculated': False,
'stringFormat': None},
'purpose': {'type': 'String',
'alias': 'Назначение',
'isNullable': True,
'isEditable': True,
'isDisplayed': True,
'subType': 'None',
'isUnique': False,
'isCalculated': False,
'stringFormat': None},
'floors': {'type': 'Int32',
'alias': 'Количество этажей',
'isNullable': True,
'isEditable': True,
'isDisplayed': True,
'subType': 'None',
'isUnique': False,
'isCalculated': False,
'stringFormat': None},
'year': {'type': 'DateTime',
'alias': 'Год постройки',
'isNullable': True,
'isEditable': True,
'isDisplayed': True,
'subType': 'None',
'isUnique': False,
'isCalculated': False,
'stringFormat': {'scalingFactor': 0.0,
'unitsLabel': None,
'format': 'dd.MM.yyyy',
'culture': None,
'splitDigitGroup': False,
'rounding': 0}},
'material': {'type': 'String',
'alias': 'Материал',
'isNullable': True,
'isEditable': True,
'isDisplayed': True,
'subType': 'None',
'isUnique': False,
'isCalculated': False,
'stringFormat': None}}},
'style': {'title': None,
'condition': None,
'symbol': {'type': 'polygonSymbol',
'stroke': {'type': 'solid', 'color': '#00ffff80', 'width': 2.0},
'fill': {'type': 'solid', 'color': '#00ffff80'},
'disabled': False},
'children': None,
'minResolution': 0.0,
'maxResolution': 0.0,
'disabled': False},
'dataSourceType': 'Table',
'copyrightText': None,
'type': 'PostgresLayerService',
'minResolution': 0.0,
'maxResolution': 0.0,
'condition': None,
'geometryType': 'polygon',
'objectCount': 0,
'categories': None,
'configuration': {'attributesConfiguration': {'idAttribute': 'gid',
'titleAttribute': None,
'geometryAttribute': 'geometry',
'tableName': 'username.buildings_table',
'attributes': [{'attributeName': 'gid',
'columnName': 'gid',
'alias': None,
'subType': 'None',
'isEditable': True,
'isDisplayed': True,
'aggregation': 'None',
'expression': None,
'stringFormat': None},
{'attributeName': 'geometry',
'columnName': 'geometry',
'alias': None,
'subType': 'None',
'isEditable': True,
'isDisplayed': True,
'aggregation': 'None',
'expression': None,
'stringFormat': None},
{'attributeName': 'address',
'columnName': 'address',
'alias': 'Адрес',
'subType': 'None',
'isEditable': True,
'isDisplayed': True,
'aggregation': 'None',
'expression': None,
'stringFormat': None},
{'attributeName': 'purpose',
'columnName': 'purpose',
'alias': 'Назначение',
'subType': 'None',
'isEditable': True,
'isDisplayed': True,
'aggregation': 'None',
'expression': None,
'stringFormat': None},
{'attributeName': 'floors',
'columnName': 'floors',
'alias': 'Количество этажей',
'subType': 'None',
'isEditable': True,
'isDisplayed': True,
'aggregation': 'None',
'expression': None,
'stringFormat': None},
{'attributeName': 'year',
'columnName': 'year',
'alias': 'Год постройки',
'subType': 'None',
'isEditable': True,
'isDisplayed': True,
'aggregation': 'None',
'expression': None,
'stringFormat': {'scalingFactor': 0.0,
'unitsLabel': None,
'format': 'dd.MM.yyyy',
'culture': None,
'splitDigitGroup': False,
'rounding': 0}},
{'attributeName': 'material',
'columnName': 'material',
'alias': 'Материал',
'subType': 'None',
'isEditable': True,
'isDisplayed': True,
'aggregation': 'None',
'expression': None,
'stringFormat': None}],
'tableReferences': None},
'style': {'title': None,
'condition': None,
'symbol': {'type': 'polygonSymbol',
'stroke': {'type': 'solid', 'color': '#00ffff80', 'width': 2.0},
'fill': {'type': 'solid', 'color': '#00ffff80'},
'disabled': False},
'children': None,
'minResolution': 0.0,
'maxResolution': 0.0,
'disabled': False},
'condition': None,
'featuresLimit': 500,
'extentOffset': 0,
'name': 'username.buildings_layer',
'alias': 'Здания',
'description': 'Слой зданий с информацией об адресе, назначении, количестве этажей, годе постройки и материале',
'acl': {'data': [{'role': '__username',
'permissions': 'read,write,configure'}]},
'icon': None,
'owner': 'username',
'copyrightText': None,
'tags': None,
'invisibleInCatalog': False},
'name': 'username.buildings_layer',
'alias': 'Здания',
'owner': 'username',
'description': 'Слой зданий с информацией об адресе, назначении, количестве этажей, годе постройки и материале',
'preview': None,
'createdDate': '2023-11-29T11:49:30.4500244Z',
'changedDate': '2023-11-29T11:49:30.4500245Z',
'permissions': 'read,write,configure',
'acl': {'data': [{'role': '__username',
'permissions': 'read,write,configure'}]},
'icon': None,
'invisibleInCatalog': False}