我认为您正在寻找的是地址验证。Google、Nominatim 和其他公司仅在您不确定地址是什么时才执行地址近似,这有助于查找地址,但结果只是最佳猜测。
我帮助开发了一个 API,它根据称为 LiveAddress 的严格 CASS™ 要求验证和地理编码地址。我通过 Google、Nominatim 和 LiveAddress API 运行了您的示例地址,结果如下:
尽管“利文斯顿”中有错字,但谷歌还是找到了地址,但无法保证其有效性,称“地址是近似的”。- 再一次,它说几乎每个你尝试的地址。
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 精度是(当前)最精确的地理编码级别 - 精确到块(或更接近)级别。
因此,在回答您的问题时:
那要看。您的客户是否在网站表单上输入地址?在他们继续之前立即告诉他们该地址无效。我们正在开发一个 jQuery 插件,以使每个人都可以轻松地进行剪切和粘贴,但在那之前,您可以在我们的结帐表单中看到我们的概念,它实现了一个漂亮的系统: SmartyStreets 有一个jQuery 插件,可以验证网站上的地址形式(只是复制和粘贴)。输入地址时,会自动验证。如果错误,他们会向上滑动通知,询问用户是否要修复它。有时他们的地址是不明确的,它会返回一些有效的结果。(试试:“100, new york, ny”)——他们给出了一些建议,你可以选择一个。您修复它,直到用户获得有效地址或说“无论如何使用我的;我保证它是正确的”,表单才会提交。或者,如果地址正确,他们将标准化结果放入地址字段并显示绿色通知:“地址已验证!”
我想我在上面讨论过这个。您的查询很好;这似乎是 Nominatim 的一个缺点。
如建议的那样,您可以尝试 LiveAddress。尝试使用大量地址以获得更好的主意(我承认,仅与一个地址相比,这是一个微弱的迹象)-但到目前为止,根据您的需要,LiveAddress 似乎介于 Google 地图和提名。
在评论中回答问题
我在评论中用完了空间。
问:
这是另一个导致我们出现问题的地址“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
最重要的帮助是找到一个有效的主号码。在没有返回有效地址的情况下,您应该提醒用户并建议修复主号码并确保城市/州(如果给出)与邮政编码一致(因为如果这两个发生争执,也不可能说出你的意思)。