3 votos

Añadir el estilo existente mientras se publica una nueva capa en GeoServer utilizando la API REST

Tengo una función que publica una capa en GeoServer con la API REST. Ahora quiero añadir un estilo existente en la capa mientras se publica.

¿Alguien tiene idea de dónde escribo el nombre del estilo o llamo al 'style.sld' mientras publico la capa?

const publish = function (layerName) {
return new Promise((resolve, reject) => {
    axios({
        method: 'POST',
        url: `http://${GEOSERVER_IP}:${GEOSERVER_PORT}/geoserver/rest/workspaces/workspaceName/datastores/datastoreName/featuretypes.xml`,
        auth: {
            username: `${GEOSERVER_ADMIN_USER}`,
            password: `${GEOSERVER_ADMIN_PASS}`
        },
        headers: {
            'Content-Type': 'text/xml'
        },
        data: `<featureType>
                <name>${layerName}</name>
                <srs>EPSG:4326</srs>
            </featureType>`
    })
        .then(response => {
            resolve({
                ok: 1,
                message: `Layer has been published.`
            })
        })
        .catch(err => {
            reject({
                ok: 0,
                message: err.response.data,
            })
        })

})
}

2voto

Adam Ernst Puntos 6939

Como el manual dice necesita usar POST los detalles para

/layers/<l>/styles[.<format>]

Para determinar el formato del archivo suelo utilizar una petición como:

curl -u admin:geoserver http://localhost:8080/geoserver/rest/layers/topp:states/styles.xml

que devuelve esto:

<styles>
  <style>
    <name>pophatch</name>
    <atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="alternate" href="http://localhost:8080/geoserver/rest/layers/topp:states/styles/pophatch.xml" type="application/atom+xml"/>
  </style>
  <style>
    <name>polygon</name>
    <atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="alternate" href="http://localhost:8080/geoserver/rest/layers/topp:states/styles/polygon.xml" type="application/atom+xml"/>
  </style>
</styles>

Así que todo lo que necesitas hacer es crear una carga útil como:

<styles>
  <style>
    <name>new_style</name>
    <atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="alternate" href="http://localhost:8080/geoserver/rest/layers/topp:states/styles/new_style.xml" type="application/atom+xml"/>
  </style>
<styles>

Actualización

Como alternativa, puede obtener y modificar el layer.xml para añadir la información del nuevo estilo. Así que una solicitud a la capa:

curl -u admin:geoserver http://localhost:8080/geoserver/rest/layers/topp:states.xml

da:

<layer>
  <name>states</name>
  <path>/</path>
  <type>VECTOR</type>
  <defaultStyle>
    <name>population</name>
    <atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="alternate" href="http://localhost:8080/geoserver/rest/styles/population.xml" type="application/xml"/>
  </defaultStyle>
  <styles class="linked-hash-set">
    <style>
      <name>pophatch</name>
      <atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="alternate" href="http://localhost:8080/geoserver/rest/styles/pophatch.xml" type="application/xml"/>
    </style>
    <style>
      <name>polygon</name>
      <atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="alternate" href="http://localhost:8080/geoserver/rest/styles/polygon.xml" type="application/xml"/>
    </style>
  </styles>
  <resource class="featureType">
    <name>topp:states</name>
    <atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="alternate" href="http://localhost:8080/geoserver/rest/workspaces/topp/datastores/states_shapefile/featuretypes/states.xml" type="application/xml"/>
  </resource>
  <attribution>
    <logoWidth>0</logoWidth>
    <logoHeight>0</logoHeight>
  </attribution>
</layer>

Por lo tanto, tendría que añadir un nuevo defaultStyle o style y luego lo devuelve al punto final de la capa.

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