Решил собрать в одном месте описание по установке связки GeoDjango + PostgreSQL + PostGIS под Ubuntu и CentOS.
Теория по ГИС + python хорошо описана в книге Erik Westra, Python Geospatial Development.
Практика по GeoDjango есть тут.
Новое в PostgreSQL 9.
Под Ubuntu последние версии Postgresql, Proj, GEOS, GDAL есть в двух дополнительных репозитариях
sudo add-apt-repository ppa:pitti/postgresql sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable sudo apt-get update sudo apt-get install postgresql-9.0 postgresql-server-dev-9.0 postgresql-contrib-9.0 proj libgeos-3.2.2
libgeos-c1 libgeos-dev libgdal1-1.8.0 libgdal1-dev build-essential libxml2 libxml2-dev checkinstall
В репозитарии ubuntugis-unstable есть postgis, но идет без шаблонов (templates). Поэтому установим postgis из сорцов
wget http://postgis.refractions.net/download/postgis-1.5.2.tar.gz tar zxvf postgis-1.5.2.tar.gz && cd postgis-1.5.2/ sudo ./configure && sudo make && sudo checkinstall --pkgname postgis-1.5.2
--pkgversion 1.5.2-src --default
Установим недостающие python-модули
pip install psycopg2==2.4.1 pyproj
Установил psycopg2 версии 2.4.1, т.к. 2.4.2 выкидывает ошибку
psycopg2.ProgrammingError: autocommit cannot be used inside a transaction
Укажем пароль для пользователя postgres
sudo passwd postgres
Добавим в /etc/postgresql/9.0/main/pg_hba.conf
local all postgres trust local all all md5
Создадим шаблон для будущих баз с поддержкой ГИС.
sudo su - postgres wget http://docs.djangoproject.com/en/dev/_downloads/create_template_postgis-1.5.sh sh create_template_postgis-1.5.sh
Создадим тестувую базу
createdb -T template_postgis testgis
Укажем путь к библиотеке GDAL в settings.py (я использую django 1.3)
GDAL_LIBRARY_PATH = "/usr/lib/libgdal1.8.0.so.1"
Проверим установленные компоненты (предполагается, что django-проект уже создан).
./manage.py shell #GDAL >>> from django.contrib.gis import gdal >>> gdal.HAS_GDAL True #GEOS >>> from django.contrib.gis import geos >>> geos.geos_version() #Proj import pyproj pyproj.__version__ pyproj.test()
Запустим тесты GeoDjango, для этого добавим в INSTALLED_APPS - django.contrib.gis и создадим файл postgis.py в корне проекта с таким содержанием
TEST_RUNNER = 'django.contrib.gis.tests.GeoDjangoTestSuiteRunner' DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.postgis', 'NAME': 'testgis', 'USER': 'postgres', 'PASSWORD': 'qwerty', # 'OPTIONS': { # 'autocommit': True, # } } } GDAL_LIBRARY_PATH = "/usr/lib/libgdal1.8.0.so.1"
Запустим тесты
python manage.py test --settings=postgis
Под CentOS добавим новые репозитарии: PostgreSQL Yum и EPEL.
rpm -Uhv http://yum.pgrpms.org/reporpms/9.0/pgdg-centos-9.0-2.noarch.rpm rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
Подправим файл /etc/yum.repos.d/CentOS-Base.repo и исключим установку postgresql пакетов из базового репозитария
[base] name=CentOS-$releasever - Base ... exclude=postgresql* exclude=geos* #released updates [updates] name=CentOS-$releasever - Updates ... exclude=postgresql* exclude=geos*
Установим PostgreSQL
yum install gcc gcc-c++ postgresql90-contrib postgresql90-docs postgis90 postgis90-utils
postgis90-docs postgresql90-server postgresql90-devel proj geos
Обновление с PostgreSQL 8.4 на 9.0 описанно тут.
Инициализируем БД
service postgresql-9.0 initdb service postgresql-9.0 start
Установим python 2.6 и pip (Еще один репозитарий с python2.6 для CentOS)
yum install python26-devel python26-setuptools easy_install-2.6 pip
Создадим виртуальное окружение, добавим туда нужные модули
pip-2.6 install Django pyproj psycopg2==2.4.1
Укажем пароль для пользователя postgres.
passwd postgres
Добавим в /var/lib/pgsql/9.0/data/pg_hba.conf
local all postgres trust local all all md5
Перезапустим postgresql
service postgresql-9.0 restart
Создадим шаблон
sudo su - postgres wget http://docs.djangoproject.com/en/dev/_downloads/create_template_postgis-1.5.sh export PATH=/usr/pgsql-9.0/bin:$PATH sh create_template_postgis-1.5.sh
createdb -T template_postgis testgis
Установим checkinstall
wget http://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.2.tar.gz tar zxvf checkinstall-1.6.2.tar.gz && cd checkinstall-1.6.2 make make install yum install rpm-build
Установим последнюю версию GDAL
wget http://download.osgeo.org/gdal/gdal-1.8.1.tar.gz tar zxvf gdal-1.8.1.tar.gz && cd gdal-1.8.1 ./configure make /usr/local/sbin/checkinstall rpm -i /usr/src/redhat/RPMS/i386/gdal-1.8.1-1.i386.rpm
Укажем путь к библиотеке GDAL в settings.py (django 1.3)
GDAL_LIBRARY_PATH = "/usr/local/lib/libgdal.so"
Дополнения и примеры