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ć.
Odpowiedzi:
Kilka opcji. Niektóre bardziej szalone :-) niż inne. Podstawowe strategie to
==>
Włącz strategię grupowania funkcji
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?
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.
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
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.
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.
źródło