Como muitos de vocês sabem, o GeoServer possui uma interface RESTful para interagir com seus dados. Se você estiver usando o REST via Python, há uma biblioteca padrão, mas não é bem documentada, porém existe uma biblioteca chamada gsconfig, criada pelos desenvolvedores do GeoServer, que simplifica o processo.
O relato abaixo foi descrito por Andrew Dennison do blog GAIA Resources, que utilizou recentemente essa biblioteca para publicar camadas do PostGIS no GeoServer. Vamos aos passos:
1. Instalar o gsconfig
Isso está bem explicado na documentação aqui.
2. Conectar no GeoServer
O primeiro passo depois de ter o gsconfig instalado é fazer uma conexão com sua instância do GeoServer
cat = Catalog('http://localhost:8080/geoserver/rest')
3. Criar um novo espaço de trabalho (workspace)
Agora crie um novo espaço de trabalho se você não tiver um já configurado
ws = cat.create_workspace('newWorkspaceName','http://example.com/testWorkspace')
4. Criar uma nova fonte de dados (Store) a partir do PostGIS
O próximo passo é criar uma nova fonte de dados apontando para um banco de dados PostGIS existente. Uma dica aqui é se a camada que você deseja publicar estiver em um esquema diferente de “público”, certifique-se de fornecer o esquema na conexão. Descobri que, quando não fornecia, o GeoServer não pegava a projeção da minha camada quando eu publicava.
ds = cat.create_datastore('newDatastoreName','newWorkspaceName') ds.connection_parameters.update(host='localhost', port='5432', database='postgis', user='postgres', passwd='password', dbtype='postgis', schema='postgis') cat.save(ds)
5. Publicar uma camada
Agora use o espaço de trabalho e a fonte de dados que você acabou de criar para publicar uma camada do PostGIS
ft = cat.publish_featuretype('newLayerName', ds, 'EPSG:4326', srs='EPSG:4326')
O primeiro código epsg é a projeção nativa da camada e o segundo é a projeção publicada. Eles não têm que ser o mesmo, mas neste caso a camada já está na projeção desejada.
6. Criar um novo estilo a partir de um SLD
Se você quiser aplicar um estilo diferente à sua camada publicada, você pode criar um novo estilo a partir de um SLD, caso contrário pule esta etapa e o GeoServer aplicará o estilo padrão.
with open(path_to_sld_file) as f: cat.create_style('newStyle', f.read(), overwrite=True)
*overwrite = true (sobrescreverá qualquer SLD existente com o mesmo nome).
7. Aplicar o novo estilo à camada
Aplique o seu estilo recém-criado à sua nova camada.
layer = cat.get_layer('newLayerName') layer.default_style = newStyle cat.save(layer)
O gsconfig é uma ótima biblioteca e com um pouco de esforço para descobrir isso, abstrai muito do trabalho envolvido em fazer solicitações REST para o GeoServer.
Fonte: Gaia Resources Blog