Programando o Geoserver 2.0.2 para adicionar um armazenamento e camada de dados raster sem a interface do usuário

15

Eu tenho um diretório de imagens rasterizadas que serão atualizadas continuamente. A partir dessas imagens, estou criando Pirâmides de Imagens usando o utilitário PyramidBuilder do Geotool. Preciso configurar um trabalho cron para adicionar automaticamente datastores e camadas raster ao Geoserver sem usar a interface do usuário.

Depois de examinar a seção REST do manual do Geoserver, pude adicionar minha área de trabalho, "testWS", mas tentar criar um armazenamento de dados ImagePyramid não funcionou.

Como tenho acesso ao armazenamento de dados, expandi o exemplo do shapefile e tentei

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"

Onde test_pyramid.pyr é a base do meu ImagePyramid neste local.

Isso me deu um erro de "Não existe esse armazenamento de dados: test_pyramid"

Existe uma maneira melhor de adicionar um novo armazenamento de dados e camada ao Geoserver sem adicionar manualmente cada um deles através da interface do usuário? Preciso de ajuda para elaborar a instrução REST adequada que adicionará um ImagePyramid existente como armazenamento de dados e camada.

Existe algum código Java que poderia fazer isso? Eu olhei para as extensões python do Geoserver, mas elas também não.

rbrister
fonte
Esta postagem de Jan mail-archive.com/[email protected]/… descreve quase exatamente o mesmo problema. Não há resolução lá.
21411 DaveParillo
1
Os documentos do geoserver em docs.geoserver.org/stable/en/user/restconfig/… implicam que os únicos datastores que você pode configurar usando esse método são um arquivo no caso de um Shapefile, um banco de dados no caso do PostGIS ou um servidor no caso de um serviço de recurso da Web remoto, mas os documentos podem estar incompletos.
21411 DaveParillo
você pode adicionar o que realmente está no arquivo que você está postando no servidor?
Ian Turton
Mas você precisa construir um arquivo XML que contenha essas informações.
Ian Turton
o que estou tentando postar é o caminho para o armazenamento de dados que quero que o Geoserver crie. Esse caminho é um conjunto externo de arquivos raster (imagepyramid) em um único diretório. Tudo o que é desejado para Geoserver para criar o armazenamento de dados e uma camada para ImagePyramid neste local (no mesmo sistema de ficheiros como geoserver.)
rbrister

Respostas:

20

Você pode criar um espaço de trabalho, armazenamento de dados e camada (coveragestore) para um GeoTiff com curl e xml de fora da interface do usuário da seguinte maneira:

  1. Crie o espaço de trabalho.

    curl -u admin:geoserver -v -XPOST -H 'Content-type: text/xml' \
         -d '<workspace><name>wsgeotiff</name></workspace>' \
         http://localhost:8080/geoserver/rest/workspaces
  2. Em seguida, crie o armazenamento de dados.

    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. Em seguida, crie a camada.

     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"

Quando tudo isso for feito, você terá um armazenamento de dados apontando para a imagem externa 'image_wgs84.tif' e uma camada WMS para exibir a cobertura.

O que não sei é se essa técnica se traduzirá diretamente em uma técnica para criar um armazenamento de dados do tipo pirâmide de imagem ou não.

Boa sorte.

DaveParillo
fonte
Eu tenho o mesmo problema exato que a pergunta acima. Obrigado por colocá-lo bem, a maioria das soluções disponíveis são confusas. Eu tenho uma pergunta aqui, no entanto. Na sua resposta, as caixas delimitadoras da varredura precisam ser fornecidas como entrada. Agora entendo que, se estiver colocando a solução acima em um script, eu poderia usar o gdalinfo para encontrar a caixa delimitadora. Mas isso acabou de adicionar trabalho (análise etc.). Minha pergunta é: podemos fazer com que o geoserver calcule as caixas delimitadoras automaticamente? Sabemos que pode fazê-lo, porque quando adicionamos uma varredura da interface do usuário, ela calcula a caixa delimitadora!
Shaunak 30/09/11
3
No meu GeoServer 2.2, você não precisa especificar explicitamente a caixa delimitadora (e o SRS etc.). Ele os detecta automaticamente do arquivo após a criação da camada (testado para GeoTIFF e ImageMosaic). Além disso, você pode definir ?recalculate=nativebboxpara que a caixa delimitadora nativa seja recalculada quando a projeção ou a política de projeção for alterada. Veja docs.geoserver.org/stable/en/user/rest/api/…
xandriksson