【问题标题】:GeoCoding Issues with OpenStreetMap/NominatimOpenStreetMap/Nominatim 的地理编码问题
【发布时间】:2012-07-09 23:35:19
【问题描述】:

我有一个网站需要获取客户输入的地址的经纬度。

Google/Bing/Yahoo 对我们来说太贵了,所以我们选择了 OpenStreetMap/Nominatim。

不幸的是,虽然它在测试期间运行良好,但它未能找到大约 50% 的输入地址,这是一个大问题。

我有兴趣了解 3 件事:

  1. 当客户确实输入了错误的地址时,最好的方法是什么 - 向他们发送电子邮件并要求他们更正?使用地址段直到找到东西?

  2. 处理地址很好但我无法使用 OpenStreetMap 找到它的情况的最佳方法是什么?还是我对 Nominatim 的查询做错了什么?

  3. 如果 OpenStreetMap 不能胜任这项任务,是否有人知道免费/便宜的替代方案?我知道它是一个开源协作,因此并不完整,但我认为它确实有很好的覆盖范围,并且如果它没有确切的位置,它会返回附近的位置 - 也许它有,也许我正在使用它错了。

这是一个例子:

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

【问题讨论】:

    标签: geocoding openstreetmap nominatim


    【解决方案1】:

    我认为您正在寻找的是地址验证。 Google、Nominatim 和其他公司仅执行地址近似,这有助于在您不确定地址是什么时找到地址,但结果只是最佳猜测。

    我帮助开发了一个 API,它可以根据称为 LiveAddress 的严格 CASS™ 要求验证和地理编码地址。我通过 Google、Nominatim 和 LiveAddress API 运行了您的示例地址,结果如下:

    • 尽管“Livingston”中有错字,但 Google 还是找到了地址,但无法保证其有效性,并说“地址是近似的”。 -- 话又说回来,它对您尝试的每个地址都这么说。

    • Nominatim 因为错字而没有找到它。使用 Nominatim 的一个缺点可能是它不会尝试补偿拼写错误、验证地址的准确性或完整性等。修复拼写错误会返回一些信息,但任何人都猜测必须修复什么以及查询失败的原因无论如何。

    • 由于拼写错误,LiveAddress 无法识别输入的地址。缺少“Livingston”中的“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#"
            }
        }
    ]
    

    分析脚注“M#”表示通过修复街道名称的拼写来实现匹配。生成的 DPV 脚注“AABB”表示整个地址与国家 ZIP+4 文件中的街道 + 城市/州相匹配。另请注意,Zip9 精度是(当前)最精确的地理编码级别——精确到块(或更接近)级别。

    所以,回答你的问题:

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

    2. 我想我在上面讨论过这个问题。您的查询很好;这似乎是 Nominatim 的一个缺点。

    3. 按照建议,您可以尝试 LiveAddress。尝试使用大量地址以获得更好的主意(我承认,仅与一个地址相比,这是一个微弱的迹象)-但到目前为止,根据您的需要,LiveAddress 似乎介于 Google 地图和提名。


    在 cmets 中回答问题

    我在 cmets 的空间用完了。

    问:

    这是另一个地址,导致我们出现问题“7580 E Big Cannon Drive,Anaheim Hills,Anaheim Hills,California,92808,US”甚至“7580 E Big Cannon Drive,California,92808,US”似乎都无法使用您的网站。

    答:

    我还对 USPS 网站和其他一些服务提供商进行了一些研究。没有返回任何有效的结果或建议。但是我发现你提交的地址有什么问题:

    • 街道名称拼写错误。没什么大不了的; LiveAddress 将其更正为 Big Canyon。

    • 主号码错误。 There's not much hope here if the primary number is incorrect。计算机或人类通常无法推断出您的真正意思。在这些情况下,地址将无法通过验证,用户必须提供 something 有效才能继续。我在 7584 找到了一个有效的主号码。

    • 总体规划社区,而不是城市/县。“阿纳海姆山”是总体规划社区的名称。 Google 在其商家信息中发现了它,但这与地址无关。

    • “阿纳海姆山”两次。这让解析器感到困惑。不幸的是,有了额外的不必要信息(尤其是在单行地址中),几乎不可能分辨出其中的哪一部分是可疑的。第二个“阿纳海姆山”必须离开,但第一个可以留下,一切都会好起来的。

    • 国家/地区信息。 我尝试过您的地址的大多数服务都与前面的国家/地区混淆,并将其放在“公司/公司名称”字段中。我们处理美国地址,因此您可以省略国家/地区。它也会减少您的请求的大小。

    LiveAddress 实际上能够验证这些表单中的地址,既可以作为单行地址,也可以拆分为组件:

    7584 E Big Cannon Drive anaheim hills ca 92808
    7584 bg cannon 92808
    7584 big cannon ave aneheim hills ca
    

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

    【讨论】:

    • 谢谢马特,我实际上只是在通过电子邮件发送您的支持地址,这是另一个导致我们问题的地址“7580 E Big Cannon Drive,Anaheim Hills,Anaheim Hills,California,92808,US”甚至“7580 E Big Cannon Drive,California,92808,US”似乎也不适用于您的网站。
    • @DaleBurrell 很好的发现。我的评论空间不足,所以我扩展了我的帖子以包含对您问题的答案。
    • 再次感谢马特,我想当新房产建成时,它的地址没有在所有相关当局完全注册时一定会有一个窗口?我将把这个问题留得更久一点,看看其他人是否对如何最好地处理这种情况有意见。在您提供了所有出色的帮助之后,我一定会牢记您的产品。
    • @DaleBurrell 您使用哪个浏览器没有出现 [favicon](smartystreets.com/favicon.ico)? (感谢您的报告!)无论如何,有时新属性有时会出现新的情况,但它们会被 EWS 标记;但这个地址不是。从技术上讲,LiveAddress 可以识别名称“Anaheim Hills”,但国家 ZIP+4 文件将该名称“标记”为非官方和非首选邮局名称。换句话说,这是一个常见的拼写,但 USPS 无法识别,因此将名称更正为 Anaheim。该数据在请求的脚注中返回。
    • 好的,我在短期内所做的是继续使用 Nominatim,尝试对完整地址进行地理编码,如果失败则尝试仅对街道地址和邮政编码进行地理编码,如果失败则尝试仅对邮政编码进行地理编码。如果他们都失败了,它会给我发电子邮件。那是短期解决方案,我希望我会使用您的一些想法,如果该站点变得足够流行以要求更高级别的地址有效性,我可能会使用您的产品。再次感谢您的所有帮助,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多