Установка PostgreSQL. PostGIS: наполнение базы данных. Установка в Debian
Делали в универе командный курсовик и нужно было использовать PostGIS. Дело в том, что курсовик был взят не из списка стандартных заданий, а являлся частью одного разрабатываемого мной проекта. Так как курсовик командный, то не удивительно, что у членов команды ОС отличались. Я, конечно, не говорю, что в случае командной работы у всех должны быть разные ОС, но в нашем случае вышло именно так. В конечный список ОС попали следующие: Windows XP, Windows 7, Ubuntu и LinuxMint. Принципиальных различий в процессе установки нет. Что XP - винда, что семерка - винда. Что Ubuntu - GNU/Linux, что LinuxMint - GNU/Linux, еще и основанная на Ubuntu. И там, и там можно ставить как с бинарников, так и с исходников. К тому же в unix-подобных системах есть репозитории. В процессе работы я еще мучил с десяток дистрибутивов GNU/Linux в ознакомительных целях и как-то решил поставить PostGIS на Mandriva. Не помню почему, но почему-то пришлось повозиться несколько дольше, чем при работе с другими дистрибутивами. Исходя из этого писать про Mandriva не буду. Хотел еще поставить на Gentoo и написать об этом, но пока что совсем нет времени колупаться с ней.
Итак, заканчивая лирическое вступление, скажу, в каких ОС будет рассмотрена установка PostGIS:
Windows XP
С виндой дела обстоят достаточно просто. Скачиваем 2 бинарника и запускаем их по очереди. Первый бинарник - это сам сервер постгрес. Его можно скачать на официальном сайте . Второй бинарник - это, как подсказывает Капитан Очевидность, сама примочка PostGIS. Её можно взять . В случае с виндой разработчики PostgreSQL всё сделали на удивление хорошо. Устанавливая сам сервер, Вам еще прикрутят PgAdmin, дадут каких-то пряников и сверху положат StackBuilder. Эта штука позволяет не рыться в недрах интернета и не искать всякие другие штуки, типа PostGIS и Slony-I. Так что, возможно, Вы захотите скачать только инсталлятор сервера, а дальше заставить StackBuilder делать своё грязное дело. Вам так же никто не запрещал устанавливать всё из исходников:).
О том, как всё это дело установить, разработчики уже написали и, как в детской книжке, все проиллюстрировали. Посмотреть на это можно прямо . Единственное, что хочу заметить, так это то, что в процессе установки PostGIS галочку "Create spatial database" лучше не снимать, если Вам нравится, когда кто-то за Вас делает какую-то работу. Лично мне нравится, когда инсталлятор устанавливает за меня необходимые функции и прочее, а потом еще и делает шаблон, на основании которого можно в будущем создавать базы данных двумя-тремя щелчками мыши.
Следует заметить, что установщик содержит версию 1.5 PostGIS (или свежее). Если после его установки необходимо обеспечить поддержку баз данных с более ранними версиями PostGIS, то скачать отсюда бинарники (архив) и добавить содежимое каталогов "lib" и "share" в одноимённые каталоги Postgres (например, C:\Program Files\PostgreSQL\8.4\)
Ubuntu 11.04
В убунте далеко ходить не надо. Открыли терминал, ввели указанные ниже команды и получили то, что нам нужно, а именно: сервер, клиент, библиотеки, документацию, постгис, графическое приложение для администрирования.
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.
Дальше необходимо настроить сам сервер БД. Не желая заниматься копипастом, просто приведу ниже пару ссылок, где об этом написано вполне доходчиво.
- Англоязычная статья на hocuspokus.net .
- Её русскоязычный перевод с примечаниями на welinux.ru .
Кое-что хочу добавить от себя. Во-первых, прописывая пути каталогов, будьте внимательны к версии сервера (у Вас же необязательно версия 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.
- Tutorial
Совсем недавно возникла задача создания программного обеспечения по генерации картографических тайлов. В качестве основы выбор пал на mapnik (альтернатив ему немного). Как оказалось, здесь на пути поджидало множество сложностей, непредвиденных ошибок, а более менее внятной документации по настройке всего «под ключ» найти не удалось. Повозившись какое-то время, мне удалось собрать множество граблей, которые могут возникнуть ну и довести дело до победного конца. Об этом и статья.
Установка производилась в Ubuntu и Debian. Скажу сразу, что лучше конечно использовать последние версии программных продуктов, которых иногда нет в репозитариях. Их можно скачать, при желании, вручную с официальных сайтов.
Не считая необходимых зависимостей, в общем случае нам понадобятся
- PostgreSQL >= 8.4
- PostGIS >= 1.5 < 2
- Python 2.x
- Mapnik >= 2
- Osm2pgsql
- Некоторые знания по работе с bash, Python и PostgreSQL
Установка PostgreSQL
Сперва проверем какая версия PostgreSQL у нас в репозитариях:$ apt-cache show postgresql
Если версия 8.4 и более, то устанавливаем пакет.
$ sudo apt-get install postgresql
В противном случае, скачиваем пакет с официального сайта www.postgresql.org/download/linux и устанавливаем его. Далее нам надо настроить нашу базу данных. По умолчанию её пользователь - это postgres и авторизоваться можно только от него средствами самой OC. Однако мы поступим несколько по-другому, сперва откроем файл pg_hba.conf. Узнать его расположение можно утилитой locate
$ sudo updatedb
$ sudo locate pg_hba.conf
Если у вас эта утилита не установлена, то ставим
$ sudo apt-get install findutils locate
и повторяем команды выше. У меня например этот файл расположен по адресу /etc/postgresql/8.4/main/pg_hba.conf. Открываем его и редактируем.
$ sudo vi "/etc/postgresql/8.4/main/pg_hba.conf"
Заменяем:
$ locate all all ident # Авторизация средствами ОС
На
$ locate all all password # Авторизация по паролю
Сохраняем файл и перезапускаем PostgreSQL.
$ sudo "/etc/init.d/postgresql-8.4 restart"
Теперь мы можем создать любого пользователя базы и заходить от него под обычным паролем без всякого шифрования (нам не критична супер безопасность). А также нам потребуется новая база данных для наших OSM данных.
Заходим в консоль управления PostgreSQL.
$ su postgres
$ psql
postgres=# CREATE ROLE osm WITH SUPERUSER PASSWORD ‘my_password’ LOGIN;
CREATE ROLE
postgres=# CREATE DATABASE osm;
CREATE DATABASE
postgres=# \q
Пользователь и база данных созданы.
Проверить работоспособность нового пользователя можно командой
$ psql -U osm -d osm -W
Если после ввода пароля Вы попадете в консоль PostgreSQL, то все прошло успешно.
Установка PostGIS
Нам потребуется PostGIS. В моем репозитарии была версия 1.4. Так как, после её установки мне почему-то не удалось найти файл postgis.sql, я снес эту версию и скачал с официального сайта версию 1.5. Поэтому в статье, мы поступим также.$ wget "http://postgis.refractions.net/download/postgis-1.5.4.tar.gz"
Распаковываем архив, собираем и устанавливаем.
$ tar xvfz "./postgis-1.5.4.tar.gz" $ cd "./postgis-1.5.4" $ sudo ./configure $ sudo make install
В случае отсутствия необходимых библиотек, устанавливаем их.
Далее устанавливаем специальный язык в базу osm.
$ createlang plpgsql osm -U osm -W
Теперь необходимо в базу osm выполнить два SQL скрипта: postgis.sql и 900913.sql.
При помощи утилиты locate находим их расположение и выполняем их.
$ psql -U osm -d osm -W -f "/usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql" $ psql -U osm -d osm -W -f "/usr/share/osm2pgsql/900913.sql"
Обратите внимание, как показала практика данную команду необходимо выполнить именно от пользователя с привилегиями суперпользователя PostgreSQL. Если у вас возникли проблемы и ошибки плана ERROR: type «geometry» does not exist , то попробуйте перед выполнением sql файла выполнить:
$ sudo ldconfig
и повторите команду запуска sql файлов.
Все! С настройкой PostgreSQL мы закончили. Переходим к установке Mapnik.
Установка Mapnik
$ sudo add-apt-repository ppa:mapnik/nightly-trunk $ sudo apt-get update $ sudo apt-get install libmapnik mapnik-utils python-mapnikЕсли система выдаст, что “add-apt-repository: command not found”, то
$ sudo apt-get install python-software-properties
И повторите три команды выше. Mapnik установлен. Я не стал писать о необходимости установки Python, так как в большинстве случаев он всегда уже стоит. Проверяем работу mapnik.
$ python >>> import mapnik
Если ошибок никаких не возникло, то все прошло успешно. Теперь перейдем к установке osm2pgsql
Установка Osm2pgsql
$ sudo apt-get install osm2pgsqlОстался один важный штрих. Дело в том, что файл default.style, поставляемый osm2pgsql для экспорта osm данных в базу данных, по какой-то причине не соответствует последнему формату OSM. (Может быть кто знает почему?). Скачиваем файл правильного формата.
$ wget "http://svn.openstreetmap.org/applications/utils/export/osm2pgsql/default.style"
Далее заменяем, тот что шел по умолчанию с osm2pgsql
$ sudo cp "./default.style" "/usr/share/osm2pgsql/default.style"
Установка скриптов от OpenStreetMap для генерации тайлов
Репозитарий OpenStreetMap содержит немало скриптов и утилит по картографической тематике. Нам понадобится одно из приложений, написанное на python, которое уже содержит все необходимые нам скрипты по работе с mapnik. Чтобы его скачать требуется установить Subversion.$ sudo apt-get install subversion
Теперь смело можно загрузить OSM Application. Создайте папку для его расположения. например, у меня это /home/osm/mapnik и выполните checkout.
$ mkdir "/home/osm/mapnik" $ svn co "http://svn.openstreetmap.org/applications/rendering/mapnik" "/home/osm/mapnik"
Теперь запускаем скрипт находящийся в приложении.
$ bash /home/osm/mapnik/get-coastlines.sh
Он скачает нам необходимые файлы с шейпами мира.
Теперь необходимо создать XML файл стилей. Делается это следующей командой:
$ python /home/osm/mapnik/generate_xml.py osm.xml my_osm.xml --dbname osm --user osm --password my_password --accept-none
Будет создан файл my_osm.xml с данными для подключения к PostgreSQL.
Проба пера
Вот и настал момент, когда можно качать любой OSM файл и генерировать на его основе тайлы. Файлы OSM можно скачать с сайтов представленных на веб-странице wiki.openstreetmap.org/wiki/Planet.osmМожно, конечно, скачать весь файл Planet.osm, но нужно ли оно вам? В распакованном виде он весит более 250 Гб.
Предположим мы хотим сгенерировать тайлы Москвы на 17 масштабе.
Качаем необходимый OSM файл.
$ wget "http://download.bbbike.org/osm/bbbike/Moscow/Moscow.osm.gz"
Теперь мы можем его экспортировать в базу данных.
$ sudo osm2pgsql -U osm -d osm Moscow.osm.gz
Все! Осталось лишь запустить скрипт по генерации тайлов. Но перед этим, нам нужно его слегка отредактировать, дабы указать нужный масштаб и координаты каких тайлов мы хотим получить. Открываем файл /home/osm/mapnik/generate_tiles.py. Устанавливаем переменную mapfile, чтобы она указывала на наш my_osm.xml.
mapfile = "/home/osm/mapnik/my_osm.xml"
Далее переопределите переменную, которая указывает куда Вы желаете складывать тайлы.
tile_dir = "/home/osm/mapnik/all_tiles"
Файл Moscow.osm который мы скачали имеет координаты векторных данных
xMin = 37.32000
yMin = 55.57000
xMax = 37.88000
yMax = 55.92000
Находим в скрипте такие строки
bbox = (-180.0,-90.0, 180.0,90.0)
render_tiles(bbox, mapfile, tile_dir, 0, 5, "World")
И перед ними (дабы не затирать существующий код) пишем:
bbox = (37.32000, 55.57000, 37.88000, 55.92000)
render_tiles(bbox, mapfile, tile_dir, 17, 17, "Moscow")
exit()
Желательно написать exit(), дабы скрипт после генерации тайлов Москвы не преступил к генерации всего мира.
4 и 5 параметры функции render_tiles задают масштаб с какого по какой мы будем генерировать тайлы. В данном случае мы выбрали только 17 масштаб.
Сохраняем и запускаем.
$ python /home/osm/mapnik/generate_tiles.py
Пойдет процесс генерации тайлов.
Также можно найти прекрасный мануал здесь
Со времен университета зарекался никогда не влезать в ГИС и все, что с этим связано. И со времен все того же университета все эти ГИС преследуют меня постоянно:) На одном из предыдущих мест работы мне приходилось работать со связкой MapInfo + Oracle. Теперь же пришлось испытать опенсорсные проекты QuantumGIS + PostGIS.
Начнем с установки всего этого добра.
Итак по порядку.
QuantumGIS
- по сути бесплатный аналог MapInfo или ArcGIS. Подробнее в википедии
PostGIS
- расширение для PostgreSQL, позволяющее хранить и обрабатывать геопространственные данные. Это означает, что PostGIS сам по себе работать не будет. Ему нужна PostgreSQL. На сегодняшний день лучше ставить PostgreSQL 9.1 (посмотреть как установить и настроить можно в моей статье ).
Соответственно все остальные компоненты нужно ставить с учетом версии PostgreSQL
pgRouting
- набор методов для поиска кратчайшего пути по таким алгоритмам как Дейкстры и . Более подробно с возможностями можно ознакомиться на сайте проекта
Установка 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/
Последовательность следующая:
- routing_core.sql
- routing_core_wrappers.sql
- routing_topology.sql
- 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
Остальные скрипты запускаются аналогично.
Ну вот и все. В будущем попробую написать пост про то, как все это дело использовать при поиске наикратчайшего пути (тем более, что русской документации по этому очень сложно найти)
Недавно столкнулся с интересной технической задачей при работе с геоаналитикой GeoQlik . На моем проекте было необходимо интегрировать огромное количество картографических данных, которые при этом постоянно обновлялись.
Решать задачу с помощью постоянной перезаливки данных на сервер GeoQlik, естественно, нерационально. А если серверов несколько, то сложность задачи растет экспоненциально. Сегодня расскажу, как можно быстро справиться с такой задачей. А именно – как поднять небольшой картографический сервер на базе PostgreSQL и PostGIS для его последующего использования сервером GeoQlik.
PostgreSQL: установка
PostGIS: установка
Установку PostGIS можно осуществить полуавтоматически через Stack Builder и непосредственно скачав пакет PostGIS. Способы установки отличаются лишь методом получения установщика PostGIS. В первом случае Stack Builder запустится сам: «Пуск/PostgreSQL 8.4/Приложение Stack Builder». Рассмотрим подробнее именно этот вариант:
![](https://i1.wp.com/blog.atkcg.ru/wp-content/uploads/2015/03/07.gif)
Если вы решили скачать установщик PostGIS самостоятельно, то последнюю версию PostGIS можно скачать на сайте.
Ход установки:
![](https://i1.wp.com/blog.atkcg.ru/wp-content/uploads/2015/03/09.gif)
«Create spatial database» позволяет создать пространственную базу данных автоматически. Далее мы будем рассматривать процесс создания такой базы данных вручную, не прибегая к услугам установщика PostGIS, поэтому здесь мы отметку с этого пункта снимем.
![](https://i1.wp.com/blog.atkcg.ru/wp-content/uploads/2015/03/11.gif)
Жмем «Next» для завершения установки. На этом установка PostGIS завершена!
PostGIS: настройка базы данных
![](https://i0.wp.com/blog.atkcg.ru/wp-content/uploads/2015/03/13.gif)
Процесс создания пространственной базы данных без использования шаблона окончен. Таким образом, на данный момент времени мы имеем пространственную базу данных «postgis», готовую к наполнению данными.
PostGIS: наполнение базы данных
Чтобы наполнить базу данных нужно использовать утилиту PostGIS 2.0 Shapefile and DBF Loader Exporter (она установилась вместе с расширением Postgis, которое мы ставили через Stack Builder)
В нашем случае необходимо было экспортировать данные с сервера gis-lab.info, и залить их на наш сервер.
Экспорт
- Запускаем утилиту PostGIS
0
Shapefile
and
DBF
Loader
Exporter
(ее можно найти в пуске) и выбираем вкладку Export
- Нажимаем кнопку ‘View connection details…’ и вводим реквизиты сервера
gis-lab.info - Нажимаем “ОК”, и видим, что подключение было успешным.
- Далее нажимаем кнопку “Add table” и выбираем в всплывающем окне перечень таблиц для экспорта (в нашем случае это ru_adm3_federal и ru_adm4_region).
- Нажимаем “ОК”, теперь они отображаются в основном окне утилиты, далее нажимаем на кнопку “Export”.
- Выбираем путь, следим, чтобы выгрузка производилась в формате “.shp” (шейп-файлы):
- Появляется статус-бар, ждем окончания.
- Все выгрузилось успешно!
![](https://i0.wp.com/blog.atkcg.ru/wp-content/uploads/2015/03/23.jpg)
Теперь нужно проверить результат.
![](https://i2.wp.com/blog.atkcg.ru/wp-content/uploads/2015/03/2015-03-30_11-10-12.png)
Вот и все! Задача выполнена, можно приступать к настройке отчетов в GeoQlik.
В завершение хочу дать вам один полезный ресурс, на котором можно найти административные деления всех стран.
Успехов Вам в геоаналитике!