22 декабря 2015
4 февраля 2011
7
Полигоны и линии в Google Maps API v3
Всем привет!
Сегодня мы посмотрим как рисовать полигоны и линии на картах Google Maps. Полигоны понадобятся в случае, если вам необходимо обвести область или какой-то объект, а линии — чтобы нарисовать путь или что-то подобное.
В этой статье полигоны и линии будут рисоваться с помощью SVG. Их (как и все другие объекты-оверлеи) можно так же отображать с помощью KML, но о нем мы поговорим в одной из следующих статей.
Инициализация карты
В Google Map API третьей версии есть существенные изменения. Например, ключ для домена больше не нужен. Плюс немного изменился синтаксис. Давайте посмотрим как вызвать карту:
<script type="text/javascript">
function initialize() {
var latlng = new google.maps.LatLng(59.95, 30.40), // Координаты центра
myOptions = {
zoom: 10, // Масштаб
center: latlng, // Координаты центра
mapTypeId: google.maps.MapTypeId.ROADMAP // Тип карты
};
// Выводим карту в указанный контейнер
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}
</script>
Смотрим простой примерчик:
Линии
Отображение
Для того, чтобы нарисовать линию на карте необходима сама карта, набор координат в виде массива LatLng и настройки внешнего вида. Ниже код для вывода линии по указанных координатам с комментариями:
<script type="text/javascript">
...
// Координаты для линии
var polylineCoords = [
new google.maps.LatLng(59.95, 30.40),
new google.maps.LatLng(59.95, 30.50),
new google.maps.LatLng(60.05, 30.50)
];
// Настройки для линии
var polyline = new google.maps.Polyline({
path: polylineCoords, // Координаты
strokeColor: "#FF0000", // Цвет
strokeOpacity: 1.0, // Прозрачность
strokeWeight: 6 // Ширина
});
// Добавляем на карту
polyline.setMap(map);
...
</script>
События
На линию можно повесить обработку события с помощью addListener. Например, чтобы отследить клик по линии надо сделать вот так:
<script type="text/javascript">
...
// Обработка клика по линии
google.maps.event.addListener(polyline, 'click', function() {
alert('Что-то происходит');
});
...
</script>
Теперь давайте посмотрим на пример, где выводиться линия и при клике на нее что-то происходит:
Полигоны
Отображение
Полигон это замкнутые линии (координаты начала первой равны координатам конца последней). Внутри полигон можно залить цветом.
Для отображения полигона необходима опять же карта, набор координат в виде массива LatLng и настройки для обводки и заливки. Примерно так:
<script type="text/javascript">
...
// Координаты для полигона
var polygonCoords = [
new google.maps.LatLng(59.95, 30.40),
new google.maps.LatLng(59.95, 30.50),
new google.maps.LatLng(60.05, 30.50),
new google.maps.LatLng(59.95, 30.40)
];
// Настройки для полигона
var polygon = new google.maps.Polyline({
path: polygonCoords, // Координаты
strokeColor: "#FF0000", // Цвет обводки
strokeOpacity: 0.8, // Прозрачность обводки
strokeWeight: 2, // Ширина обводки
fillColor: "#FF0000", // Цвет заливки
fillOpacity: 0.35 // Прозрачность заливки
});
// Добавляем на карту
polygon.setMap(map);
...
</script>
События
На полигон так же можно повесить обработчик события. Код ничем не отличается от события для линии:
<script type="text/javascript">
...
// Обработка клика по полигону
google.maps.event.addListener(polygon, 'click', function() {
alert('Что-то происходит');
});
...
</script>
Опять же, пример полигона и обработчика события:
А вот ссылка на все примеры статьи в одном архиве:
Подводные камни
Ввиду того, что каждый отрезок линии или грань полигона является элементом DOM, с увеличением их количества уменьшается скорость их обработки браузерами. В частности, в следующей статье я приведу ссылку на проект, в котором изначально я использовал такие полигоны для выделения стран. Когда на карте стало больше 10-ти стран, мой браузер начал безбожно виснуть.
Решить это можно с помощью использования KML для Google Maps API. Но об этом в следующей статье.
Итак, какие есть вопросы? Уже работали с полигонами или линиями? Есть пример использования или идея? Пишите в комментариях!
скорее, наоборот:
- скорость уменьшается или
- время увеличивается
Выбрать нужное :)
наверное, все это есть где-нибудь на
http://code.google.com/intl/ru/apis/maps/documentation/javascript/overlays.html
вот тут есть много примеров интересных:
http://code.google.com/intl/ru/apis/maps/documentation/javascript/examples/index.html
Вот тут галерея проектов (тоже много интересного):
http://code.google.com/intl/ru/apis/maps/documentation/javascript/demogallery.html
Вот тут статьи (на зарубежном языке):
http://code.google.com/intl/ru/apis/maps/documentation/javascript/articles.html
Ни у вот тут очень много разной информации почти на все случаи жизни:
http://econym.org.uk/gmap/
Должно быть new google.maps.Polygon, в примере PolyLine
http://api.yandex.ru/maps/doc/jsapi/2.x/examples/polygonedit.html