Содержание
- 2.1. Требования
- 2.2. PostGIS
- 2.2.1.Создание пространственных баз данных,
совместимых с PostGIS, с помощью шаблона разработки
- 2.2.2. Обновление
- 2.2.3. Обычные проблемы
- 2.3. JDBC
- 2.4. Загрузчик/дампер
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 не поддерживаются.
-
Перед компиляцией серверных модулей PostGIS вы должны скомпилировать и
установить пакет PostgreSQL.
Замечание
Если вы планируете использовать функциональность GEOS, то вы можете
попробовать связать PostgreSQL со стандартной библиотекой C++:
LDFLAGS=-lstdc++ ./configure [ЗДЕСЬ ВАШИ ОПЦИИ] |
Это позволяет обойти мнимые ошибки C++ в старых средствах
разработки. Если вы столкнулись с непонятными проблемами (неожидано закрывается
сервер или что-то подобное), попробуйте этот подход. Разумеется,
он подразумевает повторную компиляцию вашего PostgreSQL.
- Скачайте архив исходных кодов PostGIS: http://postgis.refractions.net/postgis-1.3.3SVN.tar.gz.
Распакуйте архив:
# gzip -d -c postgis-1.3.3SVN.tar.gz | tar xvf - |
- Перейдите в директорию postgis-1.3.3SVN и выполните:
- Если вам нужна поддержка проекционных преобразований координат, у вас должна быть
установлена библиотека Proj4. Если ./configure ее не находит , используйте
--with-proj=PATH с указанием директории, куда установлен Proj4.
- Если вам нужна функциональность GEOS, у вас должна быть установлена библиотека GEOS. Если ./configure еене находит , используйте
--with-geos=PATH с указанием полного пути, по которому находится
программа geos-config.
- Выполните команды компиляции и установки.
Все файлы устанавливаются с использованием информации, предоставленной
pg_config.
- Библиотеки устанавливаются в [pkglibdir]/lib/contrib.
- Важные файлы поддержки, такие как lwpostgis.sql, устанавливаются в
[prefix]/share/contrib.
- Бинарные файлы загрузчика и дампера устанавливаются в
[bindir]/.
- PostGIS требует расширения процедурного языка PL/pgSQL. До загрузки lwpostgis.sql вы должны включить PL/pgSQL. Для этого следует
использовать команду createlang. Если по какой-то причине вам нужно сделать это вручную, обратитесь к Руководству программиста PostgreSQL.
# createlang plpgsql [yourdatabase] |
- Теперь загрузите описания объектов и функций PostGIS в вашу базу данных с
помощью файла определений lwpostgis.sql.
# psql -d [yourdatabase] -f lwpostgis.sql |
Теперь серверные расширения PostGIS загружены и готовы к использованию.
- Установить полную базу определений систем координат EPSG можно
загрузив файл определений spatial_ref_sys.sql который заполнит
таблицу SPATIAL_REF_SYS.
# psql -d [yourdatabase] -f spatial_ref_sys.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. Обычные проблемы
Есть несколько вещей, которые могут неожиданно помешать вашей установке или
обновлению.
- Проще всего распаковать дистрибутив PostGIS в директорию contrib в дереве
исходников PostgreSQL. Однако, если это невозможно, вы можете задать переменную
окружения PGSQL_SRC, указав путь к директории
исходников PostgreSQL. Это позволит вам скомпилировать PostGIS, но если
make install не сработает, будьте готовы самостоятельно разнести по соответствующим
местам библиотеки
PostGIS и исполняемые файлы.
- Проверьте, что у вас установлен PostgreSQL 7.2 или старше, и что вы
компилируете используя исходный код той же самой версии PostgreSQL, что и запущена.
Путаница может возникнуть, если в вашем дистрибутиве (Linux) уже установлен PostgreSQL, или, если вы имеете другую, давно забытую версию установленного PostgreSQL. PostGIS будет работать только с PostgreSQL 7.2 или старше. Если вы
попытаетесь использовать его со старой версией, то в результате получите
сообщение об ошибке. Проверить версию запущенного
PostgreSQL, можно подсоединившись к базе посредством psql и выполнив запрос:
Если у вас RPM-дистрибутив, вы можете проверить наличие
установленных пакетов с помощью команды rpm следующим способом:
rpm -qa | grep postgresql
Также проверьте, что необходимые изменения внесены в начало Makefile.config.
Они включают следующие изменения:
- Если вы хотите работать с проекционными преобразованиями, вы должны
установить библиотеку Proj4, в Makefile.config установить
переменную USE_PROJ в 1, а пременной PROJ_DIR присвоить ваш
префикс установки.
- Если вы хотите использовать функции GEOS, вы должны установить библиотеку GEOS , в Makefile.config установить переменную
USE_GEOS в 1, а переменной USE_GEOS присвоить ваш
префикс установки.
2.3. JDBC
Расширения JDBC предоставляют соответствующие объекты
Java внутренним типам PostGIS. Эти объекты могут быть использованы для написания Java-клиентов,
совершающих запросы к базе данных PostGIS, получающих или обрабатывающих данные ГИС.
- Перейдите в поддиректорию java/jdbc дистрибутива PostGIS.
- Запустите команду 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-файлы.
Более подробная документация доступна в онлайн-справке и руководстве.
Последнее обновление: August 14 2008 (Наверх)
|