Робота з функціями перекриття в 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-індекс (Порядок замовлення) - див. Openlayers.org/dev/examples/ordering.html
Mapperz

Phew, значить, мені доведеться вручну перевіряти всі можливі поєднання функцій для перекриттів і призначати користувацький z-порядок перед завантаженням? Як… має функцію, яка визначає, чи повністю міститься одна функція в іншій?
slhck

Упорядкування z-індексу не працює
neogeomat

Відповіді:


10

Мало варіантів. Деякі божевільніші :-), ніж інші. Основними стратегіями є

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

==>

  1. Увімкніть стратегію кластеризації функцій

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

  3. Замість того, щоб реалізовувати функцію при натисканні, просто застосуйте цілий обробник кліків на карті. І коли користувач клацає, перевірте ваш шар, чи не є функції, що перетинаються, і якщо вони є, - відобразити спливаюче вікно цього хлопця, а якщо їх кілька, відобразити список підказок, як у №2 вище. Якщо жодне не перетинається, просто проігноруйте.

  4. Використовуйте опцію правої кнопки миші, щоб тимчасово "приховати" функцію, щоб мати доступ до прихованої функції. Як тільки натиснути наступний, повторно виведіть усі приховані функції

  5. Як і №4, всередині спливаючого вікна функції додайте меню / посилання, щоб "приховати" функцію. І продовжуйте, як у №4.

  6. Подібно до # 4/5, застосуйте правою кнопкою миші «тимчасовий хід» та натисніть перетягнути цю функцію в сторону [пам’ятайте, що це старе місце]. Потім користувач натискає нижню функцію, а верхній повертається у вихідне положення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.