Создание таблиц
Чтобы создать таблицу (источник данных), нужно выполнить POST-запрос, содержащий параметры её создания:
POST {host}/tables
Content-Type: application/json
JSON body
{
"columns": [
{
"name": "string",
"defaultValue": null,
"type": "Unknown",
"maxLength": 0,
"isNullable": true,
"autoincrement": false,
"srid": 0,
"isUnique": true,
"hasIndex": true
}
],
"rowCount": 0,
"geometries": [
"unknown"
],
"type": "string",
"configuration": {},
"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
и конфигурация полей columns
. Помимо этого в большинстве случаев указывается параметр типа геометрии geometries
.
Системное имя таблицы
Системное имя указывается в формате "namespace.name"
, где namespace
- пространство имён, в котором создаётся таблица. В общем случае оно совпадает с логином пользователя. Также таблица может создаваться в пространетсве имён temp
: temp.name
. Такая таблица является временной и будет удалёна после завершения пользовательской сессии. В название таблицы могут входить латинские буквы, цифры, а также символы _$-.
Тип геометрии
Если таблица должна содержать пространственные данные, необходимо указать тип геометрии (параметр geometries
):
"point"
- точки;"polyline"
- линии;"polygon"
- полигоны;"envelope"
- ограничивающий прямоугольник;"multipoint"
- мультиточки.
Если не указывать этот параметр или присвоить ему значения null
или "unknown"
, таблица будет создана без геометрии и сможет хранить лишь семантические данные без пространственной привязки.
Конфигурация полей таблицы
Конфигурация полей columns
представляет собой массив (список) json-объектов, описывающих каждое поле создаваемой таблицы. Каждое из описаний полей может содержать следующие параметры:
name
- уникальное название поля (обязательный параметр). Может содержать латинские буквы, цифры и символ_
;defaultValue
- значение по умолчанию;type
- тип данных поля (обязательный параметр). Допустимые значения:String
,Int32
,Int64
,Double
,DateTime
,Boolean
,Point
,Polyline
,Polygon
,Multipoint
;maxLength
- максимальная длина поля;isNullable
- допускаются ли пустые значения (true
илиfalse
);autoincrement
- автоматическое приращение дляInt32
иInt64
полей (true
илиfalse
);srid
- система координат для полей геометрии (EPSG-код, например, 4326 - WGS84 или 3857 - Web Mercator WGS84);isUnique
- проверять значения поля на уникальность (true
илиfalse
);hasIndex
- индексировать поле (true
илиfalse
).
Важно: при создании любой таблицы всегда необходимо включать в конфигурацию полей системное поле gid
с параметрами:
{
"name": "gid",
"type": "Int64",
"isNullable": false,
"isUnique": true,
"autoincrement": true
}
Если таблица предназначается для пространственных данных, она должна иметь поле геометрии geometry
:
{
"name": "geometry",
"type": "Point",
"srid": 3857,
}
Другие параметры создания таблицы
Помимо обязательных параметров и геометрии для таблицы можно указать:
type
- тип таблицы.Table
(по умолчанию) - обычная таблица,TileCatalogTable
- растровый каталог;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'
createTableUrl = f'{host}/tables'
username = 'username'
password = 'password'
headers = {'Content-type': 'application/json'}
# авторизация
session = login(username, password)
# описание параметров создания таблицы
tableName = f'{username}.buildings_table' # название ресурса добавляется к имени пользователя через точку
tableAlias = 'Здания'
tableDescription = 'Здания с информацией об адресе, назначении, количестве этажей, годе постройки и материале'
tableColumns = [
{"name": "gid", "type": "Int64", "isNullable": False, "isUnique": True, "autoincrement": True},
{"name": "geometry", "type": "Polygon", "srid": 3857},
{"name": "address", "type": "String"},
{"name": "purpose", "type": "String"},
{"name": "floors", "type": "Int32"},
{"name": "year", "type": "DateTime"},
{"name": "material": "type": "String"}
]
tableProps = {
"name": tableName,
"alias": tableAlias,
"description": tableDescription,
"columns": tableColumns
}
# выполнение запроса
r = session.post(url=createTableUrl, data=json.dumps(tableProps), headers=headers).json()
В ответ на этот запрос, если он выполнен успешно, сервер вернёт JSON с полным описанием таблицы, в том числе с параметрами, значения которых не были указаны и были выбраны сервером по умолчанию.
URL и JSON запроса
Для работы с запросом в Postman или аналогичном приложении
POST https://evergis.ru/sp/tables
Content-Type: application/json
JSON body:
{
"name": "username.buildings_table",
"alias": "Здания",
"description": "Здания с информацией об адресе, назначении, количестве этажей, годе постройки и материале",
"columns": [
{"name": "gid", "type": "Int64", "isNullable": false, "isUnique": true, "autoincrement": true},
{"name": "geometry", "type": "Polygon", "srid": 3857},
{"name": "address", "type": "String"},
{"name": "purpose", "type": "String"},
{"name": "floors", "type": "Int32"},
{"name": "year", "type": "DateTime"},
{"name": "material", "type": "String"}
]
}
Получение свойств таблицы
Чтобы получить свойства таблицы, достаточно выполнить GET-запрос с её системным именем:
GET {host}/tables/{name}
На примере только что созданной таблицы:
tableInfoUrl = f'{host}/tables/{tableName}'
tableInfo = session.get(url=tableInfoUrl)
tableInfo
Просмотреть ответ сервера
{'columns': [{'name': 'gid',
'defaultValue': None,
'type': 'Int64',
'maxLength': None,
'isNullable': False,
'autoincrement': True,
'srid': None,
'isUnique': False,
'hasIndex': True},
{'name': 'geometry',
'defaultValue': None,
'type': 'Polygon',
'maxLength': None,
'isNullable': True,
'autoincrement': False,
'srid': 3857,
'isUnique': False,
'hasIndex': True},
{'name': 'address',
'defaultValue': None,
'type': 'String',
'maxLength': None,
'isNullable': True,
'autoincrement': False,
'srid': None,
'isUnique': False,
'hasIndex': False},
{'name': 'purpose',
'defaultValue': None,
'type': 'String',
'maxLength': None,
'isNullable': True,
'autoincrement': False,
'srid': None,
'isUnique': False,
'hasIndex': False},
{'name': 'floors',
'defaultValue': None,
'type': 'Int32',
'maxLength': None,
'isNullable': True,
'autoincrement': False,
'srid': None,
'isUnique': False,
'hasIndex': False},
{'name': 'year',
'defaultValue': None,
'type': 'DateTime',
'maxLength': None,
'isNullable': True,
'autoincrement': False,
'srid': None,
'isUnique': False,
'hasIndex': False},
{'name': 'material',
'defaultValue': None,
'type': 'String',
'maxLength': None,
'isNullable': True,
'autoincrement': False,
'srid': None,
'isUnique': False,
'hasIndex': False}],
'rowCount': 0,
'geometries': ['polygon'],
'type': 'Table',
'configuration': {'type': 'defaultTableConfiguration'},
'name': 'username.buildings_table',
'alias': 'Здания',
'owner': 'username',
'description': 'Здания с информацией об адресе, назначении, количестве этажей, годе постройки и материале',
'preview': None,
'createdDate': '2023-11-29T11:21:11.9558Z',
'changedDate': '2023-11-29T11:21:11.9558Z',
'permissions': 'read,write,configure',
'acl': {'data': [{'role': '__username',
'permissions': 'read,write,configure'}]},
'icon': None,
'invisibleInCatalog': False}