В данном примере показано, как можно реализовать рисование произвольного контура на карте.
Для построения геообъектов доступен визуальный редактор. Однако он позволяет рисовать геообъекты по координатам клика. Если на карте нужно рисовать произвольные контуры (так, как будто вы рисуете карандашом), используйте элемент 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/"}
В данном примере показано, как можно реализовать рисование произвольного контура на карте.
Для построения геообъектов доступен визуальный редактор. Однако он позволяет рисовать геообъекты по координатам клика. Если на карте нужно рисовать произвольные контуры (так, как будто вы рисуете карандашом), используйте элемент canvas.
В примере поверх карты добавляется элемент canvas. После зажатия кнопки мыши с зажатой клавишей "alt" мы начинаем слушать событие 'mousemove'. В тот момент, когда пользователь будет рисовать на карте, в массив будут сохраняться координаты перемещений указателя мыши. Когда пользователь отпустит кнопку мыши, по сохраненным координатам АПИ построит геообъект.
Часто на карте нужно фильтровать объекты, которые попадают в нарисованный контур. В примере Попадание точек в окружность можно посмотреть, как это сделать.