Версия:
Популярные примеры
Карта
Геообъекты
Балун и хинт
Элементы управления
Активные области
Кластеризация
GeoQuery
Поведения и события
Поиск по карте
Пробки
Местоположение пользователя
Маршрутизация
YMapsML
GeoXML
ObjectManager
Модульная система
Панорамы
Внешние модули

Нарисовать произвольную область на карте

Сохранить как файлыЭкспорт на JSFiddle

В данном примере показано, как можно реализовать рисование произвольного контура на карте.

Для построения геообъектов доступен визуальный редактор. Однако он позволяет рисовать геообъекты по координатам клика. Если на карте нужно рисовать произвольные контуры (так, как будто вы рисуете карандашом), используйте элемент canvas.

В примере поверх карты добавляется элемент canvas. После зажатия кнопки мыши с зажатой клавишей "alt" мы начинаем слушать событие 'mousemove'. В тот момент, когда пользователь будет рисовать на карте, в массив будут сохраняться координаты перемещений указателя мыши. Когда пользователь отпустит кнопку мыши, по сохраненным координатам АПИ построит геообъект.

Часто на карте нужно фильтровать объекты, которые попадают в нарисованный контур. В примере Попадание точек в окружность можно посмотреть, как это сделать.

\n\n","polygon_custom.js":"ymaps.ready(['ext.paintOnMap']).then(function () {\n var map = new ymaps.Map('map', {\n center: [55.75, 37.62],\n zoom: 14,\n controls: []\n });\n\n var paintProcess;\n\n // Опции многоугольника или линии.\n var styles = [\n {strokeColor: '#ff00ff', strokeOpacity: 0.7, strokeWidth: 3, fillColor: '#ff00ff', fillOpacity: 0.4},\n {strokeColor: '#ff0000', strokeOpacity: 0.6, strokeWidth: 6, fillColor: '#ff0000', fillOpacity: 0.3},\n {strokeColor: '#00ff00', strokeOpacity: 0.5, strokeWidth: 3, fillColor: '#00ff00', fillOpacity: 0.2},\n {strokeColor: '#0000ff', strokeOpacity: 0.8, strokeWidth: 5, fillColor: '#0000ff', fillOpacity: 0.5},\n {strokeColor: '#000000', strokeOpacity: 0.6, strokeWidth: 8, fillColor: '#000000', fillOpacity: 0.3},\n ];\n\n var currentIndex = 0;\n\n // Создадим кнопку для выбора типа рисуемого контура.\n var button = new ymaps.control.Button({data: {content: 'Polygon / Polyline'}, options: {maxWidth: 150}});\n map.controls.add(button);\n\n // Подпишемся на событие нажатия кнопки мыши.\n map.events.add('mousedown', function (e) {\n // Если кнопка мыши была нажата с зажатой клавишей \"alt\", то начинаем рисование контура.\n if (e.get('altKey')) {\n if (currentIndex == styles.length - 1) {\n currentIndex = 0;\n } else {\n currentIndex += 1;\n }\n paintProcess = ymaps.ext.paintOnMap(map, e, {style: styles[currentIndex]});\n }\n });\n\n // Подпишемся на событие отпускания кнопки мыши.\n map.events.add('mouseup', function (e) {\n if (paintProcess) {\n\n // Получаем координаты отрисованного контура.\n var coordinates = paintProcess.finishPaintingAt(e);\n paintProcess = null;\n // В зависимости от состояния кнопки добавляем на карту многоугольник или линию с полученными координатами.\n var geoObject = button.isSelected() ?\n new ymaps.Polyline(coordinates, {}, styles[currentIndex]) :\n new ymaps.Polygon([coordinates], {}, styles[currentIndex]);\n\n map.geoObjects.add(geoObject);\n }\n });\n}).catch(console.error);"},"resources":[],"directory":"https://sandbox.api.maps.yandex.net/examples/ru/2.1/polygon_custom/"}
Пишете на JavaScript? У нас есть вакансии
Sun Sep 18 2022 20:10:14 GMT+0300 (Moscow Standard Time)