Programación de Geoserver 2.0.2 para agregar un almacén de datos ráster y una capa sin la interfaz de usuario

15

Tengo un directorio de imágenes ráster que se actualizará continuamente. A partir de estas imágenes, estoy creando pirámides de imágenes utilizando la utilidad PyramidBuilder de Geotool. Necesito configurar un trabajo cron para agregar automáticamente almacenes de datos ráster y capas a Geoserver sin usar la interfaz de usuario.

Después de mirar la sección REST del manual de Geoserver pude agregar mi espacio de trabajo, "testWS", pero intentar crear un almacén de datos ImagePyramid no funcionó.

Como tengo acceso al almacén de datos, amplié el ejemplo del archivo de forma e intenté

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"

Donde test_pyramid.pyr es la base de mi ImagePyramid en esta ubicación.

Esto me dio un error de "No existe ese almacén de datos: test_pyramid"

¿Hay una mejor manera de agregar un nuevo almacén de datos y una capa a Geoserver sin agregarlos manualmente a través de la interfaz de usuario? Necesito ayuda para elaborar la declaración REST adecuada que agregará una ImagePyramid existente como un almacén de datos y una capa.

¿Hay algún código Java que pueda hacer esto? Miré las extensiones de Python de Geoserver pero tampoco tenían esto.

rbrister
fuente
Esta publicación de Jan mail-archive.com/[email protected]/… describe casi exactamente el mismo problema. No hay resolución allí.
DaveParillo
1
Los documentos de geoserver en docs.geoserver.org/stable/en/user/restconfig/… implican que los únicos almacenes de datos que puede configurar con este método son un archivo en el caso de un Shapefile, una base de datos en el caso de PostGIS o un servidor en el caso de un servicio de características web remoto, pero los documentos pueden simplemente estar incompletos.
DaveParillo
¿Puedes agregar lo que realmente está en el archivo que estás PUBLICANDO en el servidor?
Ian Turton
Pero debe construir un archivo XML que contenga esa información.
Ian Turton
lo que intento publicar es la ruta al almacén de datos que quiero que Geoserver cree. Esta ruta es un conjunto externo de archivos ráster (imagepyramid) en un solo directorio. Todo lo que quería era que Geoserver creara el almacén de datos y la capa para una pirámide de imagen en esta ubicación (en el mismo sistema de archivos que geoserver)
Rbrister

Respuestas:

20

Puede crear un espacio de trabajo, un almacén de datos y una capa (almacén de coberturas) para un GeoTiff con curl y xml desde fuera de la interfaz de usuario de esta manera:

  1. Crea el espacio de trabajo.

    curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \
         -d '<workspace><name>wsgeotiff</name></workspace>' \
         http://localhost:8080/geoserver/rest/workspaces
  2. Luego crea el almacén de datos.

    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. Luego crea la capa.

     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"

Cuando todo esto está hecho, tiene un almacén de datos que apunta a la imagen externa 'image_wgs84.tif' y una capa WMS para mostrar la cobertura.

Lo que no sé es si esta técnica se traducirá directamente en una técnica para crear un almacén de datos de tipo pirámide de imagen o no.

Buena suerte.

DaveParillo
fuente
Tengo el mismo problema exacto que la pregunta anterior. Gracias por decirlo bien, la mayoría de las soluciones son confusas. Sin embargo, tengo una pregunta aquí. En su respuesta, los cuadros delimitadores del ráster deben proporcionarse como entrada. Ahora entiendo que si estoy poniendo la solución anterior en un script, podría usar gdalinfo para encontrar el cuadro delimitador. Pero eso es solo trabajo agregado (análisis, etc.). Mi pregunta es ¿podemos hacer que geoserver calcule los cuadros delimitadores automáticamente? Sabemos que puede hacerlo, porque cuando agregamos un ráster desde la interfaz de usuario, ¡calcula Bounding Box!
Shaunak
33
En mi GeoServer 2.2 no es necesario que especifique el Bounding Box (y SRS, etc.) explícitamente. Los detecta automáticamente desde el archivo al crear la capa (probado para GeoTIFF e ImageMosaic). También puede establecer ?recalculate=nativebboxque se vuelva a calcular el cuadro delimitador nativo cuando se cambia la proyección o la política de proyección. Ver docs.geoserver.org/stable/en/user/rest/api/…
xandriksson el