2014-09-23 5 views
0

Я начал использовать OpenLayers3 в моем приложении, и до сих пор, мне удалось создать рабочие версии:OpenLayers3 - возможно ли комбинировать операции модификации/рисования/выбора?

  1. комбинированный Жеребьевка/изменить страницу (на основании соответствующего примера, draw-and-modify-features.js)
  2. в в сочетании выбора/редактирования страницы (на основе соответствующего примера, modify-features.js)

В случае (1), экземпляр ol.interaction.Modify указывает, что он будет работать на особенности внутри ol.FeatureOverlay например:

var modify = new ol.interaction.Modify({ 
    features: featureOverlay.getFeatures() 
... 

... и это то, что ol.FeatureOverlay содержит все новые функции, нарисованные пользователем.

В случае (2), экземпляр ol.interaction.Modify указывает, что он будет работать на особенности внутри ol.interaction.Select например:

var select = new ol.interaction.Select(); 
var modify = new ol.interaction.Modify({ 
    features: select.getFeatures() 
}); 

... и если я не ошибаюсь, это создает скрытый ol.FeatureOverlay что содержит выбранную в данный момент функцию, которая затем редактируется.

Однако я не вижу способа объединить все 3 - то есть удобный способ, позволяющий пользователю рисовать, выбирать и изменять полигоны.

Что бы я хотел (желательно) - это функциональность рисования/модификации, но в тот момент, когда я нажимаю и удерживаю Ctrl нажатой, курсор больше не работает в режиме «рисования», а в режиме «выбрать», что позволяет мне выбрать один из существующих полигонов, а затем нанести на клавиатуре Delete на клавиатуре, чтобы удалить его, или просто отредактировать его вершины с помощью мыши. Как только я выхожу за пределы всех полигонов, я возвращаюсь в режим рисования/изменения.

Я сделал наивный тест - добавление ol.interaction.Select к взаимодействию экземпляра draw/modify Map - что приводит к веселым результатам :-) Например, после завершения рисования многоугольника (т. Е. нажмите, чтобы закрыть его), и его выбрали ... и щелчок в любом месте (внутри или снаружи многоугольников) просто запускает новый новый край многоугольника, он никогда не выбирает ранее существовавший - и т. д.

Моя единственная мысль о решении далеко ... для меня реализовать «эмуляцию VI» :-), т. е. режим «команда» (то есть состояние выбора/изменения) и режим «вставки» (то есть состояние рисования/изменения) - и вы выберите, в каком режиме вы находитесь, нажав кнопку «Переключение состояния» внутри карты (пользовательский элемент управления OL3) или вне карты (обычная кнопка HTML).

Я, однако, ищет лучший способ, как тот, который я предложил с проведением Ctrl ...

Любые идеи/предложения приветствуются.

+0

Помогает ли это? http://openlayers.org/en/v3.0.0/examples/draw-and-modify-features.html?q=modify Вы должны использовать ключи-модификаторы, но мне удалось рисовать, удалять и изменять полигоны (после прочтения источник, нужно сказать :-)) –

+0

@ JohnBarça: Спасибо, Джон, но вы просто повторяете ту же ссылку, что и в моем собственном вопросе (modify.js), не сообщая мне, как вам удалось все 3 (нарисовать, выбрать , изменить) :-) Не забудьте поделиться своим решением? – ttsiodras

+0

Извините, я не видел эту ссылку в вашем вопросе, и у меня нет решения. Что это за пример, который не работает для вас? –

ответ

2

Я не нашел решение, объединяющее все три режима. Поскольку ответа не было, я мог бы также поделиться этим, в конце концов, имея «модальную» форму работы (, т. Е. Попадание пользовательского элемента управления - карта-внутренняя кнопка - для входа в «Режим выбора») не так уж плохо ,Я закончил с «Выбор режима», и «Draw/режим Modify» и режим «Измерение» - выбирается с помощью карты-внутренние кнопки:

enter image description here

В конце концов, оказалось, прекрасно - оглядываясь назад, наличие «комбинированного» режима на самом деле представляет значительные недостатки в удобстве использования.