Was ist der beste Weg, um Tausende von Polygonen in Openlayern anzuzeigen?

10

Ich versuche, eine Openlayers-Karte zu erstellen, die Tausende von Polygonen anzeigt. Und wenn der Benutzer auf jedes klickt, möchte ich, dass einige der Metadaten angezeigt werden. Die Arbeit mit diesem großen Datensatz scheint eine Herausforderung zu sein. Aber ich versuche herauszufinden, ob es einen Standardweg gibt, um dies zu erreichen. An diesem Punkt denke ich, ich sollte es auch

  1. Zeigen Sie meine Polygone mit WMS an und verwenden Sie getfeatureinfo
  2. Zeigen Sie mit WFS an, laden Sie mit Strategy.BBOX und verwenden Sie GetFeature, um Fleischdaten abzurufen.

Gibt es eine logische Möglichkeit, all diese Daten in eine Karte zu laden und eine gute Geschwindigkeit zu haben? Ich habe mir diese Seite angesehen und versucht herauszufinden, was sie getan haben: http://protectedplanet.net/

KyleK
quelle

Antworten:

5

Ich mag die BBOX-Strategie nicht, da ich denke, dass sie aufgrund der Anzahl der möglicherweise generierten Anforderungen langsam sein kann.

Ich würde eine Kombination aus beiden Dingen verwenden, die Sie erwähnt haben.

Zeigen Sie Polygone mit WMS an und verwenden Sie getfeatureinfo ... und verwenden Sie dann WFS, um die Gliederung der Funktion beim Klicken zu laden und / oder weitere Informationen aus der Datenbank abzurufen.

protectedplanet.net verwendet keine Openlayers, sondern nur Google Maps. Sie speichern wahrscheinlich alle Informationen in einer KML / KMZ.

CaptDragon
quelle
Vielen Dank! Dann bin ich wohl auf dem richtigen Weg. Aber ich frage mich, ob protectedplanted KML verwendet. Sollte ich das für seine Geschwindigkeit tun? Und werden diese KML-Daten von WFS bereitgestellt?
KyleK
Ich weiß nicht genau, ob es KML ist, nur eine Vermutung. Wenn dies jedoch der Fall ist, wird es nicht von WFS bereitgestellt, da WFS GML verwendet. Die Sache mit Google Apis und KML ist, dass Sie diese KML auf einer öffentlichen URL haben müssen, unter der JEDER sie sehen kann. Wenn das kein Problem ist, können Sie es vielleicht versuchen. Dies liegt daran, dass Google diese KML auf seinen Servern aufnimmt und an die API zurückgibt. Aus diesen beiden Gründen kann ich die Google Maps-API aufgrund der Sensibilität einiger Projekte nicht verwenden.
CaptDragon
Sie können den Zugriff auf Ihre öffentliche KML-URL so beschränken, dass nur ein Benutzeragent zugelassen wird, der die Google KML-Parserzeichenfolge anzeigt.
Sarge
3

Der Hauptansatz besteht darin, die Rasterisierung von der Interaktion zu trennen. Ein Ansatz (für den ich teilweise verantwortlich bin) ist UTFGrid , das von NPR usw. verwendet wurde und in TileMill und Mapnik integriert ist . Es wird auch von CartoDB verwendet und Google Maps verwendet einen ähnlichen Ansatz für Fusion Tables.

Der geschützte Planet verwendet ebenfalls Rasterkacheln (z. B. dieses :) http://184.73.201.235/blue/8/78/93und verfügt über einen Live-Server für punktbasierte Abfragen (z. B. dieses ).

Betreff: CaptDragon: Es ist kein WFS oder KML beteiligt.

WMS und WFS bieten Ihnen nicht annähernd genug Leistung für eine öffentliche Site. Die BBOX-Strategie funktioniert nicht, wenn Sie Benutzer zoomen lassen.

tmcw
quelle
Zu Ihrer Information: Sie können einen WMS-Rasterdienst zwischenspeichern, der Ihnen Kacheln gibt.
CaptDragon
1
Ja, aber das ist hier nicht das Hauptproblem, sondern die Interaktivität. Sie können die Funktionsweise von WFS / WMS GetFeature nicht zwischenspeichern, da sie nicht für die Zwischenspeicherung ausgelegt sind.
tmcw
Ich speichere meine CSW-, WFS- und WMS-GetFeature-, GetRecord- usw. Ergebnisse ständig zwischen. Dies sind nur Formatstandards für die Interoperabilität und bestimmen nicht, wo die Quelle, ob zwischengespeichert oder nicht, gespeichert ist.
CaptDragon
Eine typische WFS-GetFeature-Anforderung ist eine Anforderung für eine einzelne Koordinate. Ein Cache für diese Anforderung ist nur für genaue Übereinstimmungen geeignet - was in Bezug auf die Benutzerinteraktion selten ist. Alternativen wie UTFGrid cachen Datenkacheln und können den Cache optimistisch füllen, im Gegensatz zu einem Cache für potenziell Millionen einzelner Koordinaten. Auf diese Weise bestimmt der Standard seine Cache-Freundlichkeit.
tmcw
Wow- Danke für all die Hilfe. Da ich OpenLayers verwende und meine Karte sich in 4326 befindet (was von TileMill nicht unterstützt wird), würden Sie CartoDB als Mittel zum Speichern und Zugreifen auf meine Daten empfehlen?
KyleK