GIS-LAB

Географические информационные системы и дистанционное зондирование

Руководство по PostGIS

Глава 2. Установка

<<< предыдущая глава | оглавление | следующая глава >>>

Содержание

2.1. Требования

PostGIS имеет следующие требования для сборки и использования:

  • Полная инсталляция PostgreSQL (включая серверные заголовки). PostgreSQL можно взять на http://www.postgresql.org. Необходима версия 7.2 или выше.

  • Компилятор GNU C (gcc). Некоторые другие компиляторы ANSI C тоже могут быть использованы для компиляции PostGIS, но у вас будет гораздо меньше проблем, если будете использовать gcc.

  • GNU Make (gmake или make). Для большинства систем GNU make является версией make по умолчанию. Проверьте версию вызовом make -v. Другие версии make могут не обработать свойства Makefile PostGIS.

  • (Рекомендуется) Библиотека проекционных преобразований Proj4. Библиотека Proj4 используется в PostGIS для поддержки работы с проекционными преобразованиями координат. Proj4 можно скачать с http://www.remotesensing.org/proj.

  • (Рекомендуется) Геометрическая библиотека GEOS. Библиотека GEOS используется в PostGIS для проведения геометрических тестов (ST_Touches(), ST_Contains(), ST_Intersects()) и операций (ST_Buffer(), ST_Union(), ST_Difference()). GEOS можно скачать с http://geos.refractions.net.

2.2. PostGIS

Модуль PostGIS является расширением серверной части PostgreSQL. Поэтому для компиляции PostGIS 1.3.3 необходим полный доступ к заголовками сервера PostgreSQL. Исходный код PostgreSQL можно скачать с http://www.postgresql.org.

PostGIS 1.3.3 может быть собран только с PostgreSQL версии 7.2.0 или более старшей. Предыдущие версии PostgreSQL не поддерживаются.

  1. Перед компиляцией серверных модулей PostGIS вы должны скомпилировать и установить пакет PostgreSQL.

    Замечание

    Если вы планируете использовать функциональность GEOS, то вы можете попробовать связать PostgreSQL со стандартной библиотекой C++:

    LDFLAGS=-lstdc++ ./configure [ЗДЕСЬ ВАШИ ОПЦИИ]

    Это позволяет обойти мнимые ошибки C++ в старых средствах разработки. Если вы столкнулись с непонятными проблемами (неожидано закрывается сервер или что-то подобное), попробуйте этот подход. Разумеется, он подразумевает повторную компиляцию вашего PostgreSQL.

  2. Скачайте архив исходных кодов PostGIS: http://postgis.refractions.net/postgis-1.3.3SVN.tar.gz. Распакуйте архив:

    # gzip -d -c postgis-1.3.3SVN.tar.gz | tar xvf -

  3. Перейдите в директорию postgis-1.3.3SVN и выполните:

    # ./configure
    • Если вам нужна поддержка проекционных преобразований координат, у вас должна быть установлена библиотека Proj4. Если ./configure ее не находит , используйте --with-proj=PATH с указанием директории, куда установлен Proj4.
    • Если вам нужна функциональность GEOS, у вас должна быть установлена библиотека GEOS. Если ./configure еене находит , используйте --with-geos=PATH с указанием полного пути, по которому находится программа geos-config.
  4. Выполните команды компиляции и установки.

    # make
    # make install

    Все файлы устанавливаются с использованием информации, предоставленной pg_config.

    • Библиотеки устанавливаются в [pkglibdir]/lib/contrib.
    • Важные файлы поддержки, такие как lwpostgis.sql, устанавливаются в [prefix]/share/contrib.
    • Бинарные файлы загрузчика и дампера устанавливаются в [bindir]/.

  5. Если не установлен proj или его версия ниже 4.5, его нужно установить заново:

    wget http://download.osgeo.org/proj/proj-4.6.0.tar.gz
    tar xvzf proj-4.6.0.tar.gz
    cd proj-4.6.0
    ./configure && make clean && make
    make install
    ldconfig
    cd ..
  6. Если не установлен geos или его версия ниже 3.0, его нужно установить заново:

    wget http://download.osgeo.org/geos/geos-3.0.3.tar.bz2
    tar xvjf geos-3.0.3.tar.bz2
    cd geos-3.0.3
    ./configure && make clean && make
    make install
    ldconfig
    cd ..
  7. PostGIS требует расширения процедурного языка PL/pgSQL. До загрузки lwpostgis.sql вы должны включить PL/pgSQL. Для этого следует использовать команду createlang. Если по какой-то причине вам нужно сделать это вручную, обратитесь к Руководству программиста PostgreSQL.

    # createlang plpgsql [yourdatabase]

  8. Теперь загрузите описания объектов и функций PostGIS в вашу базу данных с помощью файла определений lwpostgis.sql.

    # psql -d [yourdatabase] -f lwpostgis.sql

    Теперь серверные расширения PostGIS загружены и готовы к использованию.

  9. Установить полную базу определений систем координат EPSG можно загрузив файл определений spatial_ref_sys.sql который заполнит таблицу SPATIAL_REF_SYS.

    # psql -d [yourdatabase] -f spatial_ref_sys.sql
  10. Полезные описания функций включенных в postgis, устанавливаются с помощью файла postgis_comments.sql.

    # psql -d [yourdatabase] -f postgis_comments.sql

2.2.1.Создание пространственных баз данных, совместимых с PostGIS, с помощью шаблона разработки

Некоторые пакетные дистрибутивы PostGIS (особенно инсталляторы под Win32 для PostGIS >= 1.1.5) загружают функции PostGIS в шаблон базы данных template_postgis. Если в вашей установке PostgreSQL содержится база данных template_postgis, то пользователи и/или приложения могут создавать пространственно-совместимые базы данных с помощью единственной команды. Заметим, что в обоих случаях пользователь базы данных должен иметь права на создание новых баз данных.

С помощью shell:

# createdb -T template_postgis my_spatial_db

С помощью SQL:

postgres=# CREATE DATABASE my_spatial_db TEMPLATE=template_postgis

 

2.2.2. Обновление

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

К несчастью, не все определения могут быть легко заменены в существующей базе данных, поэтому лучше использовать dump/reload.

PostGIS предоставляет процедуру SOFT UPGRADE для незначительных релизов и исправлений ошибок, и процедуру HARD UPGRADE для значительных релизов.

Перед попыткой обновления PostGIS необходимо сделать резервное копирование данных. Если вы используете pg_dump с флагом -Fc, вы должны уметь восстанавливать дамп с помощью HARD UPGRADE.

2.2.2.1. SOFT-обновление

SOFT-обновление заключается в выполнении скрипта lwpostgis_upgrade.sql для вашей пространственной базе данных:

$ psql -f lwpostgis_upgrade.sql -d your_spatial_database

Не стесняйтесь сначала использовать SOFT-обновление, так как если скрипт не может его выполнить, он будет отменен и вы будете оповещены о необходимости выполнения HARD-обновления.

Замечание

Если вы не нашли файл lwpostgis_upgrade.sql, вероятно, вы используете версию ниже 1.1 и должны создать этот файл самостоятельно. Это делается следующей командой:

$ utils/postgis_proc_upgrade.pl lwpostgis.sql > lwpostgis_upgrade.sql

2.2.2.2.HARD-обновление

Под HARD-обновлением мы имеем в виду полный dump/reload баз данный использующих PostGIS. HARD-обновление необходимо, когда изменяются встроенные объекты PostGIS или когда невозможно SOFT-обновление. В приложении Примечания к релизам сообщается, необходим ли вам dump/reload (HARD-обновление) для перехода на тот или иной релиз.

PostGIS предоставляет полезный скрипт для востановления дампа, созданного командой pg_dump -Fc. Он является экспериментальным и переназначение его вывода в файл может помочь в разрешении проблем. Это делается так:

Пусть база данных, которую вы хотите обновить, называется "olddb". Создайте ее "custom-format" дамп.

$ pg_dump -Fc olddb > olddb.dump

Восстановим дамп после обновления PostGIS в новую базу данных. Новая база данных не обязательно должна существовать. Скрипт postgis_restore принимает параметры createdb после имени файла с дампом, и это может быть использовано, например, если вы используете нестандартную кодировку символов в своей базе данных. Назовем эту базу "newdb" и зададим на ней кодировку символов UNICODE:

$ sh utils/postgis_restore.pl lwpostgis.sql newdb olddb.dump -E=UNICODE > restore.log

Убедитесь, что все объекты восстанавливаемого дампа были реально восстановлены и не конфликтуют с определениями из lwpostgis.sql.

$ grep ^KEEPING restore.log | less

Если производится обновление PostgreSQL < 8.0 на >= 8.0, вы можете удалить столбцы attrelid, varattnum и stats в таблице geometry_columns, которые больше не нужны. Но их сохранение также безвредно. ИХ УДАЛЕНИЕ, КОГДА ОНИ ДЕЙСТВИТЕЛЬНО НУЖНЫ, ВЕСЬМА БОЛЕЗНЕННО!

$ psql newdb -c "ALTER TABLE geometry_columns DROP attrelid"
$ psql newdb -c "ALTER TABLE geometry_columns DROP varattnum"
$ psql newdb -c "ALTER TABLE geometry_columns DROP stats"

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

$ psql newdb
newdb=> drop spatial_ref_sys;
DROP
newdb=> \i spatial_ref_sys.sql

 

2.2.3. Обычные проблемы

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

  1. Проще всего распаковать дистрибутив PostGIS в директорию contrib в дереве исходников PostgreSQL. Однако, если это невозможно, вы можете задать переменную окружения PGSQL_SRC, указав путь к директории исходников PostgreSQL. Это позволит вам скомпилировать PostGIS, но если make install не сработает, будьте готовы самостоятельно разнести по соответствующим местам библиотеки PostGIS и исполняемые файлы.

  2. Проверьте, что у вас установлен PostgreSQL 7.2 или старше, и что вы компилируете используя исходный код той же самой версии PostgreSQL, что и запущена. Путаница может возникнуть, если в вашем дистрибутиве (Linux) уже установлен PostgreSQL, или, если вы имеете другую, давно забытую версию установленного PostgreSQL. PostGIS будет работать только с PostgreSQL 7.2 или старше. Если вы попытаетесь использовать его со старой версией, то в результате получите сообщение об ошибке. Проверить версию запущенного PostgreSQL, можно подсоединившись к базе посредством psql и выполнив запрос:

    SELECT version();

    Если у вас RPM-дистрибутив, вы можете проверить наличие установленных пакетов с помощью команды rpm следующим способом: rpm -qa | grep postgresql

Также проверьте, что необходимые изменения внесены в начало Makefile.config. Они включают следующие изменения:

  1. Если вы хотите работать с проекционными преобразованиями, вы должны установить библиотеку Proj4, в Makefile.config установить переменную USE_PROJ в 1, а пременной PROJ_DIR присвоить ваш префикс установки.

  2. Если вы хотите использовать функции GEOS, вы должны установить библиотеку GEOS , в Makefile.config установить переменную USE_GEOS в 1, а переменной USE_GEOS присвоить ваш префикс установки.

2.3. JDBC

Расширения JDBC предоставляют соответствующие объекты Java внутренним типам PostGIS. Эти объекты могут быть использованы для написания Java-клиентов, совершающих запросы к базе данных PostGIS, получающих или обрабатывающих данные ГИС.

  1. Перейдите в поддиректорию java/jdbc дистрибутива PostGIS.

  2. Запустите команду ant. Скопируйте файл postgis.jar туда, где хранятся библиотеки java.

Расширения JDBC требуют чтобы драйвер PostgreSQL JDBC располагался в директории указанной в CLASSPATH в процессе сборки. Если драйвер PostgreSQL JDBC расположен в другом месте, можно передать его местоположение его файла JAR отдельно, используя параметр -D:

# ant -Dclasspath=/path/to/postgresql-jdbc.jar

Драйверы PostgreSQL JDBC могут быть загружены с http://jdbc.postgresql.org.

2.4. Загрузчик/дампер

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

# cd postgis-1.3.3SVN/loader
# make
# make install

Загрузчик вызывается как shp2pgsql и конвертирует ESRI Shape-файлы в SQL подходящий для загрузки в PostGIS/PostgreSQL. Дампер вызывается как pgsql2shp и конвертирует таблицы (или запросы) в ESRI Shape-файлы. Более подробная документация доступна в онлайн-справке и руководстве.

<<< предыдущая глава | оглавление | следующая глава >>>

Обсудить в форуме Комментариев — 21

Последнее обновление: December 03 2008