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