Ich muss unbedingt die Namen aller Layer in einem GeoServer-Store mit OpenLayers abrufen. Ich habe den Beitrag hier durchgesehen , aber er beantwortet meine Frage nicht. Ich habe auch die REST-API von GeoServer durchgesehen, die ideal wäre, wenn ich eine andere Sprache verwenden würde, z. B. C #, Java oder PHP. Aber ich möchte dies ganz in JavaScript tun.
UPDATE:WFS GetCapabilities
Nach
dem , was ich im Dokument sehen kann, kann ich Namen aller Ebenen abrufen, indem ich eine WFS-GetCapabilities-Anforderung mithilfe von Filtern sende. Ich bin mir jedoch nicht sicher, ob es möglich ist, Filter in eine GetCapabilities
Anfrage aufzunehmen. Ich habe auch keine Ahnung, wie ein solcher Filter aussehen wird.
Jeder Rat, wie ich dies erreichen kann, wird sehr geschätzt. Jeder alternative Ansatz wird ebenfalls geschätzt.
AKTUALISIEREN:
Ich glaube, ich habe hier eine Lösung gefunden . "WFS GetCapabilities-Anforderungen können gefiltert werden, um nur Ebenen zurückzugeben, die einem bestimmten Namespace entsprechen. Fügen Sie dazu Ihrer Anforderung den folgenden Code hinzu: namespace = <namespace>
". Ich hoffe das hilft jemand anderem.
quelle
Antworten:
Ich stelle fest, dass Sie bereits eine Lösung gefunden haben, die für Sie funktioniert, aber ich dachte, ich könnte einige zusätzliche Optionen hinzufügen, die Sie oder andere möglicherweise nützlich finden.
In GeoServer gibt es eine Funktion, die als Virtual OWS Services bezeichnet wird . Die WMS-, WFS- und WCS-Dienste werden zusammen als OWS-Dienste bezeichnet. Wenn Sie eine Anfrage an einen dieser Dienste stellen, stellen Sie eine globale Anfrage, sodass alle registrierten Ebenen im Funktionsdokument zurückgegeben werden (es sei denn, Sie haben Datensicherheitseinstellungen). Im Gegensatz dazu ist ein virtueller Dienst eine gefilterte Ansicht des globalen Dienstes. Die Filterung erfolgt in Arbeitsbereichen und wird über eine etwas andere URL aufgerufen.
Nehmen wir ein Beispiel. Angenommen, Sie haben einen Arbeitsbereich namens myws und für diesen Arbeitsbereich möchten Sie Ebenen auflisten . In diesem Fall können Sie eine Anfrage an die URL stellen:
Das zurückgegebene Funktionsdokument listet nur die Ebenen auf, die im myws- Arbeitsbereich registriert sind .
Dies ist ein Ansatz, den Sie jedoch ursprünglich nach dem Zugriff auf die Ebenenliste über JavaScript gefragt hatten. Glücklicherweise gibt es eine Möglichkeit, dies mithilfe der GeoServer REST-API zu tun. Sie können eine Liste von bekommen Feature für einen bestimmten Arbeitsbereich und Datenspeicher mit so etwas wie:
Dadurch erhalten Sie ein JSON-Objekt, in dem alle Merkmalstypen im Arbeitsbereich aufgelistet sind. Sie können auch .json durch .xml oder .html ersetzen, um die Antwort in diesen Formaten zu erhalten. Wie geht das in OpenLayers? Glücklicherweise bietet OpenLayers eine Kapselung des XMLHttpRequest-Objekts in Form eines
OpenLayers.Request
Objekts. Ein einfaches Beispiel für die Verwendung der obigen REST-URL wäre:Es ist ein gutes Dokument Remote - Daten mit Openlayers auf anfordernden hier .
Ich hoffe, das gibt Ihnen einige andere Ansätze zu berücksichtigen.
quelle
Diese Antwort könnte jemandem helfen. Ich wollte automatisch eine Liste meiner Ebenen mit Javascript und Leaflet erstellen. Mit der Antwort von CHenderson habe ich den folgenden Code erstellt:
Auf diese Weise kann ich der Geoserver-Ebene ein Schlüsselwort "Gruppe: GEOGRAPHIE" hinzufügen , und ich muss nicht jede Ebene und ihre Gruppe manuell codieren. Der Name wird zum Erstellen der Ebene verwendet (möglicherweise mithilfe von L.WMS.source), und der Titel ist die HTML-Bezeichnung.
quelle
Versuchen Sie, diese Antwort zu überprüfen . Es gibt auch eine Demo. Vergessen Sie nicht, dass Ebenen über verschiedene Dienste bereitgestellt werden, wie dort erwähnt.
ich hoffe es hilft dir ...
quelle
WFS GetCapabilities
Anfrage erreichen kann. Aber ich möchte nur Namen von Ebenen abrufen, sonst nichts. Dies bedeutet, dass ich Filter in meine Anfrage aufnehmen muss. Ich habe jedoch noch keine Ahnung, wie ich Filter an eineWFS GetCapabilties
Anforderung anhängen kann , die nur die Namen der Ebenen zurückgibt. Siehe mein Update oben. Irgendwelche Hinweise?