{"id":8128,"date":"2019-04-10T07:30:32","date_gmt":"2019-04-10T10:30:32","guid":{"rendered":"http:\/\/www.fernandoquadro.com.br\/html\/?p=8128"},"modified":"2019-04-08T16:07:43","modified_gmt":"2019-04-08T19:07:43","slug":"usando-a-api-rest-do-geoserver-com-python","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2019\/04\/10\/usando-a-api-rest-do-geoserver-com-python\/","title":{"rendered":"Usando a API REST do GeoServer com Python"},"content":{"rendered":"<p>Como muitos de voc\u00eas sabem, o GeoServer possui uma <a href=\"http:\/\/www.fernandoquadro.com.br\/html\/2016\/01\/15\/configurando-o-geoserver-via-rest-api\/\" rel=\"noopener\" target=\"_blank\">interface RESTful<\/a> para interagir com seus dados. Se voc\u00ea estiver usando o REST via Python, h\u00e1 uma biblioteca padr\u00e3o, mas n\u00e3o \u00e9 bem documentada, por\u00e9m existe uma biblioteca chamada <a href=\"https:\/\/github.com\/boundlessgeo\/gsconfig\" rel=\"noopener\" target=\"_blank\">gsconfig<\/a>, criada pelos desenvolvedores do GeoServer, que simplifica o processo.<\/p>\n<p>O relato abaixo foi descrito por <a href=\"https:\/\/www.gaiaresources.com.au\/geoserver-rest-python\/\" rel=\"noopener\" target=\"_blank\">Andrew Dennison do blog GAIA Resources<\/a>, que utilizou recentemente essa biblioteca para publicar camadas do PostGIS no GeoServer. Vamos aos passos:<\/p>\n<p><strong>1. Instalar o gsconfig<\/strong><\/p>\n<p>Isso est\u00e1 bem explicado na documenta\u00e7\u00e3o <a href=\"https:\/\/github.com\/boundlessgeo\/gsconfig#installing\" rel=\"noopener\" target=\"_blank\">aqui<\/a>.<\/p>\n<p><strong>2. Conectar no GeoServer<\/strong><\/p>\n<p>O primeiro passo depois de ter o gsconfig instalado \u00e9 fazer uma conex\u00e3o com sua inst\u00e2ncia do GeoServer<\/p>\n<pre>\r\ncat = Catalog('http:\/\/localhost:8080\/geoserver\/rest')\r\n<\/pre>\n<p><strong>3. Criar um novo espa\u00e7o de trabalho (workspace)<\/strong><\/p>\n<p>Agora crie um novo espa\u00e7o de trabalho se voc\u00ea n\u00e3o tiver um j\u00e1 configurado<\/p>\n<pre>\r\nws = cat.create_workspace('newWorkspaceName','http:\/\/example.com\/testWorkspace')\r\n<\/pre>\n<p><strong>4. Criar uma nova fonte de dados (Store) a partir do PostGIS<\/strong><\/p>\n<p>O pr\u00f3ximo passo \u00e9 criar uma nova fonte de dados apontando para um banco de dados PostGIS existente. Uma dica aqui \u00e9 se a camada que voc\u00ea deseja publicar estiver em um esquema diferente de &#8220;p\u00fablico&#8221;, certifique-se de fornecer o esquema na conex\u00e3o. Descobri que, quando n\u00e3o fornecia, o GeoServer n\u00e3o pegava a proje\u00e7\u00e3o da minha camada quando eu publicava.<\/p>\n<pre>\r\nds = cat.create_datastore('newDatastoreName','newWorkspaceName')\r\nds.connection_parameters.update(host='localhost', port='5432', database='postgis', user='postgres', passwd='password', dbtype='postgis', schema='postgis')\r\ncat.save(ds)\r\n<\/pre>\n<p><strong>5. Publicar uma camada <\/strong><\/p>\n<p>Agora use o espa\u00e7o de trabalho e a fonte de dados que voc\u00ea acabou de criar para publicar uma camada do PostGIS<\/p>\n<pre>\r\nft = cat.publish_featuretype('newLayerName', ds, 'EPSG:4326', srs='EPSG:4326')\r\n<\/pre>\n<p>O primeiro c\u00f3digo epsg \u00e9 a proje\u00e7\u00e3o nativa da camada e o segundo \u00e9 a proje\u00e7\u00e3o publicada. Eles n\u00e3o t\u00eam que ser o mesmo, mas neste caso a camada j\u00e1 est\u00e1 na proje\u00e7\u00e3o desejada.<\/p>\n<p><strong>6. Criar um novo estilo a partir de um SLD<\/strong><\/p>\n<p>Se voc\u00ea quiser aplicar um estilo diferente \u00e0 sua camada publicada, voc\u00ea pode criar um novo estilo a partir de um SLD, caso contr\u00e1rio pule esta etapa e o GeoServer aplicar\u00e1 o estilo padr\u00e3o.<\/p>\n<pre>\r\nwith open(path_to_sld_file) as f:\r\n   cat.create_style('newStyle', f.read(), overwrite=True)\r\n<\/pre>\n<p>*overwrite = true (sobrescrever\u00e1 qualquer SLD existente com o mesmo nome).<\/p>\n<p><strong>7. Aplicar o novo estilo \u00e0 camada<\/strong><\/p>\n<p>Aplique o seu estilo rec\u00e9m-criado \u00e0 sua nova camada.<\/p>\n<pre>\r\nlayer = cat.get_layer('newLayerName')\r\nlayer.default_style = newStyle\r\ncat.save(layer)\r\n<\/pre>\n<p>O gsconfig \u00e9 uma \u00f3tima biblioteca e com um pouco de esfor\u00e7o para descobrir isso, abstrai muito do trabalho envolvido em fazer solicita\u00e7\u00f5es REST para o GeoServer.<\/p>\n<p>Fonte: <a href=\"https:\/\/www.gaiaresources.com.au\/geoserver-rest-python\/\" rel=\"noopener\" target=\"_blank\">Gaia Resources Blog<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Como muitos de voc\u00eas sabem, o GeoServer possui uma interface RESTful para interagir com seus dados. Se voc\u00ea estiver usando o REST via Python, h\u00e1 uma biblioteca padr\u00e3o, mas n\u00e3o \u00e9 bem documentada, por\u00e9m existe uma biblioteca chamada gsconfig, criada&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2019\/04\/10\/usando-a-api-rest-do-geoserver-com-python\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":8130,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[79,327],"class_list":["post-8128","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-python","tag-rest-api"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8128","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/users\/275"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/comments?post=8128"}],"version-history":[{"count":13,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8128\/revisions"}],"predecessor-version":[{"id":8142,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8128\/revisions\/8142"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/8130"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=8128"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=8128"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=8128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}