Programowanie Geoserver 2.0.2, aby dodać magazyn danych rastrowych i warstwę bez interfejsu użytkownika

15

Mam katalog zdjęć rastrowych, który będzie stale aktualizowany. Na podstawie tych zdjęć tworzę Piramidy obrazu za pomocą narzędzia PyramidBuilder Geotool. Muszę skonfigurować zadanie CRON, aby automatycznie dodawać magazyny danych rastrowych i warstwy do Geoservera bez użycia interfejsu użytkownika.

Po przejrzeniu sekcji REST instrukcji Geoserver udało mi się dodać mój obszar roboczy „testWS”, ale próba utworzenia magazynu danych ImagePyramid nie zadziałała.

Ponieważ mam dostęp do magazynu danych, rozwinąłem przykład pliku kształtu i próbowałem

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"

Gdzie test_pyramid.pyr jest bazą mojego ImagePyramid w tej lokalizacji.

To dało mi błąd „Brak takiego magazynu danych: test_pyramid”

Czy istnieje lepszy sposób na dodanie nowego magazynu danych i warstwy do Geoserver bez ręcznego dodawania każdego z nich za pomocą interfejsu użytkownika? Potrzebuję pomocy w tworzeniu poprawnej instrukcji REST, która doda istniejący ImagePyramid jako magazyn danych i warstwę.

Czy jest jakiś kod Java, który mógłby to zrobić? Patrzyłem na rozszerzenia Pythona dla Geoserver, ale one też tego nie miały.

rbrister
źródło
Ten post od Jan mail-archive.com/[email protected]/… opisuje prawie ten sam problem. Brak rozdzielczości.
DaveParillo
1
Dokumenty geoserver na docs.geoserver.org/stable/en/user/restconfig/… sugerują, że jedynymi magazynami danych, które można skonfigurować przy użyciu tej metody, są pliki w przypadku pliku Shapefile, baza danych w przypadku PostGIS lub serwer w przypadku zdalnej usługi funkcji sieci Web, ale dokumenty mogą być po prostu niekompletne.
DaveParillo
czy możesz dodać to, co faktycznie znajduje się w pliku, który wysyłasz na serwer?
Ian Turton
Ale musisz zbudować plik XML, który zawiera te informacje.
Ian Turton
próbuję opublikować ścieżkę do magazynu danych, który chcę utworzyć Geoserver. Ta ścieżka jest zewnętrznym zestawem plików rastrowych (imagepyramid) w jednym katalogu. Chciałem tylko, aby Geoserver utworzył magazyn danych i warstwę dla imagepyramid w tym miejscu (w tym samym systemie plików co geoserver).
rbrister

Odpowiedzi:

20

Możesz utworzyć obszar roboczy, magazyn danych i warstwę (coveragestore) dla GeoTiff z zawinięciem i xml spoza interfejsu użytkownika w następujący sposób:

  1. Utwórz przestrzeń roboczą.

    curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \
         -d '<workspace><name>wsgeotiff</name></workspace>' \
         http://localhost:8080/geoserver/rest/workspaces
  2. Następnie utwórz magazyn danych.

    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. Następnie utwórz warstwę.

     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"

Po wykonaniu wszystkich tych czynności masz magazyn danych wskazujący na obraz zewnętrzny „image_wgs84.tif” i warstwę WMS, w której ma być wyświetlany zasięg.

Nie wiem, czy ta technika przełoży się bezpośrednio na technikę tworzenia magazynu danych typu piramida obrazowa, czy nie.

Powodzenia.

DaveParillo
źródło
Mam dokładnie taki sam problem jak powyższe pytanie. Dzięki za ładną prezentację, większość dostępnych rozwiązań jest myląca. Mam tu jednak jedno pytanie. W odpowiedzi należy podać pola ograniczające rastra jako dane wejściowe. Teraz rozumiem, że jeśli umieszczam powyższe rozwiązanie w skrypcie, mogę użyć gdalinfo, aby znaleźć obwiednię. Ale to właśnie dodało pracę (parsowanie itp.). Moje pytanie brzmi: czy możemy zmusić geoserver do automatycznego obliczania obwiedni? Wiemy, że może to zrobić, ponieważ po dodaniu rastra z interfejsu użytkownika oblicza on pole ograniczające!
Shaunak
3
W moim GeoServer 2.2 nie musisz jawnie określać Bounding Box (i SRS itp.). Wykrywa je automatycznie z pliku po utworzeniu warstwy (testowane pod kątem GeoTIFF i ImageMosaic). Można dodatkowo ustawić ?recalculate=nativebboxponowne obliczanie natywnej ramki granicznej po zmianie zasady rzutowania lub zasady rzutowania. Zobacz docs.geoserver.org/stable/en/user/rest/api/…
xandriksson