Mam ścisły wymóg pobierania nazw wszystkich warstw w sklepie GeoServer za pomocą OpenLayers. Przejrzałem tutaj post , ale nie odpowiada na moje pytanie. Przeszedłem również przez interfejs API REST GeoServera, który byłby idealny, jeśli używam innego języka, na przykład C #, Java lub PHP. Ale chcę to zrobić całkowicie w JavaScript.
AKTUALIZACJA:
Z tego, co widzę w WFS GetCapabilities
dokumencie, mogę odzyskać nazwy wszystkich warstw, wysyłając żądanie GetCapabilities WFS przy użyciu filtrów. Ale nie jestem pewien, czy możliwe jest włączenie filtrów do GetCapabilities
żądania. Nie mam też pojęcia, jak taki filtr będzie wyglądał.
Wszelkie porady dotyczące tego, jak mogę to osiągnąć, będą bardzo mile widziane. Docenione zostanie również każde alternatywne podejście.
AKTUALIZACJA:
Myślę, że znalazłem tutaj rozwiązanie ; „Żądania WFS GetCapabilities można filtrować, aby zwracały tylko warstwy odpowiadające określonej przestrzeni nazw. Aby to zrobić, dodaj następujący kod do swojego żądania: namespace = <namespace>
”. Mam nadzieję, że to pomaga komuś innemu.
źródło
Odpowiedzi:
Zauważyłem, że już znalazłeś rozwiązanie, które działa dla Ciebie, ale pomyślałem, że mogę dodać kilka dodatkowych opcji, które mogą być przydatne dla Ciebie lub innych osób.
W GeoServer istnieje możliwość zwana wirtualnymi usługami OWS . Usługi WMS, WFS i WCS są wspólnie znane jako usługi OWS. Kiedy przesyłasz zapytanie do jednej z tych usług, wysyłasz żądanie globalne, więc wszystkie zarejestrowane warstwy są zwracane w dokumencie możliwości (chyba że masz ustawienia bezpieczeństwa danych). Natomiast usługa wirtualna to filtrowany widok usługi globalnej. Filtrowanie odbywa się w obszarach roboczych i jest dostępne przez nieco inny adres URL.
Weźmy przykład. Załóżmy, że masz obszar roboczy o nazwie myws i właśnie do tego obszaru roboczego chcesz wyświetlić listę warstw. W takim przypadku możesz poprosić o adres URL:
Zwrócony dokument możliwości będzie zawierał listę tylko warstw zarejestrowanych w obszarze roboczym myws .
To jedno podejście, jednak pierwotnie pytałeś o dostęp do listy warstw za pomocą JavaScript. Na szczęście istnieje sposób, aby to zrobić za pomocą interfejsu API REST GeoServer. Możesz uzyskać listę typów funkcji dla danego obszaru roboczego i magazynu danych, używając czegoś takiego:
Spowoduje to zwrócenie obiektu JSON z listą wszystkich typów funkcji w obszarze roboczym. Możesz również zastąpić .json plikiem .xml lub .html, aby uzyskać odpowiedź w tych formatach. Jak to zrobić w OpenLayers? Na szczęście OpenLayers zapewnia enkapsulację obiektu XMLHttpRequest w postaci
OpenLayers.Request
obiektu. Prostym przykładem przy użyciu powyższego adresu URL REST byłoby:Istnieje dokument dobre na zainteresowanie zdalnych danych z OpenLayers tutaj .
Mam nadzieję, że daje ci kilka innych podejść do rozważenia.
źródło
Ta odpowiedź może komuś pomóc. Chciałem zbudować listę moich warstw automatycznie przy użyciu Javascript i Ulotki. Korzystając z odpowiedzi CHenderson, stworzyłem następujący kod:
W ten sposób mogę dodać słowo kluczowe „grupa: GEOGRAFIA” do warstwy Geoserver i nie muszę ręcznie kodować każdej warstwy i jej grupy. Nazwę stosuje się w celu utworzenia warstwy (być może za pomocą L.WMS.source) i tytułowy jest etykieta HTML.
źródło
Spróbuj sprawdzić tę odpowiedź . daje również wersję demo. Nie zapominaj, że warstwy obsługują różne usługi, jak tam wspomniano.
Mam nadzieję, że Ci to pomoże...
źródło
WFS GetCapabilities
żądania. Ale chcę tylko wyszukiwać nazwy warstw, nic więcej. Oznacza to, że muszę uwzględnić filtry w mojej prośbie. Ale nadal nie mam pojęcia, jak mogę dołączyć filtry doWFS GetCapabilties
żądania, które zwróci tylko nazwy warstw. Zapoznaj się z moją aktualizacją powyżej. Jakieś wskazówki?