0

У нас есть встроенная панель поиска на нашем сайте, которая использует API Карт Google для своих предложений и результаты. Когда пользователь ищет «Нью-Йорк» и специально щелкает по предложению, которое указывает на то, что они ищут штата Нью-Йорк это апи вызов сделан:При запросе API Карт Google я получаю идентичные результаты для «Нью-Йорк, США» и «Нью-Йорк, Нью-Йорк, Соединенные Штаты»

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

Когда они просто наберите в «Нью-Йорк» и нажмите клавишу ВВОД, или выбрать предложение, которое обозначает «Нью-Йорк, Нью-Йорк», этот апи сделан вызов:

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

Проблема заключается в том, что возвращаемый JSON идентичен между ними, за исключением обратного вызова заголовок:

{ 
    "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". Поскольку оба документа указывают, что пользователь искал «местность», мы всегда возвращаем результаты для Нью-Йорка, а не штата Нью-Йорк, как могли быть указаны.

Это ошибка в API Карт Google? Нужно ли указывать некоторый флаг, чтобы заставить более строго интерпретировать то, что мы отправляем? Другие идеи?

Обратите внимание, что если вы выполните этот поиск у пользователя, обратившись на www.google.com/maps, вы получите штат штата Нью-Йорк, а не Нью-Йорк. Я не знаю достаточно о том, как эта страница отличается от API, чтобы знать, что там происходит.

+0

Просьба указать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve), который позволяет воспроизвести проблему. Как вы получаете эти результаты? Какую версию API вы используете? Я не получаю таких же результатов. – MrUpsidown

+0

@MrUpsidown Я предположил, что мои ссылки действительно способ воспроизвести проблему. Мы используем версию API на maps.googleapis.com/maps-api-v3/api/js/27/12/. Кроме того, вы можете попробовать любое состояние, отличное от штата Нью-Йорк, в документации по API API Google: https://developers.google.com/maps/documentation/geocoding/intro, и вы увидите состояние. Если вы наберете «Нью-Йорк» или «Нью-Йорк», вы вернете город, а не государство. – Necoras

ответ

1

Я закончил открытие команды issue командой Google Maps. По словам их инженеров, это ожидаемое поведение. Они считают, что большинство пользователей намерены увидеть «Нью-Йорк» конкретно при поиске «Нью-Йорка», а не государства. Мы закончили поиски запросов наших пользователей и принудительные поиски в наших системах, если они указали «Нью-Йорк» без дополнительного параметра «Город».

Смежные вопросы