OpenStreetMap/Nominatim的GeoCoding问题

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精度是最精确的地理编码级别(当前) - 准确阻止(或更接近)级别.

所以,回答你的问题:

  1. 那要看.您的客户是否在网站表单上输入了地址?在他们继续之前立即告诉他们,地址无效.我们正在开发一个jQuery插件,让每个人都可以轻松地进行剪切和粘贴,但在此之前,您可以在我们的结帐表单中看到我们的概念,它实现了一个非常漂亮的系统: SmartyStreets有一个jQuery插件,用于验证网站上的地址表格(只需复制和粘贴).输入地址后,会自动验证.如果错误,他们会向用户上下通知,询问用户是否要修复它.有时他们的地址不明确,返回一些有效的结果.(尝试:"100,纽约,纽约") - 他们会提出一些建议,你可以选一个.您修复它并且表单不会提交,直到用户获得有效地址或说"无论如何都使用我的;我保证它是正确的".或者,如果地址正确,他们会将标准化结果放在地址字段中并显示绿色通知:"地址已验证!"

  2. 我想我上面已经讨论过了.你的查询很好; 这似乎是Nominatim的一个缺点.

  3. 如建议的那样,您可以尝试LiveAddress.尝试使用大量的地址来获得更好的想法(仅从一个地址进行比较,我承认,这是一个微弱的指示) - 但到目前为止,看起来,根据您的需要,LiveAddress位于谷歌地图和Nominatim.


在评论中回答问题

我在评论中跑出了房间.

问:

这是另一个导致我们问题的地址"7580 E Big Cannon Drive,Anaheim Hills,Anaheim Hills,California,92808,US"甚至"7580 E Big Cannon Drive,California,92808,US"似乎与您的网站无关.

A:

我对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)

最重要的帮助是找到有效的主号码.在没有有效地址返回的情况下,您应该提醒用户并建议修复主号码并确保城市/州(如果给定)与邮政编码一致(因为如果这两个人正在战斗,那也是不可能的告诉你的意思).

  • 谢谢马特,我实际上只是在通过电子邮件发送您的支持地址,这是另一个地址导致我们出现问题“7580 E Big Cannon Drive,Anaheim Hills,Anaheim Hills,California,92808,US”甚至“7580 E Big Cannon Drive, California,92808,US" 似乎不适用于您的网站。 (2认同)
  • 好吧,我在短期内所做的是继续使用Nominatim,尝试对完整地址进行地理编码,如果失败则尝试仅对街道地址和邮政编码进行地理编码,如果失败则尝试仅对邮政编码进行地理编码.如果他们都失败了,它会给我发电子邮件 这是短期解决方案,我希望我会使用你的一些想法,也许你的产品,如果该网站变得足够流行,需要更好的地址有效性水平.再次感谢您的帮助,非常感谢. (2认同)