即使地理编码街道不存在,Google Maps API v3地理编码状态也可以

时间:2014-01-17 13:34:15

标签: google-maps google-maps-api-3 geocoding google-geocoder

我刚刚在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.StatusCodeOK,即according to the documentation,“没有发生错误;地址已成功解析且至少返回了一个地理编码。”
但是当试图对这个地址进行地理编码时:

  

15 StreetWhoDoesntExist,69009 LYON

StatusCodeOK,返回的纬度/经度是城市的中心(在此示例中,LYON,这是一个真正的法国城市及其相应的邮政编码,69009)。

这种行为是正常的吗?当我在Google Maps中输入相同的地址时,它告诉我它找不到这个地址(这是“好”的行为)。那么,我如何使用GMaps API重现它,以便拒绝使用未知街道名称的广告,即使相关的城市和/或邮政编码存在?

提前致谢!

2 个答案:

答案 0 :(得分:2)

API CALL

结果:

     "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拒绝该地址的原因是因为他们的应用程序内置了自定义逻辑,可以捕获这些类型的结果。地理编码器只返回原始结果,您需要编写业务逻辑来处理这些结果。