Programmieren Sie Geoserver 2.0.2 so, dass ein Raster-Datenspeicher und ein Layer ohne die Benutzeroberfläche hinzugefügt werden

15

Ich habe ein Verzeichnis mit Rasterbildern, das ständig aktualisiert wird. Aus diesen Bildern erstelle ich Image Pyramids mit dem Geotool-Dienstprogramm PyramidBuilder. Ich muss einen Cron-Job einrichten, um Geoserver automatisch Raster-Datenspeicher und Layer hinzuzufügen, ohne die Benutzeroberfläche zu verwenden.

Nachdem ich mir den REST-Abschnitt des Geoserver- Handbuchs angesehen hatte, konnte ich meinen Arbeitsbereich "testWS" hinzufügen, aber der Versuch, einen ImagePyramid-Datenspeicher zu erstellen, funktionierte nicht.

Da ich Zugriff auf den Datenspeicher habe, habe ich das Shapefile-Beispiel erweitert und es versucht

curl -u admin:geoserver -XPUT -H 'Content-type: text/plain' \ 
   -d '/opt/geoserver_data_dir/2.0.2/data/test_pyramid.pyr' \
    "http://localhost:8080/geoserver/rest/workspaces/testWS/datastores/test_pyramid.pyr/external.imagepyramid?configure=all"

Wobei test_pyramid.pyr die Basis meiner ImagePyramide an dieser Stelle ist.

Dies gab mir einen Fehler "Kein solcher Datenspeicher: test_pyramid"

Gibt es eine bessere Möglichkeit, Geoserver einen neuen Datenspeicher und einen neuen Layer hinzuzufügen, ohne jeden manuell über die Benutzeroberfläche hinzufügen zu müssen? Ich benötige Hilfe beim Erstellen der richtigen REST-Anweisung, mit der eine vorhandene ImagePyramid als Datenspeicher und Ebene hinzugefügt wird.

Gibt es Java-Code, der dies tun könnte? Ich habe mir die Geoserver-Python-Erweiterungen angesehen, aber diese hatten sie auch nicht.

rbrister
quelle
Dieser Beitrag von Jan mail-archive.com/[email protected]/… beschreibt fast das gleiche Problem. Keine Auflösung da.
DaveParillo
1
Die Geoserver-Dokumente unter docs.geoserver.org/stable/en/user/restconfig/… implizieren, dass die einzigen Datenspeicher, die Sie mit dieser Methode konfigurieren können, eine Datei im Fall eines Shapefiles, eine Datenbank im Fall von PostGIS oder eine Server im Fall eines Remote-Web-Feature-Service, aber die Dokumente können einfach unvollständig sein.
DaveParillo
Können Sie hinzufügen, was sich tatsächlich in der Datei befindet, die Sie auf dem Server veröffentlichen?
Ian Turton
Sie müssen jedoch eine XML-Datei erstellen, die diese Informationen enthält.
Ian Turton
Was ich versuche zu posten, ist der Pfad zu dem Datenspeicher, den Geoserver erstellen soll. Dieser Pfad ist eine externe Gruppe von Rasterdateien (imagepyramid) in einem einzelnen Verzeichnis. Alles, was ich wollte, ist, dass Geoserver den Datenspeicher und die Ebene für eine Imagepyramide an diesem Ort erstellt (auf demselben Dateisystem wie Geoserver.)
Brister

Antworten:

20

Sie können einen Arbeitsbereich, einen Datenspeicher und einen Layer (Coveragestore) für ein GeoTiff mit Curl und XML von außerhalb der Benutzeroberfläche wie folgt erstellen:

  1. Erstellen Sie den Arbeitsbereich.

    curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \
         -d '<workspace><name>wsgeotiff</name></workspace>' \
         http://localhost:8080/geoserver/rest/workspaces
    
  2. Erstellen Sie dann den Datenspeicher.

    curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \
         -d '<coverageStore>
             <name>wsgeotiff_imageGeoTiffWGS84_1298678792699</name>
             <workspace>wsgeotiff</workspace>
             <enabled>true</enabled>
             <type>GeoTIFF</type>
             <url>/home/gis/image_wgs84.tif</url>
             </coverageStore>' \
         "http://localhost:8080/geoserver/rest/workspaces/wsgeotiff/coveragestores?configure=all"
    
  3. Dann erstelle die Ebene.

     curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \
          -d '<coverage>
              <name>imageGeoTiffWGS84</name>
              <title>imageGeoTiffWGS84</title>
              <nativeCRS>GEOGCS[&quot;WGS 84&quot;,DATUM[&quot;World Geodetic System 1984&quot;,SPHEROID[&quot;WGS 84&quot;,6378137.0, 298.257223563, AUTHORITY[&quot;EPSG&quot;,&quot;7030&quot;]],AUTHORITY[&quot;EPSG&quot;,&quot;6326&quot;]],PRIMEM[&quot;Greenwich&quot;, 0.0, AUTHORITY[&quot;EPSG&quot;,&quot;8901&quot;]],UNIT[&quot;degree&quot;, 0.017453292519943295],AXIS[&quot;Geodetic longitude&quot;, EAST],AXIS[&quot;Geodetic latitude&quot;, NORTH],AUTHORITY[&quot;EPSG&quot;,&quot;4326&quot;]]</nativeCRS>
              <srs>EPSG:4326</srs>
              <latLonBoundingBox><minx>-179.958</minx><maxx>-105.002</maxx><miny>-65.007</miny><maxy>65.007</maxy><crs>EPSG:4326</crs></latLonBoundingBox>
              </coverage>' \
          "http://localhost:8080/geoserver/rest/workspaces/wsgeotiff/coveragestores/wsgeotiff_imageGeoTiffWGS84_1298678792699/coverages"
    

Anschließend haben Sie einen Datenspeicher, der auf das externe Image 'image_wgs84.tif' verweist, und eine WMS-Ebene, in der die Abdeckung angezeigt wird.

Was ich nicht weiß, ist, ob diese Technik direkt in eine Technik zum Erstellen eines Datenspeichers vom Typ einer Bildpyramide übersetzt wird oder nicht.

Viel Glück.

DaveParillo
quelle
Ich habe genau das gleiche Problem wie die Frage oben. Vielen Dank für die nette Formulierung, die meisten Lösungen sind verwirrend. Ich habe hier jedoch eine Frage. In Ihrer Antwort müssen die Begrenzungsrahmen des Rasters als Eingabe angegeben werden. Jetzt verstehe ich, dass ich gdalinfo verwenden könnte, um den Begrenzungsrahmen zu finden, wenn ich die obige Lösung in ein Skript setze. Aber das ist nur zusätzliche Arbeit (Parsen usw.). Meine Frage ist, können wir den Geoserver veranlassen, die Begrenzungsrahmen automatisch zu berechnen? Wir wissen, dass dies möglich ist, da beim Hinzufügen eines Rasters aus der Benutzeroberfläche die Begrenzungslinie berechnet wird!
Shaunak
3
Auf meinem GeoServer 2.2 müssen Sie die Bounding Box (und SRS usw.) nicht explizit angeben. Sie werden beim Erstellen des Layers automatisch aus der Datei erkannt (getestet für GeoTIFF und ImageMosaic). Sie können außerdem festlegen ?recalculate=nativebbox, dass der native Begrenzungsrahmen neu berechnet wird, wenn die Projektion oder die Projektionsrichtlinie geändert wird. Siehe docs.geoserver.org/stable/en/user/rest/api/…
xandriksson