本章记录了 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, “安装和使用地址标准化工具”。
The parser works from right to left looking first at the macro elements for postcode, state/province, city, and then looks micro elements to determine if we are dealing with a house number street or intersection or landmark. It conservatively recognizes trailing country tokens and canonicalizes them to ISO 3166-1 alpha-2 codes. Explicit country aliases update the parsed country, and otherwise the default US or CA inference still applies.
根据邮政编码为美国或加拿大,或者州/省为美国或加拿大,否则为美国
这些是使用 Perl 兼容的正则表达式来识别的。 这些正则表达式当前位于 parseaddress-api.c 中,并且在需要时进行更改相对简单。
这些是使用 Perl 兼容的正则表达式来识别的。 这些正则表达式当前位于 parseaddress-api.c 中,但将来可能会被移至包含中以便于维护。
本节列出了由 Address Standardizer 扩展安装的 PostgreSQL 数据类型。 请注意,我们描述了这些的强制转换行为,这非常重要,尤其是在设计您自己的函数时。
standardize_address 函数的返回类型。
本节列出了 address_standardizer 用于规范化地址的 PostgreSQL 表格式。 请注意,这些表的名称不需要与此处引用的名称相同。 例如,您可以为每个国家/地区或您的自定义地理编码器设置不同的 lex、gaz、规则表。 这些表的名称被传递到地址标准化器函数中。
打包的扩展address_standardizer_data_us包含用于标准化美国地址的数据。
一个基于 PL/pgSQL 编写的地理编码器,美国人口普查局发布的 TIGER(拓扑集成地理编码与参照系统)/ Line and Master Address database export 配合使用。
地理编码器有四个组件:数据加载器函数、地址标准化器、地址地理编码器和反向地理编码器。
尽管它是专门为美国设计的,但许多概念和功能都是适用的,并且可以适应其他国家的地址和道路网络。
这个脚本会创建一个名为 tiger 的 schema,用来存放所有 TIGER 相关的函数、可复用的查找数据、用于管理数据加载的控制表,以及所有 TIGER 加载表继承的基础骨架表。
会创建另一个名为 tiger_data 的 schema,用来存放加载器从 Census 站点下载并导入数据库的各州普查数据。在当前模型下,每一批州的数据表都会带上州代码前缀,比如 ma_addr、ma_edges 等,同时通过约束保证这些表里只存放对应州的数据。每张这类表都会继承自 tiger schema 下的基础表 addr、faces、edges 等。
所有地理编码函数只会引用那些基础表,所以数据所在的 schema 并不必须叫做 tiger_data,数据也完全可以继续拆分到其他 schema —— 比如给每个州单独一个 schema。只要这些表都继承自 tiger schema 里的基础表,就不会有问题。
有关如何在数据库中启用扩展程序以及如何使用它加载数据的说明,请参阅Section 2.4.1, “在 PostGIS 数据库中启用Tiger地理编码器”。
|
|
|
如果你在用 TIGER Geocoder (tiger_2010),可以使用 extras/tiger 目录下的 upgrade_geocoder.bat / .sh 脚本来升级相关脚本。 |
|
|
|
你可以用 PostgreSQL 的扩展方式安装 TIGER Geocoder,具体步骤请参考 Section 2.4.1, “在 PostGIS 数据库中启用Tiger地理编码器”。 |
Pagc_Normalize_Address函数可替代内置 Normalize_Address。 有关编译和安装说明,请参阅Section 2.3, “安装和使用地址标准化工具”。
设计:
该项目的目标是构建一个功能齐全的地理编码器,可以处理任意美国地址字符串并使用标准化的 TIGER 人口普查数据,生成反映给定地址位置和位置可能性的点几何和评级。 评级数字越高,结果越差。
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 Geocoder,它们的优势是支持多国家的地理编码
Nominatim 使用 OpenStreetMap 的地名词典格式数据,需要配合 osm2pgsql 来加载数据,同时依赖 PostgreSQL 和 PostGIS。它被封装成一个 Web Service 接口,设计上就是面向 Web 调用的。和 TIGER Geocoder 一样,它也同时具备正向地理编码和反向地理编码的能力。从现有文档来看,还不清楚它是否像 TIGER Geocoder 那样提供纯 SQL 接口,还是有相当一部分逻辑落在了 Web 层。
GIS Graphy 也可以配合 PostGIS 使用,和 Nominatim 一样基于 OpenStreetMap (OSM) 数据,并整合了其他数据源。它自带 OSM 数据加载工具,和 Nominatim 类似,不局限于美国,具备多国家地理编码能力。整体运行方式也是 Web Service,依赖 Java 1.5、Servlet 应用、Solr,跨平台可部署,并且也提供反向地理编码等一些不错的扩展功能。