Erstellen Sie mit REST einen Layer in GeoServer

16

Als Teil einer möglichen Lösung für diese Frage möchte ich eine Ebene in GeoServer über REST erstellen, die eine SQL-Anweisung zusammen mit einer Benutzer-ID liefert.

Lesen Ich denke, ich würde einen Feature-Typ erstellen und veröffentlichen? Ich muss das alles in REST tun. Hat jemand irgendwelche Codebeispiele?

CaptDragon
quelle
Ist es anscheinend nicht möglich, einen Layer über die Rest-Schnittstelle hinzuzufügen, haben Sie ihn am Ende behoben? Ich erhalte die Fehlermeldung: HTTP - Status 405 - Die angegebene HTTP - Methode ist nicht für die angeforderte Ressource erlaubt
a1an

Antworten:

41

Mit der GeoServer REST-API können Sie viele Dinge tun, die nicht speziell dokumentiert sind und für die es keine Codebeispiele gibt. Hier ist die Strategie, um diese zu bekämpfen.

Beginnen Sie zunächst mit den Beispielen in der Dokumentation . Vergewissern Sie sich, dass Sie mit dem Erstellen einer einfachen neuen Ebene oder eines neuen Arbeitsbereichs mithilfe eines HTTP-POST mit XML oder JSON vertraut sind.

Erstellen Sie dann über die GeoServer-Benutzeroberfläche manuell das Objekt, für das keine Dokumentation vorhanden ist (in diesem Fall ein Feature-Typ).

Wechseln Sie schließlich manuell zum GeoServer REST-Index ( http://your-server/restoder http://your-server/geoserver/rest). Durchsuchen Sie den Index, bis Sie den gerade erstellten Feature-Typ finden. Fügen Sie ".xml" oder ".json" an die URL dieser Ressource an, und Sie sehen die XML- oder JSON-Darstellung.

Diese Darstellung hätten Sie zum POST benötigt, um den Feature-Typ über die API zu erstellen. Die URL der Repräsentation ist die URL, die Sie zum POSTEN benötigt hätten (zum Beispiel http://your-server/geoserver/rest/..../myFeatureTypeName.json).

Mit dieser Strategie können Sie herausfinden, wie Sie eine Ressource in GeoServer programmgesteuert erstellen oder konfigurieren.

Rohan Singh
quelle
2
DANKE! Einfache Antwort und hat mir noch 2 Stunden Spott
erspart
4
Außerdem können viele Parameter übersprungen werden, und GeoServer wird sie ermitteln (genau wie in der Benutzeroberfläche). z.B. Bounding Boxes
rcoup
1
Wow - das ist die beste Beschreibung, die ich je gesehen habe.
Kieveli
3
Mit GeoServer 2.10.2, fand ich , dass ich zu POST an den benötigten featuretypesEndpunkt des Ladens, zBgeoserver/rest/workspaces/<workspacename>/datastores/<storename>/featuretypes/
Stephen Blei
Klare Beschreibung des Workflows, einschliesslich relevanter Links. UPVOTED! :)
Tony Gil
10

Ich weiß, dass dies eine alte Frage ist, aber nur für den Fall, dass jemand anders verwirrt ist, wie ich es war. Der wichtige Teil ist, dass Sie keine Ebene vom Endpunkt http: // geoserver / rest / levels erstellen können .

Wenn Sie eine Vektorebene hinzufügen möchten, erfolgt dies über die Feature-Typ-Ressource:

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

EIN POST an:

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

Wo befindet sich der Arbeitsbereich, in dem der Feature-Typ gespeichert werden soll? Die zu verwendende Datenquelle erstellt einen neuen Vektor-Feature-Typ, dh einen Layer.

Wenn Sie sich fragen, was Sie POST können, ist @Rohan richtig. Die einfachste Möglichkeit besteht darin, einen vorhandenen Feature-Typ abzufragen, dh einen http-GET-Wert für

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

Dadurch wird ein vorhandener Feature-Typ als json zurückgegeben.

verlorene Übersetzung
quelle
1

Ihre beste Referenz finden Sie in der Bedienungsanleitung. http://docs.geoserver.org/stable/en/user/rest/examples/index.html

jdeolive
quelle
Ja, aber es gibt kein Beispiel für das Erstellen eines Feature-Typs aus einer SQL-Anweisung ... Ich hatte gehofft, jemand hätte Beispielcode zum Teilen.
CaptDragon
Diese Bedienungsanleitung fehlt dringend.
Kieveli
0

Wenn Sie Java verstehen, sollten Sie sich diesen einfachen Code ansehen , der mit REST alle Arten von Operationen auf GeoServer ausführt.

Ivo Limmen
quelle
0

Um eine Ebene hinzuzufügen, müssen ein Datenspeicher und ein Funktionstyp definiert werden. Vorausgesetzt, sie sind bereits zusammen mit einem Stil definiert (wie in der Anleitung unter http://boundlessgeo.com/2012/10/adding-layers-to-geoserver- using- the-rest- api/ beschrieben) , um eine Ebene einem PUT hinzuzufügen Anfrage muss an geoserver gesendet werden unter:

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

Mit einem Dateninhalt wie:

<layer>
  <name>NEW_LAYER_NAME</name>
  <type>VECTOR</type>
  <defaultStyle>
    <name>myStyle</name>
  </defaultStyle>
  <resource class="featureType">
    <name>myFeature</name>
  </resource>
</layer>
a1an
quelle
In diesem Blog wird über das Hinzufügen eines Stils zu einer vorhandenen Ebene gesprochen. Dies ist sinnvoll, da PUT dafür entwickelt wurde. Sie können auf diese Weise keine neue Ebene erstellen. Hier sind die Dokumente: docs.geoserver.org/stable/en/user/rest/api/layers.html , ein PUT to rest / layers gibt 405 zurück. Ein PUT to / rest / layers / <existing_layer> ändert a bestimmte Ebene, keine neue erstellen.
Übersetzung