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?


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.


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.




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>

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.