Drawing Library в Google Maps JavaScript API предоставляет набор
инструментов для создания интерактивных графических объектов прямо на
карте. Основу составляет компонент DrawingManager, который
управляет режимами рисования и жизненным циклом создаваемых геометрий:
маркеров, линий, многоугольников, окружностей и прямоугольников.
Библиотека широко применяется в геоинформационных системах, интерфейсах
редактирования зон, сервисах логистики и визуальных редакторах
территорий.
Подключение библиотеки выполняется через параметр
libraries=drawing при загрузке Google Maps JavaScript
API.
<script
src="https://maps.googleapis.com/maps/api/js?key=API_KEY&libraries=drawing">
</script>
Без подключения drawing объект
google.maps.drawing.DrawingManager недоступен, а
инструменты рисования не инициализируются.
Перед созданием DrawingManager требуется базовая инициализация карты
через google.maps.Map.
let map;
function initMap() {
map = new google.maps.Map(document.getElementById("map"), {
center: { lat: 55.751244, lng: 37.618423 },
zoom: 10,
});
}
Карта выступает контейнером для всех графических объектов, создаваемых Drawing Library.
DrawingManager управляет инструментами рисования и их
состоянием. Он добавляется поверх карты и предоставляет UI-панель выбора
режима.
const drawingManager = new google.maps.drawing.DrawingManager({
drawingMode: null,
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);
Режим создания одиночных точек. Каждый маркер представляет объект
google.maps.Marker.
Характерные параметры:
google.maps.event.addListener(drawingManager, "markercomplete", (marker) => {
marker.setDraggable(true);
});
Используется для построения ломаных линий и маршрутов. Представляет
объект google.maps.Polyline.
Основные свойства:
pathgoogle.maps.event.addListener(drawingManager, "polylinecomplete", (line) => {
line.setOptions({
strokeColor: "#ff0000",
strokeWeight: 3,
});
});
Применяется для замкнутых областей. Объект
google.maps.Polygon.
Особенности:
google.maps.event.addListener(drawingManager, "polygoncomplete", (polygon) => {
polygon.setOptions({
fillColor: "#00ff00",
fillOpacity: 0.3,
strokeWeight: 2,
});
});
Представляет окружность с центром и радиусом.
google.maps.event.addListener(drawingManager, "circlecomplete", (circle) => {
const radius = circle.getRadius();
const center = circle.getCenter();
});
Ключевые параметры:
LatLng)Прямоугольная область, задаваемая двумя диагональными точками.
google.maps.event.addListener(drawingManager, "rectanglecomplete", (rect) => {
const bounds = rect.getBounds();
});
drawingMode определяет активный инструмент.
drawingManager.setDrawingMode(google.maps.drawing.OverlayType.POLYGON);
Отключение режима:
drawingManager.setDrawingMode(null);
Каждый тип объекта генерирует событие завершения создания:
markercompletepolylinecompletepolygoncompletecirclecompleterectanglecompleteОбщий шаблон обработки:
google.maps.event.addListener(drawingManager, "overlaycomplete", (event) => {
const type = event.type;
const overlay = event.overlay;
});
overlaycomplete используется для унифицированной
обработки всех объектов.
Созданные элементы можно сохранять, изменять или удалять через ссылки на объекты.
const overlays = [];
google.maps.event.addListener(drawingManager, "polygoncomplete", (polygon) => {
overlays.push(polygon);
});
Удаление:
overlays.forEach((overlay) => overlay.setMap(null));
overlays.length = 0;
Большинство объектов поддерживает редактирование через
editable: true.
polygon.setOptions({
editable: true,
draggable: true,
});
Редактирование включает:
strokeColor: "#0000ff",
strokeOpacity: 0.8,
strokeWeight: 4
fillColor: "#ff0000",
fillOpacity: 0.35
icon: {
url: "marker.png",
scaledSize: new google.maps.Size(30, 30),
}
Поведение DrawingManager контролируется через конфигурацию:
const drawingManager = new google.maps.drawing.DrawingManager({
drawingControl: true,
drawingControlOptions: {
drawingModes: [
google.maps.drawing.OverlayType.POLYGON,
],
},
polygonOptions: {
editable: true,
fillColor: "#yellow",
},
});
Глобальные настройки для каждого типа объекта позволяют задавать единый стиль до момента создания.
Все геометрические объекты используют тип LatLng.
Извлечение координат полигона:
const path = polygon.getPath();
for (let i = 0; i < path.getLength(); i++) {
const point = path.getAt(i);
}
Для окружности:
const center = circle.getCenter();
const radius = circle.getRadius();
Drawing Library часто комбинируется с дополнительной логикой:
Пример расчёта площади полигона:
const area = google.maps.geometry.spherical.computeArea(polygon.getPath());
Drawing Library тесно связана с geometry:
&libraries=drawing,geometry
Доступные вычисления:
Полное скрытие панели инструментов:
drawingManager.setMap(null);
Возврат:
drawingManager.setMap(map);
При изменении геометрии отслеживаются события внутри путей:
const path = polygon.getPath();
path.addListener("set_at", () => {
console.log("Точка изменена");
});
path.addListener("insert_at", () => {
console.log("Точка добавлена");
});
path.addListener("remove_at", () => {
console.log("Точка удалена");
});
Такая модель позволяет строить реактивные системы редактирования геоданных.
Созданные объекты могут накладываться на дополнительные слои:
KmlLayerGeoJSONOverlayViewИнтеграция требует синхронизации координатных систем и управления z-index слоёв.
Drawing Library может использоваться только как вспомогательный UI, тогда как геометрия создаётся вручную:
const polygon = new google.maps.Polygon({
paths: [
{ lat: 55.75, lng: 37.61 },
{ lat: 55.76, lng: 37.62 },
{ lat: 55.74, lng: 37.63 },
],
map: map,
});
Каждый overlay имеет привязку к карте:
overlay.setMap(map); // отображение
overlay.setMap(null); // скрытие
Это базовый механизм управления жизненным циклом геометрий.
Типовая архитектура включает:
Такой подход формирует основу GIS-интерфейсов в веб-приложениях.