我刚刚在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();
其中address
是一个变量,其中包含用户输入的完整地址。
当地址有效时,response.StatusCode
为OK
,即according to the documentation,“没有发生错误;地址已成功解析且至少返回了一个地理编码。”
但是当试图对这个地址进行地理编码时:
15 StreetWhoDoesntExist,69009 LYON
StatusCode
为OK
,返回的纬度/经度是城市的中心(在此示例中,LYON,这是一个真正的法国城市及其相应的邮政编码,69009)。
这种行为是正常的吗?当我在Google Maps中输入相同的地址时,它告诉我它找不到这个地址(这是“好”的行为)。那么,我如何使用GMaps API重现它,以便拒绝使用未知街道名称的广告,即使相关的城市和/或邮政编码存在?
提前致谢!
答案 0 :(得分:2)
结果:
"partial_match" : true,
"types" : [ "sublocality", "political" ]
所以我会检查这两个或至少是types
,以确定它是否找到了实际的街道地址。
答案 1 :(得分:1)
是的,这是正常的。结果返回了,而不是你期待的结果。如果你在文档中进一步了解,你会看到:
- geometry包含以下信息:
location
包含地理编码的纬度,经度值。对于普通地址查找,这个 字段通常是最重要的。location_type
存储有关指定位置的其他数据。以下值是 目前支持:
"ROOFTOP"
表示返回的结果是一个精确的地理编码,我们的位置信息精确到街道地址精度。"RANGE_INTERPOLATED"
表示返回的结果反映了近似值(通常在道路上) 在两个精确点(例如交叉点)之间插值。 当屋顶地理编码时,通常会返回插值结果 不适用于街道地址。"GEOMETRIC_CENTER"
表示返回的结果是结果的几何中心,例如a 折线(例如,街道)或多边形(区域)。"APPROXIMATE"
表示返回的结果是近似值。
您需要检查location_type
以查看返回结果的“准确性”。在您的情况下,地理编码器无法找到15 StreetWhoDoesntExist
,因此下一个最佳结果是邮政编码的中心。
与地理编码结果一起返回的address_components[]
还提供了其他信息,您可以使用这些信息更好地了解返回的内容。
partial_match
参数会通知您地理编码器是否未返回且完全匹配。对于拼写错误或缺少地址的部分,这通常是正确的。
maps.google.com拒绝该地址的原因是因为他们的应用程序内置了自定义逻辑,可以捕获这些类型的结果。地理编码器只返回原始结果,您需要编写业务逻辑来处理这些结果。