postgispostgis入门


备注

PostGIS是PostgreSQL数据库的一组扩展。使用PostGIS,您可以存储地理空间数据并在postgres数据库上执行空间查询。

与普通postgres数据库上的默认数据类型不同,空间数据必须以不同方式处理。您可以在空间数据库上执行的查询通常由2或3维的边界框定义。为了存储,索引和处理这些数据类型,postGIS使用了一个名为R-Trees的概念,它不是默认postgres-installation的一部分。

使用postGIS数据库,您可以:

  • 存储空间数据
  • 执行空间查询,检索和提取信息(点,区域)。
  • 管理表格上的空间信息和元数据(例如:使用coorinate-reference-system)。
  • 将几何从一个坐标系转换为另一个坐标系
  • 比较几何,并提取属性(如:道路或建筑物的边长)
  • 从其他人生成新的几何。

版本

最新功能发布 官方文件发布日期
2.3.0 HTMLPDF 2016年9月26日
2.2.0 HTMLPDF 2015年10月7日
2.1.0 HTMLPDF 2013年8月17日
2.0.0 HTMLPDF 2012-04-03
1.5.0 2010-02-04
1.4.0 2009-07-24
1.3.0 2007-08-09
1.2.0 2006-12-08
1.1.0 2005-12-21
1.0.0 2005-04-19

地理空间“Hello World”

在此示例中,我们将设置地理空间数据库,从2个不同的源导入数据,并在名为QGIS的应用程序中查看结果。本指南是为linux-machines明确编写的,如果您在另一个平台上运行,某些命令或路径可能无法按预期工作。

为了查看导入的数据,我们将使用名为QGIS的应用程序。如果您没有此应用程序, 请先安装它 ,如果您想使用其他查看器或地理应用程序(如ArcGIS),则可以跳过安装QGIS。

我们的消息来源将是纽约市州议会区纽约市LION街道地图数据库 。请从链接的位置下载相应的文件。您还应该查看材料的元数据部分,因为它为您提供了这些文件使用的坐标参考系统的信息。

首先,创建一个工作文件夹“nycgis”,将下载的文件复制到该位置并解压缩存档。

mkdir nycgis
cd nycgis
cp ~/Downloads/nyad_16d.zip .
unzip ~/Downloads/nyad_16d.zip
cp ~/Downloads/nylion_16d.zip .
unzip  ~/Downloads/nylion_16d.zip
 

在“nycgis”文件夹中,您现在应该有2个文件夹:“nyad_16d”,“lion”,包含多个文件。

使用地理数据时,了解源数据的坐标参照系(CRS)和最终输出数据至关重要。在链接位置的元数据部分( 元数据:汇编区元数据:LION数据库 )中,您会发现两个文件的CRS是EPSG:2263,一个用于引用美国东北部的坐标系。

让我们假设我们想在数据库中使用不同的CRS。这可能有不同的原因,例如,我们可能希望在数据库上使用基于Web的地理应用程序。这种应用的常见CRS是WGS:84(EPSG:4326)。

要转换坐标系,我们使用名为ogr2ogr 的工具,它是GDAL包的一部分。在工作文件夹中,我们首先创建2个表示重新投影数据的文件夹,然后转换我们的数据。

mkdir nyad_16d_proj_4326
ogr2ogr -f "ESRI Shapefile" ./nyad_16d_proj_4326/nyad_4326.shp ./nyad_16d/nyad_16d.shp -s_srs EPSG:2263 -t_srs EPSG:4326

mkdir nylion_16d_proj_4326
ogr2ogr -f "ESRI Shapefile" ./nylion_16d_proj_4326/ny_str_4326.shp ./nylion_16d/lion/lion.gdb/a0000000d.gdbtable -s_srs EPSG:2263 -t_srs EPSG:4326
 

请注意,出于我们的目的,我们只使用LION-Database的名为“a0000000d.gdbtable”的文件。 ogr2ogr -command的语法如下:

ogr2ogr -f [output-format] [output-file] [input-file] -s_srs [source crs] -t_srs [target crs]
 

我们现在有2个shapefile,投影在正确的CRS中。为了使用我们数据库中的数据,我们必须将shapefile转换为sql-statemens。为此,我们使用一个名为shp2pgsql 的工具。在工作目录中运行以下命令:

shp2pgsql ./nyad_16d_proj_4326/nyad_4326.shp > nyad_4326.sql
shp2pgsql ./nylion_16d_proj_4326/ny_str_4326.shp > ny_streets_4326.sql
 

文件nyad_4326.sqlny_streets_4326.sql 现在可以在postgis中使用了。要继续,并导入数据,请创建一个空间启用的数据库。

sudo su - postgres
createdb nycgis
psql -d nycgis
 

在psql-session中,运行:

CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
 

用(CTRL + D)退出psql-和postgres-user-sessions。并导入文件:

psql -f nyad_4326.sql -d nycgis
psql -f ny_streets_4326.sql -d nycgis
 

数据库nycgis 现在有2个表,其中成功导入了重新投影的源。

要验证这一点:打开QGIS

  1. 使用图层 > 添加图层 > PostGIS-Layer
  2. 连接到您的数据库
  3. 选择你的表格
  4. (可选)设置新创建的图层的样式。

QGIS-截图

Etvoilà:您现在拥有一个空间启用的数据库,其中包含导入的重新投影的地理数据。

从Source安装(使用Postgres 9.1或更高版本)

本指南明确针对Linux机器上的PostgreSQL 9.1或更高版本。它使用postgres扩展功能,这将极大地改进对现有postgres安装的扩展的导入。如果您必须使用较旧版本的postgres,请参阅官方文档

解决依赖关系

PostGIS是一个复杂的项目,具有许多依赖项。为了继续手动配置和构建过程,您必须解决这些依赖关系并手动或通过包管理器安装以下软件包。

最低要求

  • PostgreSQL 9.1或更高版本。重要的是,安装包括服务器头的数据库,通常位于存储库的package-manager的dev -packages中。
  • GNU C编译器gcc
  • GNU make 。完成构建过程。
  • Proj4 。投影库,用于协调变换。
  • GEOS 。几何库,用于实现要素描述和简单几何。建议使用3.5或更高版本以使用更新的函数,例如ST_ClipByBox2DST_Subdivide
  • GDAL ,1.9或更高版本。一个为基于栅格和矢量的地理空间数据实现抽象数据格式的库。
  • LibXML2 ,版本2.5或更高版本。用于处理XML,XSLT和DTD的库。
  • JSON-C ,0.9或更高版本。用于以JSON格式创建输出的库

可选要求

  • GTK (需要GTK + 2.0,2.8 +)来编译shp2pgsql-gui。
  • SFCGAL 1.1版(或更高版本)可用于为PostGIS提供额外的2D和3D高级分析功能。
  • PCRE 。使用Perl 5语法进行正则表达式模式匹配的库。如果您想使用Adress Standardizer,则需要此库。
  • CUnit 。回归测试所需的单元测试实用程序。
  • 构建文档需要DocBook (xsltproc)。
  • 构建PDF格式的文档需要DBLatex
  • ImageMagick需要生成文档中使用的图像。

获取来源

要获取源代码,请下载最新的tarball:

wget http://postgis.net/stuff/postgis-2.3.2dev.tar.gz
tar -xvzf postgis-2.3.2dev.tar.gz
 

或使用官方SVN存储库:

svn checkout http://svn.osgeo.org/postgis/trunk/ postgis-2.3.2dev
 

组态

如果您通过SVN获取了源,则可以使用以下命令准备config脚本:

./autogen.sh
 

要为特定计算机配置构建过程,请在项目文件夹中运行:

./configure
 

配置步骤有几个可选参数。有关详细说明,请参阅官方文档 ,这通常是可选的,仅适用于使用非默认安装的服务器。

建立

配置步骤成功完成后,将创建一个makefile。要开始构建过程运行:

make
 

最后的输出应该是:

"PostGIS was built successfully. Ready to install."
 

从1.4.0版开始,所有函数都有从文档生成的注释。如果您希望稍后将这些注释安装到空间数据库中,请运行需要docbook的命令。

make comments
 

安装

安装所有扩展程序:

make install
 

如果您使用的是PostgreSQL 9.1或更高版本,则会自动构建和安装PostGIS扩展。如果您有不同的设置,则可以手动安装必要的扩展。

在项目文件夹中:

cd extensions
cd postgis
make clean
make
make install

cd ..
cd postgis_topology
make clean
make
make install

cd ..
cd postgis_sfcgal
make clean
make
make install

cd ..
cd address_standardizer
make clean
make
make install
make installcheck

cd ..
cd postgis_tiger_geocoder
make clean
make
make install
make installcheck
 

如果要在其他计算机上手动安装扩展,请将以下文件从extensions 文件夹复制到目标的PostgreSQL/share/extension -folder中。对于每个分机:

scp extensions/[EXTENSION]/sql/*.sql user@target:[POSTGIS_PATH]/share/extension
 

其中[EXTENSION]是所选扩展名(postgis,postgis_topology,postgis_sfcgal,address_standardizer,postgis_tiger_geocoder), [POSTGIS_PATH]是目标计算机上的PostGIS安装路径。

验证安装

如果您没有运行postgres数据库服务, 请先设置postgres数据库 。使用以下方法连接数据库:

su postgres -c psql
 

要验证扩展是否可访问,请在psql-session中运行以下查询:

SELECT name, default_version,installed_version FROM pg_available_extensions WHERE name LIKE 'postgis%' or name LIKE 'address%';
 

输出应如下所示:

             name             | default_version | installed_version
------------------------------+-----------------+-------------------
 address_standardizer         | 2.3.2dev        | 2.3.2dev
 address_standardizer_data_us | 2.3.2dev        | 2.3.2dev
 postgis                      | 2.3.2dev        | 2.3.2dev
 postgis_sfcgal               | 2.3.2dev        |
 postgis_tiger_geocoder       | 2.3.2dev        | 2.3.2dev
 postgis_topology             | 2.3.2dev        |

(6 rows)
 

要执行深入的安装后测试,请在项目文件夹中运行以下命令:

make check
 

这将使用生成的库对照实际的PostgreSQL数据库进行各种检查和测试。

通过包管理器安装

拱:

提供官方pacman包。使用以下命令以root身份安装软件包:

pacman -S postgis
 

OpenSuse当中:

要将openSuse存储库用于地理空间应用程序,请以root身份启用Geo存储库:

zypper ar http://download.opensuse.org/repositories/Application:/Geo/openSUSE_[RELEASE]/ GEO 
 

其中[RELEASE]是您的Suse发行版的官方发行版号。在此之后,您可以使用以下命令安装postgis:

zypper install postgis
 

设置地理空间数据库

要创建新的空数据库,请以postgres-user身份运行:

createdb [yourdatabase]
 

使用psql-session连接到数据库:

psql -d [yourdatabase]
 

在psql-session运行中:

CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
 

创建必要的地理空间扩展。完成此操作后,数据库就是一个支持地理空间的数据库,可以使用了。