Работа с перекрывающимися функциями в OpenLayers


14

Если пользователи создают функцию многоугольника, которая полностью перекрывает другую, как это ...

… Тогда вы не сможете выбрать внутреннюю особенность, то есть ту, которая перекрывается другой. В настоящее время я использую простой SelectFeatureкак это:

var select = new OpenLayers.Control.SelectFeature(
  [this.annotationLayer, this.controlPointsLayer], { 
    hover: true,
    renderIntent: "temporary"
    }
);
this.map.addControl(select);
select.activate();

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

Самое простое решение, вероятно, состоит в том, чтобы сделать внешний элемент доступным для выбора только в той области, которая осталась при вычитании внутреннего объекта, но я понятия не имею, как это сделать.


1
Вам нужно создать z-index (Упорядочивание) - см. Openlayers.org/dev/examples/ordering.html
Mapperz

Фу, значит, мне придется вручную проверять каждую возможную комбинацию функций на перекрытия и назначать пользовательский z-порядок перед их загрузкой? Как ... наличие функции, которая определяет, полностью ли содержится одна функция в другой?
Slhck

Ответы:


10

Мало вариантов. Некоторые сумасшедшие :-), чем другие. Основные стратегии

  • Особенности кластера
  • Скрыть / переместить верхнюю функцию
  • Отправить клик через верхнюю функцию

==>

  1. Включить стратегию кластеризации объектов

  2. Реализуйте свой собственный алгоритм кластеризации, поэтому, когда новый элемент добавляется или изменяется, ваш алгоритм перезапускается и выполняет вложенную проверку цикла for и n * n (-1), чтобы увидеть, что перекрывается с чем, - затем измените свойство функции. чтобы настроить список перекрывающихся функций, и когда пользователь щелкает эту функцию, отображается список перекрывающихся функций, и пользователь выбирает то, что он действительно хочет щелкнуть. Имеет смысл?

  3. Вместо реализации функции по щелчку, просто реализуйте весь обработчик щелчков карты. А когда пользователь щелкает, проверяйте на своем слое наличие любых пересекающихся объектов - и, если они есть, - отображайте всплывающее окно этого парня, а если их несколько, отображайте список подсказок, как в # 2 выше. Если никто не пересекается, просто игнорируйте.

  4. Реализуйте параметр правой кнопки мыши, чтобы временно «скрыть» функцию, чтобы получить доступ к скрытой функции. Как только вы нажмете следующий, повторно отобразите все скрытые функции

  5. Как и в # 4, во всплывающем окне верхнего элемента добавьте элемент меню / ссылки, чтобы «скрыть» функцию. И действуйте как в # 4.

  6. Подобный переход к # 4/5 реализует щелчок правой кнопкой мыши по «временному перемещению» и перетаскиванию объекта с пути [помните, что это старое место]. Затем пользователь нажимает нижний элемент, а верхний возвращается в исходное положение.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.