Pull to refresh

Пример использования Google Places

Reading time 5 min
Views 30K

О сервисе


Побывав на мероприятии Google Developer Day 2011, узнал о новом сервисе Google places (в русском варианте «Google Адреса»).
Интересную лекцию об этом прочел колоритного вида сотрудник Mano Marks.
Эта служба представляет возможность поиска различных объектов (POI), находящихся в окрестностях заданной точки. Хочу рассказать о примере практического использования сервиса.

Для поиска объектов необходимо задать интересующие типы из списка. На сегодняшний день существует 129 различных типов. Пока что, данный рубрикатор оставляет желать лучшего. Некоторые сферы представлены очень подробно – например, питание: (food, restaurant, café, bar), некоторых нет совсем – отсутствует тип «отель». Думаю, что это проблемы роста.
Данные берутся из базы данных Google, которую можно пополнять пользователям. Добавление объектов бесплатное, модерируемое. Добавляют их, в основном, владельцы соответствующих компаний. Подтвердив право на внесение информации, можно добавить на страницу места своей компании фотографии, видео, купоны, обновления в реальном времени, например еженедельные специальные предложения.
API данного сервиса представлено в виде веб-сервиса или java-script библиотеки для Google Maps.
Реализованы следующие функции:
  • 1. Поиск мест
  • 2. Получение подробной информации о месте
  • 3. Регистрация пребывания на месте
  • 4. Добавление нового места

Также, возможно добавление обзоров.

Для использования API необходимо загрузить библитотеку:
maps.googleapis.com/maps/api/js?libraries=places&sensor=true_or_false"

Пример кода поискового запроса для Google Maps:
var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316);

map = new google.maps.Map(document.getElementById('map'), {
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: pyrmont,
zoom: 15
});

var request = {
location: pyrmont,
radius: '500',
types: ['store']
};

service = new google.maps.places.PlacesService(map);
service.search(request, callback);


pyrmont – это место австралийского офиса Google, где, судя по-всему, ведется разработка сервиса.
Соответственно используется в примерах.
Как видно, можно задать область с помощью точки центра и радиуса в метрах.
callback – имя функции обработчика (например, показать маркеры или иконки мест на карте)

В данной области будет вестись поиск мест нужного типа (можно использовать массив типов)
Ответ сервера представляет массив состоящий из объектов
PlaceResult со следующими свойствами:
• Geometry.location долгота-широта.
• icon: url рекомендуемой иконки для типа (пока что, иконки есть не для всех типов, те которые есть слишком большие – 71х71 п., так что желающим получить красивый результат р придется нарисовать или поискать картинки)
• id: уникальный идентификатор, используется для обобщении разнородной информации о месте, но не для получения подробностей
• name: Название
• rating рейтинг на основе отывов пользователей 0-5.
• reference идентификатор для запроса подробной информации, может меняться
• types: массив типов ( [«restaurant», «establishment»]). – место может быть привязано к нескольким типам.
• vicinity: краткий адрес (район — улица — дом)

Используя reference можно получить подробности для места:
var request = {
reference: 'place_reference'
};

service = new google.maps.places.PlacesService(map);
service.getDetails(request, callback);


Ответ будет такой:
• address_components: Компоненты адреса (страна – регион – подрегион и т.д.)
• formatted_address: Форматированный адрес в виде строки
• formatted_phone_number: Телефонный номер в международном формате
• geometry: гео информация:
o location широта — долгота.
o viewport предпочтительный участок карты при отображении данного места(пока что не нашел объект с заданным свойством).
• html_attributions: Описание.
• icon: URL Иконки.
• id: уникальный идентификатор
• international_phone_number Телефонный номер в международном стандарте (+61 2 9374 4000).
• name: Название
• rating: Рейтинг 0.0 to 5.0.
• reference
• types: Типы
• url: URL страницы Google Place Page.
• vicinity: Адрес.
• Website Веб-сат компании.

Так же, существует возможность check in, т.е. регистрации своего пребывания в данном месте.
Как я понял, эта функция заложена «на будущее» для интеграции с социальными сервисами, мобильными платформами и ранжирования объектов в поисковой выдаче. На вопрос о защите от «чек ин спама» докладчик ответил что таковой нет.

Пример кода (доступно через веб-сервис):

POST maps.googleapis.com/maps/api/place/check-in/json?sensor=true_or_false&key=api_key HTTP/1.1

{
"reference": "place_reference"
}


Добавление объектов в базу с использование веб сервиса

POST maps.googleapis.com/maps/api/place/add/json?sensor=true_or_false&key=api_key HTTP/1.1
Host: maps.googleapis.com

{
"location": {
"lat": -33.8669710,
"lng": 151.1958750
},
"accuracy": 50,
"name": "Google Shoes!",
"types": ["shoe_store"],
"language": "en-AU"
}


Пример использования на сайте villarenters.ru


Не долго думая, решил применить новинку на сайте Аренда вилл – villarenters.ru, сайт для поиска предложений по аренде домов, вилл, апартаментов квартир.
При выборе объекта для аренда, особенно на длительное время, у желающих арендовать часто возникают вопросы о наличии той или иной инфраструктуры в окресностях.
Для помощи в этом вопросе сервис Google Places очень подходит. Пусть пока не везде информация хорошо заполнена – это вопрос времени.
Для реализации поиска рядом с уже имеющейся картой на странице информации виллы разместил форму выбора типа места. В форме также можно указать желаемый радиус поиска.
В качестве примера можно посмотреть страницу апартамента в Мадриде (http://villarenters.ru/villa/30112.html#map-bar).
Выберите, например, «бар» и радиус 1 км, нажмите «Показать».
На карте отобразятся иконки ближайших баров. При клике на иконку отображается информационное окно со ссылкой на страницу места (открывается в новом окне).
При смене радиуса просмотра пришлось принудительно изменять зуммирование карты – автоматического определения области не предусмотрено. Соответственно, для разных ситуаций отображение может быть не корректным (слишком много иконок в одной точке или попадание за пределы видимости). Тут можно только посоветовать пользоваться ручным зумом (±) в левой части карты.

Заключение


Можно предположить, что Google places будет востребован разработчиками мобильных приложений, в особенности социальной направленности. Можно представить интеграцию с различными базами данных (авто навигации, фотографий, пользовательских POI)
Надо сказать, что в некоторых моментах есть пересечение с другими службами, в частности Google maps отображает некоторые объекты на картах по-умолчанию. Регистрация пребывания реализуется через сторонние приложения и т.д.
В общем и целом можно сказать, что сервис пока что сыроватый, но уже может быть полезен в некоторых случаях.
Буду рад ответить на вопросы и подробнее осветить тех. вопросы реализации.
Tags:
Hubs:
+13
Comments 9
Comments Comments 9

Articles