2012-04-12 2 views
5

Я использую Places library для ввода адреса автозаполнения. Поиск ограничивается только один город, и я получаю такой вывод:Google maps Autocomplete: вывод только адрес без страны и города

«Россия, Москва, Ленинский проспект, 28»

Как скрыть «Россия, Москва»? ...

Мой запрос:

function() { 
     // Search bounds 
     var p1 = new google.maps.LatLng(54.686534, 35.463867); 
     var p2 = new google.maps.LatLng(56.926993, 39.506836); 
     self.options = { 
      bounds : new google.maps.LatLngBounds(p1, p2), 
      componentRestrictions: {country: 'ru'}, 
     }; 

     var elements = document.querySelectorAll('.address'); 

     for (var i = 0; i < elements.length; i++) { 
      var autocomplete = new google.maps.places.Autocomplete(elements[i], 
        self.options); 
     } 
+0

Документы здесь https://developers.google.com/maps/documentation/javascript/places говорят следующее: попробуйте его: упрощенный адрес для места, включая название улицы, номер улицы и местность, но не провинция/государство, почтовый индекс или страна. Например, офис Google в Сиднее, Австралия имеет значение близости от 5/48 Pirrama Road, Pyrmont.' –

+0

Спасибо, я попробовал, но у меня есть свойство Place, и в моем случае autocomplete.getPlace() возвращает undefined. Не удалось найти решение. –

ответ

2

EDIT

Вы не можете. У меня было наоборот, что вы просто искали город. Невозможно только распечатать название улицы (я предполагаю, что это название улицы) от компонента адреса.


противоположности ЧТО БЫЛО ЗАДАВАЕМЫЕ

From the docs:

в (городах) типа коллекции инструктирует место службы возвращать результаты, которые соответствуют либо locality или administrative_area3.

var input = document.getElementById('searchTextField'); 
var options = { 
    bounds: defaultBounds, 
    types: ['(cities)'] 
}; 

autocomplete = new google.maps.places.Autocomplete(input, options); 
0

в результате у вас хэш и от него и может получить часть, что и хотят:

google.maps.event.addListener(autocomplete, 'place_changed', function() { 
      var place = autocomplete.getPlace(); 

теперь от «места» и может получить его

place.geometry.location.lat() 

и адрес

place.address_components[0] or place.address_components[1] ... 

зависит от того, что вы хотите получить

3

Вы можете, но вы должны заменить значение поля ввода в двух местах. Пример:

var autocomplete = new google.maps.places.Autocomplete(input, placesOptions); 
var input = document.getElementById('searchTextField'); 

внутри «» place_changed случае вы делаете следующее:

placeResult = autocomplete.getPlace(); 
//This will get only the address 
input.value = placeResult.name; 

Это изменит значение в searchtextfield на улице.

Второе место немного сложнее:

input.addEventListener('blur', function(){ 
// timeoutfunction allows to force the autocomplete field to only display the street name. 
if(placeResult){ setTimeout(function(){ input.value = placeResult.name; }, 1); } 

Причина, почему мы должны сделать это, потому что если вы только добавить слушатель событий для размытия, Google Адреса заполнят вход, поданный с полным адресом , поэтому вам нужно «подождать», чтобы обновить Google, а затем принудительно измените ее, ожидая некоторые миллисекунды.

Попробуйте без функции setTimeout, и вы увидите, что я имею в виду.

0

Внутри place_changed установить функцию тайм-аута:

var streetString = place.address_components[0] or place.address_components[1]; 

window.setTimeout(function() { 
    $('input').val(streetString); 
}, 200); 

Это решение работал для меня.

0

У меня была очень похожая проблема, которая действительно была разрешима. Это в проекте Angular 2, но оно должно применяться и в других местах. Я фильтрую результаты для учреждений и хочу показать только имя и скрыть адресную часть результата. Это сделало трюк для меня, функции выполняющейся как только вы выберите предложение:

getAddress(place: Object) { 
    this.zone.run(() => { 
     this.establishment = place['name']; 
    }); 

где zone является компонент NgZone впрыскивается в конструкторе и this.establishment переменный связан с [(NgModel)] в поле ввода.

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