PostGIS向PostgreSQL添加地理对象支持,将其转换为空间数据库。应在建造PostGIS之前安装GEOS,PROJ.4和GDAL。您可能还需要其他库,请参见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 X或Windows上,也请参阅特定平台的说明。
首先下载源文件,并解压:
$ 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一节。
PostGIS 2包括用于Postgres 9.1+的扩展,可用于启用空间功能:
$ createdb <db name>
$ psql <db name>
> CREATE EXTENSION postgis;
GeoDjango目前没有利用任何PostGIS拓扑功能。如果您打算在某个时候使用这些功能,也可以通过发布CREATE EXTENSION postgis_topology来安装postgis_topology ;。
现在,在migrate过程中,CREATE EXTENSION postgis 如果您愿意,您仍然可以手动创建。
如果您有早期版本的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.5 | create_template_postgis-1.5.sh |
Debian / Ubuntu | create_template_postgis-debian.sh |
之后,您可以通过简单指定template_postgis作为要使用的模板(通过-T选项)来创建空间数据库:
$ createdb -T template_postgis <db name>
注意
虽然createdb命令不需要数据库超级用户权限,但它必须由具有创建数据库权限的数据库用户执行。您可以使用以下命令创建此类用户:
$ createuser --createdb <user>
当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重新创建集群(在删除集群之前备份任何数据库)。
要管理数据库,您可以使用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';
2015年5月13日