Руководство по установке#
Установка Garnet#
Важно
Необходимо устанавливать под отдельным пользователем без прав суперпользователя.
После выполнения данного пункта будут развернуты контейнеры, содержащие сайт Garnet и его API.
Убедитесь, что на сервере открытого контура установлены средства поддержки контейнеризации docker и docker-compose. Подробнее смотрите Установка средств поддержки контейнеризации docker и docker-compose.
Скопируйте директорию _Garnet\web в директорию, куда будет производиться установка, например, /opt/garnet
Укажите свои значения для переменных в файле конфигурации. Откройте файл конфигурации в режиме редактирования /opt/garnet /.env:
Задайте свои настройки подключения к базе данных Garnet заменив параметры
{GARNET_DB_HOST}
,{GARNET_DB_PORT}
,{GARNET_DB_NAME}
,{GARNET_DB_LOGIN}
и{GARNET_DB_PASSWORD}
на хост, порт, имя БД, логин и пароль подключения к БД Garnet соответственно.
При указании пароля к БД служебный символ $ следует дублировать. Например, пароль Gems891$ должен в файле выглядеть как Gems891$$
Задайте свои настройки подключения к GeoServer приложения Garnet заменив параметры
{GARNET_GEOSERVER_HOST}
,{GARNET_ GEOSERVER _PORT}
на хост и порт GeoServer.Укажите схему БД Garnet заменив параметр
{GARNET_PROJECT_SCHEMA}
.
В общем случае имя схемы формируется как имя схемы проекта из Системы с префиксом
«garnet_»
, например, для схемы nignevartovsk схема Garnet будет называться garnet_nignevartovsk.Задайте адрес сайта Garnet в сети интернет, заменив параметр
{GARNET_URL}
.Задайте значение параметра поиска в радиусе (в метрах)
{GARNET_SEARCH_DISTANCE}
.Задайте при необходимости внешний порт Garnet
GARNET_EXTERNAL_PORT=5000
Сохраните изменения в файле конфигурации /opt/garnet /.env
Создайте новый NGINX-файл для Garnet:
перейдите в директорию nginx командой:
cd /etc/nginx/sites-available
создайте файл конфигурации nginx, выполнив команду:
touch garnet
откройте созданный файл на редактирование и заполните содержимым, указанным ниже.
gzip on; gzip_comp_level 9; gzip_disable "msie6"; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/ javascript application/javascript image/svg+xml; server { server_name {GARNET_URL}; listen 80; return 301 https://$server_name$request_uri; } server { server_name {GARNET_URL}; listen 443 ssl http2; ssl_certificate {путь до файла ssl сертификата}; ssl_certificate_key {путь до файла ключа ssl сертификата}; location /api { proxy_pass http://127.0.0.1:4000/api; } location @return_204 { return 204; } location /geoserver/gwc/service/tms{ proxy_pass http://{GARNET_GEOSERVER_HOST}:{GARNET_GEOSERVER_PORT}/geoserver/gwc/service/tms; proxy_intercept_errors on; error_page 400 404 = @return_204; } location / { proxy_pass http://127.0.0.1:3000; } }Замените значения свойств:
{GARNET_URL}
– адрес сайта Garnet в сети интернет;
{путь до файла ssl сертификата}
- путь до файла ssl-сертификата;
{путь до файла ключа ssl сертификата}
- путь до файла ключа ssl-сертификата;
{GARNET_GEOSERVER_HOST}
–хост GeoServer приложения Garnet;
{GARNET_ GEOSERVER _PORT}
- порт GeoServer приложения Garnet.
создайте символьную ссылку на файл garnet в директории /etc/nginx/sites-enabled:
ln -s /etc/nginx/sites-available/garnet /etc/nginx/sites-enabled
для применения настроек перезапустите NGINX. Например, выполнив команду: systemctl restart nginx
Установите Garnet:
убедитесь, что сервис Docker запущен:
systemctl status docker
. Если сервис Docker не запущен, выполните команду для его запуска:systemctl start docker
откройте терминал и перейдите в директорию с установочными файлами, выполнив команду:
cd /opt/garnet
запустите установку командой:
sudo bash app_install.sh
Если при установке с помощью скрипта app_install.sh, либо через Ansible появляется ошибка:
или:
ERROR: for cli_cli_1 Cannot start service cli: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "/usr/local/startup.sh": permission denied: unknown
ERROR: for cli Cannot start service cli: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "/usr/local/startup.sh": permission denied: unknown
Encountered errors while bringing up the project.
то необходимо дать полные права для папки GarnetCli. Пример команды: chmod 777 /opt/GarnetCli/ -R
Установка в закрытом контуре#
Закрытый контур состоит из утилиты командной строки Garnet.Cli.
Установка Garnet.Cli#
После выполнения данного пункта будет развернут контейнер, содержащий Garnet.Cli – утилиту для переноса данных из закрытого контура в открытый.
Убедитесь, что на сервере открытого контура установлены средства поддержки контейнеризации docker и docker-compose. Подробнее смотрите Установка средств поддержки контейнеризации docker и docker-compose.
Скопируйте директорию _Garnet\cli в директорию, куда будет производиться установка Garnet.Cli, например /opt/garnet/cli.
Укажите свои значения для переменных среды в файле конфигурации:
откройте файл конфигурации Docker в режиме редактирования /opt/garnet/cli/.env
Задайте свои настройки Garnet.Cli:
{IAS_DB_HOST}
– хост БД источника;
{IAS_DB_PORT}
- порт БД источника;
{IAS_DB_NAME}
- имя БД источника;
{IAS_DB_LOGIN}
– логин БД источника;
{IAS_DB_PASSWORD}
– пароль БД источника;Важно
При указании пароля к БД служебный символ $ следует дублировать. Например, пароль Gems891$ должен в файле выглядеть как Gems891$$
{GARNET_DB_HOST}
– хост БД приложения Garnet;
{GARNET_DB_PORT}
- порт БД приложения Garnet;
{GARNET_DB_NAME}
- имя БД приложения Garnet;
{GARNET_DB_LOGIN}
– логин БД приложения Garnet;
{GARNET_DB_PASSWORD}
– пароль БД приложения Garnet;
{IAS_SOURCE_SCHEMA}
– схема-источник, из которой будут браться данные для Garnet;
{GARNETGEOSERVER_URL}
– хост и порт GeoServer приложения Garnet;
{GARNET_GEOSERVER_LOGIN}
- логин GeoServer приложения Garnet;
{GARNET_GEOSERVER_PASSWORD}
- пароль GeoServer приложения Garnet.
сохраните изменения в файле конфигурации /opt/garnet/cli/.env
дополнительно можно настроить время автоматического обновления. Для этого следует внести изменения в файл /opt/garnet/cli/cron/scripts/startup.sh в секции
0 0 * * 2-6
Данная запись представляет из себя описание в формате cron-tab и означает, что обновление будет запускаться в 00:00 каждый день со вторника по субботу.
минуты часы дни месяца дни_недели
В файле /opt/GarnetCli/cli/oksObjKindResidentialMatching.json укажите текстовое значение вида объекта у слоя «Здания и строения», которое нужно считать жилым. Файл предварительно настроен и имеет вид:
[
"Многоквартирный дом",
"кж",
"ж",
"дж",
"смж",
"ижс",
"мкд",
"жил",
"жилой",
"Жилой",
"Жилой ",
"жилой дом",
"жилой дом ",
"Жилой дом",
"ЖИЛОЙ ДОМ",
"жилой дом (ИЖС)",
"Жилой дом (ИЖС)",
"жилой массив",
"индивидуальный жилой дом",
"Индивидуальный жилой дом",
"Индивидуальные жилые дома",
"многоквартирный жилой дом",
"Многоквартирный жилой дом",
"Многоквартирные жилые дома",
"жилое",
"Жилое",
"Жилое; ",
"жилое здание",
"жилое здание ",
"Жилое здание",
"Жилое строение",
"жилой дом со встроенным помещением",
"жилой со встроенными помещениями",
"жилое здание со встроенным помещением"
]
Значение должно указываться с учетом регистра и пробелов по полному совпадению с записью в Geometa.
Установите Garnet.Cli:
убедитесь, что сервис Docker запущен:
systemctl status docker
. Если сервис Docker не запущен, выполните команду для его запуска:systemctl start docker
откройте терминал и перейдите в директорию с установочными файлами, выполнив команду:
cd /opt/garnet/cli/docker-compose-cli
запустите установку Garnet.Cli ГИСОГД командой:
sudo bash app_install.sh
Установка в открытом контуре#
В открытом контуре устанавливается приложение Garnet, связанный с ним GeoServer и БД PostgreSQL.
Установка Geoserver и PostgreSQL#
GeoServer и БД PostgreSQL для приложения Garnet следует установить и настроить самостоятельно: deploygeoserver и deploypostgre
GeoServer должен быть версией не ниже 2.15. Настоятельно рекомендуется установка GeoServer 2.20.4
На GeoServer следует настроить геосетку с именем EPSG:3857, указать масштаб первой точки 559 082 263,9508929 и настройки вида:
Cледует в разделе настройки кеширования сделать её геосеткой по умолчанию:
Важно
Для корректной работы приложения в части формирования отчётов необходим доступ в интернет, так как в формируемых изображениях земельных участков используются подложки, получаемые от внешних сервисов, расположенных в сети интернет.
Формирование карты#
Для корректной работы необходимо, чтобы в Конфигураторе Системы были опубликованы следующие слои:
Наименование слоя |
Объект метаданных (алиас) |
---|---|
Объекты образования и науки |
GeoUrban10Education |
Объекты культуры и искусства |
GeoUrban10Culture |
Объекты физической культуры и массового спорта |
GeoUrban10Sport |
Объекты социального обслуживания |
GeoUrban10Social |
Объекты отдыха и туризма |
GeoUrban10Recreation |
Объекты санаторно-курортного назначения |
GeoUrban10Resort |
Прочие объекты обслуживания |
GeoUrban10AuthorityService |
Объекты здравоохранения |
GeoUrban10Health |
Общественные пространства |
GeoUrban10Public |
Объекты автомобильного пассажирского транспорта |
GeoUrban10PublicTransportObj |
Объекты железнодорожного транспорта |
GeoUrban10RailwayFacility |
Объекты водного транспорта |
GeoUrban10WaterTransportObj |
Объекты воздушного транспорта |
GeoUrban10AirTransportObj |
Объекты хранения и обслуживания общественного пассажирского транспорта |
GeoUrban10PublicTransportService |
Объекты обслуживания и хранения автомобильного транспорта |
GeoUrban10AutoService |
Инвестиционные площадки |
GeoInvestPlatform |
Искусственные дорожные сооружения |
GeoUrban10TransportObj |
Комплексные объекты транспортной инфраструктуры |
GeoUrban10TranspLogisticObj |
Автомобильные дороги |
GeoUrban10Road |
Улично-дорожная сеть городского населенного пункта |
GeoUrban10Street |
Жилые (из проекта планировки) |
GeoUrbanBuildResPPMPr |
Нежилые (из проекта планировки) |
GeoUrbanBuildUninhabPPMPr |
Общественного пользования (из проекта планировки) |
GeoUrbanBuildPublicPPMPr |
Здания и строения |
GeoAdrCapitalBuild |
Земельные участки проектные |
GeoUrbanParselPPM |
Земельные участки под изъятие |
GeoUrbanParselReservePPM |
Земельные участки ЕГРН |
GeoGknParcelExist |
Территории комплексного устойчивого развития |
GeoUrban5AreaBaseDevelopmentPZZ |
Территориальные зоны |
GeoUrbanTerZoneExist |
ЗОУИТ (действующие) |
GeoGKNSpecialZoneActive |
Береговые полосы |
GeoUrban10Foreshore |
Водоохранные зоны |
GeoUrban10WaterProtectionZone |
Зоны затопления и подтопления |
GeoUrban10FloodArea |
Зоны округов санитарной (горно-санитарной) охраны |
GeoUrban10ResortProtectionZone |
Зоны охраны объектов культурного наследия (памятников истории и культуры) народов Российской Федерации |
GeoUrban10HeritageProtectionZone |
Зоны охраняемых объектов |
GeoUrban10ProtectionZone |
Зоны санитарной охраны источников питьевого и хозяйственно-бытового водоснабжения и водопроводов питьевого назначения |
GeoUrban10DrinkWaterProtectionZone |
Иные зоны с особыми условиями использования |
GeoUrban10OtherZone |
Охранная зона инженерных коммуникаций |
GeoUrban10EngProtectionZone |
Охранная зона иного назначения |
GeoUrban10OtherProtectionZone |
Охранная зона особо охраняемых природных территорий |
GeoUrban10NatureProtectionZone |
Охранная зона транспортных коммуникаций |
GeoUrban10TranspProtectionZone |
Прибрежные защитные полосы |
GeoUrban10CoastalProtectionZone |
Рыбоохранная и рыбохозяйственная заповедная зоны |
GeoUrban10FishProtectionZone |
Санитарный разрыв (санитарная полоса отчуждения) инженерных коммуникаций |
GeoUrban10EngSanitaryGapZone |
Санитарный разрыв (санитарная полоса отчуждения) транспортных коммуникаций |
GeoUrban10TranspSanitaryGapZone |
Санитарно-защитная зона |
GeoUrban10SanitaryProtectionZone |
Зоны обслуживания объектов социальной инфраструктуры |
GeoCIMZoneServiceSoc |
Зоны обслуживания объектов транспортной инфраструктуры |
GeoCIMZoneServiceTrans |
Зоны обслуживания объектов инженерной инфраструктуры |
GeoCIMZoneServiceEng |
Функциональная зона |
GeoUrban10FunctionalZone |
Территория населенного пункта |
GeoUrban10AdmBorderNP |
Неразграниченные территории |
v_geo_unbounded_territories – наименование слоя на GeoServer. Формируется автоматически (см. правила формирования слоя) |
Метаданные#
Для работы модуля Поиск территории (Garnet) необходимо наличие метаданных подсистемы «ЦИМ» и подсистемы «Концепция пространственного развития». Подсистема ЦИМ требуется для того, чтобы подключить объекты слоев систем коммунальной инфраструктуры, которые участвуют в проверках, реализованных на портале.
Конфигурирование#
Правила загрузки данных#
Загружаются объекты по следующим правилам:
2.a. Объекты, у которых в [Набор данных] (DmdInfoSet) для документа [Документ, определяющий статус данных] (Document) в поле [Статус] (Status) значение равно Действующий (approved).2.b. Объекты, у которых в [Набор данных] (DmdInfoSet) для документа [Документ, определяющий статус данных] (Document) в поле [Статус] (Status) значение не задано.2.c. Объекты, у которых [Набор данных] (DmdInfoSet) не задан.
Настройка центра карты#
Параметр, используемый в расчете расстояния от объекта до центра города, задается в конфигурационном файле administrativeCenterLocation.json в виде координат точки центра населенного пункта. Координаты центра указываются в системе координат EPSG:4326, в широте и долготе.
Пример:
{
"x": 49.114441109882904,
"y": 55.790831341359706
}
Центрирование карты при открытии портала задаётся в mapConfig.js
Пример:
{
"defaultZoom": 11,
"centerLocation": {
"x": 1305191,
"y": 475945
},
"bounds": {
"minX": 1200000,
"minY": 400000,
"maxX": 1400000,
"maxY": 700000
}
}
Настройка параметра симплификации геометрии#
Настройка параметра симплификации геометрии SIMPLIFICATION_GEOMETRY_TOLERANCE
задаётся в .env-файле приложения cli (путь: /opt/GarnetCli/cli).
Значение параметра задаётся в градусах. Если значение будет равно нулю, то геометрия объектов не будет упрощаться и все операции, связанные с проверкой геометрии будут выполняться медленнее. Чем выше установлено значение параметра - тем сильнее будет упрощена геометрия объектов, что ускорит работу приложения, но может привести к потери пространственных данных на карте.
После изменения параметра симплификации, необходимо выполнить проливку с помощью приложения cli.
Пример:
SIMPLIFICATION_GEOMETRY_TOLERANCE = 0.000009
Настройка параметров НГП#
Настройка параметров НГП задается в файле appsettings.json в секции MinParcelAreaTableNgp
.
Параметры НГП будут использоваться на портале при проверке размещения и поиске территории.
Пример:
"CliAppOptions": {
"MinParcelAreaTableNgp": [
{
"MinNumberOfFloors": null, - минимальное значение этажности (null означает что оно не задано)
"MaxNumberOfFloors": 2, - максимальное значение этажности.
"Ratio": 1.39 – коэффициент размера ЗУ по НГП (используется при определении минимального размера ЗУ для ОКС с заданной площадью)
},
{
"MinNumberOfFloors": 3,
"MaxNumberOfFloors": 3,
"Ratio": 1.12
},
{
"Ratio": 0.7
},
"MinNumberOfFloors": 17,
"MaxNumberOfFloors": null,
"Ratio": 0.6
}
]
}
Настройка получения параметров ВРИ#
Настройка получения параметра ВРИ задается в файле appsettings.json.
Параметры ВРИ будут использоваться на портале при проверке размещения и поиске территории.
Получение параметра ВРИ по значениям:
"CliAppOptions": {
"PermittedUseKindValueSourse": "MMRelation"
}
Получение параметра ВРИ из текста представления ВРИ:
"CliAppOptions": {
"PermittedUseKindValueSourse": "TextFieldNamedAsParametr"
}
Кеширование списка ВРИ происходит каждый день, при первом обращении к списку ВРИ. Приложение обращается к серверу для получения списка ВРИ, проверяется есть ли он в кеше и если нет, то запрашивает в базе список ВРИ и перемещает в кеш.
Кешированный список ВРИ сохраняется до 00.00.
Настройка слоев карты#
Настройка слоев осуществляется в файле layersTree.json.
Пример структуры описания настройки слоев:
{
"type": "Folder",
"name": "Объекты социальной инфраструктуры",
"children": [
{
"type": "Layer",
"name": "Объекты образования и науки",
"value": "nignevartovsk:nignevartovsk_geo_urban10_education",
"infoSets":[1786010011542715],
"minZoom": 15,
"visible": false
}
]
}
Где:
"type":
- тип объекта. Для группы слоев заполняется значением «Folder»
"name":
- наименование группы слоев. Заданное наименование группы будет отображаться в панели управления слоями карты
->"children":
"type":
- тип объекта. Для слоя заполняется значением «Layer»"name":
- наименование слоя. Заданное наименование слоя будет отображаться в панели управления слоями карты"value":
- системное имя слоя из ГИС-конфигуратора (имя слоя на GeoServer)"infoSets":
- значение идентификатора инфосета. Если значение задано, то на портал будут загружены только объекты с таким инфосетом"minZoom":
- минимальное значение zoom при котором на карте отобразятся объекты слоя"visible":
- загрузка слоя на карту по умолчанию. false – слой не загружается по умолчанию. true – слой загружается по умолчанию
Узел NotVisibleLayer нужен для того, чтобы использовать данные слоев в проверках, но при этом не отображать их на карте. Это настраивается для обязательных слоев, на которые настроен алгоритм работы Garnet.
{
"_type": "NotVisibleLayer",
"name": "Автомобильные дороги (существующие)",
"value": "kazan:kazan_geo_urban10_road_exist"
},
{
"_type": "NotVisibleLayer",
"name": "Улично-дорожная сеть городского населенного пункта (существующие)",
"value": "kazan:kazan_geo_urban10_street_exist"
}
Где:
_type
- наименование узла;
name
- наименование слоя;
value
- системное имя слоя.
Слой Неразграниченные территории формируется автоматически при проливке данных в проект.
В файле layersTree.json, расположенном в назначенной для Garnet.Cli директории, например, /opt/garnet_cli, укажите слои, которые будут учитываться при формировании слоя с неразграниченными территориями.
Источником данных, для формирования слоя «Неразграниченные территории», является слой «Территориальная зона» V_GEO_URBAN_TERZONE_EXIST.
источник данных, из которых формируется слой
* /
"dataSource": {
"_type": "DbTable",
"description": "Терзоны",
"name": "V_GEO_URBAN_TERZONE_EXIST",
Где:
"type"
- тип узла.
Может принимать значения:
TableLayer – описание и создание слоя;
DbTable – источник таблицы БД;
GroupRule – групповое правило, описывает как элементы объединены между собой (AND/OR)
DbColumnRule – правило фильтрации для колонки в таблице БД (может принимать значения equal/ not equal)
"description"
- наименование слоя (не обязательное поле);
"name"
- системное имя PV слоя;
"value"
- значения, к которым будет применен фильтр.
Из слоя Территориальная зона (V_GEO_URBAN_TERZONE_EXIST) исключаем территориальные зоны с индексом (URBAN_INDEX)= Р0, Р1, Р2, Р3.
* /
"filter": {
"_type": "GroupRule",
"condition": "AND",
"rules": [
{
"_type": "DbColumnRule",
"name": "URBAN_INDEX",
"operator": "not in",
"value": [
"Р0",
"Р1",
"Р2",
"Р3"
]
}
Где:
Р0 – зона особого природоохранного, рекреационного и иного ценного значения,
Р1 – зона природных территорий,
Р2 – рекреационная зона,
Р3 – рекреационная зона с долей общественных функций.
Из слоя Территориальная зона (V_GEO_URBAN_TERZONE_EXIST) вычитаем:
Леса V_GEO_URBAN_10_FOREST
Природно-рекреационный комплекс слой V_GEO_KAZAN_RECREAT_COMPLEX
Охранная зона особо охраняемых природных территорий V_GEO_ZOR_NATURE_PROTECTION_ZONE_EXIST
Зоны кладбищ ЗОР V_GEO_KZOR_CEMETERY_ZONE
Береговые полосы V_GEO_ZOR_FORESHORE
Дороги, мосты (площадные) V_GEO_TOPO_ROAD
Красные линии площадные V_GEO_URBAN_RED_LINE_BOUND_PPM_EXIST
ЗУ ЕГРН V_GEO_GKN_PARCEL_EXIST
Пример:
"substractGeometry": [ { "_type": "DbTable", "description": "Леса", "name": "V_GEO_URBAN_10_FOREST" }, { "_type": "DbTable", "description": "Природно-рекреационный комплекс", "name": "V_GEO_KAZAN_RECREAT_COMPLEX" },
Подзоны с индексом V_GEO_PZZ_SUB_ZONE_EXIST = ОСН, ПРК, УДС.
Где:
ОСН – подзона озеленения специального назначения,
ПРК – подзона природно-рекреационного комплекса,
УДС – подзона улично-дорожной сети.
Пример:
{ "_type": "DbTable", "description": "Подзоны ТЗ", "name": "V_GEO_PZZ_SUB_ZONE_EXIST", "filter": { "_type": "GroupRule", "condition": "AND", "rules": [ { "_type": "DbColumnRule", "name": "PZZ_INDEX_SUBZONE", "operator": "in", "value": [ "УДС", "ОСН", "ПРК" ] } ] } },
Подсказка
Дополнительный фильтр у выбранных слоев можно применять только к полям с типом number/varchar. К полям, содержащим справочное значение, применять фильтр нельзя.
На карте не отображаются участки неразграниченной территории, имеющие площадь < 100 м2.
При расчете используются только объекты с типом геометрии полигоны и мультиполигоны.
На портале появились два и более одинаковых слоя
Такая проблема может возникнуть если системное имя слоя совпадает у двух и более слоев. Необходимо устранить совпадения на источнике и перелить данные на Garnet.
Установка средств поддержки контейнеризации docker и docker-compose#
Docker и docker-compose необходимо установить на серверах открытого и закрытого контуров.
Шаги по установке средств:
Подключитесь к серверу, на котором будет установлен Garnet или Garnet.Cli. Например, средствами WinSCP
Выполните установку Docker