• Записи 162
  • Теги 66
  • Комментарии 330

Компьютерное

Осваиваем Google Maps API

Сегодня начал осваивать API Google Maps. Потребовалось сделать карту Москвы с метками, при щелчках по которым будет происходить переход на страницы, описывающие находящиеся там объекты. Как выяснилось, все предельно просто. Но расскажу по порядку.


Шаг 1. Загружаем скрипт Google Map API:


<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>

В официальной документации рекомендуется делать это внутри head, однако если загрузить скрипт из body (в моем случае это было предпочтительнее), все работает. Параметр sensor=false означает, что не требуется поддержка устройств GPS для определения текущего местонахождения пользователя.

Шаг 2. Создаем область для отображения карты


<div id="map_canvas" style="width:500px; height:500px"></div>

Как видим, это может быть обычный div. Если нужно показать карту на все окно, то можно прописать в стилях такое:


<style type="text/css">
 html { height: 100% }
 body { height: 100%; margin: 0px; padding: 0px }
 #map_canvas { height: 100% }
</style>

Шаг 3. Включаем показ карты

Для этого сначала создадим объект LatLng с координатами точки, которая будет показываться в центре карты:


<script type="text/javascript"><!--
var map;
function initialize() {
 var moscow = new google.maps.LatLng(55.763585,37.560883);

В качестве координат используются географическая долгота и широта. Узнать их можно с помощью обычной карты Google: найти на карте нужное место, щелкнуть по нему правой кнопкой и выбрать "что здесь находится". Координаты появятся в строке поиска.


Теперь зададим другие свойства карты:


var myOptions = {
 zoom: 10,
 center: moscow,
 mapTypeId: google.maps.MapTypeId.ROADMAP
};

Здесь zoom — начальный машстаб (10 как раз подходит для того, чтобы показать часть Москвы внутри МКАД), в center указывается объект с координатами центральной точки, а mapTypeId задает начальный вид карты (в данном случае выбрана обычная карта, так же могут быть варианты SATELLITE — вид со спутника, HYBRID и TERRAIN).


И наконец загружаем саму карту:


var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

Первый параметр здесь — это DOM-объект, в котором будет отрисовываться карта, второй — настройки, заданные выше.

Шаг 4. Добавляем маркер


Опять создаем объект с точкой, на которую будет указывать маркер:


var point1 = new google.maps.LatLng(55.763525,37.560893);

И добавляем маркер на загруженную на предыдущем шаге карту:


var marker = new google.maps.Marker({
 position: point1, map: map, title: 'Пробная точка!'
});

Здесь position — объект с координатами, map — карта, на которую нужно его добавить, а title — подсказка, которая будет появляться при наведении на маркер.

Шаг 5. Добавляем переход по щелчку


Для щелчков, двойных щелчков, изменения масштаба карты и прочих подобных событий обработчики добавляются с помощью объекта google.maps.event:


google.maps.event.addListener(marker, 'click', function() {
  document.location='http://4xpro.ru';
});

Здесь первым параметром метода addListener указывается объект, для которого добавляется событие (таким объектом может быть как маркер, так и сама карта), вторым — тип события (одиночный щелчок в данном случае), а третьим — функция-обработчик.


Вот и все! Осталось только закрыть функцию и тег script:


}
--></script>

А так же добавить вызов функции initialize на событие onLoad:


<body onload="initialize()">

См. также Google Maps: перемещение карты и маркеров.

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

Нет
tpru
0

не могу найти на просторах интернета, как теперь по таймеру обновлять координаты этой точки с перемещением/дорисовкой карты? (рефреш всей страницы делать не хочется, планирую делать ajax запрос на сервер за получением обновленных координат. api что у яндекса, что у гугля - слишком объемное, и с наскоку найти нужный метод не получается)
и чтобы два раза не вставать: если использовать свою иконку-стрелку, можно ли изменять ее угол (у меня есть азимут направления)

4X_Pro
0

Для перемещения/дорисовки, скорее всего, подойдет метод либо PanTo, либо panToBounds объекта maps (первый ставит новую точку в центр, второй — делает минимальное смещение карты так, чтобы точка была видна).
Т.е. в моем примере это бы выглядело примерно так: mosocw.panToBounds(55,36.5);
А изменять координаты точки, по идее так: marker.setPosition = new google.maps.LatLng(55.763525,37.560893).
Насчет угла стрелки — сомневаюсь, что это возможно. Скорее придется сделать набор иконок, и выбирать нужную в соответствии с тем, куда должна показывать стрелка.

Нет
Наталья
0

А если центр находится на Северном Полюсе, то наверное недостаточно будет задания только координат центра в данном случае, но наверно надо что-то еще типа изменения проекции? А вот что для этого необходимо?

4X_Pro
0

Если нужно поменять проекцию, то есть интерфейс Projection, с помощью которого это можно сделать.
Подробнее можно вот тут почитать: https://developers.google.com/maps/documentation/javascript/maptypes?hl=ru

4X_Pro
0

Внимание: теперь для корректной работы Goolge Maps требуется получить ключ API и передать его в параметре key при подключении скрипта с картой:
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&key=ключ"></script>

Написать комментарий


Задать вопрос