从ZIP /邮政编码中检索完全限定的街道地址

时间:2014-04-10 15:21:27

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

我的表单中我的用户需要输入以下位置数据:

  1. 完整的地址线(街道地址,公寓,套房,单位,建筑物,楼层)
  2. 门牌号码
  3. 州/省/地区
  4. ZIP /邮政编码
  5. 国家
  6. 为了简化此表格的填写,我想通过让用户只输入他的国家,邮政编码和门牌号码自动填写完全合格的地址(addrses线路,城市,州省等)。

    这三项是否足以在美国查找地址是否正确?或者是否需要更少或更多的信息?这个问题的答案对每个国家都不同吗?此外,是否有可用于此目的的服务,API或库(例如Google Maps或OpenStreetMap)?

4 个答案:

答案 0 :(得分:7)

很棒的问题!

这三项是否足以在美国查找地址是否正确?

没有。不幸的是,这三个将让你达到〜数百个可能的地址 US

这个问题的答案对每个国家都有所不同吗?

是的!从一个国家到另一个国家的邮政系统差异很大,你们中的用户对他们期望提供的服务有不同的期望 - 例如,英国人不希望输入一个完整的地址。

通过英国,加拿大和澳大利亚,您通常可以从门牌号码和邮政编码中获取单个地址。但是,你无法保证这一点。可能存在子房屋信息或商业信息,需要与用户进行一些交互以检查您是否拥有正确的地址。

某些国家/地区(例如法国)没有完整的前提编号。有了这些你可以采取前提数字和&邮政编码,但根据城镇,你必须改变你的行为,以信任和接受输入或提示他们进行更正。

规划工作流程时的另一个重要考虑因素是需要允许可能不知道其邮政编码/邮编的人。它不会经常发生,但有时人们刚刚移动,或者偶尔会对邮政编码/邮政编码进行更改,因此在您需要的信息中保持灵活性非常重要。

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

是的 - 有几种解决方案能够捕获全局地址。益百利数据质量(我的公司)提供hostedon premise解决方案,允许这样做。

Try it out here - 在“你想知道更多吗?”的右侧。您可以切换国家/地区,提示更新并在需要时进行交互。

答案 1 :(得分:1)

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

感谢您改善用户体验的愿望。不幸的是,我不建议尝试这个,这就是原因:

美国邮政编码的全部内容实际上是11位数字(12位带有校验位):

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

所以在你的情况下:

  • 了解这个国家缩小了仅350,000,000多个地址的可能性
  • 知道5位数的邮政编码将其缩小到大约10,000多个地址(重要说明:并非所有人都知道5位邮政编码,而且他们会改变。更重要的是,他们是可能无法确定是否输入他们的邮政信箱邮政编码或他们的房屋邮政编码。如果他们的房子没有收到邮件怎么办?或者如果他们在军队并且他们的5位ZIP邮件不稳定怎么办?)< / LI>
  • 知道门牌号码可以将地址候选人缩小到1-1000。这取决于邮政编码的“大”程度。 (的 But ZIP codes are not polygons )。

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

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

是否有可以执行此操作的服务?如果您不希望您的用户滚动数十或数百个结果,那就不是了。如果他们不仅要看一对夫妇,那么最好只是让他们输入他们的完整地址。

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

所以现在我已经对你的想法下了世界末日,另一个怎么样?当然,我偏向于SmartyStreets' autocomplete,它建议地址,在他们打字时,靠近用户的地理位置。我应该提一下它是免费的。在用户完成或选择了其中一个建议之前,它实际上并未验证地址,但它确实减少了击键次数。

此外,我还建议将country作为地址表单的第一个字段。这样,您可以根据他们选择的国家/地区更改表单的格式。如果您使用LiveAddress等服务,则可以让用户在单个字段中以适合他们的格式键入其地址,而不是以任意顺序在多个文本框中键入,因为LiveAddress可以解析其输入。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我不知道在邮政编码和街道地址之间存在一对一映射的任何国家/地区。除了新加坡。 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”中的数字表示该城市中有多少街道地址共享给定的邮政编码。

祝你好运!