Memprogram Geoserver 2.0.2 untuk menambahkan penyimpanan data raster dan lapisan tanpa UI

15

Saya memiliki direktori citra raster yang akan diperbarui terus menerus. Dari pencitraan ini, saya membuat Piramida Gambar menggunakan utilitas PyramidBuilder Geotool. Saya perlu mengatur tugas cron untuk secara otomatis menambahkan data raster dan lapisan ke Geoserver tanpa menggunakan UI.

Setelah melihat bagian REST dari manual Geoserver, saya dapat menambahkan ruang kerja saya, "testWS", tetapi mencoba membuat datastore ImagePyramid tidak berfungsi.

Karena saya memiliki akses ke datastore, saya memperluas contoh shapefile dan mencoba

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"

Di mana test_pyramid.pyr adalah basis dari ImagePyramid saya di lokasi ini.

Ini memberi saya kesalahan "Tidak ada datastore: test_pyramid"

Apakah ada cara yang lebih baik untuk menambahkan datastore dan layer baru ke Geoserver tanpa secara manual menambahkan masing-masing melalui UI? Saya perlu bantuan dalam menyusun pernyataan REST yang tepat yang akan menambahkan ImagePyramid yang sudah ada sebagai datastore dan layer.

Apakah ada kode Java yang bisa melakukan ini? Saya melihat ekstensi python Geoserver tetapi mereka tidak memiliki ini juga.

rbrister
sumber
Posting ini dari Jan mail-archive.com/[email protected]/... menjelaskan masalah yang hampir sama persis. Tidak ada resolusi di sana.
DaveParillo
1
Dokumen geoserver di docs.geoserver.org/stable/en/user/restconfig/… menyiratkan bahwa satu-satunya datastore yang dapat Anda konfigurasi menggunakan metode ini adalah file dalam kasus Shapefile, database dalam kasus PostGIS, atau server dalam hal Layanan Fitur Web jarak jauh, tetapi dokumen mungkin tidak lengkap.
DaveParillo
dapatkah Anda menambahkan apa yang sebenarnya ada dalam file yang Anda POSTing ke server?
Ian Turton
Tetapi Anda harus membuat file XML yang berisi informasi itu.
Ian Turton
apa yang saya coba posting adalah jalur ke datastore yang saya ingin Geoserver buat. Path ini adalah set eksternal file raster (imagepyramid) dalam satu direktori. Yang saya inginkan adalah Geoserver membuat datastore dan layer untuk imagepyramid di lokasi ini (pada sistem file yang sama dengan geoserver.)
rbrister

Jawaban:

20

Anda bisa membuat ruang kerja, datastore dan layer (coveragestore) untuk GeoTiff dengan curl dan xml dari luar UI seperti:

  1. Buat ruang kerja.

    curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \
         -d '<workspace><name>wsgeotiff</name></workspace>' \
         http://localhost:8080/geoserver/rest/workspaces
  2. Kemudian buat datastore.

    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. Kemudian buat Layer.

     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"

Ketika semua ini dilakukan, Anda memiliki datastore yang menunjuk ke gambar eksternal 'image_wgs84.tif' dan lapisan WMS untuk menampilkan cakupan di.

Apa yang saya tidak tahu adalah apakah teknik ini akan menerjemahkan langsung menjadi teknik untuk membuat datastore tipe piramida gambar atau tidak.

Semoga berhasil.

DaveParillo
sumber
Saya memiliki masalah yang sama persis seperti pertanyaan di atas. Terima kasih telah menjelaskannya dengan baik, sebagian besar solusi di luar sana membingungkan. Saya punya satu pertanyaan di sini. Dalam jawaban Anda, Bounding Boxes dari raster perlu diberikan sebagai input. Sekarang saya mengerti bahwa jika saya meletakkan solusi di atas dalam sebuah skrip, saya bisa menggunakan gdalinfo untuk menemukan kotak pembatas. Tapi itu baru saja menambahkan pekerjaan (parsing dll). Pertanyaan saya adalah dapatkah kita membuat geoserver menghitung kotak pembatas secara otomatis? Kami tahu itu dapat melakukannya, karena ketika kami menambahkan raster dari UI, ia menghitung Bounding Box!
Shaunak
3
Di GeoServer 2.2 saya, Anda tidak perlu menentukan Bounding Box (dan SRS dll) secara eksplisit. Ini mendeteksi mereka secara otomatis dari file pada pembuatan lapisan (diuji untuk GeoTIFF dan ImageMosaic). Anda juga dapat mengatur ?recalculate=nativebboxagar kotak pembatas asli dihitung ulang saat kebijakan proyeksi atau proyeksi diubah. Lihat docs.geoserver.org/stable/en/user/rest/api/…
xandriksson