Chapter 2. PostGIS安装

Table of Contents
2.1. 简略版
2.2. 从源代码编译和安装
2.2.1. 获取来源
2.2.2. 安装要求
2.2.3. 生成配置
2.2.4. 构建
2.2.5. 构建和部署PostGIS扩展模块
2.2.6. 测试
2.2.7. 安装
2.3. 安装和使用地址标准化程序
2.3.1. 安装Regex::Assetble
2.4. 安装、升级Tiger地理编码器并加载数据
2.4.1. 启用PostGIS数据库的Tiger地理编码器:使用扩展模块
2.4.2. 启用您的PostGIS数据库的Tiger地理编码器:不使用扩展模块
2.4.3. 将地址标准化扩展与Tiger地理编码器结合使用
2.4.4. 正在加载TIGER数据
2.4.5. 升级您的Tiger地理编码器安装
2.5. 安装过程中的常见问题

本章详细介绍安装PostGIS所需的步骤。

2.1. 简略版

要在假设搜索路径中具有所有依赖项的情况下进行编译,请执行以下操作:

tar -xvfz postgis-3.3.0dev.tar.gz
cd postgis-3.3.0dev
./configure
make
make install

安装PostGIS后,需要启用它( Section 3.3, “创建空间数据库” )或升级( Section 3.4, “升级空间数据库” )在要在其中使用它的每个单独数据库中。

2.2. 从源代码编译和安装

[Note]

许多操作系统现在都包含针对PostgreSQL/PostGIS的预建程序包。在许多情况下,只有当您想要最先进的版本或您是包的维护者时,编译才是必要的。

本节包括一般编译说明,如果您正在为Windows ETC或其他操作系统编译,您可以在以下位置找到更多更详细的帮助 PostGIS用户贡献的编译指南 PostGIS开发人员维基

中列出了针对各种操作系统的预建程序包 PostGIS预建程序包

如果您是Windows用户,则可以通过StackBuilder或 PostGIS Windows下载站点 我们也有 非常尖端的Windows试验性构建 通常每周建造一到两次,或者每当有令人兴奋的事情发生时。您可以使用这些工具来体验正在进行的PostGIS版本

The PostGIS module is an extension to the PostgreSQL backend server. As such, PostGIS 3.3.0dev requires full PostgreSQL server headers access in order to compile. It can be built against PostgreSQL versions 11 or higher. Earlier versions of PostgreSQL are not supported.

如果您尚未安装PostgreSQL,请参阅PostgreSQL安装指南。 http://www.postgresql.org

[Note]

对于GEOS功能,在安装PostgresSQL时,可能需要将PostgreSQL显式链接到标准C++库:

LDFLAGS=-lstdc++ ./configure [YOUR OPTIONS HERE]

这是一种针对伪C++异常与旧开发工具交互的变通方法。如果您遇到奇怪的问题(后端意外关闭或类似的事情),请尝试此技巧。当然,这需要从头开始重新编译您的PostgreSQL。

以下步骤概述了PostGIS源代码的配置和编译。它们是为Linux用户编写的,不能在Windows或Mac上运行。

2.2.1. 获取来源

Retrieve the PostGIS source archive from the downloads website http://postgis.net/stuff/postgis-3.3.0dev.tar.gz

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

这将创建一个名为 postgis-3.3.0dev 在当前工作目录中。

或者,从 吉特 存储库 https://git.osgeo.org/gitea/postgis/postgis/

git clone https://git.osgeo.org/gitea/postgis/postgis.git postgis

更改为新创建的 postgis 目录以继续安装。

2.2.2. 安装要求

PostGIS对构建和使用有以下要求:

必填项

  • PostgreSQL 11 或者更高。需要完整安装PostgreSQL(包括服务器标头)。可从以下网址获得PostgreSQL http://www.postgresql.org

    有关完整的PostgreSQL/PostGIS支持列表和PostGIS/GEOS支持列表,请参阅 http://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS

  • GNU C编译器( gcc )。其他一些ANSI C编译器可用于编译PostGIS,但我们在使用编译时发现问题要少得多 gcc

  • GNU Make( gmakemake )。对于许多系统,GNU make 是Make的默认版本。通过调用以下命令检查版本 make -v 。其他版本的 make 可能不会处理PostGIS Makefile 恰到好处。

  • 项目重投影库。要求项目4.9或以上。Proj库用于在PostGIS中提供坐标重投影支持。可从以下地址下载项目 https://proj.org/

  • GEOS几何库,3.6版或更高版本,但需要GEOS 3.9+才能充分利用所有新功能和特性。可从以下地址下载GEOS http://trac.osgeo.org/geos/

  • LibXML2,2.5.x版或更高版本。LibXML2目前用于一些导入函数(ST_GeomFromGML和ST_GeomFromKML)。LibXML2可从以下地址下载 http://xmlsoft.org/downloads.html

  • JSON-C,0.9版或更高版本。JSON-C目前用于通过函数ST_GeomFromGeoJson导入GeoJSON。JSON-C可从以下地址下载 https://github.com/json-c/json-c/releases/

  • 需要GDAL版本2+,最好是3+版本。这是栅格支持所必需的。 http://trac.osgeo.org/gdal/wiki/DownloadSource

  • 如果使用PostgreSQL+JIT编译,则为LLVM版本 > =6是必填项 https://trac.osgeo.org/postgis/ticket/4125

可选

  • GDAL(伪可选)只有当您不想要栅格时,才可以省略它。此外,请确保启用要使用的驱动程序,如中所述 Section 3.2, “配置栅格支持”

  • Gtk(需要gtk+2.0、2.8+)来编译shp2pgsql-gui图形文件加载器。 http://www.gtk.org/

  • 建议使用SFCGAL 1.3.1(或更高版本)、1.4.0或更高版本。SFCGAL可用于为PostGIS cf提供额外的2D和3D高级分析功能 Section 8.20, “SFCGAL函数” 。还允许将SFCGAL而不是GEOS用于由两个后端提供的一些2D函数(例如,ST_Interaction或ST_Area)。一个PostgreSQL配置变量 postgis.backend 如果安装了SFCGAL(默认情况下是GEOS),允许最终用户控制他想要使用的后端。注意:SFCGAL 1.2至少需要CGAL 4.3和Boost 1.54(参见: https://oslandia.gitlab.io/SFCGAL/dev.html ) https://gitlab.com/Oslandia/SFCGAL/

  • 为了建造 Section 14.1, “地址标准器” 您还需要PCRE http://www.pcre.org (它通常已经安装在NIX系统上)。 Regex::Assemble Perl CPAN包仅在您想要重建在 parseaddress-stcities.hSection 14.1, “地址标准器” 如果它检测到PCRE库,或者您传入了有效的 --with-pcre-dir=/path/to/pcre 在配置过程中。

  • 要启用ST_AsMVT Protobuf-c库1.1.0或更高版本(用于使用)和proc-c编译器(用于构建)。此外,需要使用pkg-config来验证正确的最低版本的probuf-c。看见 Protobuf-c 。默认情况下,Postgis将使用Wagyu更快地验证MVT多边形,这需要C++11编译器。它将使用CXXFLAGS和与PostgreSQL安装相同的编译器。要禁用此功能并改用GEOS,请使用 --without-wagyu 在配置步骤期间。

  • CUnit( CUnit )。这是回归测试所必需的。 http://cunit.sourceforge.net/

  • DocBook( xsltproc )是构建文档所必需的。Docbook可从 http://www.docbook.org/

  • DBLatex( dblatex )是构建PDF格式文档所必需的。DBLatex可从以下网址获得 http://dblatex.sourceforge.net/

  • ImageMagick( convert )才能生成文档中使用的图像。ImageMagick可从 http://www.imagemagick.org/

2.2.3. 生成配置

与大多数Linux安装一样,第一步是生成将用于构建源代码的Makefile。这是通过运行外壳脚本来完成的

./configure

在没有附加参数的情况下,该命令将尝试自动定位在您的系统上构建PostGIS源代码所需的组件和库。尽管这是最常见的 ./configure 对于那些在非标准位置拥有所需的库和程序的用户,该脚本接受几个参数。

以下列表仅显示最常用的参数。有关完整列表,请使用 --help--help=short 参数。

--with-library-minor-version

从PostGIS 3.0开始,默认生成的库文件将不再将次要版本作为文件名的一部分。这意味着所有的PostGIS 3库都将以 postgis-3 。这样做是为了使PG_Upgrade更容易,缺点是您只能在服务器上安装一个版本的PostGIS3系列。要获取包括次要版本的文件的旧行为:例如 postgis-3.0 将此开关添加到您的配置语句中。

--prefix=PREFIX

这是将安装PostGIS加载器可执行文件和共享库的位置。默认情况下,此位置与检测到的PostgreSQL安装位置相同。

[Caution]

此参数当前无效,因为该程序包将仅安装到PostgreSQL安装目录中。参观 http://trac.osgeo.org/postgis/ticket/635 来追踪这个窃听器。

--with-pgconfig=FILE

PostgreSQL提供了一个名为 pg_config 以使像PostGIS这样的扩展能够找到PostgreSQL安装目录。使用此参数( --with-pgconfig=/path/to/pg_config )以手动指定特定的PostgreSQL安装,PostGIS将基于该安装进行构建。

--with-gdalconfig=FILE

GDAL是必需库,提供栅格支持所需的功能 gdal-config 以使软件安装能够找到GDAL安装目录。使用此参数( --with-gdalconfig=/path/to/gdal-config 手动指定一个特定的GDAL安装,PostGIS将基于该安装进行构建。

--with-geosconfig=FILE

GEOS是必需的几何库,它提供了一个名为的实用程序 geos-config 以使软件安装能够找到GEOS安装目录。使用此参数( --with-geosconfig=/path/to/geos-config 手动指定特定的GEOS安装,PostGIS将基于该安装进行构建。

--with-xml2config=FILE

LibXML是执行GeomFromKML/GML过程所需的库。如果您已安装libxml,则通常会找到它,但如果未安装或想要使用特定版本,则需要将PostGIS指向特定的 xml2-config 配置文件,使软件安装能够找到LibXML安装目录。使用此参数( >--with-xml2config=/path/to/xml2-config 手动指定特定的LibXML安装,PostGIS将基于该安装进行构建。

--with-projdir=DIR

Proj是PostGIS所需的重投影库。使用此参数( --with-projdir=/path/to/projdir )手动指定特定的项目安装目录,PostGIS将根据该目录进行构建。

--with-libiconv=DIR

安装图标v的目录。

--with-jsondir=DIR

JSON-C 是PostGIS ST_GeomFromJSON支持所需的麻省理工学院许可的JSON库。使用此参数( --with-jsondir=/path/to/jsondir )来手动指定特定的JSON-C安装目录,PostGIS将根据该目录进行构建。

--with-pcredir=DIR

PCRE 是ADDRESS_STANDAREZER扩展所需的BSD许可的Perl兼容正则表达式库。使用此参数( --with-pcredir=/path/to/pcredir )手动指定特定的PCRE安装目录,PostGIS将根据该目录进行构建。

--with-gui

编译数据导入图形用户界面(需要GTK+2.0)。这将创建shp2pgsql-gui到shp2pgsql的图形界面。

--without-raster

在没有栅格支持的情况下编译。

--without-topology

禁用拓扑支持。没有相应的库,因为拓扑所需的所有逻辑都在postgis中- 3.3.0dev 类库。

--with-gettext=no

默认情况下,PostGIS将尝试检测GetText支持并使用它进行编译,但是如果遇到导致加载程序损坏的不兼容问题,可以使用此命令完全禁用它。请参阅票证 http://trac.osgeo.org/postgis/ticket/748 对于通过使用此配置解决的问题的示例。注意:关闭此功能不会错过太多内容。它用于对图形用户界面加载器的国际帮助/标签支持,该加载器尚未形成文档,仍处于实验阶段。

--with-sfcgal=PATH

默认情况下,如果没有此开关,PostGIS将不会安装sfcga支持。 PATH 是一个可选参数,它允许指定sfcga-config的替代路径。

--without-phony-revision

禁用更新postgis_revision.h以匹配git存储库的当前头。

[Note]

如果您是从 代码库 ,第一步是真正运行脚本

./autogen.sh

此脚本将生成 configure 脚本,而该脚本又用于定制PostGIS的安装。

如果您以tarball的形式获取了PostGIS,运行 ./autogen.sh 不是必需的,因为 configure 已经生成了。

2.2.4. 构建

生成Makefile后,构建PostGIS就像运行

make

输出的最后一行应该是“ PostGIS was built successfully. Ready to install.

从PostGISv1.4.0开始,所有函数都有从文档生成的注释。如果您希望稍后将这些注释安装到空间数据库中,请运行需要docbook的命令。Postgis_Comments.sql和其他包注释文件raster_Comments.sql、topology_Comments.sql也打包在文档文件夹中的tar.gz分发包中,因此如果从tar ball安装,则不需要做任何注释。注释也是创建扩展安装的一部分。

发表评论

在PostGIS 2.0中引入。这将生成适合快速参考或学生讲义的html作弊单。这需要xsltproc来构建,并将在文档文件夹中生成4个文件 topology_cheatsheet.htmltiger_geocoder_cheatsheet.htmlraster_cheatsheet.htmlpostgis_cheatsheet.html

您可以从以下地址下载一些预构建的文档:html和pdf PostGIS/PostgreSQL学习指南

制作小抄

2.2.5. 构建和部署PostGIS扩展模块

如果您使用的是PostgreSQL 9.1+,则会自动构建和安装PostGIS扩展。

如果您是从源代码库构建,则需要首先构建函数描述。如果您安装了Docbook,就会构建这些文档。您还可以使用以下语句手动构建:

发表评论

如果您是从发布焦油球构建的,那么构建注释是不必要的,因为它们已经与tar球一起打包好了。

这些扩展应该作为Make Install过程的一部分自动构建。如果需要,您可以从扩展文件夹进行构建,或者在不同的服务器上复制需要的文件。

cd extensions
cd postgis
make clean
make
export PGUSER=postgres #overwrite psql variables
make check #to test before install
make install
# to test extensions
make check RUNTESTFLAGS=--extension
[Note]

make check 使用psql运行测试,因此可以使用psql环境变量。可用于覆盖的常见类型有 PGUSERPGPORT ,以及 PGHOST 。请参阅 PSQL环境变量

无论操作系统如何,相同版本的PostGIS和PostgreSQL的扩展文件总是相同的,所以只要您的服务器上已经安装了PostGIS二进制文件,就可以将扩展文件从一个操作系统复制到另一个操作系统。

如果要在不同于开发的单独服务器上手动安装扩展模块,则需要将以下文件从扩展文件夹复制到 PostgreSQL / share / extension 您的PostgreSQL安装的文件夹,以及常规PostGIS所需的二进制文件(如果服务器上还没有它们的话)。

  • 这些是控制文件,表示要安装的扩展的版本等信息(如果未指定)。 postgis.control, postgis_topology.control

  • 每个扩展名的/SQL文件夹中的所有文件。请注意,需要将这些文件复制到PostgreSQL共享/扩展文件夹的根目录 extensions/postgis/sql/*.sqlextensions/postgis_topology/sql/*.sql

一旦你这样做了,你应该会看到 postgispostgis_topology 作为PgAdmin->扩展中的可用扩展。

如果您使用的是psql,则可以通过运行以下查询来验证是否安装了扩展:

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         | 3.3.0dev         | 3.3.0dev
 address_standardizer_data_us | 3.3.0dev         | 3.3.0dev
 postgis                      | 3.3.0dev         | 3.3.0dev
 postgis_raster               | 3.3.0dev         | 3.3.0dev
 postgis_sfcgal               | 3.3.0dev         |
 postgis_tiger_geocoder       | 3.3.0dev         | 3.3.0dev
 postgis_topology             | 3.3.0dev         |
(6 rows)

如果您在要查询的数据库中安装了扩展,您将在 installed_version 纵队。如果你没有收到任何记录,那就意味着你根本没有在服务器上安装Postgis扩展。PgAdmin III 1.14+也将在 extensions 部分,甚至可以通过右击进行升级或卸载。

如果您有可用的扩展,则可以通过使用pgAdmin扩展接口或运行以下SQL命令在您选择的数据库中安装Postgis扩展:

CREATE EXTENSION postgis;
CREATE EXTENSION postgis_raster;
CREATE EXTENSION postgis_sfcgal;
CREATE EXTENSION fuzzystrmatch; --needed for postgis_tiger_geocoder
--optional used by postgis_tiger_geocoder, or can be used standalone
CREATE EXTENSION address_standardizer;
CREATE EXTENSION address_standardizer_data_us;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION postgis_topology;

在psql中,您可以使用查看您已经安装了哪些版本,以及它们安装了什么模式。

\connect mygisdb
\x
\dx postgis*
List of installed extensions
-[ RECORD 1 ]-------------------------------------------------
Name        | postgis
Version     | 3.3.0dev
Schema      | public
Description | PostGIS geometry, geography, and raster spat..
-[ RECORD 2 ]-------------------------------------------------
Name        | postgis_raster
Version     | 3.0.0dev
Schema      | public
Description | PostGIS raster types and functions
-[ RECORD 3 ]-------------------------------------------------
Name        | postgis_tiger_geocoder
Version     | 3.3.0dev
Schema      | tiger
Description | PostGIS tiger geocoder and reverse geocoder
-[ RECORD 4 ]-------------------------------------------------
Name        | postgis_topology
Version     | 3.3.0dev
Schema      | topology
Description | PostGIS topology spatial types and functions
[Warning]

扩展表 spatial_ref_syslayertopology 无法显式备份。它们只能在以下情况下备份 postgispostgis_topology 扩展是备份的,这似乎只有在备份整个数据库时才会发生。从PostGIS 2.0.1开始,在备份数据库时,只备份未与PostGIS打包的SRID记录,因此不要到处更改我们打包的SRID,并期望您的更改会在那里生效。如果你发现问题,就开罚单。扩展表的结构从未备份过,因为它们是使用创建的 CREATE EXTENSION 并且假定对于给定版本的扩展是相同的。这些行为都内置于当前的PostgreSQL扩展模型中,因此我们对此无能为力。

如果您安装了 3.3.0dev ,在不使用我们出色的扩展系统的情况下,您可以通过运行以下命令将函数打包到各自的扩展中,从而将其更改为基于扩展的。安装使用 `unpackaged` 已在PostgreSQL 13中删除,因此建议您在升级到PostgreSQL 13之前切换到扩展版本。

CREATE EXTENSION postgis FROM unpackaged;
CREATE EXTENSION postgis_raster FROM unpackaged;
CREATE EXTENSION postgis_topology FROM unpackaged;
CREATE EXTENSION postgis_tiger_geocoder FROM unpackaged;

2.2.6. 测试

如果要测试PostGIS构建,请运行

勾选

上面的命令将使用生成的库对实际的PostgreSQL数据库运行各种检查和回归测试。

[Note]

如果使用非标准的PostgreSQL、GEOS或Proj位置配置了PostGIS,则可能需要将它们的库位置添加到 LD_LIBRARY_PATH 环境变量。

[Caution]

目前, make check 依赖于 PATHPGPORT 执行检查时的环境变量-它确实如此 使用可能已使用配置参数指定的PostgreSQL版本 --with-pgconfig 。因此,确保在配置期间修改路径以匹配检测到的PostgreSQL安装,或者做好应对即将到来的令人头疼的事情的准备。

如果成功,Make Check将产生近500个测试的输出。结果将类似于以下内容(下面省略了许多行):

CUnit - A unit testing framework for C - Version 2.1-3
     http://cunit.sourceforge.net/

        .
        .
        .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites     44     44    n/a      0        0
               tests    300    300    300      0        0
             asserts   4215   4215   4215      0      n/a
Elapsed time =    0.229 seconds

        .
        .
        .

Running tests

        .
        .
        .

Run tests: 134
Failed: 0


-- if you build with SFCGAL

        .
        .
        .

Running tests

        .
        .
        .

Run tests: 13
Failed: 0

-- if you built with raster support

        .
        .
        .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites     12     12    n/a      0        0
               tests     65     65     65      0        0
             asserts  45896  45896  45896      0      n/a


        .
        .
        .

Running tests

        .
        .
        .

Run tests: 101
Failed: 0

-- topology regress

.
.
.

Running tests

        .
        .
        .

Run tests: 51
Failed: 0

-- if you built --with-gui, you should see this too

     CUnit - A unit testing framework for C - Version 2.1-2
     http://cunit.sourceforge.net/

        .
        .
        .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites      2      2    n/a      0        0
               tests      4      4      4      0        0
             asserts      4      4      4      0      n/a

这个 postgis_tiger_geocoderaddress_standardizer 扩展,目前只支持标准的PostgreSQL安装检查。要测试这些功能,请使用以下代码。注意:如果您已经在PostGIS代码文件夹的根目录下进行了安装,则不需要进行Make Install。

对于ADDRESS_STANDIZER:

cd extensions/address_standardizer
make install
make installcheck
          

输出应如下所示:

============== dropping database "contrib_regression" ==============
DROP DATABASE
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test test-init-extensions     ... ok
test test-parseaddress        ... ok
test test-standardize_address_1 ... ok
test test-standardize_address_2 ... ok

=====================
 All 4 tests passed.
=====================

对于Tiger地理编码器,请确保在您的PostgreSQL实例中有postgis和fuzzystrMatch扩展。如果您构建的postgis支持ADDRESS_STANDIZER,则ADDRESS_STANDAREZER测试也会生效:

cd extensions/postgis_tiger_geocoder
make install
make installcheck
          

输出应如下所示:

============== dropping database "contrib_regression" ==============
DROP DATABASE
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing fuzzystrmatch               ==============
CREATE EXTENSION
============== installing postgis                     ==============
CREATE EXTENSION
============== installing postgis_tiger_geocoder      ==============
CREATE EXTENSION
============== installing address_standardizer        ==============
CREATE EXTENSION
============== running regression test queries        ==============
test test-normalize_address   ... ok
test test-pagc_normalize_address ... ok

=====================
All 2 tests passed.
=====================

2.2.7. 安装

要安装PostGIS,请输入

制造安装

这会将PostGIS安装文件复制到由指定的相应子目录中 --prefix 配置参数。特别是:

  • 加载器和转储程序二进制文件安装在 [prefix]/bin

  • SQL文件,如 postgis.sql 、安装在 [prefix]/share/contrib

  • PostGIS库安装在 [prefix]/lib

如果您以前运行过 make comments 命令来生成 postgis_comments.sqlraster_comments.sql 文件中,通过运行以下命令安装SQL文件

发表评论-安装

[Note]

postgis_comments.sqlraster_comments.sqltopology_comments.sql 从典型的构建和安装目标中分离出来,因为随之而来的是对 xsltproc

2.3. 安装和使用地址标准化程序

这个 address_standardizer 扩展曾经是一个单独的包,需要单独下载。从PostGIS2.2开始,它现在被捆绑在一起。有关ADDRESS_STANDARIZE、它的作用以及如何根据您的需要进行配置的详细信息,请参阅 Section 14.1, “地址标准器”

此标准化程序可与PostGIS打包的Tiger地理编码器扩展模块配合使用,以替代 Normalize_Address 讨论过。要用作替代,请参阅 Section 2.4.3, “将地址标准化扩展与Tiger地理编码器结合使用” 。您还可以使用它作为您自己的地理编码器的构建块,或者使用它来标准化您的地址,以便更容易地比较地址。

地址标准化程序依赖于PCRE,它通常已经安装在许多NIX系统上,但您可以在以下位置下载最新版本: http://www.pcre.org 。如果在此期间 Section 2.2.3, “生成配置” ,则将自动构建地址标准化扩展。如果您有想要使用的自定义PCRE安装,请转到配置 --with-pcredir=/path/to/pcre 哪里 /path/to/pcre 是您的PCRE Include和lib目录的根文件夹。

对于Windows用户,PostGIS 2.1+捆绑包已打包为ADDRESS_STANDAREZER,因此无需编译即可直接转到 CREATE EXTENSION 一步。

安装后,您可以连接到数据库并运行SQL:

CREATE EXTENSION address_standardizer;

以下测试不需要规则、GAZ或lex表

SELECT num, street, city, state, zip
 FROM parse_address('1 Devonshire Place PH301, Boston, MA 02109');

输出应为

num |         street         |  city  | state |  zip
-----+------------------------+--------+-------+-------
 1   | Devonshire Place PH301 | Boston | MA    | 02109

2.3.1. 安装Regex::Assetble

Perl Regex:编译ADDRESS_STANDAREZER扩展不再需要ASSEMBLE,因为它生成的文件是源代码树的一部分。但是,如果您需要编辑 usps-st-city-orig.txtusps-st-city-orig.txt usps-st-city-adds.tx ,你需要重建 parseaddress-stcities.h 这确实需要Regex:组装。

cpan Regexp::Assemble

或者,如果您使用的是Ubuntu/Debian,您可能需要这样做

sudo perl -MCPAN -e "install Regexp::Assemble"

2.4. 安装、升级Tiger地理编码器并加载数据

在您的PostGIS发行版中可能不会打包额外的组件,如Tiger GeoCoder。如果您缺少Tiger地理编码器扩展模块,或者想要一个比您安装的版本更新的版本,请使用 share/extension/postgis_tiger_geocoder.* 中的包中的文件 Windows未发布版本 部分,用于您的PostgreSQL版本。虽然这些包是针对Windows的,但是postgis_Tiger_Geocoder扩展文件可以在任何操作系统上运行,因为该扩展只是一个SQL/plpgsql扩展。

2.4.1. 启用PostGIS数据库的Tiger地理编码器:使用扩展模块

如果您使用的是PostgreSQL9.1+和PostGIS2.1+,您可以利用新的扩展模型来安装Tiger Geocoder。要执行此操作,请执行以下操作:

  1. 首先获取用于PostGIS2.1+的二进制文件,或者像往常一样编译和安装。这应该也会为Tiger地理编码器安装必要的扩展文件。

  2. 通过psql或pgAdmin或其他工具连接到您的数据库,并运行以下SQL命令。请注意,如果您要在已安装了postgis的数据库中进行安装,则不需要执行第一步。如果你有 fuzzystrmatch 扩展已经安装,您也不需要执行第二步。

    CREATE EXTENSION postgis;
    CREATE EXTENSION fuzzystrmatch;
    CREATE EXTENSION postgis_tiger_geocoder;
    --this one is optional if you want to use the rules based standardizer (pagc_normalize_address)
    CREATE EXTENSION address_standardizer;

    如果您已经安装了postgis_Tiger_Geocoder扩展,并且只想更新到最新运行:

    ALTER EXTENSION postgis UPDATE;
    ALTER EXTENSION postgis_tiger_geocoder UPDATE;

    如果您对以下项进行了自定义条目或更改 tiger.loader_platformtiger.loader_variables 您可能需要更新这些内容。

  3. 要确认安装工作正常,请在数据库中运行以下SQL:

    SELECT na.address, na.streetname,na.streettypeabbrev, na.zip
            FROM normalize_address('1 Devonshire Place, Boston, MA 02109') AS na;

    哪一项应该输出

    address | streetname | streettypeabbrev |  zip
    ---------+------------+------------------+-------
               1 | Devonshire | Pl               | 02109
  4. 在中创建新记录 tiger.loader_platform 表中包含可执行文件和服务器的路径。

    例如,要创建一个名为Debbie的配置文件,如下所示 sh 这是惯例。您会这样做:

    INSERT INTO tiger.loader_platform(os, declare_sect, pgbin, wget, unzip_command, psql, path_sep,
                       loader, environ_set_command, county_process_command)
    SELECT 'debbie', declare_sect, pgbin, wget, unzip_command, psql, path_sep,
               loader, environ_set_command, county_process_command
      FROM tiger.loader_platform
      WHERE os = 'sh';

    ,然后在 declare_sect 列到适合Debbie的pg、解压缩、shp2pgsql、psql等路径位置的位置。

    如果你不编辑这个 loader_platform 表中,它将只包含项目的常见案例位置,并且您必须在生成脚本后编辑生成的脚本。

  5. 从PostGIS 2.4.1开始,邮政编码-5位数字制表区域 zcta5 已修改加载步骤以加载当前的zcta5数据,该步骤是 Loader_Generate_Nation_Script 启用时。默认情况下,它被关闭,因为它需要相当长的加载时间(20到60分钟),占用相当多的磁盘空间,并且不经常使用。

    要启用它,请执行以下操作:

    UPDATE tiger.loader_lookuptables SET load = true WHERE table_name = 'zcta510';

    如果存在,则 地理编码 函数可以使用它,如果添加了边界过滤器以将其限制为仅在该边界内压缩。这个 Reverse_Geocode 如果返回的地址缺少邮政编码,函数会使用它,这在高速公路反向地理编码中经常发生。

  6. 创建一个名为 gisdata 在服务器的根目录或您的本地PC上(如果您有到服务器的快速网络连接)。该文件夹是Tiger文件下载和处理的位置。如果您不满意将文件夹放在服务器的根目录下,或者只是想切换到其他文件夹进行转移,请编辑该字段 staging_foldtiger.loader_variables 数据表。

  7. 在中创建一个名为Temp的文件夹 gisdata 文件夹或您指定的 staging_fold 成为。这将是加载器提取下载的Tiger数据的文件夹。

  8. 然后运行 Loader_Generate_Nation_Script SQL函数确保使用您的自定义配置文件的名称,并将脚本复制到.sh或.bat文件。因此,举例来说,要建立国家负载:

    psql -c "SELECT Loader_Generate_Nation_Script('debbie')" -d geocoder -tA > /gisdata/nation_script_load.sh
  9. 运行生成的National Load命令行脚本。

    cd /gisdata
    sh nation_script_load.sh
  10. 在完成国家脚本的运行之后,您的 tiger_data 架构,并且它们应该用数据填充。通过从psql或pgAdmin执行以下查询来确认

    SELECT count(*) FROM tiger_data.county_all;
    count
    -------
      3233
    (1 row)
    SELECT count(*) FROM tiger_data.state_all;
    count
    -------
        56
    (1 row)
    
  11. 默认情况下,与 bgtracttabblock 都没有装填。这些表不被地理编码员使用,但被人们用于人口统计。如果希望将它们作为状态加载的一部分进行加载,请运行以下语句以启用它们。

    UPDATE tiger.loader_lookuptables SET load = true WHERE load = false AND lookup_name IN('tract', 'bg', 'tabblock');

    或者,也可以在加载状态数据后使用 Loader_Generate_Census_Script

  12. 对于要加载数据的每个州,生成一个状态脚本 Loader_Generate_Script

    [Warning]

    在加载国家数据之前,不要生成州脚本,因为州脚本使用由国家脚本加载的县列表。

  13. psql -c "SELECT Loader_Generate_Script(ARRAY['MA'], 'debbie')" -d geocoder -tA > /gisdata/ma_load.sh
  14. 运行生成的命令行脚本。

    cd /gisdata
    sh ma_load.sh
  15. 在加载完所有数据或在停止点之后,分析所有Tiger表以更新统计信息(包括继承的统计信息)是一个好主意

    SELECT install_missing_indexes();
    vacuum (analyze, verbose) tiger.addr;
    vacuum (analyze, verbose) tiger.edges;
    vacuum (analyze, verbose) tiger.faces;
    vacuum (analyze, verbose) tiger.featnames;
    vacuum (analyze, verbose) tiger.place;
    vacuum (analyze, verbose) tiger.cousub;
    vacuum (analyze, verbose) tiger.county;
    vacuum (analyze, verbose) tiger.state;
    vacuum (analyze, verbose) tiger.zip_lookup_base;
    vacuum (analyze, verbose) tiger.zip_state;
    vacuum (analyze, verbose) tiger.zip_state_loc;

2.4.1.1. 将Tiger地理编码器常规安装转换为扩展模型

如果您安装了Tiger地理编码器而不使用扩展模型,则可以按如下方式转换为扩展模型:

  1. 按照中的说明操作 Section 2.4.5, “升级您的Tiger地理编码器安装” 用于非扩展型号升级。

  2. 使用psql或pgAdmin连接到您的数据库,并运行以下命令:

    CREATE EXTENSION postgis_tiger_geocoder FROM unpackaged;

2.4.2. 启用您的PostGIS数据库的Tiger地理编码器:不使用扩展模块

首先按照前面的说明安装PostGIS。

如果您没有附加文件夹,请下载 http://postgis.net/stuff/postgis-3.3.0dev.tar.gz

TAR xvfz postgis- 3.3.0dev .tar.gz

CD Postgis- 3.3.0dev /extras/tiger_geocoder

编辑 tiger_loader_2015.sql (或您找到的最新加载程序文件,除非您想加载不同的年份)到您的可执行文件服务器的路径等,或者您也可以更新 loader_platform 表一旦安装。如果您不编辑此文件或 loader_platform 表中,它将只包含项的常见用例位置,并且您必须在运行 Loader_Generate_Nation_ScriptLoader_Generate_Script SQL函数。

如果您是第一次安装Tiger Geocoder,请编辑 create_geocode.bat 如果您使用的是Windows或 create_geocode.sh 如果您在Linux/Unix/Mac OSX上使用您的PostgreSQL特定设置,并从命令行运行相应的脚本。

验证您现在是否拥有 tiger 模式,并且它是数据库Search_PATH的一部分。如果不是,则使用以下行的命令添加它:

ALTER DATABASE geocoder SET search_path=public, tiger;

标准化地址功能或多或少地在没有任何数据的情况下工作,除了棘手的地址。运行此测试并验证情况如下:

SELECT pprint_addy(normalize_address('202 East Fremont Street, Las Vegas, Nevada 89101')) As pretty_address;
pretty_address
---------------------------------------
202 E Fremont St, Las Vegas, NV 89101
                        

2.4.3. 将地址标准化扩展与Tiger地理编码器结合使用

人们抱怨的众多问题之一是地址归一化功能 Normalize_Address 在进行地理编码之前对地址进行标准化以进行准备的功能。规格化器远不是完美的,试图修补其不完美需要大量的资源。因此,我们已经与另一个具有更好的地址标准化引擎的项目进行了集成。要使用这个新的ADDRESS_STANDAREZER,请按照中所述编译扩展 Section 2.3, “安装和使用地址标准化程序” 并作为扩展安装在您的数据库中。

在已安装的数据库中安装此扩展模块后 postgis_tiger_geocoder ,然后 Pagc_Normalize_Address 可以用来代替 Normalize_Address 。该扩展与Tiger无关,因此可以与其他数据源一起使用,例如国际地址。Tiger地理编码器扩展模块与其自己的自定义版本打包在一起 规则表 ( tiger.pagc_rules )、 GAZ表 ( tiger.pagc_gaz ),以及 Lex表 ( tiger.pagc_lex )。您可以添加和更新这些,以改善您的标准化体验,以满足您自己的需求。

2.4.4. 正在加载TIGER数据

加载数据的说明以更详细的形式在 extras/tiger_geocoder/tiger_2011/README 。这只包括一般步骤。

加载过程从人口普查网站下载所请求的各个国家文件、州的数据,提取文件,然后将每个州加载到其自己的一组单独的州表中。每个状态表继承自中定义的表 tiger 模式,因此只需查询这些表即可访问所有数据,并在任何时候使用 Drop_State_Tables_Generate_Script 如果您需要重新加载状态,或者只是不再需要状态。

为了能够加载数据,您需要以下工具:

  • 一个从人口普查网站解压压缩文件的工具。

    对于类Unix系统: unzip 通常已经安装在大多数类Unix平台上的可执行文件。

    Windows 7-Zip,这是一个免费的压缩/解压缩工具,您可以从 http://www.7-zip.org/

  • shp2pgsql 默认情况下在安装PostGIS时安装的命令行。

  • wget 这是一种通常安装在大多数Unix/Linux系统上的网络抓取工具。

    如果您使用的是Windows,则可以从 http://gnuwin32.sourceforge.net/packages/wget.htm

如果要从Tiger_2010升级,则需要首先生成并运行 Drop_Nation_Tables_Generate_Script 。在加载任何州数据之前,您需要加载全国范围的数据 Loader_Generate_Nation_Script 。它将为您生成一个加载器脚本。 Loader_Generate_Nation_Script 这是升级(从2010年起)和新安装时应该完成的一次性步骤。

要加载状态数据,请参阅 Loader_Generate_Script 为您的平台生成所需状态的数据加载脚本。请注意,您可以逐个安装这些组件。您不必一次加载您想要的所有状态。您可以在需要时加载它们。

加载所需的状态后,请确保运行:

 选择INSTALL_MISSING_INDEX(); 

如中所述 Install_Missing_Indexes

要测试是否正常运行,请尝试使用以下命令对您所在州的地址运行地理编码 地理编码

2.4.5. 升级您的Tiger地理编码器安装

如果你已经安装了2.0+的Tiger Geocode包,你可以在任何时候升级功能,即使是从临时的焦油球,如果有你迫切需要的修复程序。这将仅适用于未安装扩展的Tiger Geocoder。

如果您没有附加文件夹,请下载 http://postgis.net/stuff/postgis-3.3.0dev.tar.gz

TAR xvfz postgis- 3.3.0dev .tar.gz

CD Postgis- 3.3.0dev /extras/tiger_geocoder/tiger_2011

找到 upgrade_geocoder.bat 如果您使用的是Windows或 upgrade_geocoder.sh 如果您使用的是Linux/Unix/Mac OSX。编辑该文件以拥有您的Postgis数据库凭据。

如果要从2010或2011升级,请确保取消对加载器脚本行的注释,以便获得用于加载2012年数据的最新脚本。

然后从命令行运行相应的脚本。

接下来,删除所有的国家表并加载新的表。使用此SQL语句生成删除脚本,详细信息请参见 Drop_Nation_Tables_Generate_Script

SELECT drop_nation_tables_generate_script();

运行生成的DROP SQL语句。

使用此SELECT语句生成国家加载脚本,详细信息请参见 Loader_Generate_Nation_Script

对于Windows

SELECT loader_generate_nation_script('windows'); 

适用于Unix/Linux

SELECT loader_generate_nation_script('sh');

请参阅 Section 2.4.4, “正在加载TIGER数据” 以获取有关如何运行生成脚本的说明。这只需要做一次。

[Note]

您可以混合使用2010/2011州表,并且可以分别升级每个州。在将一个州升级到2011年之前,首先需要使用以下命令删除该州的2010个表 Drop_State_Tables_Generate_Script

2.5. 安装过程中的常见问题

当您的安装或升级没有按照预期进行时,有几点需要检查。

  1. 检查您是否已安装PostgreSQL 11 或更高版本,并且您正在使用与正在运行的PostgreSQL版本相同的PostgreSQL源代码版本进行编译。当您的(Linux)发行版已经安装了PostgreSQL,或者您以前安装了PostgreSQL但忘记了它时,可能会发生混淆。PostGIS将仅与PostgreSQL配合使用 11 或者,如果您使用较旧的版本,则会出现更新的、奇怪的、意外的错误消息。要检查正在运行的PostgreSQL的版本,请使用psql连接到数据库并运行以下查询:

    SELECT version();

    如果您运行的是基于RPM的发行版,则可以使用 rpm 命令如下: rpm -qa | grep postgresql

  2. 如果升级失败,请确保正在还原到已安装了PostGIS的数据库。

    SELECT postgis_full_version();

还要检查Configure是否正确检测到了PostgreSQL、Proj库和GEOS库的位置和版本。

  1. CONFigure的输出用于生成 postgis_config.h 文件。检查是否有 POSTGIS_PGSQL_VERSIONPOSTGIS_PROJ_VERSIONPOSTGIS_GEOS_VERSION 变量已正确设置。