Руководство по установке#

Установка Garnet#

Важно

Необходимо устанавливать под отдельным пользователем без прав суперпользователя.

После выполнения данного пункта будут развернуты контейнеры, содержащие сайт Garnet и его API.

  1. Убедитесь, что на сервере открытого контура установлены средства поддержки контейнеризации docker и docker-compose. Подробнее смотрите Установка средств поддержки контейнеризации docker и docker-compose.

  2. Скопируйте директорию _Garnet\web в директорию, куда будет производиться установка, например, /opt/garnet

  3. Укажите свои значения для переменных в файле конфигурации. Откройте файл конфигурации в режиме редактирования /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

  1. Создайте новый 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

  1. Установите Garnet:

  • убедитесь, что сервис Docker запущен: systemctl status docker. Если сервис Docker не запущен, выполните команду для его запуска: systemctl start docker

  • откройте терминал и перейдите в директорию с установочными файлами, выполнив команду: cd /opt/garnet

  • запустите установку командой: sudo bash app_install.sh

Если при установке с помощью скрипта app_install.sh, либо через Ansible появляется ошибка:

../../../_images/error.png

или:

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 – утилиту для переноса данных из закрытого контура в открытый.

  1. Убедитесь, что на сервере открытого контура установлены средства поддержки контейнеризации docker и docker-compose. Подробнее смотрите Установка средств поддержки контейнеризации docker и docker-compose.

  2. Скопируйте директорию _Garnet\cli в директорию, куда будет производиться установка Garnet.Cli, например /opt/garnet/cli.

  3. Укажите свои значения для переменных среды в файле конфигурации:

  • откройте файл конфигурации Docker в режиме редактирования /opt/garnet/cli/.env

Задайте свои настройки Garnet.Cli:

{IAS_DB_HOST} – хост БД источника;

{IAS_DB_PORT} - порт БД источника;

{IAS_DB_NAME} - имя БД источника;

{IAS_DB_LOGIN} – логин БД источника;

{IAS_DB_PASSWORD} – пароль БД источника;

  • сохраните изменения в файле конфигурации /opt/garnet/cli/.env

  • дополнительно можно настроить время автоматического обновления. Для этого следует внести изменения в файл /opt/garnet/cli/cron/scripts/startup.sh в секции 0       0       *       *       2-6

Данная запись представляет из себя описание в формате cron-tab и означает, что обновление будет запускаться в 00:00 каждый день со вторника по субботу.

минуты             часы            дни     месяца          дни_недели

  1. В файле /opt/GarnetCli/cli/oksObjKindResidentialMatching.json укажите текстовое значение вида объекта у слоя «Здания и строения», которое нужно считать жилым. Файл предварительно настроен и имеет вид:

[
   "Многоквартирный дом",
   "кж",
   "ж",
   "дж",
   "смж",
   "ижс",
   "мкд",
   "жил",
   "жилой",
   "Жилой",
   "Жилой ",
   "жилой дом",
   "жилой дом ",
   "Жилой дом",
   "ЖИЛОЙ ДОМ",
   "жилой дом (ИЖС)",
   "Жилой дом (ИЖС)",
   "жилой массив",
   "индивидуальный жилой дом",
   "Индивидуальный жилой дом",
   "Индивидуальные жилые дома",
   "многоквартирный жилой дом",
   "Многоквартирный жилой дом",
   "Многоквартирные жилые дома",
   "жилое",
   "Жилое",
   "Жилое; ",
   "жилое здание",
   "жилое здание ",
   "Жилое здание",
   "Жилое строение",
   "жилой дом со встроенным помещением",
   "жилой со встроенными помещениями",
   "жилое здание со встроенным помещением"
]

Значение должно указываться с учетом регистра и пробелов по полному совпадению с записью в Geometa.

  1. Установите 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 и настройки вида:

../../../_images/geoserver.png

Cледует в разделе настройки кеширования сделать её геосеткой по умолчанию:

../../../_images/cash.png

Важно

Для корректной работы приложения в части формирования отчётов необходим доступ в интернет, так как в формируемых изображениях земельных участков используются подложки, получаемые от внешних сервисов, расположенных в сети интернет.

Формирование карты#

Для корректной работы необходимо, чтобы в Конфигураторе Системы были опубликованы следующие слои:

Наименование слоя

Объект метаданных (алиас)

Объекты образования и науки

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) необходимо наличие метаданных подсистемы «ЦИМ» и подсистемы «Концепция пространственного развития». Подсистема ЦИМ требуется для того, чтобы подключить объекты слоев систем коммунальной инфраструктуры, которые участвуют в проверках, реализованных на портале.

Конфигурирование#

Правила загрузки данных#

1. Необходимо загружать только те объекты, которые находятся в границах проекта. Границы проекта задаются в mapConfig.json файле.
2. Необходимо загружать только актуальные объекты.

Загружаются объекты по следующим правилам:

2.a. Объекты, у которых в [Набор данных] (DmdInfoSet) для документа [Документ, определяющий статус данных] (Document) в поле [Статус] (Status) значение равно Действующий (approved).
2.b. Объекты, у которых в [Набор данных] (DmdInfoSet) для документа [Документ, определяющий статус данных] (Document) в поле [Статус] (Status) значение не задано.
2.c. Объекты, у которых [Набор данных] (DmdInfoSet) не задан.
3. Если в mapConfig.json портала для объектов слоя задана фильтрация по набору данных (инфосет), то на портал должны перегружаться только объекты с таким набором данных (инфосет).
4. Если ЗУ ЕГРН пересекаются с ЗУ ПМ, то на портал будут загружены ЗУ ЕГРН.
5. Если «Здания жилые (GeoUrbanBuildResPPMPr)», «Строения, сооружения нежилые (GeoUrbanBuildUninhabPPMPr)», «Здания общественные (GeoUrbanBuildPublicPPMPr)»» пересекаются с «Здания и строения (GeoAdrCapitalBuild)», то при пересечении предпочтение отдается «Здания и строения (GeoAdrCapitalBuild)», которые будут отображаться на портале.

Настройка центра карты#

Параметр, используемый в расчете расстояния от объекта до центра города, задается в конфигурационном файле 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) вычитаем:

  1. Леса V_GEO_URBAN_10_FOREST

  2. Природно-рекреационный комплекс слой V_GEO_KAZAN_RECREAT_COMPLEX

  3. Охранная зона особо охраняемых природных территорий V_GEO_ZOR_NATURE_PROTECTION_ZONE_EXIST

  4. Зоны кладбищ ЗОР V_GEO_KZOR_CEMETERY_ZONE

  5. Береговые полосы V_GEO_ZOR_FORESHORE

  6. Дороги, мосты (площадные) V_GEO_TOPO_ROAD

  7. Красные линии площадные V_GEO_URBAN_RED_LINE_BOUND_PPM_EXIST

  8. ЗУ ЕГРН V_GEO_GKN_PARCEL_EXIST

Пример:

"substractGeometry": [
      {
        "_type": "DbTable",
        "description": "Леса",
        "name": "V_GEO_URBAN_10_FOREST"
      },
      {
        "_type": "DbTable",
        "description": "Природно-рекреационный комплекс",
        "name": "V_GEO_KAZAN_RECREAT_COMPLEX"
      },
  1. Подзоны с индексом 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 необходимо установить на серверах открытого и закрытого контуров.

Шаги по установке средств:

  1. Подключитесь к серверу, на котором будет установлен Garnet или Garnet.Cli. Например, средствами WinSCP

  2. Выполните установку Docker