从邮编中获取完整的街道地址

8
我有一个表单,用户需要输入以下位置数据:
  1. 完整地址(街道地址,公寓、套房、单元、楼宇、楼层)
  2. 门牌号码
  3. 城市
  4. 州/省/地区
  5. 邮编
  6. 国家
为了简化此表单的填写,我想通过让用户只输入其国家、邮政编码和门牌号码来自动填写完整的地址(地址行、城市、州等)。
这三个项目是否足以在美国查找地址?或者需要更少或更多的信息?并且对于每个国家,这个问题的答案是否不同?此外,是否有可以用于此目的的服务、API 或库(例如 Google Maps 或 OpenStreetMap)?
4个回答

7

很好的问题!

这三个项目就足以查找美国的地址吗?

不,抱歉,这三个项目只能将您缩小到大约数百个可能的地址。

对于每个国家,这个问题的答案是否都不同?

是的!从一个国家到另一个国家的邮政系统差异很大,用户对它们的期望也不同-例如,英国人不希望必须输入完整的地址。

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

一些国家(如法国)没有完整的前提数量覆盖范围。对于这些情况,您可以采用前提数量和邮政编码,但根据城镇的不同,您必须改变自己的行为方式,要么信任并接受输入,要么提示他们进行更正。

在计划工作流程时,另一个重要考虑因素是需要允许那些可能不知道自己邮政编码/邮政区号的人。虽然不经常发生,但有时人们刚刚搬家,或者偶尔房产的邮政编码/邮政区号会发生变化,因此在需要信息时保持灵活性非常重要。

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

是的-有几个解决方案可提供获取全球地址的功能。Experian Data Quality(我的公司)提供一个托管本地部署的解决方案,可实现此目的。

在这里试试-在右侧的“您想了解更多吗?”下面,您可以切换国家,提示会更新,如有需要将进行交互。


1
灵活性的另一个优点是:在某些国家,有些字段可能不适用:不要强迫用户输入虚假数据,例如州/省/地区。 - Jussi Kukkonen
1
好的观点 - 例如目前爱尔兰没有邮政编码。 - Al Mills

1

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

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

美国邮政编码完整长度实际上为11位数字(带检查位共12位):

  • 前三位数字是SCF(Sectional Center Facility),类似于区域代码
  • 前五位数字是您典型的5位数ZIP代码,指定了一组承运人路线
  • 接下来的4位数字更精确,通常将地址缩小到街区级别。
  • 接下来的2位数字很少使用,仅用于条形码,但它们指示交付点。理论上,这将指定特定的房屋、公寓或邮箱,但实际上,有时11位代码是模棱两可的(在大型综合体、街区或PO设施中很常见)。通常交付点与房屋或公寓编号相关,但并非总是如此。

因此,在您的情况下:

  • 知道国家可以将地址的可能性缩小到仅有3.5亿多个地址
  • 知道5位邮政编码可以将其缩小到大约10,000个地址(重要提示:并非每个人都知道5位邮政编码,它们也会更改。而且,他们可能不确定是输入他们的PO信箱邮政编码还是他们的家庭邮政编码。如果他们的房子不收邮件怎么办?或者如果他们在军队中,他们的5位邮政编码是否在变化中?)
  • 知道门牌号码可能将地址候选项缩小到1-1000个不等。这取决于邮政编码的“大小”。(但邮政编码不是多边形)。

因此,仅知道地址的这三个部分是不足够的。国家在那时几乎毫无用处,而邮政编码最多只能指定城市/地区。门牌号码可能会出现几十次,甚至几百次,具体取决于邮政编码的“大小”。(我在偏远地区长大,我们的门牌号码是唯一的,但这很少见。)

是的,这个问题的答案因国家而异,但对大多数发达国家来说这种推理是正确的。不发达国家的邮政系统没有这样的组织。

有没有这样的服务?如果您不希望用户浏览数十或数百个结果,那么就没有这样的服务。如果他们必须查看超过几个,那么最好让他们输入完整地址。

前几天回答了一个非常类似的问题,您可能会发现它很有用。

既然我已经把末日降临在你的想法上,那么有没有替代方案呢?当然,我更喜欢SmartyStreets' autocomplete,它会建议地址,并在用户打字时将其地理位置接近于用户。我应该提到它是免费的。它实际上不会验证地址,直到用户完成或选择了其中之一的建议,但它确实减少了按键次数。

在这个用户体验方面,我建议将国家作为地址表单的第一个字段。这样,您可以根据他们选择的国家来修改表单的格式。如果您使用像LiveAddress这样的服务,您可以让用户在单个字段中以他们习惯的格式输入地址,而不是按照您的任意顺序跨多个文本框输入,因为LiveAddress可以解析他们的输入。

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

0

我不知道有哪个国家的邮政编码与街道地址一一对应,除了新加坡。新加坡邮政编码 在这种特殊情况下,您可以使用邮政编码填写其它字段;在其他情况下,您可以推导出城市名称和街道地址,但不太可能得到门牌号。

示例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" 中的数字表示该城市有多少个街道地址共享相同的邮政编码。

祝你好运!


0

您可以使用Google地图反向地理编码API轻松实现此功能。这是它的文档链接。link


2
逆地理编码需要经纬度信息,而我没有这些信息。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接