Как ограничить места Google для определенного города

В настоящее время я могу ограничить места только одной страной, но я также хочу ограничить определенный город. Есть идеи, как этого добиться? Это мой текущий код:

var autocomplete,
                    options = {
                        types: ['geocode'],
                        componentRestrictions: {country: 'est'}
                    };
                autocomplete = new google.maps.places.Autocomplete(input, options);
                google.maps.event.addListener(autocomplete, 'place_changed', function () {
                    var place = autocomplete.getPlace().formatted_address;
                    $(input).attr('value',place);
                });

person fishera    schedule 19.10.2015    source источник


Ответы (3)


Как сказал Люк, автозаполнение мест позволяет вам использовать componentRestrictions для фильтрации только по стране.

Но вы можете использовать небольшую хитрость со строкой поискового запроса. Просто добавьте префикс с названием города в запросе.

var prefix = 'Kyiv, ';

$(input).on('input',function(){
    var str = input.value;
    if(str.indexOf(prefix) == 0) {
        // string already started with prefix
        return;
    } else {
        if (prefix.indexOf(str) >= 0) {
            // string is part of prefix
            input.value = prefix;
        } else {
            input.value = prefix+str;
        }
    }
});

http://jsfiddle.net/24p1et98/

person Alexey Muravyov    schedule 16.01.2017
comment
Привет, есть ли способ сделать ту же функциональность без отображения префикса. - person phpfresher; 12.07.2017
comment
Для этого вам нужно получить результат поискового запроса от Google и отрисовать собственный виджет автозаполнения. Посмотрите здесь stackoverflow.com/questions/9276580/ - person Alexey Muravyov; 13.07.2017

В настоящее время автозаполнение Places позволяет использовать componentRestrictions для фильтрации по стране. Что бы я сделал в вашей ситуации, так это использовать аргумент options для фильтрации по границам, которые определяют рассматриваемый город:

var cityBounds = new google.maps.LatLngBounds(
  new google.maps.LatLng(25.341233, 68.289986),
  new google.maps.LatLng(25.450715, 68.428345));

var options = {
  bounds: cityBounds,
  types: ['geocode'],
  componentRestrictions: {country: 'est'}
};
person luke_mclachlan    schedule 20.10.2015
comment
это последнее / окончательное решение для фильтрации результатов по городу. Кто-нибудь мог сделать более конкретный взлом / обходной путь для этого. - person user3775217; 06.06.2016
comment
В общедоступном средстве отслеживания проблем есть запрос функции code.google. .com/p/gmaps-api-issues/issues/detail?id=4433. Однако похоже, что Google не уделял этой задаче большого внимания. Таким образом, смещение границ является единственным вариантом на данный момент. - person xomena; 09.06.2016
comment
Привет, это не работает для меня, не могли бы вы помочь. Я указал страну как в (Индии) и дал границы Хайдарабада (города в Индии). Но он также показывает населенные пункты из других городов. - person phpfresher; 12.07.2017

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

1.LatLngBounds (LatLng юго-запад, LatLng северо-восток): где вы можете указать широту и долготу, чтобы сформировать прямоугольник.

<сильный>2. Местоположение (широта, долгота) и радиус: где вы можете указать широту и долготу, чтобы сформировать круг.

Но проблема с этими подходами: они не дают ожидаемых результатов, если вы из таких стран, как Индия, где штаты и положения не имеют структурированной формы (прямоугольной), как в США.

Если вы столкнулись с той же проблемой, чем есть хак. С помощью jQuery/Jacascript вы можете подключить функции, которые будут постоянно поддерживать название города в текстовом вводе, который ограничен объектом автозаполнения API Places.

Вот:

<script>
$(document).ready(function(){
    $("#locality").val(your-city-name)  //your-city-name will have city name and some space to seperate it from actual user-input for example: “Bengaluru | ”
    });

$("#locality").keydown(function(event) { //locality is text-input box whixh i supplied while creating Autocomplete object
var localeKeyword = “your-city-name”
var localeKeywordLen = localeKeyword.length;
var keyword = $("#locality").val();
var keywordLen = keyword.length;

if(keywordLen == localeKeywordLen) {
    var e = event || window.event;  
    var key = e.keyCode || e.which; 

    if(key == Number(46) || key == Number(8) || key == Number(37)){
        e.preventDefault(); 
        }//Here I am restricting user to delete city name (Restricting use of delete/backspace/left arrow) if length == city-name provided

    if(keyword != localeKeyword) {
        $("#locality").val(localeKeyword);
        }//If input-text does not contain city-name put it there
    }

if(!(keyword.includes(localeKeyword))) {
    $("#locality").val(localeKeyword);
    }//If keyword not includes city name put it there
});

person Ravi Upadhyay    schedule 07.04.2017