Калькулятор атрибутов
Чтобы создать задачу на расчёт значений атрибута, необходимо выполнить POST-запрос:
POST {host}/scheduler/tasks#type=editAttributes
Content-Type: application/json
JSON body
{
"condition": null,
"attribute": "string",
"editExpression": "string",
"createNewAttribute": true,
"attributeType": "Unknown",
"target": {
"serviceName": "string",
"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": [
{}
]
}
]
}
}
}
Калькулятор атрибутов позволяет рассчитывать значения атрибутов сразу всего слоя или таблицы на основе значений других атрибутов или геометрических характеристик с помощью EQL-выражения.
Параметры
Чтобы создать задачу расчёта атрибута, необходимо в теле запроса указать следующие параметры:
target
- описание целевого ресурса, для которого рассчитываются атрибуты (обязательный параметр). Подробнее об описаниях ресурсов. Как правило, задача расчёта атрибутов выполняется над слоямиlayerTaskDataStorage
;attribute
- имя вычисляемого атрибута (обязательный параметр);editExpression
- EQL-выражение, на основе которого будут вычислены значения атрибута (обязательный параметр);createNewAttribute
- создать новый атрибут (true
илиfalse
). Еслиtrue
, то вычисленные значения будут записаны в новый атрибут с указанным именем и типом. Еслиfalse
, то вычисленные значения будут записаны в существующий атрибут с указанным именем. По умолчаниюfalse
;attributeType
- тип вычисляемого атрибута. Подробнее о типах данных. Указывается только в том случае, когдаcreateNewAttribute=true
;condition
- выражение для фильтра объектов. Если дано выражение, то значения будут вычислены только для объектов, удовлетворяющих этому условию.
Полный перечень и описание параметров создания задачи калькулятора атрибутов
Пример
Рассчитаем примерную высоту жилых многоквартирных домов в слое, созданном ранее в примере. Для этого умножим количество этажей floors
домов, удовлетворяющих условию purpose == "Многоквартирный дом"
, на среднюю высоту этажа - 2.7 м.
Python
import requests
import json
def login(username, password): # производит авторизацию и возвращает объект сессии
authUrl = f'{host}/account/login/'
login_data = {
"username": username,
"password": password
}
headers = {'Content-type': 'application/json'}
# создание объекта сессии
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'
# авторизация
session = login(username, password)
serviceName = f'{username}.buildings_layer'
createNewService = False
target = {
'type': 'layerTaskDataStorage',
'serviceName': serviceName,
'createNewService': createNewService
}
attribute = 'height'
attributeType = 'Double'
editExpression = 'floors * 2.7'
createNewAttribute = True
condition = "purpose == 'Жилой дом'"
editProps = {
'target': target,
'attribute': attribute,
'attributeType': attributeType,
'editExpression': editExpression,
'createNewAttribute': createNewAttribute,
'condition': condition
}
editTaskUrl = f'{host}/scheduler/tasks'
params={'type': 'editAttributes'}
headers = {'Content-type': 'application/json'}
taskProps = session.post(url=editTaskUrl, params=params, data=json.dumps(editProps), headers=headers).json()
taskProps
{'taskId': '3987bdd6-d3b4-4bc5-80e9-f0df68b1841c',
'status': 'Scheduled',
'taskResult': None}
URL и JSON запроса
Для работы с запросом в Postman или аналогичном приложении
POST https://evergis.ru/sp/scheduler/tasks#type=editAttributes
Content-Type: application/json
JSON body:
{
"target": {
"type": "layerTaskDataStorage",
"serviceName": "username.buildings_layer",
"createNewService": false
},
"attribute": "height",
"editExpression": "floors * 2.7",
"createNewAttribute": false,
"condition": "purpose == 'Жилой дом'"
}