Je remarque que vous avez déjà trouvé une solution qui fonctionne pour vous, mais j'ai pensé que je pourrais ajouter des options supplémentaires que vous ou d'autres pourraient trouver utiles.
Dans GeoServer, il existe une capacité connue sous le nom de services OWS virtuels . Les services WMS, WFS et WCS sont collectivement appelés services OWS. Lorsque vous effectuez une demande auprès de l'un de ces services, vous effectuez une demande globale, de sorte que toutes les couches enregistrées sont renvoyées dans le document de fonctionnalités (sauf si vous disposez de paramètres de sécurité des données). En revanche, un service virtuel est une vue filtrée du service global. Le filtrage est effectué sur les espaces de travail et est accessible via une URL légèrement différente.
Prenons un exemple. Supposons que vous ayez un espace de travail appelé myws et que c'est cet espace de travail pour lequel vous souhaitez répertorier les couches. Dans ce cas, vous pouvez faire une demande à l'url:
http://www.yourgeoserver.com/geoserver/myws/ows?SERVICE=WFS&REQUEST=GetCapabilities
Le document sur les capacités renvoyé ne répertorie que les couches enregistrées dans l' espace de travail myws .
C'est une approche, mais vous aviez initialement demandé d'accéder à la liste des couches via JavaScript. Heureusement, il existe un moyen de le faire en utilisant l'API REST GeoServer. Vous pouvez obtenir une liste de types de fonctionnalités pour un espace de travail et une banque de données donnés en utilisant quelque chose comme:
http://www.yourgeoserver.com/geoserver/rest/workspaces/myws/featuretypes.json
Cela vous renverra un objet JSON répertoriant tous les types de fonctionnalités dans l'espace de travail, vous pouvez également remplacer .json par .xml ou .html pour obtenir la réponse dans ces formats. Alors, comment faire cela dans OpenLayers? Heureusement, OpenLayers fournit une encapsulation de l'objet XMLHttpRequest sous forme d' OpenLayers.Request
objet. Un exemple simple utilisant l'URL REST ci-dessus serait:
var request = OpenLayers.Request.GET({
url: "http://www.yourgeoserver.com/geoserver/rest/workspaces/myws/featuretypes.json",
callback: function(request) {
// Code here to handle the response, the request object contains the data
}
});
Il existe un bon document sur la demande de données distantes avec OpenLayers ici .
J'espère que cela vous donne d'autres approches à considérer.