Ich arbeite mit Geoserver und versorge Openlayern (3109 Polygone - viel mehr Eckpunkte) die US Lower 48 Counties. Die Landkreise werden in eine Postgis-Datenbank geladen. Ich bin neugierig auf Entwicklererfahrung, wenn ich versuche, diese Menge von Vertices an den Client zu senden.
Mit welchem WFS-Format haben Sie die besten Ergebnisse erzielt? Wurde zusätzliches Tuning auf Geoserver verwendet?
Mir ist klar, dass gekacheltes WMS schneller ist, aber ich möchte dynamische Änderungen in einer Choroplethen-Map mithilfe von openLayers ermöglichen, d. H. Der Benutzer sendet ein Formular, ein Python-Skript wird aufgerufen, und neue Datenfächer werden zurückgegeben, damit OpenLayer das Map Div neu laden können. Ich möchte dies auch in voller Auflösung ausprobieren, bevor ich die Komplexität von Polygonen in Openlayern reduziere.
GEOJSON ist meiner Meinung nach das beste Format, es ist leicht zu lesen, einfach in Javascript zu verwenden und generell kleiner als GML / KML. Es kann sogar Informationen über den Stil enthalten, siehe hier .
Es ist kein offizieller Standard, wird jedoch sowohl auf Broschüren als auch auf Openlayern und auf vielen GIS-Desktop-Apps wie QGIS unterstützt.
quelle
Die Verwendung von GeoJSON ist ein guter Anfang, um Ihr System zu beschleunigen, reicht jedoch möglicherweise nicht aus. Sie sollten erwägen, mehrere Versionen Ihrer Datenebene zu erstellen, eine pro Zoomebene, und für jede Version Verallgemeinerungs- / Vereinfachungsmethoden anwenden . Der Client sollte die relevante Ebene in Abhängigkeit von der ausgewählten Zoomstufe anfordern. Dies würde sicherstellen, dass der Detaillierungsgrad der Daten, die zwischen dem Server und dem Client ausgetauscht werden, angemessen ist, und sowohl die Netzwerkübertragung als auch das Rendering erheblich verbessern. Um noch weiter zu gehen, könnten Sie Ihr System mit Vektorkacheln und räumlicher Indizierung erweitern, wie in diesem Dokument beschrieben , aber ich bin nicht sicher, ob OpenLayer und Geoserver damit umgehen können ... noch!
Auf jeden Fall: Vergessen Sie GML.
quelle
Erstellen Sie mit Ihrem Python-Skript eine neue SLD-Datei und senden Sie diese mit Ihrer Anfrage an den WMS-Server.
Es ist ein Beispiel hier .
quelle
Ich bin schon zweimal einen ähnlichen Weg gegangen und clientseitiges Rendern für mehr als eine kleine Anzahl von Punkten oder wirklich einfachen Polygonen ist einfach keine gute Idee. Wenn Sie sich erst einmal an diese Architektur gebunden haben, ist es kostspielig, einen Back-out durchzuführen, und es ist wahrscheinlich, dass sich in einem Projekt die Anforderungen ändern oder das Datenvolumen zunimmt, wenn verschiedene Stakeholder / Supervisor feststellen, wozu Ihr System in der Lage ist. Der browserbasierte clientseitige Rendering-Ansatz lässt sich nicht skalieren.
Wenn Sie ein dynamisches Rendering wünschen, wende ich mich an @ iant. Ich zuvor beschrieben eine Reihe von Optionen für ein anderes , aber verwandtes Problem hier . Ich habe auch die Polygonverallgemeinerung verwendet, um das clientseitige Rendern zu unterstützen, und obwohl dies definitiv hilft, erzeugt es schwierigere Probleme, z.
Selbst wenn Sie mit einer bekannten Plattform arbeiten - Sie kennen beispielsweise die Hardware, die Browserversion und die Plugins aller Clients -, was unwahrscheinlich ist, wissen Sie nicht, unter welcher Art von Last diese Clients stehen. Diese Art von Ansatz erfordert, dass der Browser eine Menge CPU-Zeit erhält, um die Benutzererfahrung flüssig zu halten, und alles andere wird Ihre Benutzer ärgern.
quelle