Доброго времени суток.
Подскажите пожалуйста, как при редактировании полигона запретить создавать внутренний контур.
Доброго времени суток.
Подскажите пожалуйста, как при редактировании полигона запретить создавать внутренний контур.
Очень хочется разобраться с кастомизацией вершин редактора полигона. В документации geometryEditor.Polygon-docpage описаны параметры options.edgeLayout и options.vertexLayout, которые принимают класс макета.
Есть 2 похожие темы:
https://yandex.ru/blog/mapsapi/46436, https://yandex.ru/blog/mapsapi/39780, но они не дают ответа, точнее не получается повторить решения описанные там.
Пробовал передавать созданный templateLayoutFactory:
var myPolyline = new ymaps.Polyline([
[55.80, 37.50],
[55.80, 37.40],
[55.70, 37.50],
[55.70, 37.40]
], {}, {
strokeColor: "#00000088",
strokeWidth: 4,
editorVertexLayout: ymaps.templateLayoutFactory.createClass('<div class="map-editor-vertex"></div>'),
editorEdgeLayout: ymaps.templateLayoutFactory.createClass('<div class="map-editor-edge"></div>'),
});
или изменять параметр options:
myPolyline.editor.options.set('edgeLayout', ymaps.templateLayoutFactory.createClass('<div class="map-editor-vertex"></div>'));
myPolyline.editor.options.set('vertexLayout', ymaps.templateLayoutFactory.createClass('<div class="map-editor-vertex"></div>'));
Но никакой реакции. Версия API 2.1
Наброски в песочнице: https://jsfiddle.net/dmitry_shvalyov/jfoehhtL/7/
Сегодня мы выпустили новую версию Конструктора Яндекс.Карт. В ней появилась возможность расширенной настройки контента меток.
Теперь вы можете не только задать форму и цвет метки, но и выбрать одну из предложенных пиктограмм. Новые метки поддерживаются как в виджете интерактивной карты для вставки на сайт, так и в полиграфической печати.
Так же мы обновили редактор геометрий. Изменился не только его дизайн, но и была оптимизирована скорость работы.
Для объектов геозона типа многоугольник и полилиния есть метод который вызывает режим редактирования startEditing(). Для окружностей и прямиогольников в документациии написанно что эти методы ещё не рализованны.
Подскажите как быть, мне необходимо что бы пользователь сам мог вставлять геозоны типа круг и прямоугольник, не могу предумать как это лучше реализовать. Может есть какие то готовые решения ?
Здравствуйте.
Могу ли я как-нибудь перехватить клик по одной из вершин полигона в режиме рисования.
В моем случае я хотел бы по клику на первую вершину многоугольника автоматически оставнавливать режим рисования полигона БЕЗ контекстного меню с пунктом «Завершить».
Спасибо.
Раньше в верси api 1 был метод isDrawing().
Сейчас я не смог найти как определить находится ли определенный полигон в режиме редактирования или нет :(
Рисую полигон на карте с помощью startDrawing(), сохраняю в БД, при следующей загрузке надо включить режим редактирования полигона по клику на нём. Делаю так:
polygon.events.add('click', function(e) {
polygon.editor.startEditing();
});
Но почему-то текущий полигон клонируется. Как мне просто включить режим редактирования, не создавая нового полигона?
Всем привет.
Подскажите пожалуйста, можно ли по кнопке в меню завершить редактирование polyline?
var endDraw = new ymaps.control.Button({data: {content: 'Завершить рисование',},options: {maxWidth: [150],floatIndex: 4,selectOnClick:false}});myMap.controls.add(endDraw, {float: 'left'});endDraw.events.add('click', function (e) {myPolyline.editor.stopEditing();myPolyline.editor.stopDrawing();});
Можно ли в редакторе полигонов самому управлять промежуточными точками между вершинами? Мне нужно при перемещении вершины, генерировать несколько промежуточных точек между каждой вершиной.
Добрый день
Возникла необходимость рисования линий на карте кликами мышью в точках карты.
Нашел работающий пример для YMaps 1.x здесь но для 2.0 написать подобное не получается, консоль выдает ошибку polyline.editor is not a function
Делаю так
var searchMap;
ymaps.ready(function(){
searchMap = new ymaps.Map("searchMap", {
center: [55.756514,37.621212],
zoom: 9
});
searchMap.controls.add(
new ymaps.control.ZoomControl()
);
// Создание ломаной
var polyline = new ymaps.Polyline();
polyline.editor.startEditing();
// Установка параметров режима редактирования
polyline.setEditingOptions({
drawing: true,
maxPoints: 5
});
// Добавление ломаной на карту
searchMap.addOverlay(polyline);
// Включение режима редактирования
polyline.editor.startDrawing()
});
Подскажите пожалуйста, в чем может быть ошибка?
Добрый день.
Юзер рисует многоугольник:
function init () {
searchMap = new ymaps.Map('ms', {
center: [56.316797,43.987925],
zoom: 15
}),
// Создаем многоугольник
myPolygon = new ymaps.Polygon([[
// Координаты вершин внешней границы многоугольника.
]],
{},
{
strokeWidth: 6,
strokeColor: '#0e6c9b',
draggable: true
}
);
searchMap.geoObjects.add(myPolygon);
myPolygon.editor.startDrawing();
myPolygon.editor.startEditing();
myPolygon.editor.events.add(['vertexadd'], function(e){
// ???
});
}
Как мне получить координаты многоугольника в ходе редактирования ? (событие установки новой вершины)
// инициализирую карту и добавляю на карту коллекцию
...
myMapSearchAreaCollection = new ymaps.GeoObjectCollection();
// добавить многоугольную область поиска
function SearchAreaAddPolygon()
{
var myPolygonArea = new ymaps.GeoObject({geometry: {type: "Polygon", coordinates: []}});
// myMap.geoObjects.add(myPolygonArea);
myMapSearchAreaCollection.add(myPolygonArea);
myPolygonArea.editor.startDrawing();
myMapSearchAreaCollection.add(myPolygonArea);
}
можно ли так делать? это надо, чтобы потом одним кликом удалить все редактируемые многоугольники... что-то вроде
myMapSearchAreaCollection.removeAll();
или подскажите куда копать, чтобы можно было кнопкой добавить несколько редактируемых полигонов, а другой удалить их все
всем привет!
появился вопрос - как мне отловить событие завершения редактирования многоугольника?
хочу по нажатию кнопки "завершить" вывести координаты всех вершин многоугольника
пожскажите, как это реализовать?
Здравствуйте.
Проблема:
... (items, model) {
items.push({
title: "Завершить редактирование",
onClick: function(){
model.editor.stopEditing();
var points = model.geometry.getCoordinates();
console.log("save: ", points);
}
});
}points == координаты точки по которой щелкнули что открыть меню, а как получить доступ к самому полигону? Ну или ко всем точкам сразу?
Поясню на примере:
Есть некий геобъект с привязанным к его координатам html контентом,
неообходимо при смене координат обьекта перемещать и контент.
И тут у меня в возникает такая проблема: Если попробовать быстро перетаскивать круг, то в медленном браузере события изменения геометрии pixelgeometrychange как бы запаздывают и не успевают за положением круга, квадратик движется асинхронно с перемещениями центра круга = (
Такая проблема возникает только при быстрых перемещениях в медленных браузерах.
В стандартном редакторе многоугольника такой проблемы не возникает, там при включенном редактировании и резком перетаскивании обьекта квадратики всегда отображаются на своем месте (в вершинах многоугольника) http://jsfiddle.net/p32G7/1/
Что тут делать: необходимо слушать какое-то другое событие, связанное непосредственно с отображением обьекта?
Или что-то другое ?
Здаравствуйте)
Есть ломаная:
var line = new ymaps.Polyline(arrCoords, {}, {editorMenuManager: function () { myMap.balloon.open([координаты балуна], "_", {}); } });
Как получить координаты вершины ломаной, по которой кликнули? (для того, чтобы в этой вершине и открыть балун)
1) Vertexdragend как получить конечные координаты перетаскиваемой вершины
myPolyline.editor.events.add(['vertexdragstart'], function(e){startDragCoord = e.get('target').properties.get('model').geometry.g etCoordinates(); console.log(startDragCoord);});myPolyline.editor.events.add(['vertexdragend'], function(e){// Вариант 1endDragCoord = e.get('target').geometry.getCoordinates();// Вариант 2//endDragCoord = e.get('target').properties.get('model').getPixels( ); //endDragCoord = myMap.options.get('projection').fromGlobalPixels(e ndDragCoord, myMap.getZoom()) // Вариант 3//endDragCoord = e.get('target').properties.get('model').geometry.g etCoordinates(); console.log(endDragCoord);});
В варианте 1 при 2х тасканиях:
1. Начало перетаскивания №1 - [55.8, 37.4]
2. Конец перетаскивания №1 - [154.53989149305553, 80.24318011557905]
3. Начало перетаскивания №2 (координаты должны быть = п.2) - [55.762851931823704, 37.32172241210934]
4. Конец перетаскивания №2 - [154.4861805555555, 80.277359803087]
Вариант 2
1. Начало перетаскивания №1 - [55.8, 37.4]
2. Конец перетаскивания №1 - [55.79999999999366, 37.39999999999996]
3. Начало перетаскивания №2 (координаты должны быть = п.2) - [55.77291637894876, 37.35468139648434]
4. Конец перетаскивания №2 - [55.77291637894244, 37.35468139648431]
возвращает какое-то милиметровое смещение
Вариант 3
1. Начало перетаскивания №1 - [55.8, 37.4]
2. Конец перетаскивания №1 - [55.8, 37.4]
3. Начало перетаскивания №2 (координаты должны быть = п.2) - [55.730318189710175, 37.279150390624984]
4. Конец перетаскивания №2 - [55.730318189710175, 37.279150390624984]
возможно ли это?
если да то немогли бы вы написать полный путь к этому свойству. и можно ли в место квадратика задать метку? а то я искал искал через console.log(myPolyline); и ненашол цвет квадратиков(вершин) ломанной. Я имею ввиду квадратики при редактировании лованной
Добрый день!
Есть следующий код:
var map = new ymaps.Map( ... );
var polygon = new ymaps.Polygon([outerBounds, []], {}, {
editorDrawingCursor: "crosshair",
fillColor: '#4B0082',
strokeColor: '#4B0082',
strokeWidth: 2,
fillOpacity: 0.2
});
polygon.editor.startEditing();
polygon.editor.events.add(['vertexdragend', 'vertexadd'], function(e){
console.log(e.get('...'));
});
map.geoObjects.add(polygon);
вопрос: можноли в событиях vertexdragend и vertexadd - как-то получить координаты вершин
Собственно, сабж. Хотелось бы узнать, что происходит с объектом полигона, когда мы щелкаем по ссылке "удалить" в меню последней вершины. А также каким образом можно повесить обработчик на это событие? Пока что вижу это через обработчик события geometrychange многоу