Режимы рисования в API представляют собой механизм интерактивного создания геометрических объектов прямо на карте: маркеров, линий, многоугольников, прямоугольников и окружностей. Основой этой функциональности выступает модуль Drawing Library, который расширяет базовый функционал карты средствами пользовательского черчения и управления геометрией.
Для работы с режимами рисования используется дополнительная
библиотека drawing, подключаемая при загрузке API:
<script src="https://maps.googleapis.com/maps/api/js?key=API_KEY&libraries=drawing"></script>
Подключение этой библиотеки активирует объект
google.maps.drawing, содержащий инструменты управления
режимами рисования и классы для создания панели инструментов.
Основным объектом управления является DrawingManager. Он
отвечает за:
Базовая инициализация:
const drawingManager = new google.maps.drawing.DrawingManager({
drawingMode: google.maps.drawing.OverlayType.MARKER,
drawingControl: true,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [
google.maps.drawing.OverlayType.MARKER,
google.maps.drawing.OverlayType.CIRCLE,
google.maps.drawing.OverlayType.POLYGON,
google.maps.drawing.OverlayType.POLYLINE,
google.maps.drawing.OverlayType.RECTANGLE
]
}
});
drawingManager.setMap(map);
Ключевой параметр drawingMode определяет активный режим
рисования в данный момент.
Режимы рисования определяются перечислением
google.maps.drawing.OverlayType, которое включает следующие
типы:
Создание одиночной точки на карте.
Режим создания окружности.
Режим многоугольников.
Ломаная линия.
Прямоугольная область.
Режим можно изменять динамически через метод
setDrawingMode:
drawingManager.setDrawingMode(google.maps.drawing.OverlayType.POLYGON);
Отключение режима рисования:
drawingManager.setDrawingMode(null);
Такой вызов переводит карту в обычный режим взаимодействия без создания новых объектов.
Панель инструментов рисования настраивается через
drawingControlOptions.
drawingControl: true,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_RIGHT,
drawingModes: [
google.maps.drawing.OverlayType.MARKER,
google.maps.drawing.OverlayType.POLYGON
]
}
Параметры управления:
position — расположение панели на картеdrawingModes — список доступных инструментовОтключение панели:
drawingControl: false
После завершения рисования возникает событие
overlaycomplete, которое позволяет получить созданный
объект:
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event) {
const overlay = event.overlay;
const type = event.type;
console.log('Создан объект типа:', type);
});
Тип события зависит от выбранного режима:
markercompletecirclecompletepolygoncompletepolylinecompleterectanglecompleteКаждый режим поддерживает настройку внешнего вида и поведения объектов.
markerOptions: {
draggable: true,
icon: "icon.png"
}
polylineOptions: {
strokeColor: "#FF0000",
strokeOpacity: 1.0,
strokeWeight: 2
}
polygonOptions: {
fillColor: "#00FF00",
fillOpacity: 0.35,
strokeWeight: 2,
editable: true
}
circleOptions: {
fillColor: "#0000FF",
fillOpacity: 0.2,
strokeWeight: 2
}
rectangleOptions: {
fillColor: "#FFAA00",
fillOpacity: 0.3,
strokeWeight: 2,
editable: true
}
Созданные геометрические объекты могут быть интерактивно изменены при
включённом параметре editable: true.
Для полигона:
Для окружности:
Для прямоугольника:
Пример активации редактирования:
polygon.setEditable(true);
Каждый созданный объект возвращает экземпляр соответствующего класса:
google.maps.Markergoogle.maps.Polygongoogle.maps.Polylinegoogle.maps.Circlegoogle.maps.RectangleУдаление объекта:
overlay.setMap(null);
Получение координат:
const path = polygon.getPath();
path.forEach(function(latLng) {
console.log(latLng.lat(), latLng.lng());
});
Режимы рисования часто требуют ограничения количества объектов или их параметров.
Примеры контролируемых сценариев:
Пример ограничения переключения режима:
if (polygons.length >= 1) {
drawingManager.setDrawingMode(null);
}
После создания объекта можно отслеживать его изменения:
google.maps.event.addListener(polygon.getPath(), 'set_at', function() {
console.log('Точка изменена');
});
google.maps.event.addListener(circle, 'radius_changed', function() {
console.log('Радиус изменён');
});
google.maps.event.addListener(rectangle, 'bounds_changed', function() {
console.log('Границы изменены');
});
Режимы рисования часто интегрируются с внешними UI-элементами:
Пример ручного переключения через кнопку:
document.getElementById("polygonBtn").oncl ick = function() {
drawingManager.setDrawingMode(google.maps.drawing.OverlayType.POLYGON);
};
Полный сброс режима и очистка карты:
drawingManager.setMap(null);
drawingManager.setMap(map);
Альтернативно — удаление всех объектов вручную:
overlays.forEach(o => o.setMap(null));
overlays = [];
Режимы рисования применяются в системах:
Внутри API режим рисования работает как слой поверх базовой карты:
Map) отвечает за рендеринг тайлов;Такая архитектура позволяет отделять визуализацию от логики обработки геометрии и легко интегрировать пользовательские сценарии поверх базовой карты.