Maksymalna liczba elementów punktowych w warstwie wektorowej OpenLayers

27

Z twojego doświadczenia wynika, ile elementów punktowych można dodać do warstwy wektorowej OpenLayers (nowa OpenLayers.Layer.Vector („Warstwa punktowa”)), zanim stanie się ona wyjątkowo wolna?

Moim przypadkiem użycia jest wyświetlanie punktów z tabeli bazy danych. Użytkownik może zdecydować, które ramy czasowe mają być wizualizowane. Dlatego wynik może wynosić od bardzo niewielu do potencjalnie 100 000 punktów. Chciałbym wprowadzić rozsądny limit i ostrzec użytkownika, jeśli jego zapytanie zwróci więcej funkcji.

podmrok
źródło
Czy używana jest standardowa przeglądarka? Limit będzie prawdopodobnie różny w zależności od używanej przeglądarki.
Derek Swingley,
Głównie Firefox. Nie musi działać w starych IE.
podmrok
1
Zamiast ostrzegać użytkownika, możesz przełączyć się z żądania danych wektorowych na zwracanie punktów jako WMS / obraz.
geographika
@geographika: Zwykle to robię. Ale użytkownik może również zdecydować, z którą bazą danych się połączyć. Musiałbym znać wszystkie możliwe bazy danych i mieć je dostępne za pośrednictwem WMS. Nie mają nawet zainstalowanego PostGIS, po prostu pobieram kolumny lat / lon.
podmrok

Odpowiedzi:

38

Nie mam dla ciebie ostatecznej odpowiedzi, ale przygotowałem stronę, na której możesz bawić się różnymi liczbami punktów na mapie OL: http://derekswingley.com/lab/olpts/

Derek Swingley
źródło
5
Derek powinien mieć za to plakietkę „Świetna odpowiedź z praktycznym przykładem”. Dobrze widzieć różnice w prędkości nakładających się punktów.
Mapperz
3
Bardzo interesujące! To sprawia, że ​​myślę o geoipsum. Alternatywnie można go również użyć do przetestowania wydajności: craigmmills.com/geoipsum (nie wiem, czy istnieje limit liczby wielokątów)
simo
1
@ So4ne, że witryna wyszukiwarki aplikacji Google zmarła w pewnym momencie, ten sam (prawie 5-letni) kod znajduje się tutaj: derekswingley.com/lab/olpts
Derek Swingley
1
Opóźnienie @nospor z przejścia na https, zaktualizowane i strona powróciła.
Derek Swingley
1
@DerekSwingley Zrobiłem zaktualizowane próbki na podstawie twojego pomysłu za pomocą Leaflet, MapboxGL JS i OpenLayers 4 medium.com/@ThomasG77/ ...
Dodałem
5

Jeśli wyświetlanie zwalnia z powodu zbyt wysokiej liczby funkcji, oznacza to, że wyświetlane dane nie są odpowiednie dla poziomu powiększenia. Zwykle, gdy gęstość funkcji jest zbyt wysoka, wyświetlacz nie jest już czytelny (patrz ten przykład ). Nawet gdyby nie było limitu przetwarzania, a wszystkie urządzenia wyświetlające były w stanie wyświetlić 1000000000000 funkcji w 0,001 na małym ekranie, wizualizacja byłaby niemożliwa.

Prawo radix Töpfera stwierdza, że ​​gęstość cech powinna pozostawać poniżej stałego progu, niezależnie od poziomu powiększenia. Sposobem na rozwiązanie tego problemu i dostosowanie danych do skali wizualizacji jest ich transformacja za pomocą operacji uogólnienia takich jak ta lub inna .

Julien
źródło
Na ten sam temat: gis.stackexchange.com/q/4096/162
julien
2
Bardzo prawdziwe. Jeśli chodzi o Openlayers, używa do tego strategii klastrów . Zobacz przykład: openlayers.org/dev/examples/strategy-cluster.html
podobnie
1
W mojej bieżącej aplikacji po prostu podłączyłem punkty (GPS) do linii (ścieżek). To już znacznie skraca czas renderowania.
podmrok
3

Nie sądzę, aby udzielenie solidnej odpowiedzi na to pytanie nie było możliwe. Punkt renderowania / wielokąty w pełni zależą od przeglądarki i sprzętu (procesor i pamięć), a nie od OpenLayers. Miałem problem z Openlayers i IE6 dla jednego z renderowania Lake (Polygon). ale ładnie ładuje się w Firefoksie. A najlepszą opcją byłoby monitorowanie pamięci i zużycia procesora w Chrome lub lepsze byłyby niektóre narzędzia.

Senthil
źródło
1

Podobnie jak inni, nie mam odpowiedzi na to pytanie, ale zastosowanie strategii BBox może pomóc w zachowaniu tylko potrzebnych danych, ponieważ wyświetla tylko funkcje znajdujące się w danym polu ograniczającym.

simo
źródło
1

W OpenLayers 6 znajduje się mechanizm renderujący punkty WebGL, który powinien umożliwiać renderowanie setek tysięcy funkcji z filtrowaniem na podstawie czasu. Możesz sprawdzić najnowszą wersję oficjalnych warsztatów pod adresem https://openlayers.org/workshop/en/webgl/ .

W przypadku OpenLayers 2, których tak naprawdę nie polecam, maksymalna akceptowalna liczba klatek wyniesie tylko kilkaset funkcji.

ahocevar
źródło
0

Natknąłem się na podobny przypadek użycia, nie jestem pewien, czy będzie on pasował do wyżej wymienionych potrzeb, ale Clusteringw OL 5 to, co przyjąłem.

Grupowanie, jak sugerują te słowa, bierze grupę punktów i łączy je razem w jednym punkcie, np. Masz 100 punktów w danym mieście, wszystkie punkty będą widoczne jako jeden punkt z powiększenia, powiedzmy, 4ale jako pojedyncze punkty z powiększenia, powiedzmy powiedz 10więc, co możesz zrobić, gdy zoom jest w stanie 4połączyć te punkty jako jeden, co pomaga zredukować liczbę punktów do renderowania w danym obszarze.

Innymi słowy, załóżmy, że masz 10 000 punktów do renderowania na mapie i są one bardzo blisko siebie, dzięki czemu możesz tworzyć ich klastry i zmniejszać renderowanie, a gdy użytkownik zbliża się, łamiesz klastry. Zapewni to mniej renderowania i lepszą wydajność.

Satysfakcjonująca wydajność. Link do przykładów grupowania w Openlayers

Jashanpreet Bhullar
źródło
Czy możesz dodać krótkie streszczenie połączonej strony? Linki mogą z czasem ulec uszkodzeniu, przez co Twoja odpowiedź będzie bezużyteczna.
Kantan