Editando documentos de capacidades no GeoServer

Sep 07 2020

Eu tenho várias camadas no GeoServer, uma das quais estou tentando usar como um WMS em programas de desktop (Manifold 8). Eu configurei corretamente, mas sempre que coloco no Manifold, ele projeta a camada em EPSG: 4326, o que infelizmente não funciona com meu mapa - eu preciso dele em EPSG: 3857.

A camada em questão é envolvida em uma definição de camada mais abrangente, que contém todas as camadas - e sistemas de coordenadas que permitem que todas sejam usadas com flexibilidade. No entanto, quero colocar essa camada sozinha no documento de recursos e permitir que ela use apenas EPSG: 3857.

Como, no GeoServer, posso editar ou substituir um documento de recursos?

Respostas

nr_aus Oct 12 2020 at 01:36

O Geoserver irá definir o CRS 'Nativo' para o que determina que seja o sistema de coordenadas dos dados de origem. Você pode definir o 'CRS declarado' e a opção 'Forçar declarado', o que forçará a camada a usar o CRS declarado, mas isso normalmente ocorre apenas se o CRS de origem não puder ser lido pelo Geoserver. No entanto, em sua instância, isso deve forçá-lo a usar o declarado (3857).

Algumas leituras sobre isso podem ser encontradas aqui: https://docs.boundlessgeo.com/suite/1.1.0/geoserver/configuration/crshandling/configurecrs.html

Em termos de isolar a própria camada em seus próprios getCapabilities. Hmm. Não tenho certeza se isso é ideal, mas, a documentação aqui: https://docs.geoserver.org/2.13.2/user/services/wms/reference.html

Isso afirma que um 'getCapabilities' é um

"A operação GetCapabilities solicita metadados sobre as operações, serviços e dados (“ recursos ”) que são oferecidos por um servidor WMS."

Sugerir isso, se você tiver

http://localhost:8080/geoserver/wms?
service=wms&
version=1.1.1&
request=GetCapabilities

mas você quer

    http://localhost:8080/geoserver_new/wms?
service=wms&
version=1.1.1&
request=GetCapabilities

então você precisará de uma instância inteiramente nova do Geoserver. Parece um exagero. Minha recomendação é que você simplesmente adicione um novo espaço de trabalho de acordo com a sugestão acima, que pode isolar a definição de camada de sua camada existente.

Por exemplo, você atualmente tem

http://localhost:8080/geoserver/wms?
request=GetMap
&service=WMS
&version=1.1.1
&layers=topp:states

Onde topp é a área de trabalho. Mas com um novo espaço de trabalho, você terá:

http://localhost:8080/geoserver/wms?
request=GetMap
&service=WMS
&version=1.1.1
&layers=new_workspace:states2

E então simplesmente aplique as configurações de sistema de coordenação que você deseja, para a camada new_workspace: states2.

nmtoken Sep 10 2020 at 09:31

Você pode fazer uma solicitação GetCapabilities, copiar a resposta e colocá-la em uma pasta pública da web, por exemplo, salvar como, em MyStaticGCresponseVersionmno.xmlseguida, editar este arquivo e remover o <CRS>CRS:84</CRS>, qualquer BoundingBox ( <BoundingBox CRS="CRS:84"...) e também alterar a URL das solicitações GetCapabilities ( <OnlineResource xlink:type="simple" xlink:href="..."/>) para a localização do arquivo estático.

Então você pode usar este arquivo 'estático' como o URL do serviço.

Isso funciona para a maioria dos clientes, mas falhará em um validador WMS.

Alternativamente, você pode usar MapServer e cascatear o serviço GeoServer através dele.

Por exemplo,

Aqui está um serviço GeoServer WMS:

http://13.95.69.121/geoserver/erl/ows?service=WMS&request=GetCapabilities

com

<GetCapabilities>
<Format>text/xml</Format>
<DCPType>
<HTTP>
<Get>
<OnlineResource xlink:type="simple" xlink:href="http://13.95.69.121:80/geoserver/erl/ows?SERVICE=WMS&"/>
</Get>
<Post>
<OnlineResource xlink:type="simple" xlink:href="http://13.95.69.121:80/geoserver/erl/ows?SERVICE=WMS&"/>
</Post>
</HTTP>
</DCPType>
</GetCapabilities>

e ...

na camada mineralOccurrenceView

<KeywordList>
<Keyword>features</Keyword>
<Keyword>mineraloccurrence</Keyword>
<Keyword>earth resource</Keyword>
<Keyword>mineral resource</Keyword>
<Keyword>mineral occurrence</Keyword>
<Keyword>mineral deposit</Keyword>
<Keyword>mine</Keyword>
</KeywordList>

Este serviço estava sendo usado em um portal que usa palavras-chave para ativar a funcionalidade. Para testar as palavras-chave rapidamente (os desenvolvedores do cliente não eram provedores de serviços), uma versão de arquivo estático desse arquivo foi criada:

http://ogc.bgs.ac.uk/OWS/GTK.xml

com o OnlineResource mudou assim.

<GetCapabilities>
<Format>text/xml</Format>
<DCPType>
<HTTP>
<Get>
<OnlineResource xlink:type="simple" xlink:href="http://ogc.bgs.ac.uk/OWS/GTK.xml"/>
</Get>
</HTTP>
</DCPType>
</GetCapabilities>

Outros OnlineResources permanecem os mesmos (aponte para o serviço real).

mas as palavras-chave foram alteradas para a camada como:

  <KeywordList>
      <Keyword>features</Keyword>
      <Keyword>mineraloccurrence</Keyword>
      <Keyword>earth resource</Keyword>
      <Keyword>mineral resource</Keyword>
      <Keyword>mineral occurrence</Keyword>
      <Keyword>mineral deposit</Keyword>
      <Keyword>mine</Keyword>
      <Keyword>Erml_lite_age_or_litho_queryable</Keyword>
      <Keyword>Erml_lite_queryable</Keyword>
      <Keyword>Erml_lite_queryable_geoserver</Keyword>
      <Keyword>Erml_lite_queryable_geoserver_workspace</Keyword>
      <Keyword>Erml_lite_queryable_4</Keyword>
  </KeywordList>

O conteúdo editado neste caso foram palavras-chave, não CRS, mas o princípio é o mesmo.

Agora, para o cliente, você usa a http://ogc.bgs.ac.uk/OWS/GTK.xmlURL como ponto de extremidade em vez da http://13.95.69.121:80/geoserver/erl/ows?versão.