Radzenie sobie z nakładającymi się funkcjami w OpenLayers

14

Jeśli użytkownicy utworzą funkcję wielokąta, która całkowicie pokrywa się z inną, na przykład…

… Wtedy nie ma możliwości wybrania funkcji wewnętrznej, tj. Tej, która nakłada się na drugą. Obecnie używam takiego prostego SelectFeature:

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

Ale oczywiście mogę go tylko wybrać, aby wybrać zewnętrzną funkcję. Jaki jest typowy sposób radzenia sobie z tym? Jak mogę umożliwić użytkownikowi wybranie wewnętrznej funkcji?

Najprostszym rozwiązaniem byłoby prawdopodobnie wybranie opcji zewnętrznej tylko w obrębie obszaru, który został pozostawiony po odjęciu operacji wewnętrznej - ale nie mam pojęcia, jak to zrobić.

slhck
źródło
1
Musisz utworzyć indeks Z (Zamawianie) - patrz openlayers.org/dev/examples/ordering.html
Mapperz
Uff, więc oznacza to, że musiałbym ręcznie sprawdzić każdą możliwą kombinację funkcji dla nakładania się i przypisać niestandardowe zamówienie przed załadowaniem? Jak… posiadanie funkcji, która określa, czy jedna funkcja jest całkowicie zawarta w innej?
slhck,
kolejność indeksowania z nie działa
neogeomat

Odpowiedzi:

10

Kilka opcji. Niektóre bardziej szalone :-) niż inne. Podstawowe strategie to

  • Funkcje klastra
  • Ukryj / przenieś najwyższą funkcję
  • Wyślij kliknięcie przez najwyższą funkcję

==>

  1. Włącz strategię grupowania funkcji

  2. Zaimplementuj własny algorytm grupowania, więc gdy nowy element zostanie dodany lub zmodyfikowany, algorytm uruchomi się ponownie i wykona zagnieżdżone sprawdzenie pętli, a n * n (-1) sprawdzi, co się pokrywa z czym - a następnie zmodyfikuj właściwość funkcji aby skonfigurować listę nakładających się funkcji, a gdy użytkownik kliknie tę funkcję, wyświetl listę nakładających się funkcji i wybierz, co naprawdę chciał kliknąć. Ma sens?

  3. Zamiast implementować funkcję po kliknięciu, wystarczy zaimplementować całą procedurę obsługi kliknięcia mapy. A kiedy użytkownik kliknie, przejrzyj warstwę pod kątem przecinających się funkcji - a jeśli jest taka - wyświetl wyskakujące okienko tego faceta, a jeśli jest ich wiele, wyświetl listę pytań, jak w punkcie 2 powyżej. Jeśli żadne nie przecinają się, po prostu zignoruj.

  4. Zaimplementuj opcję kliknięcia prawym przyciskiem myszy, aby tymczasowo „ukryć” funkcję, aby uzyskać dostęp do funkcji ukrytej. Po kliknięciu następnego kliknij ponownie wszystkie ukryte funkcje

  5. Podobnie jak w punkcie 4, w wyskakującym okienku górnej funkcji dodaj element menu / łącza, aby „ukryć” funkcję. I postępuj jak w punkcie 4.

  6. Podobne do # 4/5 zaimplementuj „tymczasowy ruch” prawym przyciskiem myszy i kliknij przeciągnij funkcję na bok [pamiętaj, że to stare miejsce]. Następnie użytkownik klika dolną funkcję, a górna powraca do pierwotnej pozycji.

Vadim
źródło