Dal*_*e K 9 geocoding openstreetmap nominatim
我有一个网站,需要获取客户输入的地址的纬度和经度.
Google/Bing/Yahoo对我们来说太贵了,所以我们选择了OpenStreetMap/Nominatim.
不幸的是,虽然它在测试期间工作正常,但它未能找到大约50%的地址输入,这是一个大问题.
我有兴趣知道3件事:
1)处理客户确实输入错误地址的情况的最佳方法是什么 - 向他们发送电子邮件并要求他们更正?使用地址段直到找到某些内容?
2)处理地址很好的情况的最佳方法是什么,但我无法用OpenStreetMap找到它?或者我对Nominatim的查询做错了什么?
3)如果OpenStreeMap无法完成任务,有没有人知道免费/廉价替代方案?我知道它是一个开源协作,因此不完整,但我认为它确实有相当好的覆盖率,如果它没有确切的位置它会返回附近的位置 - 也许它确实可能我正在使用它错误.
这是一个例子:"182 livington ave,albany,New York,12210,US"
谷歌地图很容易找到.Nominatim一无所获:http : //nominatim.openstreetmap.org/search?format=xml&addressdetails=0&q=182%20livington%20ave,albany,New%20York,12210,US
Mat*_*att 14
我认为你要找的是地址验证.Google,Nominatim和其他人只会执行地址近似,这对于在您不确定它们是什么时查找地址很有用,但结果只是最佳猜测.
我帮助开发了一个API,它根据严格的CASS™要求LiveAddress对地址进行验证和地理编码.我通过Google,Nominatim和LiveAddress API运行了您的示例地址,结果如下:
尽管"利文斯顿"中的拼写错误,谷歌仍然找到了该地址,但无法保证其有效性,称"地址是近似的". - 然后,它说,你尝试的几乎每个地址.
由于错字,Nominatim找不到它.也许使用Nominatim的一个缺点是它不会试图补偿拼写错误,验证地址的准确性或完整性等.修复错字返回了一些信息,但是任何人猜测必须修复什么,以及查询失败的原因无论如何.
由于输入错误,LiveAddress无法识别输入的地址.错过"利文斯顿"中的"s"是戏剧性的,因为有一些名为"Livington"的街道,使得查询含糊不清,根据CASS™规范,结果太多不匹配.然而,使用不同的拼写错误更改名称"Livingstn"会产生一个有效的结果,错误的Nominatim也不接受:
...出于某种原因,我必须突破我的要点才能正确呈现代码:
[
{
"input_index": 0,
"candidate_index": 0,
"delivery_line_1": "182 Livingston Ave",
"last_line": "Albany NY 12210-2512",
"delivery_point_barcode": "122102512824",
"components": {
"primary_number": "182",
"street_name": "Livingston",
"street_suffix": "Ave",
"city_name": "Albany",
"state_abbreviation": "NY",
"zipcode": "12210",
"plus4_code": "2512",
"delivery_point": "82",
"delivery_point_check_digit": "4"
},
"metadata": {
"record_type": "S",
"county_fips": "36001",
"county_name": "Albany",
"carrier_route": "C011",
"congressional_district": "21",
"rdi": "Residential",
"latitude": 42.66033,
"longitude": -73.75285,
"precision": "Zip9"
},
"analysis": {
"dpv_match_code": "Y",
"dpv_footnotes": "AABB",
"dpv_cmra": "N",
"dpv_vacant": "N",
"active": "Y",
"ews_match": false,
"footnotes": "M#"
}
}
]
Run Code Online (Sandbox Code Playgroud)
分析脚注"M#"表示通过修复街道名称的拼写来实现匹配.生成的DPV脚注"AABB"表示整个地址与国家ZIP + 4文件中的街道+城市/州相匹配.另请注意,Zip9精度是最精确的地理编码级别(当前) - 准确阻止(或更接近)级别.
所以,回答你的问题:
那要看.您的客户是否在网站表单上输入了地址?在他们继续之前立即告诉他们,地址无效.我们正在开发一个jQuery插件,让每个人都可以轻松地进行剪切和粘贴,但在此之前,您可以在我们的结帐表单中看到我们的概念,它实现了一个非常漂亮的系统: SmartyStreets有一个jQuery插件,用于验证网站上的地址表格(只需复制和粘贴).输入地址后,会自动验证.如果错误,他们会向用户上下通知,询问用户是否要修复它.有时他们的地址不明确,返回一些有效的结果.(尝试:"100,纽约,纽约") - 他们会提出一些建议,你可以选一个.您修复它并且表单不会提交,直到用户获得有效地址或说"无论如何都使用我的;我保证它是正确的".或者,如果地址正确,他们会将标准化结果放在地址字段中并显示绿色通知:"地址已验证!"
我想我上面已经讨论过了.你的查询很好; 这似乎是Nominatim的一个缺点.
如建议的那样,您可以尝试LiveAddress.尝试使用大量的地址来获得更好的想法(仅从一个地址进行比较,我承认,这是一个微弱的指示) - 但到目前为止,看起来,根据您的需要,LiveAddress位于谷歌地图和Nominatim.
我在评论中跑出了房间.
这是另一个导致我们问题的地址"7580 E Big Cannon Drive,Anaheim Hills,Anaheim Hills,California,92808,US"甚至"7580 E Big Cannon Drive,California,92808,US"似乎与您的网站无关.
我对USPS网站和其他一些服务提供商进行了一些研究.没有返回任何有效的结果或建议.但是我在提交地址时发现地址有什么问题:
错误的街道名称.没什么大不了的 LiveAddress将此更正为Big Can y on.
主要号码错误. 如果主要号码不正确,这里没有太多希望.计算机或人通常无法推断出你的真正含义.在这种情况下,该地址将无法通过验证,用户必须提供一些有效的去.我在7584找到了有效的主号码.
总体规划的社区,而不是城市/县."阿纳海姆山"是一个总体规划社区的名称.谷歌在其商业列表中发现了它,但这与地址无关.
"阿纳海姆山"两次.解析器令人困惑.不幸的是,由于有额外的不必要信息(特别是在单行地址中),几乎不可能分辨出它的哪些部分是可疑的.第二个"阿纳海姆山"必须去,但第一个可以留下来,这将是好的.
国家信息.我尝试过您的地址的大多数服务都与前面的国家混淆,并将其放在"公司/公司名称"字段中.我们处理美国地址,因此您可以省略该国家/地区.它也会减少您的请求的大小.
LiveAddress实际上能够验证这些表单中的地址,既可以作为单行地址,也可以拆分为组件:
7584 E Big Cannon Drive anaheim hills ca 92808
7584 bg cannon 92808
7584 big cannon ave aneheim hills ca
Run Code Online (Sandbox Code Playgroud)
最重要的帮助是找到有效的主号码.在没有有效地址返回的情况下,您应该提醒用户并建议修复主号码并确保城市/州(如果给定)与邮政编码一致(因为如果这两个人正在战斗,那也是不可能的告诉你的意思).
| 归档时间: |
|
| 查看次数: |
9586 次 |
| 最近记录: |