我认为你需要的是地址验证。Google、Nominatim和其他类似工具只能进行地址
近似,在你不确定地址时能够找到地址,但结果仅供参考。
我帮助开发了一个API,根据严格的CASS™要求验证和地理编码地址,名为LiveAddress。我已经使用Google、Nominatim和LiveAddress API运行了你的样本地址,并获得了以下结果:
Google发现了"Livingston"的错别字地址,但无法保证其有效性,称为“地址是近似的”,但对于您尝试的每个地址都会这样说。
由于拼写错误,Nominatim找不到它。也许使用Nominatim的缺点之一是它不会尝试补偿拼写错误,验证地址的准确性或完整性等。修正拼写错误返回了一些信息,但任何人都无法猜测需要修复什么以及查询为什么失败。
由于拼写错误,LiveAddress无法识别输入的地址。由于有名为“Livington”的街道,缺少“Livingston”中的“s”非常明显,使查询存在歧义,并且结果与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精度,这是目前最精确的地理编码级别,可以准确到街区(或更近)级别。
因此,针对您的问题回答如下:
这要看情况。您的客户是在网站表单上输入地址吗?在他们继续之前,立即告诉他们该地址无效。SmartyStreets有一个jQuery插件,在网站表单上验证地址(只需复制并粘贴)。当输入地址时,它会自动验证。如果地址错误,他们会弹出通知询问用户是否想修复它。有时地址不明确,会返回几个有效结果。(尝试:“100,纽约,NY”) - 他们会显示几个建议,您可以选择其中一个。您修复它后,表单将不提交,直到用户获得有效地址或说“仍使用我的地址;我保证它是正确的。” 或者,如果地址正确,他们会将标准化的结果放入地址字段中,并显示绿色提示:“地址已验证!”
我认为我在上面讨论过这个问题了。您的查询很好;这似乎是Nominatim的一个缺点。
如建议的那样,您可以尝试LiveAddress。尝试使用大量地址来获得更好的了解(仅从一个地址进行比较是一个弱指示) - 但到目前为止,对于您的需求,LiveAddress介于Google Maps和Nominatim之间。
对评论中的问题的回答
评论区已经没有足够的空间了。
问:
这是另一个导致我们问题的地址“7580 E Big Cannon Drive,Anaheim Hills,Anaheim Hills,California,92808,US”,即使“7580 E Big Cannon Drive,California,92808,US”也似乎在您的网站上无法使用。
答:
我在USPS网站和其他一些服务提供商上进行了一些研究,但都没有返回任何有效的结果或建议。但我找出了您提交的地址存在的问题所在:
拼写错误的街道名称。 没关系;LiveAddress已将其更正为Big Canyon。
错误的主要号码。 如果主要号码不正确,则没有太多希望在这里。通常,计算机或人类无法推断您真正想表达的意思。在这些情况下,地址将无法通过验证,用户必须提供一些有效信息才能继续。我在7584找到了一个有效的主要号码。
总体规划社区,而不是城市/县。 "Anaheim Hills"是一个总体规划社区的名称。谷歌在其商业列表中找到了它,但这与地址无关。
两次出现"Anaheim Hills"。 它让解析器感到困惑。不幸的是,在额外的不必要信息(特别是在单行地址中)中,几乎不可能确定哪一部分是可疑的。第二个"Anaheim Hills"必须消失,但第一个可以保留,它会很好地工作。
国家信息。 我尝试过的大多数服务都因前面的国家而感到困惑,并将其放在“公司/企业名称”字段中。我们处理美国地址,因此您可以省略该国家信息。这也将减少您的请求大小。
LiveAddress能够验证这些表格中的地址,无论是单行地址还是拆分成组件。
7584 E Big Cannon Drive anaheim hills ca 92808
7584 bg cannon 92808
7584 big cannon ave aneheim hills ca
最重要的帮助是找到一个有效的主要号码。如果没有返回有效地址,您应该警告用户并建议修复主要号码,并确保城市/州(如果给定)与邮政编码对齐(因为如果这两个在互相斗争,也不可能知道你的意思)。