4 votos

Creación de un espacio de trabajo, un almacén de datos y una capa a través de la API REST de GeoServer

Estoy tratando de automatizar el proceso de configuración de un espacio de trabajo, un almacén de datos PostGIS y una capa en GeoServer utilizando la API REST de GeoServer.

Utilizando la excelente respuesta en Crear una capa en GeoServer usando REST Soy capaz de hacerlo, con una pega. Cuando creo el espacio de trabajo utilizando este código...

import requests, json
headers = {'Content-Type': 'application/json'}
auth = ('admin', 'geoserver')
url = "http://<my_geoserver>:8080/geoserver/rest/workspaces"
data = {"workspace": {"name": "blah"}}
r = requests.post(url, headers=headers, auth=auth, data=json.dumps(data))

... los Servicios están todos desmarcados en el Espacio de Trabajo recién creado:

enter image description here

Según Cómo configurar un espacio de trabajo en Geoserver utilizando Curl esta es una función que falta en la API REST de GeoServer.

Dado que los servicios están desmarcados, no puedo publicar una capa a través de la API REST de GeoServer:

url = 'http://<my_geoserver>:8080/geoserver/rest/workspaces/<workspaceName>/datastores/<dataStoreName>/featuretypes/'
data = {"featureType": {"name": "<layerName>","srs": "EPSG:4326","enabled": "true","store": {"@class": "dataStore","name": "<workspaceName>:<dataStoreName>"}}}
r = requests.post(url, headers=headers, auth=auth, data=json.dumps(data))

ya que la API responde con :Schema 'http://<workspaceName>:<layerName>' does not exist .

Si selecciono manualmente las 4 casillas de Servicios en el Espacio de Trabajo recién creado, y luego vuelvo a ejecutar el código para crear una capa, la Capa se crea sin error.

¿Es posible automatizar completamente el proceso de creación de un espacio de trabajo y un almacén de datos, y luego crear capas dentro de ese almacén de datos y espacio de trabajo, a través de la API REST de GeoServer?

5voto

Dave Puntos 1

Uso node/request;

para añadir un espacio de trabajo

curl -u admin:geoserver -v -XPOST -H Content-Type:application/xml -d @test.xml http://192.168.1.254:8083/geoserver/rest/workspaces

curl -u admin:geoserver -v -XPOST -H Content-Type:application/json -d @test.json http://192.168.1.254:8083/geoserver/rest/workspaces

curl -u admin:geoserver -v -XPOST -H Content-type:text/xml -d "myworkspace1" http://192.168.1.254:8083/geoserver/rest/workspaces

curl -u admin:geoserver -v -XPOST -H Content-type:text/json -d "{workspace:{name:'string'}}" http://192.168.1.254:8083/geoserver/rest/workspaces

utilizar ndoejs hacer esto:

//create a workspace
request.post('http://192.168.1.254:8083/geoserver/rest/workspaces',{
headers:{
    'Content-Type':"application/json"
},
body:JSON.stringify({
    "workspace":{
        "name":"test"
    }
})
},function(error,response,body){
if(error){
    console.log(error)
};
console.log(response.statusCode);//201 created ok or 401 has alreay one;
console.log(body);
}).auth('admin','geoserver');

para añadir un almacén de datos:

request.post('http://192.168.1.254:8083/geoserver/rest/workspaces/test/datastores',{
headers:{
    'Content-Type':"application/json"
},
body:JSON.stringify({
    "dataStore":{
        "name":"buildings",
        "connectionParameters": {
            "entry": [
              {"@key":"host","$":"192.168.1.254"},
              {"@key":"port","$":"5432"},
              {"@key":"database","$":"$$$"},
              {"@key":"user","$":"$$$$"},
              {"@key":"passwd","$":"gss7"},
              {"@key":"dbtype","$":"postgis"}
            ]
        }
    }
})
},function(error,response,body){
if(error){
            console.log(error)
        };
        console.log(response.statusCode);//201 created ok or 404 has alreay 
  deleted;
        console.log(body);
 }).auth('admin','geoserver');

añadir una capa se confunde de alguna manera, dijo

Para crear una nueva capa, diríjase a uno de los siguientes espacios de trabajo: /espacio de trabajo/nombre del espacio de trabajo}/almacenes de cobertura/nombre del almacén de cobertura, /espacio de trabajo/nombre del espacio de trabajo}/almacenes de datos/nombre del almacén de datos}/tipos de características, /espacio de trabajo/nombre del espacio de trabajo}/almacenes de almacenamiento de datos/nombre del almacén de almacenamiento de datos}/almacenes de almacenamiento de datos o /espacio de trabajo/nombre del espacio de trabajo}/almacenes de almacenamiento de datos/nombre del almacén de datos}/almacenes de almacenamiento de datos

Completaré esto después del éxito.

0 votos

Esa respuesta es mucho mejor que la de Selenium. ¡Funciona bien!

3voto

Harshad Kshirsagar Puntos 76

Aquí hay una solución para usar Selenium que abre un navegador web y hace clic de forma programada en las 4 casillas de verificación:

from selenium import webdriver

serverUrl = "http://<my_geoserver>:8080/geoserver/web/"
workspaceName = "<workspaceName>"
login = "admin"
pwd = "geoserver"

# Open a browser and log in to the GeoServer admin page
browser = webdriver.Chrome()
browser.get(serverUrl)
browser.find_element_by_id("username").send_keys(login)
browser.find_element_by_id("password").send_keys(pwd)
browser.find_element_by_class_name("positive").click()

# Navigate to the new Workspace, check the Services checkboxes, and Save
browser.get(serverUrl + "bookmarkable/org.geoserver.web.data.workspace.WorkspaceEditPage?name=" + workspaceName)
for idx in range (0,4):
  chkBox =  browser.find_element_by_name("services:services:" + str(idx) + ":enabled")
  if not (chkBox.is_selected()):
    chkBox.click()
browser.find_element_by_id("id9").click()

Es un poco complicado, y puede requerir la edición si los elementos de la interfaz de usuario de GeoServer cambian (por ejemplo, el inicio de sesión = .positive , guardar = #id9 ) pero es lo suficientemente bueno como para permitirme automatizar este proceso.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X