2011-08-24 27 views

Odpowiedz

28

Spróbuj tego:

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

To jest poprawna odpowiedź –

+4

componentRestrictions: {country: 'gb'} // ograniczy do Wielkiej Brytanii tylko jak na pytanie – geedubb

+0

powinny to być 'typy: ['miasta']', a nie 'typy: ['(miasta) "]" – tirdadc

4

Nie można ściśle/trudno ograniczyć lokalizacje, które znajdzie, chociaż nie jest to żądanie funkcja w systemie, aby to zrobić, ale można ustawić „” nastawienie na wyniki. Jest przekazywana jako argument do metody autouzupełniania jako obiekt związany z mapami google. Funkcja autouzupełniania będzie następnie preferować lokalizacje w obrębie tych granic. Zauważ jednak, że skoro nie jest to twarda granica, to jeśli są dopasowania do wyszukiwania poza granicami, to zwróci je.

Z mojego użycia wydaje się trochę błędna i może trochę poprawić - zwłaszcza biorąc pod uwagę, że wszystko poza twoją granicą nie jest w ogóle oznakowane przez bliskość, więc coś, co znajduje się poza granicami jest równie prawdopodobne, aby pokazać coś jako 1000 mil na zewnątrz, więc upewnij się, że bawisz się poprawnie.

+1

Właściwą odpowiedzią jest użycie metody componentRestrictions, która pozwala ograniczyć autouzupełnianie do krajów, zgodnie z odpowiedzią napisaną przez Ercan. –

+2

Prawidłowe. Został on dodany do interfejsu API w wersji 3.9 w dniu 25 lipca 2012 r. W chwili pisania powyższej odpowiedzi interfejs API był w wersji 3.6. To jest odpowiedź Google na wymienione wyżej żądanie funkcji. Na dzień dzisiejszy v3.12 jest najniższą wersją dostarczoną, więc powinno to być standardowe we wszelkich żądaniach API. –

1

Najlepszym sposobem, by go o to zrobić, jest kwerendy miejsca api siebie i dołączanie poszukiwana ciąg z Twojego kraju. Lub, oczywiście, użyj geo-autocomplete jQuery plugin.

2

James Alday jest poprawna:

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'] 
}; 

jest to nieco irytujące jak poszukiwanie Durham daje Durham, Karolina Północna jako drugi wynik, niezależnie od tego, w jaki sposób starają się przekonać go do regionu uprzedzeń - możesz ustawić go na granice mapy rzutni i nadal będzie próbował zasugerować stan NC ... Rozwiązanie jQuery można znaleźć tutaj, ale wydaje się, że nie daje tak wielu wyników jak API v3. http://code.google.com/p/geo-autocomplete/

4

Można przechwycić JSONP wyniki, które są zwracane przez funkcje google.maps.places.Autocomplete i używać ich zgodnie z potrzebami, tak aby ograniczyć od kraju i wyświetlić wyniki.

Zasadniczo przedefiniujesz metodę appendChild na elemencie head, a następnie monitorujesz elementy javascript, które kod autouzupełniania Google wstawia do DOM dla JSONP. Po dodaniu elementów javascript zastępujesz wywołania zwrotne JSONP zdefiniowane przez Google w celu uzyskania dostępu do surowych danych autouzupełniania.

Jest to bit hack, tu idzie (używam jQuery, ale nie jest to konieczne dla tego siekać do pracy):

//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); 
}; 
+0

Twoje podejście wydaje się bardzo interesujące i jedyne, które rozwiązuje nieodłączne problemy związane z ograniczaniem się do regionu przy użyciu własnych parametrów Google. Czy mógłbyś opublikować pełny działający JSFiddle lub podobny zawierający powyższe? Mam trudności ze zrozumieniem, jak to pasuje w przykładach Google'a, a pełny przykład pracy byłby bardzo pomocny. Dzięki –

0

Spróbuj czegoś takiego.

// 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() { 
}); 
Powiązane problemy