本章详细介绍了安装 PostGIS 所需的步骤。
假设在搜索路径中具有所有依赖项,则进行编译
tar -xvzf postgis-3.4.3dev.tar.gz cd postgis-3.4.3dev ./configure make make install
安装 PostGIS 后,需要在要使用它的每个单独数据库中启用 (第 3.3 节,“创建空间数据库”) 或升级 (第 3.4 节,“升级空间数据库”) 它。
现在,许多操作系统都包含 PostgreSQL/PostGIS 的预构建包。在许多情况下,只有在需要最前沿版本或你是包维护者时才需要编译。 本节包含常规编译说明,如果你正在为 Windows 等或其他操作系统编译,你可以在 PostGIS 用户贡献的编译指南 和 PostGIS 开发人员 Wiki 找到更详细的帮助。 各种操作系统的预构建包列在 PostGIS 预构建包 中 如果你是 Windows 用户,可以通过 Stackbuilder 或 PostGIS Windows 下载网站 获取稳定版本。我们还有 非常前沿的 Windows 实验版本,通常每周构建一次或两次,或在发生任何激动人心的事情时构建。你可以使用它们来试验 PostGIS 的进行中版本 |
PostGIS 模块是 PostgreSQL 后端服务器的扩展。因此,PostGIS 3.4.3dev 需要 完全访问 PostgreSQL 服务器头才能编译。它可以针对 PostgreSQL 版本 12 - 16 进行构建。不支持更早版本的 PostgreSQL。
如果您尚未安装 PostgreSQL,请参阅 PostgreSQL 安装指南。 https://postgresql.ac.cn .
对于 GEOS 功能,在安装 PostgresSQL 时,您可能需要将 PostgreSQL 显式链接到标准 C++ 库 LDFLAGS=-lstdc++ ./configure [YOUR OPTIONS HERE] 这是解决旧开发工具与虚假 C++ 异常交互的变通办法。如果您遇到奇怪的问题(后端意外关闭或类似问题),请尝试此技巧。当然,这需要从头重新编译 PostgreSQL。 |
以下步骤概述了 PostGIS 源的配置和编译。它们是为 Linux 用户编写的,不适用于 Windows 或 Mac。
从下载网站获取 PostGIS 源存档 https://postgis.net.cn/stuff/postgis-3.4.3dev.tar.gz
wget https://postgis.net.cn/stuff/postgis-3.4.3dev.tar.gz tar -xvzf postgis-3.4.3dev.tar.gz cd postgis-3.4.3dev
这将在当前工作目录中创建一个名为 postgis-3.4.3dev
的目录。
或者,从 git 存储库 https://git.osgeo.org/gitea/postgis/postgis/ 签出源。
git clone https://git.osgeo.org/gitea/postgis/postgis.git postgis cd postgis sh autogen.sh
切换到新创建的 postgis
目录以继续安装。
./configure
PostGIS 对构建和使用有以下要求
必需
PostgreSQL 12 - 16。需要完整安装 PostgreSQL(包括服务器头)。PostgreSQL 可从 https://postgresql.ac.cn 获得。
有关完整的 PostgreSQL/PostGIS 支持矩阵和 PostGIS/GEOS 支持矩阵,请参阅 https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS
GNU C 编译器 (gcc
)。一些其他 ANSI C 编译器可用于编译 PostGIS,但我们在使用 gcc
编译时发现的问题要少得多。
GNU Make (gmake
或 make
)。对于许多系统,GNU make
是 make 的默认版本。通过调用 make -v
检查版本。其他版本的 make
可能无法正确处理 PostGIS Makefile
。
Proj 重新投影库。需要 Proj 6.1 或更高版本。Proj 库用于在 PostGIS 中提供坐标重新投影支持。Proj 可从 https://proj.org/ 下载。
GEOS 几何库,版本 3.6 或更高版本,但要充分利用所有新函数和特性,需要 GEOS 3.12+。GEOS 可从 https://libgeos.org 下载。
LibXML2,2.5.x 或更高版本。目前在某些导入功能(ST_GeomFromGML 和 ST_GeomFromKML)中使用 LibXML2。可从 https://gitlab.gnome.org/GNOME/libxml2/-/releases 下载 LibXML2。
JSON-C,0.9 或更高版本。目前使用 JSON-C 通过函数 ST_GeomFromGeoJson 导入 GeoJSON。可从 https://github.com/json-c/json-c/releases/ 下载 JSON-C。
GDAL,需要 2+ 版本,更推荐 3+ 版本。这是栅格支持所必需的。 https://gdal.org/download.html。
如果使用 PostgreSQL+JIT 编译,则需要 LLVM 版本 >=6 https://trac.osgeo.org/postgis/ticket/4125。
可选
GDAL(伪可选)仅在您不想要栅格时可以将其省略。还要确保启用您想要使用的驱动程序,如 第 3.2 节“配置栅格支持” 中所述。
GTK(需要 GTK+2.0、2.8+)来编译 shp2pgsql-gui 形状文件加载器。 http://www.gtk.org/ 。
SFCGAL,1.3.1(或更高版本),建议使用 1.4.1 或更高版本,并且需要使用所有功能。SFCGAL 可用于向 PostGIS 提供其他 2D 和 3D 高级分析功能,请参阅 第 7.21 节“SFCGAL 函数”。还可以允许使用 SFCGAL 而不是 GEOS 来处理两个后端提供的某些 2D 函数(例如 ST_Intersection 或 ST_Area)。PostgreSQL 配置变量 postgis.backend
允许最终用户控制在安装 SFCGAL(默认情况下为 GEOS)时要使用的后端。注:SFCGAL 1.2 至少需要 CGAL 4.3 和 Boost 1.54(请参阅:https://sfcgal.org)https://gitlab.com/sfcgal/SFCGAL/。
为了构建 第 11.1 节“地址标准化器”,您还需要 PCRE http://www.pcre.org(它通常已安装在 nix 系统上)。如果检测到 PCRE 库,或者您在配置期间传递了一个有效的 --with-pcre-dir=/path/to/pcre
,则 第 11.1 节“地址标准化器” 将自动构建。
要启用 ST_AsMVT protobuf-c 库 1.1.0 或更高版本(用于使用)和 protoc-c 编译器(用于构建),则需要。此外,需要 pkg-config 来验证 protobuf-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/ 获取。
构建 PDF 格式的文档需要 DBLatex (dblatex
)。DBLatex 可从 http://dblatex.sourceforge.net/ 获取。
生成文档中使用的图像需要 ImageMagick (convert
)。ImageMagick 可从 http://www.imagemagick.org/ 获取。
与大多数 Linux 安装一样,第一步是生成用于构建源代码的 Makefile。这可以通过运行 shell 脚本来完成
./configure
如果没有其他参数,此命令将尝试自动查找在系统上构建 PostGIS 源代码所需的组件和库。虽然这是 ./configure 最常见的用法,但该脚本接受多个参数,适用于在非标准位置拥有所需库和程序的用户。
以下列表仅显示最常用的参数。要获取完整列表,请使用 --help 或 --help=short 参数。
从 PostGIS 3.0 开始,默认情况下生成的库文件将不再将次要版本作为文件名的一部分。这意味着所有 PostGIS 3 库都将以 postgis-3
结尾。这样做是为了简化 pg_upgrade,但缺点是您只能在服务器中安装一个版本的 PostGIS 3 系列。要获取包含次要版本的文件的旧行为:例如 postgis-3.0
,请将此开关添加到您的配置语句中。
这是将安装 PostGIS 加载器可执行文件和共享库的位置。默认情况下,此位置与检测到的 PostgreSQL 安装位置相同。
此参数当前已损坏,因为该软件包只会安装到 PostgreSQL 安装目录中。访问 http://trac.osgeo.org/postgis/ticket/635 以跟踪此错误。 |
PostgreSQL 提供了一个名为 pg_config 的实用程序,以使 PostGIS 等扩展能够找到 PostgreSQL 安装目录。使用此参数 (--with-pgconfig=/path/to/pg_config) 手动指定 PostGIS 将针对其构建的特定 PostgreSQL 安装。
GDAL 是一款必需的库,它为栅格支持提供所需的功能 gdal-config 可让软件安装程序找到 GDAL 安装目录。使用此参数 (--with-gdalconfig=/path/to/gdal-config) 手动指定 PostGIS 将针对其进行构建的特定 GDAL 安装。
GEOS 是一款必需的几何库,它提供一个名为 geos-config 的实用程序,可让软件安装程序找到 GEOS 安装目录。使用此参数 (--with-geosconfig=/path/to/geos-config) 手动指定 PostGIS 将针对其进行构建的特定 GEOS 安装。
LibXML 是执行 GeomFromKML/GML 进程所需的库。如果你已安装 libxml,通常可以找到它,但如果没有或你想使用特定版本,则需要将 PostGIS 指向一个特定的 xml2-config
配置文件,以让软件安装程序找到 LibXML 安装目录。使用此参数 (>--with-xml2config=/path/to/xml2-config) 手动指定 PostGIS 将针对其进行构建的特定 LibXML 安装。
Proj 是 PostGIS 所需的重新投影库。使用此参数 (--with-projdir=/path/to/projdir) 手动指定 PostGIS 将针对其进行构建的特定 Proj 安装目录。
安装 iconv 的目录。
JSON-C 是 PostGIS ST_GeomFromJSON 支持所需的 MIT 许可 JSON 库。使用此参数 (--with-jsondir=/path/to/jsondir) 手动指定 PostGIS 将针对其进行构建的特定 JSON-C 安装目录。
PCRE 是 address_standardizer 扩展所需的 BSD 许可 Perl 兼容正则表达式库。使用此参数 (--with-pcredir=/path/to/pcredir) 手动指定 PostGIS 将针对其进行构建的特定 PCRE 安装目录。
编译数据导入 GUI(需要 GTK+2.0)。这将为 shp2pgsql 创建 shp2pgsql-gui 图形界面。
在没有栅格支持的情况下编译。
禁用拓扑支持。没有对应的库,因为拓扑所需的所有逻辑都在 postgis-3.4.3dev 库中。
PostGIS 默认会尝试检测 gettext 支持并使用它进行编译,但是,如果你遇到导致加载程序损坏的不兼容问题,你可以使用此命令完全禁用它。有关通过此配置解决的示例问题,请参阅工单 http://trac.osgeo.org/postgis/ticket/748。注意:关闭此功能不会损失太多。它用于 GUI 加载程序的国际化帮助/标签支持,该支持尚未记录且仍处于实验阶段。
如果没有此开关,PostGIS 默认不会安装 sfcgal 支持。PATH
是一个可选参数,允许指定到 sfcgal-config 的备用 PATH。
禁用更新 postgis_revision.h 以匹配 git 存储库的当前 HEAD。
如果你从 代码存储库 获取了 PostGIS,第一步实际上是运行脚本 ./autogen.sh 此脚本将生成 configure 脚本,然后该脚本用于自定义 PostGIS 的安装。 如果你以 tar 包的形式获取了 PostGIS,则无需运行 ./autogen.sh,因为 configure 已生成。 |
生成 Makefile 后,构建 PostGIS 与运行以下命令一样简单
make
输出的最后一行应为 "PostGIS 已成功构建。准备安装。
"
从 PostGIS v1.4.0 开始,所有函数都具有从文档中生成的注释。如果你希望稍后将这些注释安装到你的空间数据库中,请运行需要 docbook 的命令。postgis_comments.sql 和其他包注释文件 raster_comments.sql、topology_comments.sql 也打包在 tar.gz 发行版中的 doc 文件夹中,因此如果从 tar 包安装,则无需添加注释。注释还作为 CREATE EXTENSION 安装的一部分包含在内。
make comments
PostGIS 2.0 中引入。这会生成适合快速参考或学生讲义的 html 备忘单。这需要 xsltproc 来构建,并将生成 doc 文件夹中的 4 个文件 topology_cheatsheet.html
、tiger_geocoder_cheatsheet.html
、raster_cheatsheet.html
、postgis_cheatsheet.html
你可以从 PostGIS / PostgreSQL 学习指南 下载一些以 html 和 pdf 格式提供的预构建文件
make cheatsheets
如果你使用的是 PostgreSQL 9.1+,则 PostGIS 扩展将自动构建并安装。
如果你从源存储库构建,则需要首先构建函数描述。如果你安装了 docbook,则会构建这些描述。你还可以使用以下语句手动构建
make comments
如果你从发行版 tar 包构建,则无需构建注释,因为这些注释已预先打包在 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
|
无论操作系统如何,扩展文件对于同一版本的 PostGIS 和 PostgreSQL 始终相同,因此只要您的服务器上已安装 PostGIS 二进制文件,就可以将扩展文件从一个操作系统复制到另一个操作系统。
如果您想在与开发环境不同的独立服务器上手动安装扩展,则需要将扩展文件夹中的以下文件复制到 PostgreSQL 安装的 PostgreSQL / share / extension
文件夹中,以及常规 PostGIS 所需的二进制文件(如果您尚未在服务器上安装这些文件)。
这些是控制文件,表示信息,例如未指定时要安装的扩展版本。 postgis.control, postgis_topology.control
。
每个扩展的 /sql 文件夹中的所有文件。请注意,这些文件需要复制到 PostgreSQL share/extension 文件夹的根目录 extensions/postgis/sql/*.sql
、extensions/postgis_topology/sql/*.sql
完成此操作后,您应在 PgAdmin -> extensions 中看到 postgis
、postgis_topology
作为可用扩展。
如果您使用 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.4.3dev | 3.4.3dev address_standardizer_data_us | 3.4.3dev | 3.4.3dev postgis | 3.4.3dev | 3.4.3dev postgis_raster | 3.4.3dev | 3.4.3dev postgis_sfcgal | 3.4.3dev | postgis_tiger_geocoder | 3.4.3dev | 3.4.3dev postgis_topology | 3.4.3dev | (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.4.3dev 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.4.3dev Schema | tiger Description | PostGIS tiger geocoder and reverse geocoder -[ RECORD 4 ]------------------------------------------------- Name | postgis_topology Version | 3.4.3dev Schema | topology Description | PostGIS topology spatial types and functions
扩展表 |
如果您安装了 3.4.3dev,而没有使用我们出色的扩展系统,您可以通过运行以下命令将函数打包到它们各自的扩展中,将其更改为基于扩展的。在 PostgreSQL 13 中已删除使用 `unpackaged` 进行安装,因此建议您在升级到 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;
如果您希望测试 PostGIS 构建,请运行
make check
上述命令将使用生成的库对实际 PostgreSQL 数据库运行各种检查和回归测试。
如果您使用非标准 PostgreSQL、GEOS 或 Proj 位置配置了 PostGIS,您可能需要将它们的库位置添加到 |
目前,make check 在执行检查时依赖于 |
如果成功,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_geocoder
和 address_standardizer
扩展仅支持标准 PostgreSQL installcheck。要测试这些扩展,请使用以下方法。注意:如果您已在 PostGIS 代码文件夹的根目录中执行 make install,则无需执行 make install。
对于 address_standardizer
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 geocoder,确保 PostgreSQL 实例中提供了 postgis 和 fuzzystrmatch 扩展。如果您使用 address_standardizer 支持构建 postgis,address_standardizer 测试也会启动
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. =====================
要安装 PostGIS,请键入
make install
这会将 PostGIS 安装文件复制到 --prefix 配置参数指定的相应子目录中。具体来说
加载器和转储器二进制文件安装在 [prefix]/bin
中。
SQL 文件(如 postgis.sql
)安装在 [prefix]/share/contrib
中。
PostGIS 库安装在 [prefix]/lib
中。
如果您之前运行了 make comments 命令以生成 postgis_comments.sql
、raster_comments.sql
文件,请通过运行以下命令安装 sql 文件
make comments-install
|
address_standardizer
扩展过去是一个单独的软件包,需要单独下载。从 PostGIS 2.2 开始,它已捆绑在一起。有关 address_standardize 的详细信息、它的功能以及如何根据您的需要进行配置,请参阅 第 11.1 节“地址标准化器”。
此标准化器可以与 PostGIS 打包的 tiger geocoder 扩展一起用作所讨论的 Normalize_Address 的替代品。要作为替代品使用,请参阅 第 2.4.2 节“将地址标准化器扩展与 Tiger geocoder 结合使用”。您还可以将其用作您自己的地理编码器的构建模块,或用它来标准化您的地址,以便更轻松地比较地址。
地址标准化器依赖于 PCRE,它通常已安装在许多 Nix 系统上,但您可以在以下位置下载最新版本:http://www.pcre.org。如果在 第 2.2.3 节“构建配置” 中找到了 PCRE,则地址标准化器扩展将自动构建。如果您有要使用的自定义 pcre 安装,请将 --with-pcredir=/path/to/pcre
传递给配置,其中 /path/to/pcre
是 pcre include 和 lib 目录的根文件夹。
对于 Windows 用户,PostGIS 2.1+ 捆绑包已打包了 address_standardizer,因此无需编译,可以直接进入 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
Tiger geocoder 等附加组件可能未打包在您的 PostGIS 发行版中。如果您缺少 tiger geocoder 扩展或希望获得比安装版本更新的版本,请使用 Windows 未发布版本 部分中适用于您 PostgreSQL 版本的 share/extension/postgis_tiger_geocoder.*
文件。尽管这些软件包适用于 Windows,但 postgis_tiger_geocoder 扩展文件可在任何操作系统上运行,因为该扩展仅是 SQL/plpgsql 扩展。
这些说明假定您的 PostgreSQL 安装已安装 postgis_tiger_geocoder 扩展。
通过 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_platform
和 tiger.loader_variables
进行了自定义条目或更改,则可能需要更新这些条目或更改。
要确认您的安装是否正常运行,请在数据库中运行此 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
在 tiger.loader_platform
表中使用可执行文件和服务器的路径创建一个新记录。
因此,例如,要创建一个遵循 sh
约定的名为 debbie 的配置文件。您将执行
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、unzip、shp2pgsql、psql 等路径位置。
如果您不编辑此 loader_platform
表,它将仅包含项目的常见情况位置,并且您必须在生成脚本后编辑生成的脚本。
从 PostGIS 2.4.1 开始,邮政编码-5 位制表区域 zcta5
加载步骤已修订为加载当前 zcta5 数据,并且在启用时是 Loader_Generate_Nation_Script 的一部分。它默认关闭,因为它需要相当长的时间才能加载(20 到 60 分钟),占用相当多的磁盘空间,并且不经常使用。
要启用它,请执行以下操作
UPDATE tiger.loader_lookuptables SET load = true WHERE table_name = 'zcta520';
如果存在 Geocode 函数,如果添加边界筛选器以仅限制在该边界内的邮政编码,则可以使用它。 Reverse_Geocode 函数在返回的地址缺少邮政编码时使用它,这种情况通常发生在高速公路反向地理编码中。
在服务器的根目录或本地电脑上创建一个名为 gisdata
的文件夹,如果你与服务器有快速的网络连接。此文件夹是 tiger 文件将被下载和处理到的位置。如果你对将文件夹放在服务器的根目录中不满意,或者只是想更改为不同的文件夹进行暂存,那么编辑 tiger.loader_variables
表中的字段 staging_fold
。
在 gisdata
文件夹中创建一个名为 temp 的文件夹,或在任何你指定 staging_fold
的位置。这将是加载器提取下载的 tiger 数据的文件夹。
然后运行 Loader_Generate_Nation_Script SQL 函数,确保使用自定义配置文件的名称,并将脚本复制到 .sh 或 .bat 文件。因此,例如,要构建国家加载
psql -c "SELECT Loader_Generate_Nation_Script('debbie')" -d geocoder -tA > /gisdata/nation_script_load.sh
运行生成的国家加载命令行脚本。
cd /gisdata sh nation_script_load.sh
在完成运行国家脚本后,你应该在 tiger_data
架构中拥有三个表,并且它们应该填充有数据。通过从 psql 或 pgAdmin 执行以下查询来确认你是否已完成
SELECT count(*) FROM tiger_data.county_all;
count ------- 3234 (1 row)
SELECT count(*) FROM tiger_data.state_all;
count ------- 56 (1 row)
只有在你标记 zcta520 已加载时,它才会有数据
SELECT count(*) FROM tiger_data.zcta5_all;
count ------- 37371 (1 row)
默认情况下,与 bg
、tract
、tabblock20
对应的表不会被加载。这些表不被地理编码器使用,但被用于人口统计。如果你希望在州加载中加载它们,请运行以下语句以启用它们。
UPDATE tiger.loader_lookuptables SET load = true WHERE load = false AND lookup_name IN('tract', 'bg', 'tabblock20');
或者,你可以在使用 Loader_Generate_Census_Script 加载州数据后仅加载这些表
对于你想要加载数据的每个州,生成一个州脚本 Loader_Generate_Script。
不要在加载国家数据之前生成州脚本,因为州脚本利用国家脚本加载的县列表。 |
psql -c "SELECT Loader_Generate_Script(ARRAY['MA'], 'debbie')" -d geocoder -tA > /gisdata/ma_load.sh
运行生成的命令行脚本。
cd /gisdata sh ma_load.sh
在您完成加载所有数据或在停止点之后,最好分析所有 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;
许多人的抱怨之一是地址规范化函数 Normalize_Address,该函数在进行地理编码之前规范化地址以进行准备。规范化器远非完美,而尝试修补其不完美之处需要大量的资源。因此,我们已与另一个具有更好的地址标准化引擎的项目集成。要使用此新地址标准化器,请按照 第 2.3 节“安装和使用地址标准化器” 中所述编译扩展,并将其作为扩展安装在您的数据库中。
一旦您在安装 postgis_tiger_geocoder
的同一数据库中安装此扩展,则可以使用 Pagc_Normalize_Address 代替 Normalize_Address。此扩展与 Tiger 无关,因此可与其他数据源(例如国际地址)一起使用。Tiger 地理编码器扩展确实随其自己的 规则表( tiger.pagc_rules
)、gaz 表(tiger.pagc_gaz
)和 lex 表(tiger.pagc_lex
)的自定义版本一起打包。您可以添加和更新这些内容,以根据自己的需要改善标准化体验。
加载过程会从人口普查网站下载相应国家文件和请求的州的数据,提取文件,然后将每个州加载到其自己的独立州表集中。每个州表都继承自 tiger
架构中定义的表,因此只需查询这些表即可访问所有数据,并且可以使用 Drop_State_Tables_Generate_Script 随时删除一组州表,如果您需要重新加载一个州或不再需要一个州。
为了能够加载数据,您需要以下工具
用于解压人口普查网站上 zip 文件的工具。
对于类 Unix 系统:unzip
可执行文件,它通常已安装在大多数类 Unix 平台上。
对于 Windows,7-zip 是一款免费的压缩/解压缩工具,您可以从 http://www.7-zip.org/ 下载。
shp2pgsql
命令行,它在您安装 PostGIS 时默认安装。
wget
,它是一款 Web 抓取工具,通常安装在大多数 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 是一个一次性步骤,应在升级(从前一年的 Tiger 人口普查数据)和新安装时执行。
要加载州数据,请参阅 Loader_Generate_Script,为您的平台生成您所需的州的数据加载脚本。请注意,您可以分批安装这些内容。您不必一次加载所有所需的州。您可以根据需要加载它们。
在加载您所需的州之后,请务必运行
SELECT install_missing_indexes();
如 Install_Missing_Indexes 中所述。
要测试各项功能是否按预期工作,请尝试使用 Geocode 对您所在州的地址运行地理编码
首先,按如下方式升级您的 postgis_tiger_geocoder 扩展
ALTER EXTENSION postgis_tiger_geocoder UPDATE;
接下来,删除所有国家表并加载新表。使用此 SQL 语句生成一个删除脚本,如 Drop_Nation_Tables_Generate_Script 中所述
SELECT drop_nation_tables_generate_script();
运行生成的删除 SQL 语句。
使用此 SELECT 语句生成一个国家加载脚本,如 Loader_Generate_Nation_Script 中所述
对于 Windows
SELECT loader_generate_nation_script('windows');
适用于 Unix/Linux
SELECT loader_generate_nation_script('sh');
有关如何运行生成脚本的说明,请参阅第 2.4.1 节“Tiger Geocoder 启用 PostGIS 数据库”。只需执行一次此操作。
您可以混合使用不同年份的状态表,并可以分别升级每个州。在升级州之前,您首先需要使用Drop_State_Tables_Generate_Script删除该州的去年状态表。 |
如果您的安装或升级未按预期进行,则需要检查以下几项内容。
检查您是否已安装 PostgreSQL 12 或更高版本,以及您是否针对与正在运行的 PostgreSQL 版本相同的 PostgreSQL 源版本进行编译。当您的(Linux)发行版已安装 PostgreSQL,或者您之前已安装 PostgreSQL 但忘记了时,可能会发生混淆。PostGIS 仅适用于 PostgreSQL 12 或更高版本,如果您使用较旧版本,则会出现奇怪且意外的错误消息。要检查正在运行的 PostgreSQL 版本,请使用 psql 连接到数据库并运行此查询
SELECT version();
如果您运行的是基于 RPM 的发行版,则可以使用以下rpm命令检查预安装包是否存在:rpm -qa | grep postgresql
如果您的升级失败,请确保您正在还原到已安装 PostGIS 的数据库中。
SELECT postgis_full_version();
还要检查 configure 是否正确检测到 PostgreSQL、Proj 库和 GEOS 库的位置和版本。
configure 的输出用于生成 postgis_config.h
文件。检查 POSTGIS_PGSQL_VERSION
、POSTGIS_PROJ_VERSION
和 POSTGIS_GEOS_VERSION
变量是否已正确设置。