Crea un livello in GeoServer usando REST


16

Come parte di una possibile soluzione a questa domanda voglio creare un layer in GeoServer tramite REST che fornisca un'istruzione SQL insieme a un ID utente.

Lettura Penso che vorrei creare un tipo di funzione e pubblicarlo? Devo fare tutto questo in REST. Qualcuno ha qualche esempio di codice?


Sembra che non sia possibile aggiungere un livello tramite l'interfaccia di riposo, lo hai risolto alla fine? Viene visualizzato l'errore: Stato HTTP 405 - Il metodo HTTP specificato non è consentito per la risorsa richiesta
a1an

Risposte:


41

Ci sono molte cose che puoi fare con l'API REST di GeoServer che non sono specificamente documentate e per cui non ci sono esempi di codice. Ecco la strategia per affrontarli.

Innanzitutto, inizia con gli esempi nella documentazione . Assicurati di avere familiarità con il modo in cui puoi creare un nuovo livello o un'area di lavoro semplice utilizzando un POST HTTP con XML o JSON.

Quindi, tramite l'interfaccia utente GeoServer, creare manualmente l'oggetto necessario per il quale non è presente alcuna documentazione (in questo caso, un tipo di funzione).

Infine, passa manualmente all'indice REST di GeoServer ( http://your-server/restohttp://your-server/geoserver/rest ). Sfogliare l'indice fino a trovare il tipo di funzione appena creato. Aggiungi ".xml" o ".json" all'URL di questa risorsa e vedrai la sua rappresentazione XML o JSON.

Questa rappresentazione è ciò che sarebbe necessario POST per creare il tipo di funzione tramite l'API. L'URL della rappresentazione è l'URL che sarebbe necessario POST (ad esempio http://your-server/geoserver/rest/..../myFeatureTypeName.json).

È possibile utilizzare questa strategia per capire come creare o configurare a livello di programmazione qualsiasi risorsa in GeoServer.


2
GRAZIE! Risposta semplice e mi ha appena salvato altre 2 ore di scherno
Ragi Yaser Burhum

4
Inoltre, molti parametri possono essere ignorati e GeoServer li capirà (proprio come nell'interfaccia utente). per esempio. bounding box
rcoup

1
Caspita - questa è la migliore descrizione di ciò che ho visto.
Kieveli

3
Utilizzando GeoServer 2.10.2, ho scoperto che dovevo POST fino featuretypesall'endpoint del negozio, ad es.geoserver/rest/workspaces/<workspacename>/datastores/<storename>/featuretypes/
Stephen Lead,

Descrizione chiara del flusso di lavoro, collegamenti pertinenti inclusi. Upvoted! :)
tony gil,

10

So che questa è una vecchia domanda, ma nel caso in cui qualcuno fosse confuso come me. La parte importante è che non è possibile creare un livello dall'endpoint http: // geoserver / rest / layers .

Se stai cercando di aggiungere un livello vettoriale, viene eseguito tramite il tipo di risorsa risorsa:

http://docs.geoserver.org/stable/en/user/rest/api/featuretypes.html

UN POST per:

/workspaces/<ws>/datastores/<ds>/featuretypes

dove si trova l'area di lavoro in cui si desidera vivere il tipo di funzione e l'origine dati da utilizzare creerà un nuovo tipo di funzione vettoriale, ovvero il livello.

Se ti stai chiedendo cosa puoi POST, @Rohan è corretto, il modo più semplice è richiedere un tipo di funzione esistente, ovvero un HTTP OTTENERE a

/workspaces/<ws>/datastores/<ds>/featuretypes/<ft>.json 

che restituirà un tipo di funzione esistente come json.




0

Per aggiungere un livello, è necessario definire un archivio dati e un featuretype. Supponendo che siano già definiti insieme a uno stile (come descritto nella guida su http://boundlessgeo.com/2012/10/adding-layers-to-geoserver-using-the-rest-api/ per aggiungere uno strato a PUT la richiesta deve essere inviata al geoserver all'indirizzo:

http://geoserver.host/geoserver/rest/layers/NEW_LAYER_NAME

Con un contenuto di dati come:

<layer>
  <name>NEW_LAYER_NAME</name>
  <type>VECTOR</type>
  <defaultStyle>
    <name>myStyle</name>
  </defaultStyle>
  <resource class="featureType">
    <name>myFeature</name>
  </resource>
</layer>

Quel blog parla dell'aggiunta di uno stile a un livello esistente, il che ha senso in quanto è progettato per PUT. Non è possibile creare un nuovo livello in questo modo. Ecco i documenti: docs.geoserver.org/stable/en/user/rest/api/layers.html , un PUT per riposare / layer restituirà un 405. Un PUT per / rest / layers / <esistente_layer> modificherà un livello particolare, non crearne uno nuovo.
lostintranslation
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.