10 окт. 2012 г.

Установка 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*. Более подробно с возможностями можно ознакомиться на сайте проекта

Установка PostGIS и QuantumGIS

Для тех, кто работает с ГИС в убунту существует хороший репозиторий 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/pgrouting
sudo 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.sql
psql -U postgres -f /usr/share/postlbs/routing_core_wrappers.sql
psql -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

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

4 комментария :

Филиппов Владислав комментирует...

Последний стабильный релиз QGIS 1.8 имеет проблемы с кириллицей в атрибутивных таблицах.
http://gis-lab.info/forum/viewtopic.php?f=27&t=10949&start=15

Oleg Fomichev комментирует...

Да, согласен. Проблем в opensource проектах встречается немало. Однако из-за того, что все эти opensource проекты как правило очень гибки, то и решение найти можно. Вот и на форуме ГИС лаба решение нашли ;) Тут скорее вопрос поиска золотой середины между стоимостью приложения и стоимостью его внедрения/поддержки. Но это совсем другая история.
В результате экспериментов я смог повторить эту ошибку с кодировкой. Появляется она только во вновь созданных шейпфайлах. Я шейпфайлы использую только для того чтобы данные из одной системы перенести в другую. Для организации же рабочего процесса лучше использовать QGIS в связке с каким-нибудь сервером. В моем случае это PostGIS.
Второе, что могу предложить - постараться максимально отделить геопространственные данные от остальных данных.

Vladimir Naumov комментирует...

Oleg, какое такое решение нашли на форуме гис-лаба? о_О

Владислав, приложите, пожалуйста, скрин окна, где можно видеть Extentions в PgAdminIII.

Oleg Fomichev комментирует...

Решение не очень красивое, но работающее - задать значение переменной SHAPE_ENCODING=UTF-8. Вот тут эта переменная всплывает в первый раз и через пару ответов выдают готовое решение.