【问题标题】:Retrieving a fully qualified street address from ZIP / postal code从 ZIP/邮政编码中检索完全合格的街道地址
【发布时间】:2014-05-24 09:48:03
【问题描述】:

我有一个表单,我的用户需要在其中输入以下位置数据:

  1. 完整地址行(街道地址、公寓、套房、单元、建筑物、楼层)
  2. 门牌号
  3. 城市
  4. 州/省/地区
  5. 邮政编码/邮政编码
  6. 国家

为了简化此表格的填写,我想通过让用户只输入他的国家、邮政编码和门牌号来自动填写完全合格的地址(地址行、城市、州省等)。

这3项是否足以在美国查找地址?还是需要更少或更多信息?每个国家对这个问题的回答是否不同?此外,是否有可用于此目的的服务、API 或库(例如 Google 地图或 OpenStreetMap)?

【问题讨论】:

    标签: google-maps openstreetmap street-address zipcode postal-code


    【解决方案1】:

    好问题!

    这3项是否足以在美国查地址?

    没有。不幸的是,这三个将使您减少到〜数百个可能的地址 美国。

    这个问题的答案是否因国家而异?

    是的!不同国家/地区的邮政系统差异很大,作为其中的用户,您对他们期望提供的内容会有不同的期望 - 例如,英国人不希望输入完整的地址。

    在英国、加拿大和澳大利亚,您通常可以通过门牌号和邮政编码找到一个地址。但是,你不能保证这一点。可能有一些子信息或业务信息,需要与用户进行一些交互才能检查您的地址是否正确。

    某些国家/地区(例如法国)没有完整的前提号码覆盖范围。有了这些,您可以获取房屋编号和邮政编码,但取决于城镇,您必须改变您的行为以信任并接受输入或提示他们进行更正。

    规划工作流程时的另一个重要考虑因素是需要允许可能不知道他们的邮政编码/邮政编码的人。这种情况并不经常发生,但有时人们刚刚搬家,或者房产的邮政编码/邮政编码偶尔会发生变化,因此在您需要的信息中保持灵活很重要。

    是否有可用于此目的的服务、API 或库?

    是的 - 有几种解决方案可以提供捕获全球地址的能力。 Experian Data Quality(我的公司)提供了一个hostedon premise 解决方案来实现这一点。

    Try it out here - 右侧“您想了解更多信息吗?”您可以切换国家,提示更新并在需要时进行交互。

    【讨论】:

    • 灵活的附加点:在某些国家/地区,某些字段不适用:不要强迫您的用户输入虚假数据,例如州/省/地区。
    • 好点 - 例如爱尔兰目前没有邮政编码/邮编
    【解决方案2】:

    我只能回答关于美国地址的问题(我在 SmartyStreets 工作),但答案是否定的,这行不通。

    感谢您希望改善用户体验。不幸的是,我不建议尝试这样做,原因如下:

    美国邮政编码的整体长度实际上是 11 位(12 位带有校验位):

    • 前三位是 SCF(部门中心设施),有点像地区代码
    • 前五位是典型的 5 位邮政编码,用于指定一组运营商路线
    • 接下来的 4 位数字更精确,通常将地址缩小到块级。
    • 接下来的 2 位数字很少使用,除了条码,但它们表示交货点。理论上,这将指定特定的房屋、公寓或邮箱,但实际上,有时 11 位代码是不明确的(在大型综合体、街区或邮政局设施中很常见)。送货点通常与房屋或公寓号码相关联,但并非总是如此。

    所以在你的情况下:

    • 了解国家/地区可以将可能性缩小到仅 350,000,000 多个地址
    • 知道 5 位数的邮政编码可以将其范围缩小到大约 10,000 多个地址(重要提示:并不是每个人都知道 5 位数的邮政编码,而且它们会发生变化。更重要的是,它们可能不确定是输入他们的邮政信箱邮政编码还是他们的家庭邮政编码。如果他们的房子没有收到邮件怎么办?或者如果他们在军队中并且他们的 5 位数邮政编码在不断变化怎么办?)
    • 知道门牌号可以将候选地址缩小到 1-1000 之间的任何位置。这取决于邮政编码有多大。 (But ZIP codes are not polygons)。

    所以不,知道地址的这三个部分是不够的。那个时候这个国家实际上一文不值,而邮政编码充其量是特定于地区/城市的。门牌号可能会在邮政编码中出现数十次,甚至数百次。 (我是在我们的门牌号码独一无二的地方长大的,但这种情况很少见。)

    是的,这个问题的答案因国家而异,但这种推理适用于大多数发达国家。欠发达国家的邮政系统没有这样的组织。

    有没有可以做到这一点的服务?如果您不希望您的用户滚动浏览数十或数百个结果,则不会。如果他们需要查看的不仅仅是一对夫妇,你最好让他们输入他们的完整地址。

    answered a very similar question就在前几天。您可能会发现它很有用。

    既然我已经对你的想法提出了世界末日的看法,那么另一种选择呢?当然,我偏爱SmartyStreets' autocomplete,它会在用户打字时建议位于用户附近的地址。我应该提到它是免费的。在用户完成或选择其中一项建议之前,它实际上不会验证地址,但它确实减少了击键次数。

    在这个 UX 脉络上,我建议将国家/地区作为地址表单的第一个字段。这样,您可以根据他们选择的国家/地区更改表单的格式。如果您使用 LiveAddress 之类的服务,您可以让用户在单个字段中以他们喜欢的格式输入他们的地址,而不是按照您的任意顺序跨多个文本框,因为 LiveAddress 可以解析他们的输入。

    【讨论】:

    • 这里有一些非常有用的信息 - 这不是一个容易解决的问题。值得注意的是,SmartyStreets 仅限美国,免费套餐仅限每月 250 次交易。还有其他解决方案可以提供更多国家/地区支持(尽管价格更高)
    • @jo.p.kennedy 你是对的,但需要明确的是,自动填充服务是完全免费的,无论你使用哪个计划,即使你使用的是免费计划。 SmartyStreets 仅对验证收费,不对自动完成收费。
    • 谢谢 - 我不确定网站上是否清楚(或者我只是错过了!)
    • @jo.p.kennedy 如果您仍然对这个项目感兴趣,SmartyStreets 现在提供国际地址验证,但我们仍在致力于国际地址自动填充。
    【解决方案3】:

    您可以使用谷歌地图反向地理编码 API 轻松实现此目的。这是其文档的链接。 link

    【讨论】:

    • 反向地理编码需要 latitude 和 longitude ,我没有
    【解决方案4】:

    我不知道有哪个国家/地区在邮政编码和街道地址之间存在一对一的映射关系。除了新加坡。 Postal Codes in SG 在这种特殊情况下,您可以使用邮政编码来填写剩余的字段,在任何其他情况下,您都可以得出城市名称和街道地址,但不太可能是门牌号。

    示例 1:(从邮政编码导出完整的街道地址)

    https://geocode.xyz/339696?geoit=xml

    <geodata>
    <latt>1.32035</latt>
    <longt>103.87430</longt>
    <elevation/>
    <standard>
    <stnumber>88</stnumber>
    <addresst>88 GEYLANG BAHRU</addresst>
    <postal>339696</postal>
    <city>Singapore</city>
    <prov>SG</prov>
    <countryname>Singapore</countryname>
    <confidence>0.5</confidence>
    </standard>
    </geodata>
    

    示例 2:(获取最常见的街道地址和城市名称的其他变体)

    https://geocode.xyz/27777?region=DE&geoit=xml

    <geodata>
    <latt>53.06060</latt>
    <longt>8.58388</longt>
    <elevation/>
    <standard>
    <stnumber>20</stnumber>
    <addresst>20 Bokenbusch</addresst>
    <postal>27777</postal>
    <city>Ganderlesee</city>
    <prov>DE</prov>
    <countryname>Germany</countryname>
    <confidence>0.5</confidence>
    </standard>
    <alt>
    <loc>
    <city>Ganderkesee</city>
    <latt>53.06868</latt>
    <longt>8.57437</longt>
    <cc>951</cc>
    </loc>
    <loc>
    <city>Bremen</city>
    <latt>53.07675</latt>
    <longt>8.57559</longt>
    <cc>172</cc>
    </loc>
    <loc>
    <city>Schierbrok</city>
    <latt>53.08639</latt>
    <longt>8.58037</longt>
    <cc>166</cc>
    </loc>
    

    “cc”中的数字表示该城市有多少街道地址共享给定的邮政编码。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-20
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多