Если пользователи создают функцию многоугольника, которая полностью перекрывает другую, как это ...
… Тогда вы не сможете выбрать внутреннюю особенность, то есть ту, которая перекрывается другой. В настоящее время я использую простой SelectFeature
как это:
var select = new OpenLayers.Control.SelectFeature(
[this.annotationLayer, this.controlPointsLayer], {
hover: true,
renderIntent: "temporary"
}
);
this.map.addControl(select);
select.activate();
Но, очевидно, я могу получить его только для выбора внешней функции. Какой типичный способ борьбы с этим? Как я могу сделать так, чтобы пользователь мог также выбрать внутреннюю функцию?
Самое простое решение, вероятно, состоит в том, чтобы сделать внешний элемент доступным для выбора только в той области, которая осталась при вычитании внутреннего объекта, но я понятия не имею, как это сделать.
Ответы:
Мало вариантов. Некоторые сумасшедшие :-), чем другие. Основные стратегии
==>
Включить стратегию кластеризации объектов
Реализуйте свой собственный алгоритм кластеризации, поэтому, когда новый элемент добавляется или изменяется, ваш алгоритм перезапускается и выполняет вложенную проверку цикла for и n * n (-1), чтобы увидеть, что перекрывается с чем, - затем измените свойство функции. чтобы настроить список перекрывающихся функций, и когда пользователь щелкает эту функцию, отображается список перекрывающихся функций, и пользователь выбирает то, что он действительно хочет щелкнуть. Имеет смысл?
Вместо реализации функции по щелчку, просто реализуйте весь обработчик щелчков карты. А когда пользователь щелкает, проверяйте на своем слое наличие любых пересекающихся объектов - и, если они есть, - отображайте всплывающее окно этого парня, а если их несколько, отображайте список подсказок, как в # 2 выше. Если никто не пересекается, просто игнорируйте.
Реализуйте параметр правой кнопки мыши, чтобы временно «скрыть» функцию, чтобы получить доступ к скрытой функции. Как только вы нажмете следующий, повторно отобразите все скрытые функции
Как и в # 4, во всплывающем окне верхнего элемента добавьте элемент меню / ссылки, чтобы «скрыть» функцию. И действуйте как в # 4.
Подобный переход к # 4/5 реализует щелчок правой кнопкой мыши по «временному перемещению» и перетаскиванию объекта с пути [помните, что это старое место]. Затем пользователь нажимает нижний элемент, а верхний возвращается в исходное положение.
источник