Installing PostGIS

PostGIS向PostgreSQL添加地理对象支持,将其转换为空间数据库。应在建造PostGIS之前安装GEOSPROJ.4GDAL您可能还需要其他库,请参见PostGIS要求

注意

在使用GeoDjango和PostGIS时,需要使用psycopg2模块作为数据库适配器。

在Debian / Ubuntu上,建议安装以下软件包:postgresql-x.x,postgresql-x.x-postgis,postgresql-server-dev-x.x,python-psycopg2(x.x匹配您要安装的PostgreSQL版本)。如果您在Mac OS XWindows上,也请参阅特定平台的说明。

Building from source

首先下载源文件,并解压:

$ wget http://download.osgeo.org/postgis/source/postgis-2.1.5.tar.gz
$ tar xzf postgis-2.1.5.tar.gz
$ cd postgis-2.1.5

接下来,配置,制作和安装PostGIS:

$ ./configure

最后,make和install:

$ make
$ sudo make install
$ cd ..

注意

GeoDjango不会自动创建空间数据库。有关详细信息,请参阅Creating a spatial database with PostGIS 2.0 and PostgreSQL 9.1+Creating a spatial database template for earlier versions一节。

Post-installation

Creating a spatial database with PostGIS 2.0 and PostgreSQL 9.1+

PostGIS 2包括用于Postgres 9.1+的扩展,可用于启用空间功能:

$ createdb  <db name>
$ psql <db name>
> CREATE EXTENSION postgis;

GeoDjango目前没有利用任何PostGIS拓扑功能如果您打算在某个时候使用这些功能,也可以通过发布CREATE EXTENSION postgis_topology来安装postgis_topology

在Django 1.8中更改:

现在,在migrate过程中,CREATE EXTENSION postgis 如果您愿意,您仍然可以手动创建。

Creating a spatial database template for earlier versions

如果您有早期版本的PostGIS或PostgreSQL,则CREATE EXTENSION不可用,您需要使用以下指示信息创建空间数据库。

使用PostGIS创建空间数据库与正常情况不同,因为必须加载附加SQL才能启用空间功能。由于此过程中的步骤,最好创建一个可以以后重复使用的数据库模板。

首先,您需要能够以特权数据库用户身份执行命令。例如,您可以使用以下语句成为postgres用户:

$ sudo su - postgres

注意

PostGIS SQL文件(例如,从POSTGIS_SQL_PATH)的位置取决于PostGIS的版本。版本1.5使用<sharedir>/contrib/postgis-1.5/postgis.sql

在这种情况下,请使用create_template_postgis-debian.sh脚本。

下面的示例假定PostGIS 1.5,因此您可能需要修改POSTGIS_SQL_PATH和您正在使用的特定版本的PostGIS的SQL文件的名称。

一旦您是数据库超级用户,那么您可以执行以下命令来创建PostGIS空间数据库模板:

$ POSTGIS_SQL_PATH=`pg_config --sharedir`/contrib/postgis-2.0
# Creating the template spatial database.
$ createdb -E UTF8 template_postgis
$ createlang -d template_postgis plpgsql # Adding PLPGSQL language support.
# Allows non-superusers the ability to create from this template
$ psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis';"
# Loading the PostGIS SQL routines
$ psql -d template_postgis -f $POSTGIS_SQL_PATH/postgis.sql
$ psql -d template_postgis -f $POSTGIS_SQL_PATH/spatial_ref_sys.sql
# Enabling users to alter spatial tables.
$ psql -d template_postgis -c "GRANT ALL ON geometry_columns TO PUBLIC;"
$ psql -d template_postgis -c "GRANT ALL ON geography_columns TO PUBLIC;"
$ psql -d template_postgis -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"

这些命令可以放在shell脚本中供以后使用;为了方便起见,提供了以下脚本:

PostGIS版本Bash shell脚本
1.5create_template_postgis-1.5.sh
Debian / Ubuntucreate_template_postgis-debian.sh

之后,您可以通过简单指定template_postgis作为要使用的模板(通过-T选项)来创建空间数据库:

$ createdb -T template_postgis <db name>

注意

虽然createdb命令不需要数据库超级用户权限,但它必须由具有创建数据库权限的数据库用户执行。您可以使用以下命令创建此类用户:

$ createuser --createdb <user>

PostgreSQL’s createdb fails

当PostgreSQL集群使用非UTF8编码时,create_template_postgis-*.sh脚本在执行createdb时将失败:

createdb: database creation failed: ERROR:  new encoding (UTF8) is incompatible
  with the encoding of the template database (SQL_ASCII)

当前解决方法是使用UTF8重新创建集群(在删除集群之前备份任何数据库)。

Managing the database

要管理数据库,您可以使用pgAdmin III程序(开始‣PostgreSQL 9.x‣pgAdmin III)或SQL Shell(开始‣PostgreSQL 9.x‣SQL Shell )。例如,要创建geodjango空间数据库和用户,可以从SQL Shell作为postgres用户执行以下操作:

postgres# CREATE USER geodjango PASSWORD 'my_passwd';
postgres# CREATE DATABASE geodjango OWNER geodjango TEMPLATE template_postgis ENCODING 'utf8';