автозаполнение отображения только результаты из конкретной страны или почтовый индекс - PullRequest
1 голос
/ 22 августа 2011

Как я могу сделать так, чтобы отображение автозаполнения отображалось только из конкретной страны или почтового индекса?

Это то, что я делал до сих пор

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

        autocomplete.bindTo('bounds', map);

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Вы можете перехватить результаты JSONP , возвращаемые функцией google.maps.places.Autocomplete , и использовать их по своему усмотрению.

По сути, вы переопределяете метод appendChild для элемента head, а затем отслеживаете элементы javascript, которые код автозаполнения Google вставляет в DOM для JSONP. По мере добавления элементов javascript вы переопределяете обратные вызовы JSONP, которые определяет Google, чтобы получить доступ к необработанным данным автозаполнения, которые затем можно ограничить по стране и отобразить.

Это что-то вроде хака (здесь я пользуюсь (я использую jQuery, но для этого не требуется):

//The head element, where the Google Autocomplete code will insert a tag 
//for a javascript file.
var head = $('head')[0];  
//The name of the method the Autocomplete code uses to insert the tag.
var method = 'appendChild';  
//The method we will be overriding.
var originalMethod = head[method];

head[method] = function () {
  if (arguments[0] && arguments[0].src && arguments[0].src.match(/GetPredictions/)) {  //Check that the element is a javascript tag being inserted by Google.
    var callbackMatchObject = (/callback=([^&]+)&|$/).exec(arguments[0].src);  //Regex to extract the name of the callback method that the JSONP will call.
    var searchTermMatchObject = (/\?1s([^&]+)&/).exec(arguments[0].src);  //Regex to extract the search term that was entered by the user.
    var searchTerm = unescape(searchTermMatchObject[1]);
    if (callbackMatchObject && searchTermMatchObject) {
      var names = callbackMatchObject[1].split('.');  //The JSONP callback method is in the form "abc.def" and each time has a different random name.
      var originalCallback = names[0] && names[1] && window[names[0]] && window[names[0]][names[1]];  //Store the original callback method.
      if (originalCallback) {
        var newCallback = function () {  //Define your own JSONP callback
          if (arguments[0] && arguments[0][3]) {
            var data = arguments[0][4];  //Your autocomplete results
            //SUCCESS! - Limit results here and do something with them, such as displaying them in an autocomplete dropdown.
          }
        }

        //Add copy all the attributes of the old callback function to the new callback function. This prevents the autocomplete functionality from throwing an error.
        for (name in originalCallback) {  
          newCallback[name] = originalCallback[name];
        }
        window[names[0]][names[1]] = newCallback;  //Override the JSONP callback
      }
    }

  //Insert the element into the dom, regardless of whether it was being inserted by Google.
  return originalMethod.apply(this, arguments);
};
2 голосов
/ 23 августа 2011

У вас есть несколько типов фильтров:

  • Смещение видового экрана
  • Смещение региона

Если вы предпочитаете смещение видового экрана, то вы должны указать местоположение(широта / долгота, вокруг которой вы хотите получить информацию о Месте) и радиус (расстояние (в метрах), в пределах которого возвращаются результаты Места).Если вы предпочитаете смещение по регионам, вы должны указать регион (код страны, см. http://en.wikipedia.org/wiki/CcTLD).

Пример использования смещения по региону: maps.googleapis.com/maps/api/place/autocomplete/json?input= Vict & types = geocode®ion = CA & language = fr & sensor = true & key = AIzaSyAiFpFd85eMtfbvmVNEYuNds5TEF9FjIPI

Вы можете прочитать больше в официальной документации API карт Google: http://code.google.com/apis/maps/documentation/places/autocomplete.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...