Google反向地理编码-如何在street_address或路线之间进行选择?

时间:2019-02-13 21:06:10

标签: reverse-geocoding

我在车辆跟踪应用程序中一直使用Google的反向地理编码API将经纬度信息转换为“地址”至少5年了。最近,这种转换开始产生一些令人惊讶的结果。

例如,经纬度对36.7653111,-121.74852插入Google Maps时,将产生“ CA-156,Castroville,CA 95012”作为地址。这是理想的答案。

跟踪应用程序生成“美国加利福尼亚州95012,蒙特里县,卡斯特罗维尔,11298 Haight St”,问题是JSON结果包含两个“ street_address”和一个“ route”类型。选择结果中出现的第一个street_address或路线的愚蠢算法不再起作用。现在的问题是如何确定哪种可能性与给定的lan / lon更好地匹配?纬度/经度显然在CA-156路线上。海特街(Haight St.)完全没有穿过CA-156。

这种情况的特殊之处在于,该车辆不在两种“ street_address”类型的任何一条街道上行驶,而是在路线上的街道上行驶。在这种情况下,该路由应具有比两种street_address类型更高的优先级。

我现在检查了数百种反向地理编码的结果。似乎没有任何简单的算法可以选择最佳结果。例如,反向地理编码37.31674,-122.0472125仅返回两个结果:

Type: premise 
Address: Child Development Center, Cupertino, Santa Clara County, CA 95014, US
location_type: ROOFTOP
37.316425,-122.0460558 Distance: 354.7286202778164 Feet

Type: route 
Address: CA-85, Cupertino, Santa Clara County, CA 95014, US
location_type: GEOMETRIC_CENTER
37.3145586,-122.0461306 Distance: 855.4738140974437 Feet

车辆正在CA-85上行驶。选择第一个结果(前提)或距离最小的结果不会产生最佳结果。

这里的根本问题是“路线”类型,到GEOMETRIC_CENTER的距离不会告诉您是“在路线上”(0距离)还是“不在路线上”,距离有多远。

我已向Google提起诉讼。如果收到有用的回复,请在此处发布。

1 个答案:

答案 0 :(得分:1)

如果您对来自车载设备的经纬度信息进行反向地理编码,则可以采用两种方法来显着改善结果。讨论假设您将结果限制为以下类型:“前提”,“ street_address”或“ route”。如果您对其他类型感兴趣,则可能需要尝试一下。

首先,如果车载设备将速度与经/纬度一起返回,则当速度高于特定阈值时,选择“路线”结果(如果存在)。否则,请选择与经纬度距离最短的“街道地址”或“前提”。您可能需要尝试一些速度阈值才能找到一个合理的值。对我来说,每小时25英里的速度似乎做得不错。

第二,如果您没有速度或车辆停止或行驶的其他迹象,请尝试以下“ hack”。

扫描直到第一次出现“路线”的结果,并确定在“前提”或“街道地址”中键入与纬度/经度距离最短的结果。记住“路线”(如果找到的话)。

然后 1.如果不存在“ route”结果,则返回与经纬度距离最小的“ premise”或“ street_address”。 2.其他 一种。如果“路由”具有与正则表达式“ [A-Z] +-[0-9] +”匹配的“路由”名称,则以最佳结果返回路由。 b。否则,如果存在最小距离“前提”或“ street_address”,则将其返回为最佳结果。 C。否则,返回“ route”作为最佳结果。

这远非完美,但对于美国来说,这似乎已经足够好了,这是我现在所关心的。由于国家/地区之间的路线名称差异很大,因此可能需要进行一些改进。