Как подключить к сайту третью версию API гуглокарт я рассказывал совсем недавно. Сегодня я приведу пример того, как можно «тюнинговать» свои карты. Задачей будет вывод на карту информации от сервиса Google Place.
Будем считать, что у нас уже есть подключенные при помощи API карты Google. Для того, чтобы заработал требуемый сервис Google Place, необходимо подключить соответствующую библиотеку. Обновим адрес подключения скрипта API карт:
В разметке HTML пока ничего не меняем. Напомню, что карты выводятся в div с id=»map». Теперь можно приступить непосредственно к подключению карт.
var map;
var infowindow;
function initialize() {
var myLatLon = new google.maps.LatLng(=$lat?>, =$lon?>);
map = new google.maps.Map(document.getElementById('map'), {
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: myLatLon,
zoom: 15
});
var metka = new google.maps.Marker({
position: myLatLon,
map: map,
title:"Тут описание точки"
});
Код всё тот же. Динамически генерируем координаты центра карты, туда же ставим метку с необходимым объектом. Теперь начинаем работать с Places. Сформируем запрос к серверу Google.
var request = {
location: myLatLon,
radius: 500,
types: ['bar']
};
infowindow = new google.maps.InfoWindow();
var service = new google.maps.places.PlacesService(map);
service.search(request, callback);
}/*это скобка, закрывающая функцию initialize*/
Синтаксис таков: location — это центр окружности, в которой будет производиться поиск объектов. radius — это радиус соответствующей окружности в метрах. Types — тип искомых объектов. Сейчас там выставлено значение bar — ищем бары в радиусе 500 метров от центра карты. Если необходимо вывести несколько типов, их можно перечислить через запятую.
Далее добавляем к каждой полученной точке инфоокно, в котором будет содержаться название точки.
После всего этого вызываем функцию service.search. Это поиск по запросу в переменной request и работающий с функцией callback. Опишем её.
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
createMarker(results[i]);
}
}
}
Вкратце - для каждой найденной точки генерируется метка.
Теперь опишем свойства самой метки и то, как она генерируется
var image = 'metka.png';
function createMarker(place) {
var placeLoc = place.geometry.location;
var marker = new google.maps.Marker({
map: map,
position: place.geometry.location,
icon: image
});
При создании метки ей будет добавляться картинка metka.png, которая лежит в корне нашего сервера.
И напоследок добавим вывод инфоокна метки по клику на ней самой.
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(place.name);
infowindow.open(map, this);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
Готово! Теперь можно посмотреть на результат. Однако, он статичен. Вдруг пользователю интересны не магазины, а, скажем, кафе? Научим наш модуль работать динамически.
Добавим форму с выпадающими списками