我的表单中我的用户需要输入以下位置数据:
为了简化此表格的填写,我想通过让用户只输入他的国家,邮政编码和门牌号码自动填写完全合格的地址(addrses线路,城市,州省等)。
这三项是否足以在美国查找地址是否正确?或者是否需要更少或更多的信息?这个问题的答案对每个国家都不同吗?此外,是否有可用于此目的的服务,API或库(例如Google Maps或OpenStreetMap)?
答案 0 :(得分:7)
很棒的问题!
这三项是否足以在美国查找地址是否正确?
没有。不幸的是,这三个将让你达到〜数百个可能的地址 US
这个问题的答案对每个国家都有所不同吗?
是的!从一个国家到另一个国家的邮政系统差异很大,你们中的用户对他们期望提供的服务有不同的期望 - 例如,英国人不希望输入一个完整的地址。
通过英国,加拿大和澳大利亚,您通常可以从门牌号码和邮政编码中获取单个地址。但是,你无法保证这一点。可能存在子房屋信息或商业信息,需要与用户进行一些交互以检查您是否拥有正确的地址。
某些国家/地区(例如法国)没有完整的前提编号。有了这些你可以采取前提数字和&邮政编码,但根据城镇,你必须改变你的行为,以信任和接受输入或提示他们进行更正。
规划工作流程时的另一个重要考虑因素是需要允许可能不知道其邮政编码/邮编的人。它不会经常发生,但有时人们刚刚移动,或者偶尔会对邮政编码/邮政编码进行更改,因此在您需要的信息中保持灵活性非常重要。
是否有可用于此目的的服务,API或库?
是的 - 有几种解决方案能够捕获全局地址。益百利数据质量(我的公司)提供hosted或on premise解决方案,允许这样做。
Try it out here - 在“你想知道更多吗?”的右侧。您可以切换国家/地区,提示更新并在需要时进行交互。
答案 1 :(得分:1)
我只能回答有关美国地址的问题(我在SmartyStreets工作),但答案是否定的,这是行不通的。
感谢您改善用户体验的愿望。不幸的是,我不建议尝试这个,这就是原因:
美国邮政编码的全部内容实际上是11位数字(12位带有校验位):
所以在你的情况下:
所以不,知道这三个地址是不够的。在这一点上,这个国家实际上毫无价值,邮政编码充其量只是地区/城市特定。在邮政编码中,门牌号码可能会出现数十次,甚至数百次。 (我在我们的门牌号是独一无二的,但这种情况很少见。)
是的,这个问题的答案因国而异,但这种推理适用于大多数发达国家。欠发达国家的邮政系统没有这种组织。
是否有可以执行此操作的服务?如果您不希望您的用户滚动数十或数百个结果,那就不是了。如果他们不仅要看一对夫妇,那么最好只是让他们输入他们的完整地址。
我 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”中的数字表示该城市中有多少街道地址共享给定的邮政编码。
祝你好运!