Google 地理编码 API - 相关性

Google Geocode API - Relevance

我是另一个付费地理编码服务的客户,目前正在评估 Google 的地理编码 API。我知道已经有很多问题,但我还没有找到答案。

这个问题请运行自行查询了解。

正确的街道是 "semptstr." 运行如果查询中有一个小的拼写错误 "semstr" 将会产生令人困惑的结果。

https://maps.googleapis.com/maps/api/geocode/json?address=semstr. 21 85457 woerth Germany&key={{YOUR KEY}}

如果您对上面的地址进行地理编码,它会打印 location_type "ROOFTOP",我认为这是直接匹配。

地址地理编码如下

{
"results" : [
  {
     "address_components" : [
        {
           "long_name" : "21",
           "short_name" : "21",
           "types" : [ "street_number" ]
        },
        {
           "long_name" : "Seestraße",
           "short_name" : "Seestraße",
           "types" : [ "route" ]
        },
        {
           "long_name" : "Rettenbach",
           "short_name" : "Rettenbach",
           "types" : [ "locality", "political" ]
        },
        {
           "long_name" : "Oberpfalz",
           "short_name" : "Oberpfalz",
           "types" : [ "administrative_area_level_2", "political" ]
        },
        {
           "long_name" : "Bayern",
           "short_name" : "BY",
           "types" : [ "administrative_area_level_1", "political" ]
        },
        {
           "long_name" : "Deutschland",
           "short_name" : "DE",
           "types" : [ "country", "political" ]
        },
        {
           "long_name" : "93191",
           "short_name" : "93191",
           "types" : [ "postal_code" ]
        }
     ],
     "formatted_address" : "Seestraße 21, 93191 Rettenbach, Deutschland",
     "geometry" : {
        "location" : {
           "lat" : 49.07218,
           "lng" : 12.45707
        },
        "location_type" : "ROOFTOP",
        "viewport" : {
           "northeast" : {
              "lat" : 49.07352898029149,
              "lng" : 12.4584189802915
           },
           "southwest" : {
              "lat" : 49.07083101970849,
              "lng" : 12.4557210197085
           }
        }
     },
     "partial_match" : true,
     "place_id" : "ChIJHdXdJbnhn0cRgImKyuFq2UM",
     "types" : [ "street_address" ]
  }
],
 "status" : "OK"
}

如果您查看结果,它会显示 ROOFTOP 并且没有关于准确性的字段。我认为 ROOFTOP 是完全匹配的。

实际上它甚至没有关闭查询的位置。邮政编码 93191 在另一个城市,相距约 150 公里。

我正在寻找相关参数。我知道 APPROXIMATE,INTERPOLATED 存在,但在这种情况下它不会显示在结果中。

在我的案例中,这样的结果不能用于严肃的生产或商业应用程序,除非我错过了一个额外的查询参数。

边界框也不行,因为我没有城市的坐标。它会让我 运行 查询两次,这将导致双倍的成本和双倍的使用。

比较邮政编码只会导致函数的行为非常严格。

那么,如何根据查询发现地址不完全匹配呢?有没有我遗漏的参数?

我找不到这方面的任何官方文档,但浏览了这个社区的一些答案后,我发现 ROOFTOP 意味着最准确的结果。

根据发布的答案here and here-

API 将 return ROOFTOP、GEOMETRIC_CENTER、RANGE_INTERPOLATED 或 APPROXIMATE。 屋顶本质上是 "dead on" -- API 将地址解析为建筑物。除此之外,你会得到不同程度的"close"。

"ROOFTOP" -> 9 [Everything else] -> 4 到 8(又名文本字符串也可以阅读 "GARBAGE")

查明地址是否完全匹配的一种好方法是使用地址验证。有许多提供此功能的服务,例如 MelissaData、Everything Location 和 SmartyStreets。

这是 SmartyStreets 的输出结果示例

一个。 semstr. 21 85457 woerth Germany

乙。 semptstr. 21 85457 woerth Germany

请注意 B 如何显示地址已完全验证,因此比 A 更正确。 (看分析部分)。

关于地址是否被验证的信息会告诉你地址是否完全匹配。

免责声明:我为 SmartyStreets 工作。

使用 api 时,您可以将结果限制在边界框中。该计算将产生近似结果类型。如果未在框中找到,则不会 return 编辑任何结果。您还可以限制区域:“®ion=zyx” 您也可以使用组件限制它。组件可以是任何东西,例如邮政编码、邮政编码。诀窍是,当没有找到结果时,api 将 return 来自组件本身的结果。我认为这就是这里正在发生的事情。 我看到您的状态代码 returns "OK",这表明系统认为您得到了正确的结果。 可能是您需要更改过滤组件以确保行政边界与政治边界不同。