在查询 Google 地图 API 时,我得到了 "New York, United States" 和 "New York, NY, United States" 相同的结果

When querying the Google Maps API I get identical results for "New York, United States" and "New York, NY, United States"

我们的网站中有一个嵌入式搜索栏,它利用 Google 地图 API 提供建议和结果。当用户搜索 "New York" 并特别点击表明他们正在搜索纽约州的建议时,将进行此 api 调用:

https://maps.googleapis.com/maps/api/js/GeocodeService.Search?4sNew%20York%2C%20United%20States&7sUS&8m2&1scountry&2sUS&9sen-US&callback=xdc._ohwoca&token=44216

当他们输入 "New York" 并按回车键,或 select 表示 "New York, NY" 的建议时,将进行此 api 调用:

https://maps.googleapis.com/maps/api/js/GeocodeService.Search?4sNew%20York%2C%20NY%2C%20United%20States&7sUS&8m2&1scountry&2sUS&9sen-US&callback=xdc._n2ga8u&token=62787

问题是 returned JSON 在两者之间是相同的,除了回调 header:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "New York",
               "short_name" : "New York",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "New York",
               "short_name" : "NY",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "New York, NY, USA",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 40.9175771,
                  "lng" : -73.70027209999999
               },
               "southwest" : {
                  "lat" : 40.4773991,
                  "lng" : -74.25908989999999
               }
            },
            "location" : {
               "lat" : 40.7127837,
               "lng" : -74.0059413
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 40.9152555,
                  "lng" : -73.70027209999999
               },
               "southwest" : {
                  "lat" : 40.4960439,
                  "lng" : -74.25573489999999
               }
            }
         },
         "place_id" : "ChIJOwg_06VPwokRYv534QaPC8g",
         "types" : [ "locality", "political" ]
      }
   ],
   "status" : "OK"
}

这会导致向我们的用户提供不正确的搜索结果。具体来说,我们关闭 "types" 字段。由于两个文档都指定用户搜索 'locality' 我们 总是 return 结果是纽约市而不是纽约州,因为可能已指定。

这是 Google 地图 API 中的错误吗?我们是否需要指定一些标志来强制对我们发送的内容进行更严格的解释?其他想法?

请注意,如果您对面向 www.google.com/maps 的用户执行此搜索,您将得到纽约州而不是纽约市。我不太了解该页面与 API 有何不同,无法知道那里发生了什么。

我最终与 Google 地图团队一起开了一个 issue。根据他们的工程师的说法,这是预期的行为。他们认为,大多数用户在搜索 "New York" 时打算具体查看 "New York City" 而不是状态。我们最终捕获了用户的查询并强制在我们的系统中进行状态搜索,前提是他们指定了 "New York" 而没有额外的 "City" 参数。