我刚刚在Google Maps API V3中发现了一个奇怪的行为,更具体地说,是使用它的Geocoding
工具
这里有一个例子:这就是我对地址进行地理编码的方式:
var request = HttpWebRequest.Create(@"http://maps.googleapis.com/maps/api/geocode/json?address=" + address + "&sensor=false");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
其中CCD_ 2是具有用户输入的完整地址的变量。
如果地址有效,则response.StatusCode
为OK
,根据文档,这意味着"没有发生错误;地址已成功解析,并且至少返回了一个地理代码。">
但当尝试对此地址进行地理编码时:
15 Street WhoDoesntExist,69009 LYON
StatusCode
是OK
,返回的纬度/经度是城市的中心(在本例中,LYON是一个真正的法国城市,其相应的邮政编码为69009)。
这种行为正常吗?当我在谷歌地图中输入同一地址时,它告诉我找不到这个地址(这是一种"好"行为)。那么,我如何用GMaps API复制它,以便它拒绝具有未知街道名称的插件,即使相关的城市和/或邮政编码存在?
提前感谢!
API调用
结果:
"partial_match" : true,
"types" : [ "sublocality", "political" ]
所以我会检查这两个,或者至少检查types
,以确定它是否找到了实际的街道地址。
是的,这很正常。返回了一个结果,只是不是您所期望的结果。如果你在文档中再往下看,你会看到:
- 几何体包含以下信息:
location
包含地理编码的纬度、经度值。对于正常的地址查找字段通常是最重要的location_type
存储关于指定位置的附加数据。以下值为当前支持的:
"ROOFTOP"
表示返回的结果是精确的地理编码,我们有精确到街道地址精度的位置信息"RANGE_INTERPOLATED"
表示返回的结果反映了近似值(通常在道路上)在两个精确点(如交点)之间插值。当屋顶地理编码为街道地址不可用"GEOMETRIC_CENTER"
表示返回的结果是诸如多段线(例如街道)或多边形(区域)"APPROXIMATE"
表示返回的结果是近似的
您需要检查location_type
,看看返回的结果有多"准确"。在您的情况下,地理编码器无法找到15 StreetWhoDoesntExist
,因此次佳结果是邮政编码的中心。
与地理编码结果一起返回的address_components[]
具有其他信息,您可以使用这些信息来更好地了解返回的内容。
partial_match
参数会让您知道地理编码器是否没有返回并完全匹配。拼写错误或地址部分缺失通常都是如此。
maps.google.com拒绝该地址的原因是,他们的应用程序中内置了捕获这些类型结果的自定义逻辑。地理编码器只返回原始结果,您需要编写业务逻辑来处理这些结果。