谷歌地图 API v3 地理编码状态正常,即使地理编码的街道不存在



我刚刚在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.StatusCodeOK,根据文档,这意味着"没有发生错误;地址已成功解析,并且至少返回了一个地理代码。">
但当尝试对此地址进行地理编码时:

15 Street WhoDoesntExist,69009 LYON

StatusCodeOK,返回的纬度/经度是城市的中心(在本例中,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拒绝该地址的原因是,他们的应用程序中内置了捕获这些类型结果的自定义逻辑。地理编码器只返回原始结果,您需要编写业务逻辑来处理这些结果。

相关内容

最新更新