2013-09-20 4 views
5

Я хочу использовать ограничения автозаполнения в сервисе Google maps. Но не работает.google maps autocomplete bounds not working

//----autocomplete start 
var input = (document.getElementById('searchPlace')); 
var defaultBounds = new google.maps.LatLngBounds(
      new google.maps.LatLng(40.518, 29.215), 
      new google.maps.LatLng(41.242, 30.370)); 

var options = { 
      bounds:defaultBounds, 
      componentRestrictions: { country: 'XX'},}; 

var autocomplete = new google.maps.places.Autocomplete(input, options); 
//----autocomplete end 

Когда я печатаю текстовое поле, адреса поступают в страну XX. Но я хочу ограничить поиск в регионе страны. Например, город ограничивается. Но другие адреса выходят из этой границы. Оценки не учитываются.

+0

[Из документов] (https://developers.google.com/maps/documentation/javascript/places# places_autocomplete): результаты смещены в сторону **, но не ограничиваются **, Местами, содержащимися в этих границах. –

ответ

1

Может быть, когда вы используете границы, вы не можете использовать componentRestrictions ...

Попробуйте это ..

//----autocomplete start 
    var input = (document.getElementById('searchPlace')); 
    var defaultBounds = new google.maps.LatLngBounds(
     new google.maps.LatLng(40.518, 29.215), 
     new google.maps.LatLng(41.242, 30.370)); 

    var options = { 
     bounds:defaultBounds 
    }; 
    var autocomplete = new google.maps.places.Autocomplete(input, options); 
    //----autocomplete end 
3

Он не будет работать, как вы хотите. Вот что такое документация говорит:

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

https://developers.google.com/maps/documentation/javascript/3.13/reference#AutocompleteOptions

+1

Ссылка, по-видимому, сломана. Альтернативным URL-адресом будет https://developers.google.com/maps/documentation/javascript/places-autocomplete#address_forms. – ChunLin

+0

Теперь они добавили новый логический параметр, называемый «strictBounds». Если установлено значение true, API не возвращает результаты за пределами этого региона, даже если они соответствуют пользовательскому вводу. – Channel

0

Bounds работает только для карт API, а не API мест.

Для location biasing в API Places вам нужно использовать объект latlng и радиус (в метрах) в параметрах.

 var myLatlng = new google.maps.LatLng(35.9907,-84.0497); 

     var acOptions = { 
      location: myLatlng, 
      radius: 150000, // (in meters; this is 150Km) 
      types: ['address'], 
      componentRestrictions: {country: 'us'} 
     }; 

Обратите внимание, что это только смещает результатов автозаполнения к радиусу введенного; он не ограничивает результаты результатами этого радиуса.

2

Проблема в том, что LatLngBounds ожидает юго-запад и северо-восточные углы. Также называются нижние левые и верхние правые углы.

Вместо:

var defaultBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(40.518, 29.215), 
    new google.maps.LatLng(41.242, 30.370)); 

Оно должно быть:

var defaultBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(41.242, 29.215), 
    new google.maps.LatLng(40.518, 30.370));