本章记录了 PostGIS 源 tarball 和源存储库的 extras 文件夹中的功能。 这些并不总是与 PostGIS 二进制版本一起打包,但通常是基于 PL/pgSQL 或可以按原样运行的标准 shell 脚本。
一个基于 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.3.1, “在 PostGIS 数据库中启用Tiger地理编码器”。
|
|
|
如果你在用 TIGER Geocoder (tiger_2010),可以使用 extras/tiger 目录下的 upgrade_geocoder.bat / .sh 脚本来升级相关脚本。 |
|
|
|
你可以用 PostgreSQL 的扩展方式安装 TIGER Geocoder,具体步骤请参考 Section 2.3.1, “在 PostGIS 数据库中启用Tiger地理编码器”。 |
The Pagc_Normalize_Address function as a drop in replacement for in-built Normalize_Address. Refer to address_standardizer for compile and installation instructions.
设计:
该项目的目标是构建一个功能齐全的地理编码器,可以处理任意美国地址字符串并使用标准化的 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,跨平台可部署,并且也提供反向地理编码等一些不错的扩展功能。