Доброго времени суток господа, буквально недавно передо мной поставили задачу реализовать ГИС которая бы удовлетворяла требованиям предприятия.

Существует конечно масса платных аналогов и приложений как самостоятельных ГИС приложений, так и WEB ориентированных продуктов. Наиболее известные сейчас на территории   СНГ это ARCGIS и Панорама, но стоимость данных решений само собой не доступна всем.

Проведя двух месячный анализ реализации opensource решения для ГИС, мы перебрали разного рода решения и Mapserver + Qgis, и Geoserver + Qgis, так же были решения QGIS server (или clloud) + Qgis. вы наверняка заметили, что во всех вариантах фигурирует QGIS — выбор полностью описывать не буду, но скажу сразу из бесплатных программных комплексов по работе с картами и слоями это один из наиболее достойных (при всем этом QGIS еще и мультиплатформенный).

 

Проведя все эти изыскания и неоднократные опыты, установки, и тестовые задачи, пришли к выводу, что по функционалу, стоимости, управляемости и дружественному интерфейсу наиболее интересным решением выступает молодой , но весьма перспективный проект NEXTGIS.

В данном материале мы рассмотрим разворачивание NEXTGIS WEB Server (серверное решение для ГИС на основе Opensource решений).

Итак для подготовки задуманного «омлета» нам понадобится:

Ubuntu server 14.04 trusty ( на более свежей версии не всегда корректно удавалось собрать пакеты в виду изменения некоторых путей системы)

Подключение к интернету

Устанавливаем UBUNTU 14 — описывать не буду — на просторах сети предостаточно вариантов установки по умолчанию системы, единственное, что отмечу из предлагаемых по умолчанию при установке компонентов установим ssh server.

После установки сервер рекомендуется обновить sudo apt-get upgrade

sudo apt-get install software-properties-common python-software-properties

Извечной проблемой убунту является проблемная локализация, для корректной установки продукта рекомендуем внести некоторые правки в конфиш локали:

sudo nano /etc/default/locale

LANG=»ru_RU.UTF-8″
LANGUAGE=»ru_RU.UTF-8″
LC_ALL=»ru_RU.UTF-8″
LC_CTYPE=»ru_RU.UTF-8″

Для установки продукта нам понадобится база данных postgresql  от версии 9.3, я бы рекомендовал 9.4, на 9.5 тестирование не проводилось. Для корректной установки необходимо добавить в репозитории, репозиторий от Postgresql (почему не из стандартных исходников Ubuntu? Потому, что там ставится версия 9.3 под кластерные решения, да и исправления ошибок базы самые актуальные лежат у разработчиков)

sudo nano /etc/apt/sources.list

Добавляем репозиторий deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main в конец файла, сохраняем.

ставим ключ и обновляем wget —quiet -O — https://www.postgresql.org/media/keys/ACCC4CF8.asc | \ sudo apt-key add — sudo apt-get update 

Непосредственно устанавливаем базу: sudo apt-get install postgresql-9.4

Создаем пользователя, который будет упомянут в качестве database.user в config.ini (см. далее):

sudo -u postgres createuser ngw_admin -P -e  

после ввода пароля три раза говорим ‘n’. Создаем базу, в которую будет развернут NGW, имя базы должно быть таким же как и database.name в config.ini (см. далее):

sudo -u postgres createdb -O ngw_admin —encoding=UTF8 db_ngw

sudo nano /etc/postgresql/9.4/main/pg_hba.conf  

Отредактируем файл таким образом, чтобы в нём присутствовали следующие строки (исправим метод аутентификации на md5, если указан иной):

# IPv4 local connections: host all all 127.0.0.1/32 md5

# IPv6 local connections: host all all ::1/128 md5  

Перезагружаем базу:

sudo service postgresql restart

Установить PostGIS: (формат таблиц базы данных для работы с геометрией для ГИС)

sudo apt-cache search postgis

В полученном списке найдите пакет, подходящий для вашей версии PostgreSQL, его имя должно иметь вид postgresql-{version}-postgis-{version} и установите его:

sudo apt-get install postgresql-9.4-postgis-2.1

sudo -u postgres psql -d db_ngw -c ‘CREATE EXTENSION postgis;’

sudo -u postgres psql -d db_ngw -c ‘ALTER TABLE geometry_columns OWNER TO ngw_admin;’

sudo -u postgres psql -d db_ngw -c ‘ALTER TABLE spatial_ref_sys OWNER TO ngw_admin;’

sudo -u postgres psql -d db_ngw -c ‘ALTER TABLE geography_columns OWNER TO ngw_admin;’  

 После этих операций будут созданы БД PostgreSQL с установленным в ней PostGIS и пользователь БД, который станет ее владельцем, а также таблиц geometry_columns, georgaphy_columns, spatial_ref_sys.

Убедитесь, что функции PostGIS появились в базе:

psql -h localhost -d db_ngw -U ngw_admin -c «SELECT PostGIS_Full_Version();»

Если вы разворачиваете систему на чистом сервере, и вам надо сделать ещё одну базу PostGIS для хранения данных, то можно включить доступ к ней из сети ( в моем случае я сделал это вне зависимости от количества баз для удобства работы с проектами)

sudo su — postgres nano /etc/postgresql/9.4/main/pg_hba.conf 

добавляем в конец строку:

host all all 192.168.0.0/16 md5 маска 192.168.0.0/16 (разрешает доступ к БД со всех IP адресов начинающихся с «192.168» )

nano /etc/postgresql/9.4/main/postgresql.conf

делаем строку listen_addresses=’*’, и расскоментируем её.

sudo service postgresql restart

 После проведенных операций рекомендую провести еще раз

sudo apt-get upgrade

sudo apt-get autoclean

sudo apt-get autoremove

и закоментировать репозиторий Postgre в sources файле

Далее нам необходимо подготовить установку базового ПО:

 sudo apt-get install python-pip

(но лучше поставить последнюю версию от разработчика — для этого выполните следующие команды:)

wget https://bootstrap.pypa.io/get-pip.py

python get-pip.py

Далее ставим виртуальную среду

sudo pip install virtualenv

 Доп компоненты:

sudo apt-get install python-mapscript python-dev git libgdal-dev python-dev \ g++ libxml2-dev libxslt1-dev gdal-bin libgeos-dev zlib1g-dev libjpeg-turbo8-dev

Подготовка к установке Nextgis Web;

mkdir -p ~/ngw/{data,upload,datastore}

переходим в каталог: cd ~/ngw 

Клонируем репозиторий с github:

git clone https://github.com/nextgis/nextgisweb.git

 Создаем виртуальное окружение virtualenv в папке ~/ngw/env (папка создастся сама после выполнения команды):

virtualenv —no-site-packages env

Устанавливаем пакет NextGIS Web в режиме разработки, при этом будут установлены все необходимые пакеты:

env/bin/pip install -e ./nextgisweb  (если будут ошибки попробуйте повторить команду через sudo)

Для работы модуля нужен MapScript, который в виртуальное окружение стандартным способом не ставится, поэтому установим его вручную. Устанавливаем необходимый пакет в систему:

sudo apt-get install python-mapscript

После чего копируем необходимые файлы в директорию виртуального окружения, используемого для работы NextGIS Web. На этом шаге возможны как минимум 2 варианта в зависимости от того, в каком виде устанавливается пакет python-mapscript в систему. Это зависит от используемого дистрибутива. Для копирования системного MapScript в виртуальное окружение (директория env) можно воспользоваться следующими командами:

mkdir env/lib/python2.7/site-packages/mapscript.egg

cp /usr/lib/python2.7/dist-packages/*mapscript* \ env/lib/python2.7/site-packages/mapscript.egg

echo «./mapscript.egg» > env/lib/python2.7/site-packages/mapscript.pth

env/bin/pip freeze (выполним проверку — не пугайтесь большому количеству красных строк — просто не все еще установлено)

Вы получите сообщение об ошибке: «Missing ‘Version:’ header and/or PKG-INFO file», mapscript [unknown version]

 Для её исправления создаем файл PKG-INFO:

mkdir env/lib/python2.7/site-packages/mapscript.egg/EGG-INFO

touch env/lib/python2.7/site-packages/mapscript.egg/EGG-INFO/PKG-INFO

И указываем в нём используемую версию MapScript:

echo `python -c «import mapscript; print ‘Version: %s’ % mapscript.MS_VERSION»` \ > env/lib/python2.7/site-packages/mapscript.egg/EGG-INFO/PKG-INFO

Установка NextGIS Web MapServer

Клонируем репозиторий:

git clone https://github.com/nextgis/nextgisweb_mapserver.git

Устанавливаем пакет в режиме разработки:

env/bin/pip install -e ./nextgisweb_mapserver

Еще раз выполните команду:

env/bin/pip freeze (чтобы убедиться, что ошибок нет.  — если ошибки есть значит либо установили без прав, либо что -то сделали не так)

Конфигурационный файл с параметрами по умолчанию может быть создан при помощи команды nextgisweb-config:

env/bin/nextgisweb-config > config.ini  

В результате будет создан конфигурационный файл config.ini. В этот текстовый файл нужно внести изменения в соответствии со своим окружением. Назначение параметров указано в комментариях. Имя и пароль пользователя, а так же путь к директории для хранения данных берутся из команд выше. Необходимо убедиться, что правильно указаны следующие параметры:

Пример config

[file_upload]

# Директория для временного хранения загруженных файлов

# path =

[pyramid]

# Ключ, используемый для шифрования cookies (обязательно) secret =

# HTML-справка help_page = /home/trolleway/ngw/help.htm

# Логотип системы # logo =

# Значок для избранного # favicon =

# Ссылка для редиректа, при заходе на /

# home_url =

[core]

# Название системы system.name = NextGIS Web

# Полное название системы system.full_name = Демонстрационная веб-гис

# Имя сервера БД database.host = localhost

# Имя БД на сервере database.name = db_ngw

# Имя пользователя БД database.user = ngw_admin

# Пароль пользователя БД database.password =

# Проверять подключение при запуске

# database.check_at_startup =

# Не загружать перечисленные пакеты

# packages.ignore =

# Не загружать перечисленные компоненты

# components.ignore =

#Директория для хранения данных sdir = /home/trolleway/ngw/data

# Локаль, используемая по-умолчанию locale.default = ru [file_storage]

# Директория для хранения файлов

# path = [feature_layer]

# Показывать атрибуты в идентификации

# identify.attributes = [webmap]

# Файл с описанием базовых слоёв

# basemaps =

# Bing Maps API-ключ

# bing_apikey =

# Чувствительность идентификации

# identify_radius =

# Ширина всплывающего окна # popup_width =

# Высота всплывающего окна

# popup_height = [wmsclient]

[mapserver]

# Список шрифтов в формате MAPFILE FONTSET

# fontset = 

Для генерации ключа для конфигурационного файла config.ini можно воспользоваться командой:

openssl rand -base64 16  

Предупреждение 1. В некоторых случаях необходимо указывать абсолютные пути к папкам, параметр python %(here)s не во всех случаях действует. 2. Не допускается, что бы перед именем переменной в конфигурационном файле стояли пробелы.  

Так же для работы команд pserve или pshell потребуется конфигурационный файл paster, например development.ini.

nano production.ini 

Содержание:

[app:main]

use = egg:nextgisweb

# путь к основному конфигурационному файлу

config = %(here)s/config.ini

# путь к конфигурационному файлу библиотеки logging

# logging = %(here)s/logging.ini

# полезные для отладки параметры

# pyramid.reload_templates = true

# pyramid.includes = pyramid_debugtoolbar

[server:main]

use = egg:waitress#main

host = 0.0.0.0

port = 6543

Если предполагается работа в сети без доступа к Интернету, то в файле /nextgisweb/nextgisweb/webmap/basemaps.json нужно удалить записи про подложки Google.

Интернационализация и локализация Поскольку скомпилированные файлы переводов не хранятся внутри системы контроля версий, перед запуском необходимо их скомпилировать (отдельно для каждого пакета), в противном случае весь административный интерфейс будет на английском:

env/bin/nextgisweb-i18n —package nextgisweb compile

env/bin/nextgisweb-i18n —package nextgisweb_mapserver compile

Для установки локализации по-умолчанию для русского языка необходимо в конфигурационный файл (например, config.ini) добавить в секцию core следующую строку:

locale.default = ru

Тогда при первом входе интерфейс будет на русском.

Инициализация БД

Если по умолчанию планируется использовать в интерфейсе язык, отличный от английского, то перед тем как выполнять первоначальную инициализацию БД убедитесь, что вы скомпилировали файлы переводов и что в настройке locale.default компонента core в конфигурационном файле config.ini выставлен нужный язык, в противном случае ряд строк будет отображаться на английском даже при принудительной смене языка в административном интерфейсе.

Инициализация БД выполняется следующим образом:

env/bin/nextgisweb —config config.ini initialize_db

В некоторых случаях, например при обновлении, может потребоваться удалить все существующие в БД данные и инициализировать БД повторно:

env/bin/nextgisweb —config config.ini initialize_db —drop  

Запуск продукта и оригинал инструкции без наших коментариев

На этом основная часть установки окончена, но существует еще один продукт для данного приложения который позволит устанавливать на карту стили QGIS в том числе и с SVG иконками.

NextGISWeb QGIS 

Для установки данного продукта рекомендуется предварительно установить последнюю версию QGIS на сервер.

Для установки QGIS (версия Essen на момент написания статьи) необходимо добавить соответствующие репозитории, так как в Ubuntu только версия 2.8 на момент написания статьи.

 Добавляем репозитории QGIS

sudo nano /etc/apt/sources.list

deb http://qgis.org/ubuntugis trusty main

deb-src http://qgis.org/ubuntugis trusty main

wget -O — http://qgis.org/downloads/qgis-2015.gpg.key | gpg —import gpg —fingerprint 3FF5FFCAD71472C4

gpg —export —armor 3FF5FFCAD71472C4 | sudo apt-key add —

sudo apt-key adv —keyserver keyserver.ubuntu.com —recv-key 3FF5FFCAD71472C4

sudo apt-get update

sudo apt-get install qgis

Установка NextGISWeb QGIS

 $ cd /path/to/ngw

$ git clone git@github.com:nextgis/nextgisweb_qgis.git (может не дать скачать тогда выкачиваем при помощи wget https://github.com/nextgis/nextgisweb_qgis.git)
$ source env/bin/activate

$ pip install -e nextgisweb_qgis/

# DST should point to virtualenv site-packages directory.

# If it is point to another place you have to modify DST definition.

# For example: DST=`python -c «import sys; print sys.path[-2]»`

$ DST=`python -c «import sys; print sys.path[-1]»`

$ echo $DST $ cp `/usr/bin/python -c «import sip; print sip.__file__»` $DST

$ cp -r `/usr/bin/python -c «import PyQt4, os.path; print os.path.split(PyQt4.__file__)[0]»` $DST

$ cp -r `/usr/bin/python -c «import qgis, os.path; print os.path.split(qgis.__file__)[0]»`

$DST # Only for latest QGIS version (not for 2.8)

$ export PYTHONPATH=$PYTHONPATH:/usr/share/qgis/python

$ cp -r `/usr/bin/python -c «import PyQt, os.path; print os.path.split(PyQt.__file__)[0]»` $DST

В pruduction.ini добавляем

[uwsgi]

lazy-apps = True

 If you get an error message ERROR: Auth db directory path could not be created then you have to specify directory where an existing qgis-auth.db is located or created if not present. This directory needs to be writeable by uwsgi process user. For example:

[uwsgi]

env = QGIS_AUTH_DB_DIR_PATH=/var/www

env/bin/nextgisweb —config config.ini initialize_db

Инструкция по установке от разработчика сборки

Для создания слоев к картам рекомендуем использовать QGIS

Подытожив хотелось бы сказать что работа проделанная Российскими разработчиками заслуживает уважения.

Для данного продукта так же существуют дополнительные программные продукты, такие как:

  • Мобильный клиент )для сбора информации с полей и обратно)
  • ПО для создания форм для мобильного клиента
  • Своя сборка QGIS (nextgis)
  • И иные продукты которые вы можете найти как на сайте разработчика так в их гитхаб канале.