2016-10-04 2 views
0

Я хочу, чтобы иметь возможность возвращать данные из autocomplete.getPlace() при стрельбе этим событием вручную.Google API getPlace из autocomplete return undefined при стрельбе вручную

В принципе, у меня есть одна функция, которая получает местоположение пользователя в Lat/Lng, и после этого я хочу получить пользователей getPlace(), потому что есть более полезные данные, такие как place_id, фотографии (самые популярные), ссылки и т. Д.

До сих пор я мог делать почти все, я могу даже запустить это событие вручную, но он возвращает undefined. Это код, который я до сих пор:

var latLng = response; //Comes from another function 
geocoder.geocode({'location': latLng}, function(results, status) { 
    if (status === 'OK') { 
     if (results[1]) { 
      var fullAddress = results[0].formatted_address; 

      var input = document.createElement("input"); 
       input.setAttribute("value", fullAddress); 

      var autocomplete = new google.maps.places.Autocomplete(input); 

      google.maps.event.addListener(autocomplete, 'place_changed', function() { 
       var thisPlace = autocomplete.getPlace(); 
       console.log(thisPlace); 
      }); 

      google.maps.event.trigger(autocomplete, 'place_changed'); 
     } 
    } 
}); 

Все здесь работает, но отдача от autocomplete.getPlace() является undefined.

Если вы используете ту же функцию, но из собственного элемента автозаполнения, возвращается правильное значение.

Что я делаю неправильно?

ответ

1

Похоже, что вы хотите, чтобы эквивалент JavaScript был равен Android Place Picker. В Places library такого виджета нет. Рассмотрим filing a feature request.

Ваш текущий подход, кажется, идет по этим линиям:

  1. Обратный пользователь геокод LatLng до ближайшего адреса.
  2. Получить места по этому адресу.

Использование geocoder.geocode() для шага 1 в порядке, но вы должны быть осторожны, в результате чего вы берете в: если первый результат находится автобусная остановка, то адрес не будет полезным.

Вам будет лучше с Radar Search, чтобы найти ближайшие места к исходному входу Lat/Lng. Это также позволяет избежать проблем, которые могут возникнуть в результате обратного геокодирования, привязав местоположение пользователя к адресу, не находящемуся рядом. Затем вам нужно будет выдать несколько запросов Details для получения имен (и других деталей) ближайших N мест.

Использование автозаполнения для шага 2 не будет работать. Автозаполнение для адреса с несколькими местами в нем будет редко перечислять все из них.

Кроме того: не стрелять place_changed вручную, это не так, как это работает.

Событие place_changed возбуждено классом Autocomplete только после получения PlaceResult. Если пользователь выбрал место из предсказаний Autocomplete, для этого требуется вызов службы «Сведения о местах», чтобы получить информацию, которую вы действительно хотите получить.

Это событие выдается, когда PlaceResult становится доступным для места, которое выбрал пользователь. Если пользователь вводит имя места, которое не было предложено элементом управления, и нажимает клавишу «Ввод», или если запрос детали места не работает, будет запущено событие place_changed, которое содержит пользовательский ввод в свойстве имени, без каких-либо других свойства определены.

Если огонь place_changed вручную, нет PlaceResult готов для вас, поэтому autocomplete.getPlace() будет возвращать только undefined.

+0

Основываясь на ссылках на ссылки, я получил результаты, которые хотел, но с помощью другого метода. Вместо того, чтобы вручную запускать событие автозаполнения, я использую 'PlacesService' для создания нового поиска. после этого основная цель была достигнута, и я могу получить необходимую мне информацию. благодаря – celsomtrindade

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