Ich möchte den GeoServer WMS-Server für das benutzerdefinierte Styling verwenden. Angenommen, ich habe einen Bereich als Polygon in einem Shapefile, aber ich habe die Temperatur dieses Bereichs nicht als Attribut. Von einem Webdienst sammle ich Temperaturpunkte in diesem Bereich. Jetzt möchte ich, dass GeoServer diesen Bereich gemäß diesen dynamischen Temperaturpunkten einfärbt.
Hier ist ein Beispiel:
Wenn es möglich ist, möchte ich diese Ränder sogar auf dem Bild platzieren und einige Erklärungen zu Farben auf der rechten Seite. Wie kann ich diese Temperaturpunkte an ein GeoServer WMS senden? Und kann ich gemäß diesen dynamischen Parametern eine benutzerdefinierte Färbung vornehmen?
Ich weiß nicht, wie ich diese Punktdaten in Flächenfarben konvertieren soll.
Meine nächste Frage ist ähnlich, aber ohne Punkte kann ich ein Polygon mit dynamischen Attributen einfärben, das sich nicht im Shapefile befindet.
Hier ist ein Beispiel, in dem ich diese Polygone nach ihrem Produkttyp einfärben möchte, aber als frühere Frage werden diese Produkttypen dynamisch erfasst.
Ich hoffe das ist möglich.
quelle
Antworten:
Zu Ihrer zweiten Frage :
Ein SLD kann dynamisch erstellt werden, dh es kann Karten mit dynamischen Daten formatieren. Damit dies funktioniert, müssen Sie die IDs der Polygone kennen, die Sie formatieren möchten, und Sie müssen Ihren Webdienst ändern / erweitern.
Lassen Sie Ihren Webdienst SLDs im laufenden Betrieb generieren, anstatt nur Daten zurückzugeben. Dies ist mit .NET, Java, PHP usw. recht einfach. Das von Ihnen generierte SLD enthält eine Regel für jedes Farbband, das Sie anzeigen möchten. Jede Regel identifiziert die Polygone, für die Farbe gilt, anhand ihrer ID. Der Filterblock jeder Regel enthält
PropertyIsEqualTo 1 OR PropertyIsEqualTo 2 OR ...
. Jede Regel formatiert ihre Polygone mit der Farbe, die Sie zur Darstellung des Werts ausgewählt haben. Sie haben dann zwei Möglichkeiten, GeoServer anzuweisen, Ihr dynamisches SLD zu verwenden.'http://geoserver/wms?request=GetMap...&sld=' + encodeURIComponent('http://web-service/generateSLD?and=any-parameters-that-influence-sld-generation')
. Wenn GeoServer die WMS-Anforderung erhält, werden die Parameter dekodiert und diese URL nach dem SLD abgefragt. Aus Sicht von GeoServer unterscheidet sich dies nicht von der Abfrage eines statischen SLD auf einem Dateiserver.Beide Ansätze können mit einem statischen SLD getestet werden, das Sie zum Testen erstellen. Sie wissen also, wie erfolgreich dies ist, bevor Sie sich um Ihren Webdienst bemühen. Beide Ansätze können verwendet werden, um GeoServer nach der Legendengrafik zu fragen, die dann dieselben Regeln darstellt (wenn Sie jedoch Option 1 verwenden, haben sich die zum Generieren Ihres SLD verwendeten Daten möglicherweise nach dem Generieren der Karte geändert).
Ich denke, dies ist Ihre beste Option für Frage 2.
Zu Ihrer ersten Frage :
Stellen die Temperaturpunkte immer die gleichen Orte dar? Wenn ja, können Sie im Voraus herausfinden, in welche Polygone diese Temperaturpunkte fallen? Wenn ja, können Sie den oben beschriebenen Ansatz einfach wiederverwenden, wobei Ihr SLD-Generierungsskript Punkte in Polygon-IDs übersetzt.
BEARBEITEN Ich habe gerade gesehen, dass dies in einer anderen Frage erwähnt wurde: http://pypi.python.org/pypi/python-sld/
quelle
Die kurze Antwort lautet: Ja, das ist sehr gut möglich! Es gibt tatsächlich eine Vielzahl von Möglichkeiten, wie Sie dieses Problem angehen können. Hier ist eine solche Möglichkeit, die ich mir vorstellen kann.
Ihre Frage besteht aus 2 Teilen.
1) Stellen Sie statische UND dynamische Daten aus externen Quellen in GeoServer dar.
Erstellen Sie eine Ebenengruppe mit der Bezeichnung "Regionale Karte" mit 2 Ebenen. Layer 1 (statisch) ist die "Regionale Karte - wird aus Ihrer schreibgeschützten Datenbank bereitgestellt, oder Shapefile Layer 2 (dynamisch) ist das" Wetter "- das dynamische Daten durch WMS-Kaskadierung bereitstellen kann. Die WMS-Kaskaden-URL könnte tatsächlich zurückgeschleift werden Sie können Temperatur- oder andere dynamische Attribute bereitstellen, indem Sie Remotedienste mit einem beliebigen Protokoll aufrufen - REST, SOAP, TCP usw.
Auf diese Weise können Sie den Layern in Zukunft dynamisch Attribute hinzufügen, ohne der Datenbank etwas hinzuzufügen.
2) Führen Sie ein benutzerdefiniertes Styling durch. ** Verwenden Sie hier am besten ** Style Layer Descriptor (SLD) . Es gibt viele Dokumentationen zum Stylen mit SLD. Es ist sehr mächtig! Sie können das Styling mithilfe von Farben, Zoomstufen und Werteschwellen (> 40C ist rot,> 35 ist orange) steuern und Regeln festlegen, die auf Werten aus mehreren Attributen und Beschriftungen basieren. Das Styling ist für die meisten Geometrien verfügbar - Punkt, Linie, Fläche usw. Sie können Style-Editoren wie Atlas oder den mit OpenGeo - GeoExplorer gelieferten Editor verwenden, um verschiedene Datenbedingungen zu testen.
Das Schöne an diesem Ansatz ist, dass Sie das Styling von Layer1 und Layer2 unabhängig voneinander steuern können. Sie können Legenden in Ihrer Benutzeroberfläche (JavaScript) außerhalb von GeoServer erstellen. GeoServer führt alle Stilregeln zusammen, um das richtige Overlay zu erstellen. Abhängig von der Leistung, die Sie von Ihrer Ebene und Ihrem Styling erhalten, können Sie auch eine Kachel-Caching-Lösung wie GeoWebCache oder einen HTTP-Cache wie Varnish hinzufügen.
Prost,
Ramesh
quelle