Kann ich auf GeoServer ein benutzerdefiniertes Styling durchführen?

8

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:

Temperaturkarte

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.

Geben Sie hier die Bildbeschreibung ein

Ich hoffe das ist möglich.

Bahadir
quelle
Die zweite Option würde funktionieren, wenn Sie die Polygone korrekt zuordnen - dies sollte in der Datenbank erfolgen. Die Verwendung eines SLD (Styled Layer Descriptor) wie im Beispiel hier - blog.geoserver.org/2010/04/09/sld-cookbook
Mapperz
Das Problem ist, ich habe keinen Schreibzugriff auf DB. Daher kann ich der Tabelle kein neues Attribut für Produkttypen hinzufügen. Tatsächlich gibt es viele Attribute, die ich dynamisch sammle und die nicht auf der Originaltabelle stehen. Das Erstellen einer neuen Spalte für jede von ihnen ist also keine Option, denke ich. Gibt es einen dynamischen Weg? oder wenn dies nicht möglich ist, muss ich für diesen Vorgang externe Bibliotheken verwenden? wie sharpmap oder etc?
Bahadir
haben eine Staging-Tabelle, auf die Sie Lese- / Schreibzugriff haben. Wenn Sie keine eigenen Daten erstellen (Postgis / Postgres empfohlen), haben Sie die Kontrolle.
Mapperz

Antworten:

4

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.

  1. Wenn GeoServer über HTTP-Zugriff auf Ihren Webdienst verfügt, können Sie beispielsweise eine verschlüsselte URL (JS) übergeben '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.
  2. Wenn GeoServer nicht auf Ihren Webdienst zugreifen kann, muss Ihr Client zuerst den Webdienst nach dem dynamischen SLD fragen und dann das SLD im Parameter sld_body der WMS-Anforderung an GeoServer übergeben. Beachten Sie die von Ihrem Client (z. B. einem Browser) oder Ihrem Webserver auferlegten Beschränkungen der URL-Länge

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/

Tomfumb
quelle
Danke, und für meine erste Frage habe ich das Acid Maps Plugin für Geoserver herausgefunden. Hast du irgendwelche Erfahrungen mit diesem Plugin?
Bahadir
Leider nein, aber es heißt "Sie können eine WMS-Punktebene verwenden, um eine AMS-Karte zu generieren". Dies sagt mir, dass Sie nicht nur ein Plugin auf GeoServer installieren müssen, sondern auch GeoServer Zugriff auf Ihre Punktedaten benötigt, um es als Layer bereitzustellen. Aufgrund Ihrer Frage habe ich angenommen, dass Sie die GeoServer-Konfiguration nicht ändern können.
Tomfumb
Eigentlich habe ich keinen Zugriff auf die zugrunde liegende Datenbank. Ich kann die Geoserver-Konfiguration ändern. Aber selbst mit Säurekarten muss ich db wohl eine Tabelle für Punktedaten hinzufügen. Noch kein dynamischer Weg
Bahadir
Sie haben zwar eine andere Option, diese ist jedoch möglicherweise nicht einfach. Wenn Sie GeoServer konfigurieren können, können Sie einen neuen Speicher erstellen, der aus WFS liest. Dies setzt wiederum voraus, dass GeoServer über HTTP-Zugriff auf Ihren Webdienst verfügt. Sie können dann jedoch Ihr eigenes WFS bereitstellen, das Ihre Datenpunkte darstellt. Abhängig von der Anzahl der Punkte, die übertragen werden müssen, kann dies sehr langsam sein. Auch wenn Sie keinen Kartenserver an Ihrer Seite haben, kann dies bedeuten, dass Sie GML-Antworten manuell codieren, was nicht angenehm ist.
Tomfumb
und was ist, wenn ich auf die Datenbank zugreifen kann, muss ich Daten von Webdiensten sammeln, in die Datenbank einfügen und den Geoserver dazu bringen, neu eingefügte Daten aus der Datenbank zu zeichnen?
Bahadir
1

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

Ramesh Elaiyavalli
quelle
Danke, aber ich habe keine Chance, neue Tabellen oder Ebenen in Geoserver zu erstellen.
Bahadir