本章记录了 PostGIS 源 tarball 和源存储库的 extras 文件夹中的功能。 这些并不总是与 PostGIS 二进制版本一起打包,但通常是基于 PL/pgSQL 或可以按原样运行的标准 shell 脚本。
这是 PAGC 标准化器的一个分支(这部分的原始代码是 PAGC PostgreSQL 地址标准化器)。
地址标准化器是一个单行地址解析器,它获取输入地址并根据存储在表以及辅助 lex 和 gaz 表中的一组规则对其进行规范化。
该代码内置于一个名为 address_standardizer
的 PostgreSQL 扩展库中,可以使用 CREATE EXTENSION address_standardizer;
安装。 除了address_standardizer 扩展之外,还构建了一个名为address_standardizer_data_us
扩展的示例数据扩展,其中包含US 数据的gaz、lex 和规则表。 该扩展可以通过以下方式安装:CREATE EXTENSION address_standardizer_data_us;
此扩展的代码可以在 PostGIS extensions/address_standardizer
中找到,并且当前是独立的。
有关安装说明,请参阅:Section 2.3, “安装和使用地址标准化工具”。
解析器从右到左工作,首先查看邮政编码、州/省、城市的宏观元素,然后查看微观元素以确定我们是否正在处理门牌号、街道、十字路口或地标。 目前,它不查找国家/地区代码或名称,但将来可能会引入。
根据邮政编码为美国或加拿大,或者州/省为美国或加拿大,否则为美国
这些是使用 Perl 兼容的正则表达式来识别的。 这些正则表达式当前位于 parseaddress-api.c 中,并且在需要时进行更改相对简单。
这些是使用 Perl 兼容的正则表达式来识别的。 这些正则表达式当前位于 parseaddress-api.c 中,但将来可能会被移至包含中以便于维护。
本节列出了由 Address Standardizer 扩展安装的 PostgreSQL 数据类型。 请注意,我们描述了这些的强制转换行为,这非常重要,尤其是在设计您自己的函数时。
standardize_address
函数的返回类型。
本节列出了 address_standardizer 用于规范化地址的 PostgreSQL 表格式。 请注意,这些表的名称不需要与此处引用的名称相同。 例如,您可以为每个国家/地区或您的自定义地理编码器设置不同的 lex、gaz、规则表。 这些表的名称被传递到地址标准化器函数中。
打包的扩展address_standardizer_data_us
包含用于标准化美国地址的数据。
一个基于 plpgsql 的地理编码器,旨在与美国人口普查局发布的 TIGER(拓扑集成地理编码和参考系统)/线路和主地址数据库导出配合使用。
地理编码器有四个组件:数据加载器函数、地址标准化器、地址地理编码器和反向地理编码器。
尽管它是专门为美国设计的,但许多概念和功能都是适用的,并且可以适应其他国家的地址和道路网络。
该脚本构建了一个名为tiger
的模式,以容纳所有与“tiger”相关的功能、可重用的查找数据(例如道路类型前缀、后缀、状态)、用于管理数据加载的各种控制表以及所有“tiger”加载表所继承的骨架基表。
另一个名为 tiger_data
的模式也被创建,它存储了加载器从人口普查网站下载并加载到数据库中的每个州的所有人口普查数据。在当前的模型中,每组州的表都以州的代码为前缀,例如 ma_addr
、ma_edges
等,具有强制执行只包括该州数据的约束。每个这些表都继承自 tiger schema
中的表 addr
、faces
、edges
等。
所有地理编码函数仅引用基表,因此不需要将数据模式称为tiger_data
,也不要求数据不能进一步划分为其他模式——例如,每个州有不同的模式,只要所有表 从 Tiger
模式中的表继承。
有关如何在数据库中启用扩展程序以及如何使用它加载数据的说明,请参阅Section 2.4.1, “在 PostGIS 数据库中启用Tiger地理编码器”。
如果您使用 Tiger 地理编码器 (tiger_2010),则可以使用 extras/tiger 中随附的 upload_geocoder.bat / .sh 脚本升级脚本。 |
PostGIS 2.2.0 版本中的新功能是支持 Tiger 2015 数据并将地址标准化器包含为 PostGIS 的一部分。 如果您运行的是 PostgreSQL 9.1+,PostGIS 2.1.0 版本中的新功能是能够使用 PostgreSQL 扩展模型安装 Tiger 地理编码器。 有关详细信息,请参阅Section 2.4.1, “在 PostGIS 数据库中启用Tiger地理编码器”。 |
Pagc_Normalize_Address函数可替代内置 Normalize_Address。 有关编译和安装说明,请参阅Section 2.3, “安装和使用地址标准化工具”。
设计:
该项目的目标是构建一个功能齐全的地理编码器,可以处理任意美国地址字符串并使用标准化的 TIGER 人口普查数据,生成反映给定地址位置和位置可能性的点几何和评级。 评级数字越高,结果越差。
PostGIS 2.0.0 中引入的reverse_geocode
函数对于导出GPS 位置的街道地址和交叉街道非常有用。
对于熟悉 PostGIS 的任何人来说,地理编码器都应该易于安装和使用,并且应该可以在 PostGIS 支持的所有平台上轻松安装和使用。
尽管存在格式和拼写错误,但它应该足够强大,能够正常运行。
它应该具有足够的可扩展性,以便与未来的数据更新一起使用,或者以最少的编码更改来替代数据源。
必须将 |
Tiger_data
。
County_all
、state_all
或state代码开头,后跟county
或state
的所有表。
Tiger_data
。
标准化地址
(addy )每个位置以及评级。 评级越低,匹配的可能性越大。 结果首先按最低评分排序。 可以选择传入最大结果,默认为 10。使用 Tiger 数据(edges、faces、addr)、PostgreSQL 模糊字符串匹配(soundex、levenshtein)。
Tiger_data
架构中。 每个状态脚本都作为单独的记录返回。
Tiger_data
模式中。 每个状态脚本都作为单独的记录返回。 最新版本支持 Tiger 2010 结构变化,还加载人口普查区、区块组和区块表。
norm_addy
类型,该类型具有道路后缀、前缀和标准化类型、街道、街道名称等,分为单独的字段。 该函数仅适用于与 Tiger_geocoder 打包的查找数据(不需要tiger普查数据)。
norm_addy
类型,该类型具有道路后缀、前缀和标准化类型、街道、街道名称等,分为单独的字段。 该函数仅适用于与 Tiger_geocoder 打包的查找数据(不需要tiger普查数据)。 需要 address_standardizer 扩展。
norm_addy
复合类型对象,返回它的漂亮的打印表示。 通常与normalize_address结合使用。
PostGIS 还有其他几个开源地理编码器,与 Tiger 地理编码器不同,它们具有多国家地理编码支持的优势
Nominatim 使用 OpenStreetMap 地名词典格式的数据。 它需要 osm2pgsql 来加载数据、PostgreSQL 8.4 +和 PostGIS 1.5+ 才能运行。 它被打包为Web服务接口,并且似乎被设计为作为Web服务来调用。 就像 Tiger 地理编码器一样,它同时具有地理编码器和反向地理编码器组件。 从文档来看,尚不清楚它是否具有像 Tiger 地理编码器一样的纯 SQL 接口,或者大量逻辑是否在 Web 接口中实现。
GIS Graphy 还利用 PostGIS,并且像 Nominatim 一样使用 OpenStreetMap (OSM) 数据。 它配备了一个加载器来加载 OSM 数据,并且与 Nominatim 类似,不仅能够进行美国地理编码。 与 Nominatim 非常相似,它作为 Web 服务运行并依赖于 Java 1.5、Servlet 应用程序、Solr。 GisGraphy 是跨平台的,并且还具有反向地理编码器以及其他一些简洁的功能。