Utwórz warstwę w GeoServer za pomocą REST

16

W ramach możliwego rozwiązania tego pytania chcę utworzyć warstwę w GeoServer za pośrednictwem REST, która dostarcza instrukcję SQL wraz z identyfikatorem użytkownika.

Czytanie Myślę, że stworzyłbym typ funkcji i opublikowałbym go? Muszę to wszystko zrobić w usłudze REST. Czy ktoś ma jakieś przykłady kodu?

CaptDragon
źródło
Czy wygląda na to, że nie można dodać warstwy za pomocą interfejsu spoczynkowego, czy ostatecznie ją rozwiązałeś? Pojawia się błąd: HTTP Status 405 - Określona metoda HTTP jest niedozwolona dla żądanego zasobu
a1an

Odpowiedzi:

41

Jest wiele rzeczy, które możesz zrobić z GeoServer REST API, które nie są specjalnie udokumentowane i dla których nie ma przykładów kodu. Oto strategia radzenia sobie z nimi.

Najpierw zacznij od przykładów w dokumentacji . Upewnij się, że wiesz, jak utworzyć prostą nową warstwę lub przestrzeń roboczą za pomocą HTTP POST z XML lub JSON.

Następnie za pomocą interfejsu użytkownika GeoServer ręcznie utwórz potrzebny obiekt, dla którego nie ma dokumentacji (w tym przypadku typ elementu).

Na koniec ręcznie wyszukaj indeks REST GeoServer ( http://your-server/restlub http://your-server/geoserver/rest). Przeglądaj indeks, aż znajdziesz właśnie utworzony typ funkcji. Dołącz „.xml” lub „.json” do adresu URL tego zasobu, a zobaczysz jego reprezentację XML lub JSON.

Ta reprezentacja jest potrzebna do wykonania testu POST, aby utworzyć typ funkcji za pośrednictwem interfejsu API. Adres URL reprezentacji to adres URL, który byłby potrzebny do POST (na przykład http://your-server/geoserver/rest/..../myFeatureTypeName.json).

Możesz użyć tej strategii, aby dowiedzieć się, jak programowo utworzyć lub skonfigurować dowolny zasób w GeoServer.

Rohan Singh
źródło
2
DZIĘKUJĘ CI! Łatwa odpowiedź i po prostu zaoszczędziłem kolejne 2 godziny
kpienia
4
Ponadto wiele parametrów można pominąć, a GeoServer je rozpozna (podobnie jak w interfejsie użytkownika). na przykład. obwiednie
rcoup
1
Wow - to najlepszy opis tego, jaki widziałem.
Kieveli
3
Korzystając z GeoServer 2.10.2, stwierdziłem, że muszę POST do featuretypespunktu końcowego sklepu, np.geoserver/rest/workspaces/<workspacename>/datastores/<storename>/featuretypes/
Stephen Lead
Jasny opis przepływu pracy, w tym odpowiednie linki. UPVOTED! :)
Tony Gil
10

Wiem, że to stare pytanie, ale na wypadek, gdyby ktoś był zdezorientowany tak jak ja. Ważne jest to, że nie można utworzyć warstwę z http: // GeoServer / odpoczynek / warstwy końcowego.

Jeśli chcesz dodać warstwę wektorową, odbywa się to poprzez zasób typu elementu:

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

POST do:

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

gdzie jest obszar roboczy, w którym ma się znajdować typ elementu, a używane źródło danych utworzy nowy typ elementu wektorowego, tj. warstwę.

Jeśli zastanawiasz się, co możesz POST, @Rohan jest poprawny, najprostszym sposobem jest zapytanie o istniejący typ funkcji, IE lub http GET to

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

co zwróci istniejący typ funkcji jako json.

utracony sens po tłumaczeniu
źródło
0

Jeśli rozumiesz Javę, możesz rzucić okiem na ten prosty kod, który używa REST do wykonywania wszelkiego rodzaju operacji na GeoServer.

Ivo Limmen
źródło
0

Aby dodać warstwę, należy zdefiniować magazyn danych i typ funkcji. Zakładając, że są one już zdefiniowane wraz ze stylem (zgodnie z opisem w przewodniku na stronie http://boundlessgeo.com/2012/10/10/adding-layers-to-geoserver-using-the-rest-api/, aby dodać warstwę PUT żądanie należy wysłać do geoserver na:

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

Z zawartością danych, taką jak:

<layer>
  <name>NEW_LAYER_NAME</name>
  <type>VECTOR</type>
  <defaultStyle>
    <name>myStyle</name>
  </defaultStyle>
  <resource class="featureType">
    <name>myFeature</name>
  </resource>
</layer>
a1an
źródło
Ten blog mówi o dodaniu stylu do istniejącej warstwy, co ma sens, ponieważ do tego właśnie służy PUT. W ten sposób nie można utworzyć nowej warstwy. Oto dokumentacja: docs.geoserver.org/stable/en/user/rest/api/layers.html , PUT do odpoczynku / warstwy zwróci 405. PUT do / rest / layer / <istniejąca_grupa> zmodyfikuje konkretna warstwa, nie twórz nowej.
lostintranslation