Qgis + postgis + postgresql на centos. настройка хранения данных qgis на сервере баз данных

Установка PostGIS, pgRouting и QuantumGIS в Ubuntu 12.04

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

И со времен все того же университета все эти ГИС преследуют меня постоянно 🙂 На одном из предыдущих мест работы мне приходилось работать со связкой MapInfo + Oracle. Теперь же пришлось испытать опенсорсные проекты QuantumGIS + PostGIS.

Начнем с установки всего этого добра.Итак по порядку.

QuantumGIS — по сути бесплатный аналог MapInfo или ArcGIS. Подробнее в википедии

PostGIS — расширение для PostgreSQL, позволяющее хранить и обрабатывать геопространственные данные. Это означает, что PostGIS сам по себе работать не будет. Ему нужна PostgreSQL. На сегодняшний день лучше ставить PostgreSQL 9.1 (посмотреть как установить и настроить можно в моей статье Установка и настройка PostgreSQL 9.1 в Ubuntu).Соответственно все остальные компоненты нужно ставить с учетом версии PostgreSQL

pgRouting — набор методов для поиска кратчайшего пути по таким алгоритмам как Дейкстры и A*. Более подробно с возможностями можно ознакомиться на сайте проекта

Для тех, кто работает с ГИС в убунту существует хороший репозиторий UbuntuGIS. Добавить его несложно:

sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable
sudo apt-get update

В этом репозитории нас интересуют PostGIS и QuantumGIS.

sudo apt-get install postgresql-9.1-postgis
sudo apt-get install qgis

PostGIS устанавливается как расширение (extension) в PostgreSQL. Поэтому для того чтобы создать базу данных, предназначенную для хранения и обработки геопространственных данных необходимо в имеющуюся базу добавить расширение postgis.

Делается это в pgAdmin. Найдите в дереве свою базу данных, а в ней узел Extensions и добавьте туда расширение postgis.

Если такого расширения нет, то попробуйте обновить ветку с вашей базой данных, а если не поможет, то отсоединиться и присоединиться к серверу заново.

Установка pgRouting

pgRouting берем из репозитория команды Georepublic.

sudo add-apt-repository ppa:georepublic/pgroutingsudo apt-get update

sudo apt-get install postgresql-9.1-pgrouting

На сим установка pgRouting не закончилась. Необходимо в определенной последовательности выполнить специальные скрипты.Все скрипты находятся по пути /usr/share/postlbs/

Последовательность следующая:

  1. routing_core.sql
  2. routing_core_wrappers.sql
  3. routing_topology.sql
  4. matching.sql

Можно их открыть в pgAdmin и выполнить там. Заодно можно ознакомиться с содержимым этих скриптов.
Тем, кто слишком крут для графических оболочек 😉 необходимо выполнить следующую последовательность команд:

psql -U postgres -f /usr/share/postlbs/routing_core.sqlpsql -U postgres -f /usr/share/postlbs/routing_core_wrappers.sqlpsql -U postgres -f /usr/share/postlbs/routing_topology.sql

psql -U postgres -f /usr/share/postlbs/matching.sql

При выполнении этих команд можно отхватить ошибку

psql: FATAL: Peer authentication failed for user «postgres»

Это означает что вы не можете выполнить эти команды на сервере, потому что у вас недостаточно прав. Тут может возникнуть некоторое замешательство: вроде SQL-команда запускается от имени администратора postgres, а в то же время не достаточно прав.

Все дело в том, что сама команда psql запускается от имени вашего текущего пользователя, а он, в свою очередь, не может даже соединиться с PostgreSQL (куда уж там до выполнения каких-либо команд).

Из подобной ситуации есть выход — запустить psql от имени пользователя postgres

sudo -u postgres psql -U postgres -f /usr/share/postlbs/routing_core.sql

Остальные скрипты запускаются аналогично.
Ну вот и все. В будущем попробую написать пост про то, как все это дело использовать при поиске наикратчайшего пути (тем более, что русской документации по этому очень сложно найти)

Источник: https://fomich0ff.blogspot.com/2012/10/postgis-pgrouting-quantumgis-ubuntu-1204.html

PostgreSQL

18.3. Запуск сервера баз данных

18.3.1. Сбои при запуске сервера18.3.2. Проблемы с подключениями клиентов

Чтобы кто-либо смог обратиться к базе данных, необходимо сначала запустить сервер баз данных. Программа сервера называется postgres.

Для работы программа postgres должна знать, где найти данные, которые она будет использовать. Указать это местоположение позволяет параметр -D.

Таким образом, проще всего запустить сервер, выполнив команду:
$ postgres -D /usr/local/pgsql/data

в результате которой сервер продолжит работу в качестве процесса переднего плана. Запускать эту команду следует под именем учётной записи PostgreSQL. Без параметра -D сервер попытается использовать каталог данных, указанный в переменной окружения PGDATA. Если и эта переменная не определена, сервер не будет запущен.

Однако обычно лучше запускать postgres в фоновом режиме. Для этого можно применить обычный синтаксис, принятый в оболочке Unix:
$ postgres -D /usr/local/pgsql/data >logfile 2>&1 &

Важно где-либо сохранять информацию, которую выводит сервер в каналы stdout и stderr, как показано выше. Это полезно и для целей аудита, и для диагностики проблем. (Более глубоко работа с файлами журналов рассматривается в Разделе 24.3.)

Программа postgres также принимает несколько других параметров командной строки. За дополнительными сведениями обратитесь к справочной странице postgres и к следующей Главе 19.

Такой вариант запуска довольно быстро может оказаться неудобным. Поэтому для упрощения подобных задач предлагается вспомогательная программа pg_ctl. Например:pg_ctl start -l logfile

запустит сервер в фоновом режиме и направит выводимые сообщения сервера в указанный файл журнала. Параметр -D для неё имеет то же значение, что и для программы postgres. С помощью pg_ctl также можно остановить сервер.

Обычно возникает желание, чтобы сервер баз данных сам запускался при загрузке операционной системы. Скрипты автозапуска для разных систем разные, но в составе PostgreSQL предлагается несколько типовых скриптов в каталоге contrib/start-scripts. Для установки такого скрипта в систему требуются права root.

В различных системах приняты разные соглашения о порядке запуска служб в процессе загрузки. Во многих системах для этого используется файл /etc/rc.local или /etc/rc.d/rc.local. В других применяются каталоги init.d или rc.d.

Однако при любом варианте запускаться сервер должен от имени пользователя PostgreSQL, но не root или какого-либо другого пользователя. Поэтому команду запуска обычно следует записывать в форме su postgres -c '…'.

Например:su postgres -c 'pg_ctl start -D /usr/local/pgsql/data -l serverlog'

Ниже приведены более конкретные предложения для нескольких основных ОС. (Вместо указанных нами шаблонных значений необходимо подставить правильный путь к каталогу данных и фактическое имя пользователя.)

  • Для запуска во FreeBSD воспользуйтесь файлом contrib/start-scripts/freebsd в дереве исходного кода PostgreSQL.
  • В OpenBSD, добавьте в файл /etc/rc.local следующие строки:if [ -x /usr/local/pgsql/bin/pg_ctl -a -x /usr/local/pgsql/bin/postgres ]; then su -l postgres -c '/usr/local/pgsql/bin/pg_ctl start -s -l /var/postgresql/log -D /usr/local/pgsql/data' echo -n ' postgresql'
    fi
  • В системах Linux вы можете либо добавить/usr/local/pgsql/bin/pg_ctl start -l logfile -D /usr/local/pgsql/dataв /etc/rc.d/rc.local или в /etc/rc.local, либо воспользоваться файлом contrib/start-scripts/linux в дереве исходного кода PostgreSQL.Используя systemd, вы можете применить следующий файл описания службы (например, /etc/systemd/system/postgresql.service):[Unit]
    Description=PostgreSQL database server
    Documentation=man:postgres(1) [Service]
    Type=notify
    User=postgres
    ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=mixed
    KillSignal=SIGINT
    TimeoutSec=0 [Install]
    WantedBy=multi-user.targetДля использования Type=notify требуется, чтобы сервер был скомпилирован с указанием configure —with-systemd.Особого внимания заслуживает значение тайм-аута. На момент написания этой документации по умолчанию в systemd принят тайм-аут 90 секунд, так что процесс, не сообщивший о своей готовности за это время, будет уничтожен. Но серверу PostgreSQL при запуске может потребоваться выполнить восстановление после сбоя, так что переход в состояние готовности может занять гораздо больше времени. Предлагаемое значение 0 отключает логику тайм-аута.
  • В NetBSD можно использовать скрипт запуска для FreeBSD или для Linux, в зависимости от предпочтений.
  • В Solaris, создайте файл с именем /etc/init.d/postgresql, содержащий следующую стоку:su — postgres -c «/usr/local/pgsql/bin/pg_ctl start -l logfile -D /usr/local/pgsql/data»Затем создайте символическую ссылку на него в каталоге /etc/rc3.d с именем S99postgresql.

Когда сервер работает, идентификатор его процесса (PID) сохраняется в файле postmaster.pid в каталоге данных. Это позволяет исключить запуск нескольких экземпляров сервера с одним каталогом данных, а также может быть полезно для выключения сервера.

18.3.1. Сбои при запуске сервера

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

Ниже мы рассмотрим некоторые из наиболее частых сообщений об ошибках более подробно.
LOG: could not bind IPv4 socket: Address already in use
HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry.

FATAL: could not create TCP/IP listen socket

Это обычно означает именно то, что написано: вы пытаетесь запустить сервер на том же порту, на котором уже работает другой. Однако, если сообщение ядра не Адрес уже используется или подобное, возможна и другая проблема.

Например, при попытке запустить сервер с номером зарезервированного порта будут выданы такие сообщения:
$ postgres -p 666
LOG: could not bind IPv4 socket: Permission denied
HINT: Is another postmaster already running on port 666? If not, wait a few seconds and retry.
FATAL: could not create TCP/IP listen socket

Следующее сообщение:
FATAL: could not create shared memory segment: Invalid argument
DETAIL: Failed system call was shmget(key=5440001, size=4011376640, 03600).

может означать, что установленный для вашего ядра предельный размер разделяемой памяти слишком мал для рабочей области, которую пытается создать PostgreSQL (в данном примере 4011376640 байт). Возможно также, что в вашем ядре вообще отсутствует поддержка разделяемой памяти в стиле System-V.

В качестве временного решения можно попытаться запустить сервер с меньшим числом буферов (shared_buffers), но в итоге вам, скорее всего, придётся переконфигурировать ядро и увеличить допустимый размер разделяемой памяти.

Вы также можете увидеть это сообщение при попытке запустить несколько серверов на одном компьютере, если запрошенный ими объём разделяемой памяти в сумме превышает этот предел.

Сообщение:
FATAL: could not create semaphores: No space left on device
DETAIL: Failed system call was semget(5440126, 17, 03600).

не означает, что у вас закончилось место на диске. Это значит, что установленное в вашем ядре предельное число семафоров System V меньше, чем количество семафоров, которое пытается создать PostgreSQL.

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

Если вы получаете ошибку «illegal system call» (неверный системный вызов), то, вероятнее всего, ваше ядро вовсе не поддерживает разделяемую память или семафоры. В этом случае, вам остаётся только переконфигурировать ядро и включить их поддержку.

Настройка средств IPC в стиле System V описывается в Подразделе 18.4.1.

18.3.2. Проблемы с подключениями клиентов

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

Описание ошибок, отличных от описанных ниже, следует искать в документации соответствующего клиентского приложения.
psql: could not connect to server: Connection refused Is the server running on host «server.joe.

com» and accepting TCP/IP connections on port 5432?

Это общая проблема «я не могу найти сервер и начать взаимодействие с ним». Показанное выше сообщение говорит о попытке установить подключение по TCP/IP. Очень часто объясняется это тем, что сервер просто забыли настроить для работы по протоколу TCP/IP.

Кроме того, при попытке установить подключение к локальному серверу через Unix-сокет можно получить такое сообщение:
psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket «/tmp/.s.PGSQL.5432»?

Путь в последней строке помогает понять, к правильному ли адресу пытается подключиться клиент. Если сервер на самом деле не принимает подключения по этому адресу, обычно выдаётся сообщение ядра Connection refused (В соединении отказано) или No such file or directory (Нет такого файла или каталога), приведённое выше.

(Важно понимать, что Connection refused в данном контексте не означает, что сервер получил запрос на подключение и отверг его. В этом случае были бы выданы другие сообщения, например, показанные в Разделе 20.4.

) Другие сообщения об ошибках, например Connection timed out (Тайм-аут соединения) могут сигнализировать о более фундаментальных проблемах, например, о нарушениях сетевых соединений.

Источник: https://postgrespro.ru/docs/postgresql/9.6/server-start

Установка и настройка PostgreSQL для 1С:Предприятие

Установка PostgreSQL 9.6

Устанавливать будем сборку от компании Postgres Professional. На странице с версией для 1С:Предприятие найдем информацию об установке на CentOS 7 свежей версии PostgreSQL.

Подключим репозитории и установим PostgreSQL 9.6:

sudo rpm -ivh http://1c.postgrespro.ru/keys/postgrespro-1c-centos96.noarch.rpm sudo yum makecache sudo yum install postgresql-pro-1c-9.6

Базовая настройка PostgreSQL

Инициализируем служебные базы данных с русской локализацией:

su postgres /usr/pgsql-9.6/bin/initdb -D /var/lib/pgsql/9.6/data —locale=ru_RU.UTF-8 exit service postgresql-9.6 initdb

Запускаем службу PostgreSQL и добавляем его в автозагрузку:

systemctl enable postgresql-9.6 systemctl start postgresql-9.6 systemctl status postgresql-9.6

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

Читайте также:  Настройка веб-серверов. обслуживание веб-серверов. организация сервера для размещения сайтов

su — postgres psql ALTER USER postgres WITH ENCRYPTED PASSWORD 'yourpassword'; q exit

Для возможности пользователю postgres авторизовываться по паролю отредактируем файл pg_hba.conf:

mcedit /var/lib/pgsql/9.6/data/pg_hba.conf

в открывшемся файле раскомментируем и изменим строки:

host all all 127.0.0.1/32 ident на host all all 127.0.0.1/32 md5

host all all 0.0.0.0/0 ident на host all all 0.0.0.0/0 md5

Оптимизация настроек PostgreSQL (postgresql.conf) для 1С:Предприятие

Здесь будут настройки для PostgreSQL, работающей в виртуальной машине ESXi 6.5.

Ресурсы выделенные для ВМ:

процессор — 8 vCPU;

память — 48 GB;

диск для ОС — 50 GB на LUN аппаратном RAID1 из SAS HDD;

диск для БД — 170 GB на программном RAID1 из SSD

диск для логов — 100 GB на программном RAID1 из SSD

Для редактирования настроек выполним команду:

mcedit /var/lib/pgsql/9.6/data/postgresql.conf

Закомментированные параметры, которые будем изменять необходимо активировать.

Процессор

autovacuum_max_workers = 4

ssl = off

Память

shared_buffers = 12GB

temp_buffers = 256MB

work_mem = 64MB

maintenance_work_mem = 2GB

effective_cache_size = 36GB

Диски

effective_io_concurrency = 5

random_page_cost = 1.3

autovacuum = on

autovacuum_naptime = 20s

bgwriter_delay = 20ms

bgwriter_lru_multiplier = 4.0

bgwriter_lru_maxpages = 400

synchronous_commit = off

wal_keep_segments = 256

wal_buffers = 16MB

default_statistics_target = 1000

checkpoint_completion_target = 0.9

min_wal_size = 4G 
max_wal_size = 8G 

fsync = on

row_security = off 

enable_nestloop = off

Блокировки

max_locks_per_transaction = 256

Настройки под платформу 1С

standard_conforming_strings = off

escape_string_warning = off

Настройка безопасности

Сделаем так, чтобы сервер PostgreSQL был виден только для сервера 1С: Предприятие, установленного на этой же машине.

listen_addresses = ‘localhost’

Хранение базы данных

PostgreSQL как и почти любая СУБД критична к дисковой подсистеме, поэтому для повышения быстродействия СУБД разместим систему PostgreSQL, логи и сами базы на разные диски.

Останавливаем сервер

 systemctl stop postgresql-9.6

Переносим логи на созданный RAID1 из 120GB SSD:

mv /var/lib/pgsql/9.6/data/pg_xlog /raid120 mv /var/lib/pgsql/9.6/data/pg_clog /raid120 mv /var/lib/pgsql/9.6/data/pg_log /raid120

Создаем символьные ссылки:

ln -s /raid120/pg_xlog /var/lib/pgsql/9.6/data/pg_xlog ln -s /raid120/pg_clog /var/lib/pgsql/9.6/data/pg_clog ln -s /raid120/pg_log /var/lib/pgsql/9.6/data/pg_log

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

mv /var/lib/pgsql/9.6/data/base /raid200

и создадим символьную ссылку:

ln -s /raid200/base /var/lib/pgsql/9.6/data/base

запустим сервер и проверим его статус

systemctl start postgresql-9.6 systemctl status postgresql-9.6

Источник: http://kazhaev.ru/postgresql/ustanovka-i-nastrojka-postgresql-dlya-1s-predpriyatie/

Установка PostgreSQL+PostGIS

    Делали в универе командный курсовик и нужно было использовать PostGIS. Дело в том, что курсовик был взят не из списка стандартных заданий, а являлся частью одного разрабатываемого мной проекта. Так как курсовик командный, то не удивительно, что у членов команды ОС отличались.

Я, конечно, не говорю, что в случае командной работы у всех должны быть разные ОС, но в нашем случае вышло именно так. В конечный список ОС попали следующие: Windows XP, Windows 7, Ubuntu и LinuxMint. Принципиальных различий в процессе установки нет. Что XP — винда, что семерка — винда.

Что Ubuntu — GNU/Linux, что LinuxMint — GNU/Linux, еще и основанная на Ubuntu. И там, и там можно ставить как с бинарников, так и с исходников. К тому же в unix-подобных системах есть репозитории.

В процессе работы я еще мучил с десяток дистрибутивов GNU/Linux в ознакомительных целях и как-то решил поставить PostGIS на Mandriva. Не помню почему, но почему-то пришлось повозиться несколько дольше, чем при работе с другими дистрибутивами. Исходя из этого писать про Mandriva не буду.

Хотел еще поставить на Gentoo и написать об этом, но пока что совсем нет времени колупаться с ней.
   Итак, заканчивая лирическое вступление, скажу, в каких ОС будет рассмотрена установка PostGIS:

  1. Windows XP
  2. Ubuntu 11.04
  3. Arch Linux

    Windows XP 

    С виндой дела обстоят достаточно просто. Скачиваем 2 бинарника и запускаем их по очереди. Первый бинарник — это сам сервер постгрес. Его можно скачать на официальном сайте. Второй бинарник — это, как подсказывает Капитан Очевидность, сама примочка PostGIS. Её можно взять здесь. В случае с виндой разработчики PostgreSQL всё сделали на удивление хорошо. Устанавливая сам сервер, Вам еще прикрутят PgAdmin, дадут каких-то пряников и сверху положат StackBuilder. Эта штука позволяет не рыться в недрах интернета и не искать всякие другие штуки, типа PostGIS и Slony-I. Так что, возможно, Вы захотите скачать только инсталлятор сервера, а дальше заставить StackBuilder делать своё грязное дело. Вам так же никто не запрещал устанавливать всё из исходников:).
   О том, как всё это дело установить, разработчики уже написали и, как в детской книжке, все проиллюстрировали. Посмотреть на это можно прямо здесь. Единственное, что хочу заметить, так это то, что в процессе установки PostGIS галочку «Create spatial database» лучше не снимать, если Вам нравится, когда кто-то за Вас делает какую-то работу. Лично мне нравится, когда инсталлятор устанавливает за меня необходимые функции и прочее, а потом еще и делает шаблон, на основании которого можно в будущем создавать базы данных двумя-тремя щелчками мыши.
   Следует заметить, что установщик содержит версию 1.5 PostGIS (или свежее). Если после его установки необходимо обеспечить поддержку баз данных с более ранними версиями PostGIS, то скачать отсюда бинарники (архив) и добавить содежимое каталогов «lib» и «share» в одноимённые каталоги Postgres (например, C:Program FilesPostgreSQL8.4)
    Ubuntu 11.04 

    Перед тем как читать данный пункт, посмотрите на всякий случай п.3 : установка для Arch Linux (даже если у Вы используете другой дистрибутив).

    В убунте далеко ходить не надо. Открыли терминал, ввели указанные ниже команды и получили то, что нам нужно, а именно: сервер, клиент, библиотеки, документацию, постгис, графическое приложение для администрирования.sudo apt-get install postgresql-8.4 postgresql-client-8.4 postgresql-contrib-8.4 postgresql-doc-8.4 postgresql-8.4-postgis
sudo apt-get install pgadmin3
    Как видно из команд, версия сервера у нас выйдет 8.4. Если быть точнее, то выполнив sql-запрос
SELECT version();
    в моём случае версия определилась как 8.4.8.     Дальше необходимо настроить сам сервер БД. Не желая заниматься копипастом, просто приведу ниже пару ссылок, где об этом написано вполне доходчиво.    Кое-что хочу добавить от себя. Во-первых, прописывая пути каталогов, будьте внимательны к версии сервера (у Вас же необязательно версия 8.3, как в примере)     Во-вторых, в файле «pg_hba.conf» строка# Database administrative login by UNIX sockets
local all postgres ident sameuser
    не понравилась серверу и пришлось заменить её на эту:
local all postgres md5
   Это то, что касалось установки и настройки самого сервера.

   Теперь нужно настроить PostGIS (вернее даже не настроить, а прикрутить к серверу).

    Создадим новый шаблон и зарегистрируем диалект на сервере:sudo su postgres
createdb postgistemplate
createlang plpgsql postgistemplate
    При этом нас попросят ввести пароль пользователя.     Далее необходимо наполнить шаблон функциями и информацией о типах данных.psql -d postgistemplate -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql
psql -d postgistemplate -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql
psql -d postgistemplate -f /usr/share/postgresql/8.4/contrib/postgis-comments.sql
    Хочу заметить, что расположение скриптов может несколько отличаться, но обычно не больее, чем на 1-2 ветки. Теперь осталось перезапустить сервер и можно приступать к работе. Для наглядности создадим через pgAdmin новый сервер. Пример того, что получилось, представлен на рисунке ниже. Как видно, присутствуют два шаблона: postgres и созданный нами postgistemplate.    Узнаем версию установленного PostGIS, выполнив запрос:SELECT postgis_full_version();
    в моём случае версия определилась как 1.5.1.    Arch Linux     Для Arch Linux процесс установки не очень-то отличается от описанного выше (линукс всюду одинаков) и отлично документирован на официальном сайте. Установку PostgreSQL можно посмотреть [тут] (есть даже русскоязычный вариант, по все-таки предпочитаю английский), а установку PostGIS — [тут]. Лично я рекомендую читать именно эти инструкции.

    Кстати, в репозиториях вполне свежие версии (в данный момент 9.1.2 для PostgreSQL и 1.5.3 для PostGIS).

Источник: http://oblalex.blogspot.com/2011/06/postgresqlpostgis.html

Поднимаем картографический сервер GeoQlik на базе PostgreSQL и PostGis

Недавно столкнулся с интересной технической задачей при работе с геоаналитикой GeoQlik. На моем проекте было необходимо интегрировать огромное количество картографических данных, которые при этом постоянно обновлялись.

Решать задачу с помощью постоянной перезаливки данных на сервер GeoQlik, естественно, нерационально. А если серверов несколько, то сложность задачи растет экспоненциально.

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

 А именно – как поднять небольшой картографический сервер на базе PostgreSQL и PostGIS для его последующего использования сервером GeoQlik.

PostgreSQL: установка

  1. Скачиваем дистрибутив PostgreSQL с официального сайта.
  2. Запускаем файл установщик.

    Первым делом устанавливается Microsoft Visual C++ 2005 Redistributable – рабочие модули библиотек Visual C++, необходимые для запуска созданных при помощи этого языка программирования приложений.

  3. Выбираем куда устанавливать программу и расположение данных:
  4. Указываем администраторский пароль для базы данных:
  5. Выбираем порт подключения:
  6. Выбираем локаль, которая будет использоваться новым кластером базы данных
  7. Мастер установки PostgreSQL сообщает о прогрессе установки.
  8. Жмем «Завершить». На этом установка PostgreSQL на ваш компьютер завершена.
  9. Если вы хотите установить PostGIS сразу после завершения установки PostgreSQL, поставьте галочку на запуске Stack Builder.

PostGIS: установка 

Установку PostGIS можно осуществить полуавтоматически через Stack Builder и непосредственно скачав пакет PostGIS. Способы установки отличаются лишь методом получения установщика PostGIS. В первом случае Stack Builder запустится сам: «Пуск/PostgreSQL 8.4/Приложение Stack Builder». Рассмотрим подробнее именно этот вариант:

  1. Выберите установленный сервер:
  2. Из пункта Spatial Extensions выберите PostGIS 1.4:

Далее вам осталось только выбрать зеркало загрузки во временную папку, в которую будет загружен дистрибутив.

Если вы решили скачать установщик PostGIS самостоятельно, то последнюю версию PostGIS можно скачать на сайте.

Ход установки:

  1. Запускаем файл postgis-pg84-setup-1.4.0-2.exe или более свежий и принимаем лицензионное соглашение:
  2. Снимаем отметку с пункта «Create spatial database».

«Create spatial database» позволяет создать пространственную базу данных автоматически. Далее мы будем рассматривать процесс создания такой базы данных вручную, не прибегая к услугам установщика PostGIS, поэтому здесь мы отметку с этого пункта снимем.

  1. Выбираем путь для установки.
  2. Заполняем представленные поля – порт, имя пользователя и пароль те же самые, что и были указаны выше:

Жмем «Next» для завершения установки. На этом установка PostGIS завершена!

PostGIS: настройка базы данных

  1. В меню Пуск находим PostgreSQL 3 и запускаем pgAdmin III.
  2. В браузере объектов дважды щелкаем на «PostgreSQL Database Server 8.3». Будет предложено ввести пароль суперпользователя для подключения к выбранному серверу, что мы и делаем.
  3. В браузере объектов выбираем «Базы» и открываем «Правка/Новый объект/Новая база данных…».

    Устанавливаем имя новой базы данных – «postgis», владелец – «postgres».

  4. Откройте окно запросов SQL (щелкнув на кнопку с изображением карандаша):
  5. Выберите «Файл/Открыть…» и откройте файл: C:Program FilesPostgreSQL[ваша версия]sharecontribpostgis.

    sql

  6. Нажмите кнопку «Выполнить запрос» (кнопка с изображением зеленого треугольника). Файл lwpostgis.sql будет исполнен – функции и объекты PostGIS будут загружены в базу данных.

  7. Выберите «Файл/Открыть…» и откройте файл: C:Program FilesPostgreSQL[ваша версия]sharecontribspatial_ref_sys.sql
  8. Нажмите кнопку «Выполнить запрос» (кнопка с изображением зеленого треугольника). Файл spatial_ref_sys.

    sql будет исполнен и загрузит параметры систем координат в формате EPSG в таблицу базы данных.

Процесс создания пространственной базы данных без использования шаблона окончен. Таким образом, на данный момент времени мы имеем пространственную базу данных «postgis», готовую к наполнению данными.

PostGIS: наполнение базы данных

Чтобы наполнить базу данных нужно использовать утилиту PostGIS 2.0 Shapefile and DBF Loader Exporter (она установилась вместе с расширением Postgis, которое мы ставили через Stack Builder)

В нашем случае необходимо было экспортировать данные с сервера gis-lab.info, и залить их на наш сервер.

Экспорт

  1. Запускаем утилиту PostGIS0 Shapefile and DBF Loader Exporter (ее можно найти в пуске) и выбираем вкладку Export
  2. Нажимаем кнопку ‘View connection details…’ и вводим реквизиты сервера
    gis-lab.info
  3. Нажимаем “ОК”, и видим, что подключение было успешным.
  4. Далее нажимаем кнопку “Add table” и выбираем в всплывающем окне перечень таблиц для экспорта (в нашем случае это ru_adm3_federal и ru_adm4_region).
  5. Нажимаем “ОК”, теперь они отображаются в основном окне утилиты, далее нажимаем на кнопку “Export”.
  6. Выбираем путь, следим, чтобы выгрузка производилась в формате “.shp” (шейп-файлы):
  7. Появляется статус-бар, ждем окончания.
  8. Все выгрузилось успешно!

Импорт

Далее необходимо выполнить схожую процедуру, только во вкладке Import

  1. Выбираем вкладку Import
  2. Жмем View connection details и вводим реквизиты нашего локального сервера
  3. Нажимаем ок, видим, что подключение прошло успешно
  4. Далее нажимаем на кнопку импорт и выбираем папку, в которой находятся наши шейп-файлы.
  5. В поле SRID вводим систему координат (в моем случае это стандартная проекция 4326) и нажимаем кнопку Import.
  6. После того, как процедура успешно завершится, об этом будет написано в логе

GeoQlik: проверка настроек

Теперь нужно проверить результат.

  1. Заходим в консоль GeoQlik и устанавливаем соединение с нашим локальным сервером.
  2. Для этого заходим по адресу localhost/geoqlik/designer/index.html, далее как показано на рисунках: Вводим реквизиты сервера и нажимаем «Next»:
  3. В появившемся окне видим наши экспортированные файлы. Нажимаем Validate и далее остается только проверить правильно ли мы указали проекцию (SRID):
  4. Для этого заходим на вкладку Symbрlogy, ставим галочки напротив закаченных слоев, и видим их отображение на карте справа. В нашем случае все прошло успешно!

Вот и все! Задача выполнена, можно приступать к настройке отчетов в GeoQlik.

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

Успехов Вам в геоаналитике!

Источник: http://blog.atkcg.ru/podnimaem-kartograficheskij-server-geoqlik-na-baze-postgresql-i-postgis/

Opensource ГИС платформа – так зачем платить больше?

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

Существует конечно масса платных аналогов и приложений как самостоятельных ГИС приложений, так и 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 

Источник: https://itg.by/nextgis/

Как настроить базу данных PostGIS и открыть ее в QGIS в Windows?

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

Сначала попросите администратора установить pgAdmin, это позволит вам получить доступ к вашей базе данных PostgreSQL с помощью графического интерфейса.

https://www.pgadmin.org/download/windows.php

Открыть pgAdmin

Если установлен ваш PostgreSQL;

  • на вашем компьютере он появится как локальный хост, вы сможете дважды щелкнуть по нему «PostgreSQL 9.6 (localhost: 5432)», чтобы подключиться к нему.
  • Если он установлен в сети, то вам нужно к администратору, чтобы вы знаете адрес хоста (если вы уже не имеете, что), то вам нужно перейдите в меню «Файл»> «Добавить сервер» и заполните поля;

После подключения перейти к Edit > New Object > New Database

Дайте ему имя. Он появится в списке серверов.

Двойной щелчок, чтобы подключиться к нему. Проверьте Extensions, чтобы узнать, содержит ли он postgis.

Если нет;

Откройте окно SQL, нажав на значок SQL

и типа в

CREATE EXTENSION PostGIS

Нажмите 'Выполнить запрос' — этот значок<\p>

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

Вы можете настроить новую роль группы и роль входа в этот момент, это звучит так, как если бы вам были нужны требования безопасности и ваши пользователи по сети.

Или, если вы просто хотите его протестировать, вы можете продолжить работу по умолчанию postgres.

Различные группы могут быть настроены так, чтобы иметь разные разрешения, например. администратора и пользователя.

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

Откройте окно SQL и выполните эти запросы;

CREATE ROLE user_group_name NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; CREATE ROLE admin_group_name NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; GRANT user_group_name TO admin_group_name GRANT ALL ON DATABASE database_name TO admin_group_name;

Настройка админ логин (авторизованы как Postgres/суперпользователя)

CREATE ROLE admin_name LOGIN PASSWORD 'their_password' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; GRANT admin_group_name TO admin_name;

Настройка логин пользователя (авторизованы как Postgres/суперпользователя)

CREATE ROLE user_name LOGIN PASSWORD 'their_password' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; GRANT users_group_name TO user_name;

Open QGIS. Начните новый проект.

Нажмите на значок «Добавить слой PostGIS» в левой панели инструментов.

Нажмите кнопку «Новый» подключение и введите параметры соединения, как указано выше (если база данных является локальной, то хозяин просто localhost).

Вы можете проверить соединение на этом этапе. Если вы установите флажок «Сохранить» в поле имени пользователя и пароля, он сохранит ваши учетные данные в вашем профиле, поэтому вам не нужно вводить их каждый раз. До вас в зависимости от ваших потребностей в безопасности.

Нажмите Ok и закрыть «Добавить PostGIS окно таблицы»

Затем перейдите к Database > DB Manager > DB Manager (Последние версии QGIS имеют DB-менеджер устанавливается в стандартной комплектации, более ранние версии вам нужно будет установить плагин DB менеджер)

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

Schema> Создать схему — Дайте ему имя (no_spaces_or_use_underscores)

После этого вы можете проверить, возвращаясь к pgAdmin, разъединение, воссоединиться. Теперь должна быть новая схема.

Вернитесь к диспетчеру данных QGIS, чтобы загрузить файл формы в таблицу в базе данных.

Нажмите стрелку вниз «Импорт слоя/файла», чтобы перейти к шейп-файлу, который вы хотите импортировать. Нажмите значок «…», чтобы открыть просмотр.

Дайте таблицу имя (again_no_spaces_or_use_underscores)

Выберите Primary key

Выберите Geometry Column

Выберите SRID и введите код CRS

Сейчас все остальное оставьте и OK.

Если это большой набор данных, это может занять некоторое время, особенно через подключение к сети/Интернет

Опять же, вы можете вернуться к pgAdmin, нажмите обновить этот раз, и новая таблица появится в Tables.

Если вы настроили групповые роли и пользователей, вам необходимо предоставить доступ к схеме, например;

GRANT ALL ON SCHEMA schema_name TO admin_group_name; GRANT USAGE ON SCHEMA schema TO user_group_name;

Назад к QGIS и 'Добавить слой PostGIS'. На этот раз выберите Connect. Откройте схему и выделите таблицу и нажмите «Добавить», и она откроется в вашем пространстве проекта.

Источник: https://gis.stackovernet.com/ru/q/63336

Введение в PostGIS¶

PostGIS добавляет дополнительную функциональность к СУБД PostgreSQL. PostGIS расширяет возможности PostgreSQL с точки зрения хранения пространственных данных, запросов к ним и управления ими. В данном “введении” будут описаны основные функции PostgreSQL и PostGIS.

PostgreSQL, как и другие СУБД, работает в качестве сервера в системе клиент-сервер. Клиент отправляет серверу запрос и получает отклик. По такому же принципу работает сеть Интернет: ваш браузер является клиентом, посылающим запрос, а веб-сервер возвращает обратно веб-страницу. Запросы PostgreSQL производятся с помощью языка SQL, откликами обычно являются таблицы данных из базы данных.

Ничего не мешает серверу PostgreSQL находится на одном компьютере с клиентом. Ваш клиент подключается к серверу по внутреннему IP-интерфейсу обратной связи, который не виден для других компьютеров (если вы не настроите иначе).

Здесь будут показаны три клиента: клиент командной строки, Quantum GIS и графический клиент базы данных — pgAdmin.

Клиенты командной строки запускаются из окна эмулятора терминала. Запустите эмулятор терминала из меню Приложения в разделе Дополнительное. Это даст вам доступ к оболочке командной строки. Напечатайте:

нажмите Ввод, чтобы увидеть версию PostgreSQL.

Один сервер PostgreSQL позволяет организовать работу, распределив её по отдельным базам данных. Каждая из баз данных будет работать в своем режиме, со своими собственными таблицами, видами, пользователями, и т.п. При установлении соединения к серверу PostgreSQL вы должны указать нужную базу данных.

Чтобы получить список баз данных, хранящихся на сервере, напечатайте команду:

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

Tip

Список использует стандартный Unix-pager: нажмите пробел, чтобы перейти на следующую страницу, b, чтобы вернуться, q для выхода и b для вызова справки.

PostgreSQL предоставляет служебную программу для создания базы данных createdb. Мы создадим базу данных с помощью расширения PostGIS, указав используемый шаблон. Назовите базу данных demo. У этом случае команда будет выглядеть следующим образом:

createdb -T template_postgis demo

Tip

Вы можете получить справку в командой строке, использую опцию —help.

Если вы запустите команду psql -l, то должны увидеть базу demo в списке баз данных.

Вы можете создать базу данных PostGIS с помощью языка SQL. Сначала мы удалим только что созданную базу данных с помощью команды dropdb, потом используем команду psql, чтобы получить интерпретатор команд SQL:

dropdb demo
psql -d postgres

Эти команды подключат к системной базе данных postgres, которую должны иметь все сервера. Введите запрос SQL, чтобы создать новую базу данных:

postgres=# CREATE DATABASE demo TEMPLATE=template_postgis;

Переключите ваше соединение с базы данных postgres на новую базу данных demo. В дальнейшем вы сможете подключаться непосредственно к базе данных, используя команду psql -d demo. Тут показан способ переключения с помощью psql в командной строке:

Tip

Нажмите CTRL + C, если подсказка psql появляется после нажатия кнопки возврата. Это приведет к очищению введённой информации. Возможно, вам понадобится закрыть кавычки, двоеточие и тп.

Вы должны увидеть информационное сообщение, в котором будет указано, что вы подключены к базе данных demo. Чтобы проверить, что всё работает, напечатайте dt , эта команда отобразит список таблиц в базе данных. Вы должны увидеть подобный этому список:

demo=# dt List of relations Schema | Name | Type | Owner
———+——————+——-+——- public | geometry_columns | table | user public | spatial_ref_sys | table | user
(2 строки)

Это две таблицы, используемые PostGIS. Таблица spatial_ref_sys хранит информацию о системе координат, чтобы быстро просмотреть информацию, используйте команду SQL:

demo=# SELECT srid,auth_name,proj4text FROM spatial_ref_sys LIMIT 10; srid | auth_name | proj4text
——+————+————————————— 3819 | EPSG | +proj=longlat +ellps=bessel +towgs… 3821 | EPSG | +proj=longlat +ellps=aust_SA +no_d… 3824 | EPSG | +proj=longlat +ellps=GRS80 +towgs8… 3889 | EPSG | +proj=longlat +ellps=GRS80 +towgs8… 3906 | EPSG | +proj=longlat +ellps=bessel +no_de… 4001 | EPSG | +proj=longlat +ellps=airy +no_defs… 4002 | EPSG | +proj=longlat +a=6377340.189 +b=63… 4003 | EPSG | +proj=longlat +ellps=aust_SA +no_d… 4004 | EPSG | +proj=longlat +ellps=bessel +no_de… 4005 | EPSG | +proj=longlat +a=6377492.018 +b=63…
(10 строк)Даныне таблицы подтверждают, что наша база пространственная. Таблицаgeometry_columns служит для передачи информации о том, какая из таблиц содержит пространсвенную информацию.

Теперь, имея пространственную базу данных, можно создать несколько пространственных таблиц. Сначала мы создадим обычную таблицу базы данных, чтобы хранить данные о городе. Эта таблица будет содержвать два поля — одно числовое поле-идентификатор, второе — название города:

demo=# CREATE TABLE cities ( id int4, name varchar(50) );

Далее добавьте колонку геометрии, содержащую данные о местоположении городов. Для удобвства назовем это поле the_geom. PostGIS подскажет, какой тип геометрии имеет каждый из объектов (точки, линии, полигоны и т.п.), какая размерность и система координат. Для городов мы будем использовать “географическую” систему координат EPSG:4326.

demo=# SELECT AddGeometryColumn ( 'cities', 'the_geom', 4326, 'POINT', 2); Заглянув в таблицу города, вы увидите новую колонку, а также информацию о том, что в таблице отсутствуют строки.demo=# SELECT * from cities; id | name | the_geom
—-+——+———-
(0 строк)

Чтобы добавить строки в таблицу, используйте команды SQL. Чтобы добавить данные геометрии в соответствующую колонку, используйте функцию PostGIS ST_GeomFromText, чтобы сконвертировать координаты и идентификатор референсной системы из текстового формата:

demo=# INSERT INTO cities (id, the_geom, name) VALUES (1,ST_GeomFromText('POINT(-0.1257 51.508)',4326),'London, England');
demo=# INSERT INTO cities (id, the_geom, name) VALUES (2,ST_GeomFromText('POINT(-81.233 42.983)',4326),'London, Ontario');
demo=# INSERT INTO cities (id, the_geom, name) VALUES (3,ST_GeomFromText('POINT(27.91162491 -33.01529)',4326),'East London,SA');

Tip

Используйте кнопки-стрелки для отмены и редактирования командной строки.

Как вы могли заметить, это быстро надоедает. К счастью, существуют иные, более лёгкие пути передачи данных в таблицы PostGIS. Сейчас в нашей базе находятся три города, с которыми мы можем начать работать.

Все самые обычные операторы SQL могут быть использованы для выбора данных из таблицы PostGIS:

demo=# SELECT * FROM cities; id | name | the_geom
—-+——————+—————————————————- 1 | London, England | 0101000020E6100000BBB88D06F016C0BF1B2FDD2406C14940 2 | London, Ontario | 0101000020E6100000F4FDD478E94E54C0E7FBA9F1D27D4540 3 | East London,SA | 0101000020E610000040AB064060E93B4059FAD005F58140C0
(3 строки)

Это возвращает нам бессмысленные значения координат в шестнадцатеричной системе. Если вы хотите увидеть вашу геометрию в текстовом формате WKT, используйте функцию ST_AsText(the_geom) или ST_AsEwkt(the_geom). Вы также можете использовать функции ST_X(the_geom), ST_Y(the_geom), чтобы получить числовые значения координат.

demo=# SELECT id, ST_AsText(the_geom), ST_AsEwkt(the_geom), ST_X(the_geom), ST_Y(the_geom) FROM cities; id | st_astext | st_asewkt | st_x | st_y
—-+——————————+—————————————-+————-+———— 1 | POINT(-0.1257 51.508) | SRID=4326;POINT(-0.1257 51.508) | -0.1257 | 51.508 2 | POINT(-81.233 42.983) | SRID=4326;POINT(-81.233 42.983) | -81.233 | 42.983 3 | POINT(27.91162491 -33.01529) | SRID=4326;POINT(27.91162491 -33.01529) | 27.91162491 | -33.01529
(3 строки)

Мы уже увидели, как получить геометрию из текстовых данных WKT с помощью функции ST_GeomFromText. Большинство таких функций начинаются с ST (“пространственный тип”) и описаны в документации PostGIS. Мы используем одну из них, чтобы ответить на практический вопрос: на каком расстоянии в метрах друг от другах находятся три города с названием Лондон, учитывая сферичность земли?

demo=# SELECT p1.name,p2.name,ST_Distance_Sphere(p1.the_geom,p2.the_geom) FROM cities AS p1, cities AS p2 WHERE p1.id > p2.id; name | name | st_distance_sphere
——————+——————+——————— London, Ontario | London, England | 5875766.85191657 East London,SA | London, England | 9789646.96784908 East London,SA | London, Ontario | 13892160.9525778 (3 строки)

Этот запрос возвращает расстояние в метрах между каждой парой городов.

Обратите внимание как часть ‘WHERE’ предотвращает нас от получения расстояния от города до самого себя (расстояние всегда будет равно нулю) и расстояния в обратном порядке (расстояние от Лондона, Англия до Лондона, Онтарио будет таким же как от Лондона, Онтарио до Лондона, Англия). Попробуйте ещё раз без ‘WHERE’ и посмотрите, что произойдёт.

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

demo=# SELECT p1.name,p2.name,ST_Distance_Spheroid( p1.the_geom,p2.the_geom, 'SPHEROID[«GRS_1980»,6378137,298.257222]' ) FROM cities AS p1, cities AS p2 WHERE p1.id > p2.id; name | name | st_distance_spheroid
——————+——————+———————- London, Ontario | London, England | 5892413.63776489 East London,SA | London, England | 9756842.65711931 East London,SA | London, Ontario | 13884149.4140698
(3 строки)

Для создания карты из данных PostGIS вам необходим клиент, с помощью которого вы сможете интерпретировать данные. Многие из открытых ГИС могут делать это, например, Quantum GIS, gvSIG, uDig. Далее будет показано, как сделать карту с помощью Quantum GIS.

Запустите Quantum GIS и выберите Add PostGIS layers из меню Слой. Параметры для подключения к даннымNatural Earth в PostGIS уже определены в выпадающем меню Соединения.

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

Нажмите Edit, если хотите увидеть, какие параметры указаны для данных Natural Earth, или нажмите Connect, чтобы продолжить:

Появится список пространственных таблиц базы данных:

Выберите озёра (“Lakes”) и нажмите Add внизу (не «Load«вверху, которая подгрузит параметры подключения базы данных), после чего слой откроется в QGIS:

Вы должны увидеть карту с озёрами. QGIS не знает, что это озера, поэтому, возможно, они будут не голубого цвета. Используйте документацию QGIS, чтобы узнать, как изменить цвет.

Большинство приложений OSGeo поддерживают импорт пространственных данных из файлов в базу данных PostGIS. Для демонстрации этого будет использован QGIS.

Импорт шейп-файлов в PostGIS через QGIS можно сделать в с помощью дополнения PostGIS Manager. Чтобы установить его, перейдите в меню Модули, далее Загрузить модули. QGIS загрузит самую новую версию из репозитория (для этого вам потребуется работающее интернет-соединение). Найдите PostGIS Manager и нажмите кнопку Install plugin.

В меню Модули должен появиться пункт PostGIS Manager. Для запуска плагина также можно кликнуть по кнопке с логотипом PostGIS (слон с земным шаром), расположенной на панели.

После этого будет уставновлено соединение с базой данных Natural Earth. Оставьте поле пароль пустым, если будет необходимо его ввести.

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

Для примера был выбран слой “Населённые пункты”, карта была приближена к произвольному месту.

Далее PostGIS Manager будет использован для импорта шейп-файла в базу данных. Мы используем данным о синдроме внезапной смерти у детейв Северной Каролине, которые входят в одно из дополнений статистического пакета R.

Из меню Data выберите опцию Load data from shapefile. Нажмите кнопку … и загрузите шейпф-айл sids.shp в пакет R maptools:

Не изменяя настроек в появившемся окне, нажмите Load:

Шейп-файл должен быть импортирован в PostGIS без ошибок. Закройте менеджер PostGIS и вернитесь в основное окно QGIS.

Подгрузите данные SIDS с помощью опции “Добавить слой PostGIS”. Изменив порядок слоёв и заливок, вы сможете создать фоновую картограмму (хороплет), отображающую количество детей, умерших от синдрома внезапной смерти в Северной Каролине.

Вы можете использовать графический клиент базы данных pgAdmin III из системного меню “Базы данных”, чтобы сделать запрос или изменить атрибутивную информацию в базе данных. Это официальный клиент для PostgreSQL, позволяющий использовать SQL для управления таблицами данных.

Несколько дополнительных задач, которые нужно выполнить:

  1. Попробуйте больше пространственных функций, например, st_buffer(the_geom), st_transform(the_geom,25831), x(the_geom) — вы найдёте полную документацию здесь: http://postgis.org/documentation/
  2. Экспортируйте ваши таблицы в шейп-файлы, используя pgsql2shp в командной строке.
  3. Попробуйте утилиту ogr2ogr для экспорта/импорта данных.

Источник: http://live.osgeo.org/archive/6.5/ru/quickstart/postgis_quickstart.html

Ссылка на основную публикацию