Programmazione di Geoserver 2.0.2 per aggiungere un archivio di dati raster e un layer senza l'interfaccia utente


15

Ho una directory di immagini raster che verranno aggiornate continuamente. Da queste immagini, sto realizzando Image Pyramids usando l'utility PyramidBuilder di Geotool. Ho bisogno di impostare un lavoro cron per aggiungere automaticamente datastore e layer raster a Geoserver senza usare l'interfaccia utente.

Dopo aver esaminato la sezione REST del manuale del Geoserver sono stato in grado di aggiungere il mio spazio di lavoro, "testWS", ma provare a creare un archivio dati ImagePyramid non ha funzionato.

Dato che ho accesso al datastore, ho ampliato l'esempio dello shapefile e ho provato a farlo

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"

Dove test_pyramid.pyr è la base del mio ImagePyramid in questa posizione.

Questo mi ha dato un errore di "Nessun archivio dati: test_pyramid"

Esiste un modo migliore per aggiungere un nuovo archivio dati e layer a Geoserver senza aggiungerli manualmente tramite l'interfaccia utente? Ho bisogno di aiuto per creare la corretta dichiarazione REST che aggiungerà un ImagePyramid esistente come archivio dati e layer.

C'è del codice Java che potrebbe farlo? Ho guardato le estensioni di Python Geoserver ma non avevano neanche questo.


Questo post di Jan mail-archive.com/geoserver-users@lists.sourceforge.net/… descrive quasi lo stesso identico problema. Nessuna risoluzione lì.
DaveParillo,

1
I documenti geoserver su docs.geoserver.org/stable/en/user/restconfig/… implicano che gli unici datastore che è possibile configurare utilizzando questo metodo sono un file nel caso di uno Shapefile, un database nel caso di PostGIS o un server nel caso di un servizio di funzionalità Web remoto, ma i documenti potrebbero essere semplicemente incompleti.
DaveParillo,

puoi aggiungere al server ciò che è effettivamente nel file che stai postando?
Ian Turton

Ma devi costruire un file XML che contenga tali informazioni.
Ian Turton

quello che sto cercando di pubblicare è il percorso dell'archivio dati che voglio creare da Geoserver. Questo percorso è un insieme esterno di file raster (imagepyramid) in una singola directory. Tutto quello che volevo è che Geoserver creasse il datastore e il layer per un imagepyramid in questa posizione (sullo stesso filesystem del geoserver.)
registrate il

Risposte:


20

È possibile creare un'area di lavoro, un archivio dati e un layer (coveragestore) per un GeoTiff con curl e xml dall'esterno dell'interfaccia utente in questo modo:

  1. Crea l'area di lavoro.

    curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \
         -d '<workspace><name>wsgeotiff</name></workspace>' \
         http://localhost:8080/geoserver/rest/workspaces
  2. Quindi creare l'archivio dati.

    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. Quindi crea il livello.

     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"

Al termine, si dispone di un archivio dati che punta all'immagine esterna "image_wgs84.tif" e di un livello WMS per visualizzare la copertura.

Quello che non so è se questa tecnica si tradurrà direttamente in una tecnica per la creazione di un archivio dati di tipo piramide di immagini o meno.

In bocca al lupo.


Ho lo stesso problema esatto della domanda sopra. Grazie per averlo messo bene, la maggior parte delle soluzioni là fuori sono confuse. Ho una domanda qui però. Nella tua risposta, come input devono essere fornite le Bounding Boxes del raster. Ora capisco che se sto inserendo la soluzione sopra in uno script, potrei usare gdalinfo per trovare il rettangolo di selezione. Ma questo è solo un lavoro aggiunto (analisi ecc.). La mia domanda è: possiamo fare in modo che il geoserver calcoli automaticamente i rettangoli? Sappiamo che può farlo, perché quando aggiungiamo un raster dall'interfaccia utente calcola Bounding Box!
Shaunak,

3
Sul mio GeoServer 2.2 non è necessario specificare esplicitamente la Bounding Box (e SRS ecc.). Li rileva automaticamente dal file al momento della creazione del layer (testato per GeoTIFF e ImageMosaic). È inoltre possibile impostare ?recalculate=nativebboxil ricalcolo del rettangolo di selezione nativo quando viene modificata la politica di proiezione o proiezione. Vedi docs.geoserver.org/stable/en/user/rest/api/…
xandriksson

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.