Jaki jest najlepszy sposób wyświetlania tysięcy wielokątów w Openlayers?

10

Próbuję utworzyć mapę Openlayers, która wyświetli tysiące wielokątów. A kiedy użytkownik kliknie każdy z nich, chcę wyświetlić niektóre metadane. Praca z tym dużym zestawem danych wydaje się trudna. Ale próbuję dowiedzieć się, czy istnieje standardowy sposób, aby to zrobić. W tym momencie myślę, że powinienem

  1. wyświetl moje wielokąty za pomocą WMS i użyj getfeatureinfo
  2. Wyświetlaj za pomocą WFS, wczytaj ze Strategy.BBOX i użyj GetFeature, aby uzyskać Meatadata.

Czy istnieje logiczny sposób, że brakuje mi załadowania wszystkich tych danych do mapy i uzyskania dobrej prędkości. Patrzyłem na tę stronę i próbowałem dowiedzieć się, co zrobili: http://protectedplanet.net/

KyleK
źródło

Odpowiedzi:

5

Nie podoba mi się strategia BBOX, ponieważ myślę, że może być powolna ze względu na liczbę generowanych żądań.

Użyłbym kombinacji obu rzeczy, o których wspomniałeś.

wyświetlaj wielokąty za pomocą WMS i użyj getfeatureinfo ... następnie użyj WFS, aby załadować zarys funkcji po kliknięciu i / lub uzyskać więcej informacji z bazy danych.

chronioneplanet.net nie używa openlayers, tylko mapy google. Prawdopodobnie przechowują wszystkie informacje w KML / KMZ.

CaptDragon
źródło
Wielkie dzięki! Chyba jestem wtedy na dobrej drodze. Ale zastanawiam się, czy chronione rośliny używa KML, czy powinienem to robić ze względu na szybkość? I czy te dane KML są obsługiwane przez WFS?
KyleK,
Nie wiem na pewno, czy to KML, po prostu zgadnij. Ale jeśli tak nie jest, nie jest obsługiwany przez WFS, ponieważ WFS używa GML. Rzecz w korzystaniu z Google API i KML polega na tym, że musisz mieć ten KML na publicznym adresie URL, gdzie KAŻDY może go zobaczyć. Jeśli to nie jest problem, być może możesz spróbować. Wynika to z faktu, że Google wchłania ten KML na swoje serwery i zwraca go z powrotem do interfejsu API. Z tych dwóch powodów nie mogę używać interfejsu API Google Maps ze względu na wrażliwość niektórych projektów.
CaptDragon,
Możesz ograniczyć dostęp do swojego publicznego adresu URL KML, aby zezwolić tylko klientowi, który prezentuje ciąg analizatora składni Google KML.
Sarge
3

Głównym podejściem jest tutaj oddzielenie rasteryzacji od interakcji. Jednym z podejść (za które jestem częściowo odpowiedzialny) jest UTFGrid , który był używany przez NPR itp. I jest zintegrowany z TileMill i Mapnikiem . Jest również używany przez CartoDB, a Google Maps stosuje podobne podejście w przypadku tabel Fusion.

Chroniona planeta również używa kafelków rastrowych (na przykład ten:) http://184.73.201.235/blue/8/78/93i ma za sobą serwer na żywo do zapytań punktowych (na przykład ten ).

Re: CaptDragon: nie jest zaangażowany WFS ani KML.

WMS i WFS nie zapewniają wystarczającej wydajności dla witryny publicznej. Strategia BBOX nie będzie działać, jeśli pozwolisz użytkownikom powiększać.

tmcw
źródło
FYI: Możesz buforować usługę rastrową WMS, która da ci kafelki.
CaptDragon,
1
Tak, ale to nie jest główny problem, ale interaktywność. Nie można buforować sposobu działania funkcji WFS / WMS GetFeature, ponieważ nie są one zaprojektowane do buforowania w podobny sposób.
tmcw,
Cały czas buforuję moje wyniki CSW, WFS i WMS GetFeature, GetRecord itp. Są to tylko standardy formatu dla interoperacyjności i nie określają, gdzie przechowywane jest źródło (buforowane lub nie).
CaptDragon,
Typowe żądanie GetFeature WFS to żądanie jednej współrzędnej; pamięć podręczna dla tego żądania jest przydatna tylko dla dokładnych dopasowań - które są rzadkie pod względem interakcji użytkownika. Alternatywy, takie jak kafelki pamięci podręcznej UTFGrid, mogą optymalnie wypełnić pamięć podręczną, w przeciwieństwie do pamięci podręcznej dla potencjalnie milionów pojedynczych współrzędnych. W ten sposób standard decyduje o jego przyjazności dla pamięci podręcznej.
tmcw,
Wow- dzięki za wszelką pomoc. Ponieważ używam OpenLayers, a moja mapa znajduje się w 4326 (która nie jest obsługiwana przez TileMill), czy poleciłbyś CartoDB jako sposób na przechowywanie i dostęp do moich danych?
KyleK,