predicthq/address-formatter-templates

该包已被弃用,不再维护。没有推荐替代包。

来自 https://github.com/OpenCageData/address-formatting 的地址格式化模板 - 与 predicthq/address-formatter 包一起使用。

v1.0.0 2016-04-28 21:46 UTC

This package is not auto-updated.

Last update: 2020-08-19 04:52:05 UTC


README

Build Status

地址格式化

快速示例

给定一组地址部分

 house_number:  17
 road:          Rue du Médecin-Colonel Calbairac
 neighbourhood: Lafourguette
 suburb:        Toulouse Ouest
 postcode:      31000
 city:          Toulouse
 county:        Toulouse
 state:         Midi-Pyrénées
 country:       France
 country_code:  FR

您需要编写逻辑以按消费者期望的格式编译地址

17 Rue du Médecin-Colonel Calbairac
31000 Toulouse
France

或者也许只是

Rue du Médecin-Colonel Calbairac
Toulouse
France

此存储库包含用于世界各地领土的各种地址格式的模板。它还包含测试用例。

我们讨论的是哪些地址

预期用例是数据库或地理编码系统(正向、反向、自动完成),其中我们既知道地址的国家,也知道用户/读者的语言。地址显示给消费者(例如在应用程序中),而不是用于实际邮寄信封。我们使用它来格式化来自 OpenCage Geocoder 的输出。

我们必须处理

  • 不完整的数据
  • 任何带有名称的东西(山峰、桥梁、公交车站)

实际邮政(办公室)邮件 不同,我们不需要处理

  • 公寓/住宅号,楼层号
  • 邮政信箱
  • 翻译(目的地)地址的语言。无论输入何种语言,都输出相同语言。

处理逻辑

我们希望通过此存储库实现一系列(编程)语言无关的模板。然后,您可以由您喜欢的任何软件处理这些模板。

我们已经编写、使用并维护了一个在 Perl 中工作的处理程序实现,请参阅(CPAN:Geo::Address::Formattergithub 仓库)。还有一个开源的 PHP 实现

我们希望有其他语言实现。如果您编写了处理程序,请告诉我们,以便我们在此列出。

覆盖范围

截至 Sat 25 Mar 2017 覆盖范围是

We are aware of 248 territories
We have tests for 250 (100%) territories
We have rules for 249 (100%) territories
0 (0%) territories have neither rules nor tests

我们需要更多特定语言的首字母缩写,请参阅 conf/abbreviations

测试和配置覆盖的详细分解可以通过运行 bin/coverage.pl -d 来找到。所有已知领土的列表在 conf/country_codes.yaml 中。注意:列表是所有官方分配的 ISO 3166-1 alpha-2 代码,并不是关于这些领土是否是或不是政治实体,或是否应该或不应该成为政治实体的政治声明。

文件格式

文件格式为YAML。模板采用Mustache编写。这两种格式都是人类可读的,严格的,解决转义问题并支持注释。YAML允许引用(称为“锚点”)以避免复制粘贴,Mustache允许子模板(称为“部分”)。

如何添加您的国家/地区

  1. 编辑位于testcases/countries目录下针对国家/地区的.yaml测试用例。文件名对应适当的ISO 3166-1 alpha-2代码 - 请参阅conf/country_codes.yaml
  • 获取样本数据的一个好方法是
    • 在OpenStreetMap中找到您目标地区的有地址的位置(房屋、商业等)
    • 获取位置的坐标(纬度,经度)
    • 将坐标放入OpenCage Geocoder演示页面
    • 原始响应选项卡中查看生成的JSON
  1. 编辑conf/countries/worldwide.yaml
  • 可能您的国家/地区使用的是文件顶部定义的现有通用格式。如果是这样,那就太好了,只需将country_code映射到通用模板即可。您可能还需要添加清理代码(以DE条目为例)。
  • 如果不是,您需要定义一个新的通用规则集
    • 可能您需要在conf/state_codes.yaml中定义新的州/地区映射
  1. 为了测试,您现在需要通过处理器(见上文)处理.yaml测试用例,并确保输入导致所需输出。

如有疑问,请通过github issues联系。

格式化规则

目前我们支持以下格式化规则

  • replace: 操作于输入值的正则表达式,用于删除诸如“伦敦自治市”之类的官僚主义垃圾。注意,如果以格式X=开始定义正则表达式,例如city=,则它应仅作用于具有该键的值
  • postformat_replace: 操作于最终输出的正则表达式
  • add_component: 值的形式为component=XXXX
  • change_country: 改变输入的国家值,对于附属领土非常有用。可以包括替换如$state,这样组件值随后被插入到新的国家值中。请参阅testcases/countries/sh.yaml以获取示例。
  • use_country: 使用另一个国家的格式化配置,对于避免重复配置的附属领土非常有用

未来

更多测试!对于每个关于地址的规则,都有例外和边缘情况需要考虑。总是需要更多的测试用例。

计划中的功能

  • 基本错误检查,例如忽略明显不是邮编的东西
  • 为邮编格式定义规则

我们欢迎您的pull请求。我们可以共同应对世界!

我们是谁?

我们运营OpenCage Geocoder

我们还运营#geomob,这是一个伦敦基于位置的服务的开发者聚会,我们尽力突出地理创新。

进一步阅读

这里是我们的博客文章,介绍了这个项目宣布此项目及其背后的动机。

您可能会喜欢Michael Tandy的程序员关于地址的谬误

如果您需要实际的地址数据,请查看OpenAddresses

如果您想要将经纬度转换成格式良好的地址或地名,那就是地理编码器的工作。来看看我们的:OpenCage Geocoder

如果这些都让您觉得地址很糟糕,请查看what3words,它允许您完全摒弃它们。