Подтвердить что ты не робот

Ограничение автозаполнения карт google только на адрес Великобритании

Я смотрю на пример:

http://code.google.com/apis/maps/documentation/javascript/examples/places-autocomplete.html

и решили включить его в мой сайт.

Можно ли ограничивать адреса только адресами Великобритании?

4b9b3361

Ответ 1

Попробуйте следующее:

var input = document.getElementById('searchTextField');
var options = {
   types: ['(cities)'],
   componentRestrictions: {country: 'tr'}//Turkey only
};
var autocomplete = new google.maps.places.Autocomplete(input,options);

Ответ 2

Вы не можете строго/жестко ограничить найденные местоположения, хотя в системе есть запрос функции, но вы можете установить "смещение" результатов. Он прошел в качестве аргумента для метода автозаполнения в качестве объекта привязки карт Google. Затем Autocomplete будет поддерживать расположение в пределах этих границ. Обратите внимание, однако, что, поскольку это не является жесткой границей, если есть соответствия для поиска за пределами границ, они возвратят их.

Из моего использования это кажется немного ошибкой и может использовать некоторое улучшение - особенно учитывая, что что-либо за пределами вашей границы не помечено близостью вообще, поэтому что-то одно за пределами границы так же вероятно, как что-то 1000 миль за пределами, поэтому убедитесь, что вы играете с тем, чтобы границы работали правильно.

Ответ 3

Вы можете перехватить результаты 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);
};

Ответ 4

Джеймс Алдей прав:

http://code.google.com/apis/maps/documentation/javascript/places.html#places_autocomplete

var defaultBounds = new google.maps.LatLngBounds(
  new google.maps.LatLng(49.00, -13.00),
  new google.maps.LatLng(60.00, 3.00));

var acOptions = {
  bounds: defaultBounds,
  types: ['geocode']
};

это несколько раздражает, так как поиск Дарема дает Дарему, Северная Каролина, как второй результат, независимо от того, как вы пытаетесь убедить его в смещении региона - вы можете установить его на границы карты видового экрана, и он все равно попытается предложить NC state... Решение jQuery можно найти здесь, но, похоже, не дает столько результатов, как API v3. http://code.google.com/p/geo-autocomplete/

Ответ 5

Лучший способ сделать это - запросить места api самостоятельно и добавить строку запроса в вашу страну. Или, конечно же, используйте плагин geo-autocomplete jQuery.

Ответ 6

Попробуйте что-то вроде этого.

// Change Bangalore, India to your cities boundary.
var bangaloreBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(12.864162, 77.438610),
    new google.maps.LatLng(13.139807, 77.711895));

var autocomplete = new google.maps.places.Autocomplete(this, {
    bounds: bangaloreBounds,
    strictBounds: true,
});

autocomplete.addListener('place_changed', function () {
});