вторник, 16 апреля 2013 г.

google maps api автозаполнение. Поиск региона

Понадобилось сделать ввод города или страны,что бы при вводе первых букв показывались возможные значения. Лучшим вариантом показался google maps api autocomplete.

Для того что бы показывались только города и страны, выставляем type = (regions)

Код:

<script src="//maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script>
<script>
      function initialize() {

        var input = document.getElementById('searchTextField');

        var options = {
          types: ['(regions)'],
        };

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

        google.maps.event.addListener(autocomplete, 'place_changed', function() {
          var place = autocomplete.getPlace(); //получаем место
          console.log(place);
          console.log(place.name);  //название места
          console.log(place.id);  //уникальный идентификатор места
        });

      }
      google.maps.event.addDomListener(window, 'load', initialize);
</script>


В html:

<input id="searchTextField" size="50" type="text" />



Для того что бы искать только по городам, выставляем type = (cities)

Об ограничениях.

Ограничения яндекса, это 10000 поисковых запросов в сутки с подтверждённым телефоном.
Гугла - 20 000 000 запросов в день.

7 комментариев:

  1. Анонимный12 июня 2013 г., 18:18

    Очень интересно!
    Скажите пожалуйста а как получить какой либо идентификатор страны и города, что бы в последующем сделать выборку из БД, согласно полученным данным из автокомплита ?
    Или я чего то не понимаю

    ОтветитьУдалить
    Ответы
    1. google.maps.event.addListener(autocomplete, 'place_changed', function() {

      //так можно получить объект региона
      var place = autocomplete.getPlace();

      //так можно вывести в консоль информацию о нём
      console.log(place);

      //или только название
      console.log(place.name);

      //или уникальный идентификатор
      console.log(place.id);
      });

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

      Удалить
  2. Подскажите пожалуйста, Иван, допустим есть задача, выводить объявления в зависимости от города, так вот, что за значение нужно хранить в каждом объявлении, что бы делать выборку согласно результатам автозаполнения ?

    ОтветитьУдалить
    Ответы
    1. Я бы хранил в объявлении внутренний id города. Пользователь может не воспользоваться автозаполнением, тогда придется самому искать город в базе по тому что он ввел руками.

      Удалить
  3. Подскажите, как сделать, чтобы сначала выводился город, затем область, страна?

    ОтветитьУдалить
  4. 20 000 000? может Вы ошиблись и ограничение 20 000?
    уточните пожалуйста, это очень важный вопрос

    ОтветитьУдалить
    Ответы
    1. Сейчас не могу найти уже, где тогда смотрел ограничения. Вполне возможно что они изменились. Вот это то что надо кажется:
      https://developers.google.com/places/usage

      Удалить