Ho notato che hai già trovato una soluzione che funziona per te, ma ho pensato che avrei potuto aggiungere alcune opzioni aggiuntive che tu o altri potreste trovare utili.
In GeoServer esiste una funzionalità nota come Servizi OWS virtuali . I servizi WMS, WFS e WCS sono noti collettivamente come servizi OWS. Quando si effettua una richiesta a uno di questi servizi, si effettua una richiesta globale, quindi tutti i livelli registrati vengono restituiti nel documento sulle funzionalità (a meno che non si disponga di impostazioni di sicurezza dei dati). Al contrario, un servizio virtuale è una vista filtrata del servizio globale. Il filtro viene eseguito su aree di lavoro e vi si accede tramite un URL leggermente diverso.
Facciamo un esempio. Supponiamo di avere uno spazio di lavoro chiamato myws ed è questo spazio di lavoro per il quale vorresti elencare i livelli. In tal caso è possibile effettuare una richiesta all'URL:
http://www.yourgeoserver.com/geoserver/myws/ows?SERVICE=WFS&REQUEST=GetCapabilities
Il documento sulle funzionalità restituite elencherà solo i livelli registrati nell'area di lavoro di myws .
Questo è un approccio, tuttavia in origine ti era stato chiesto di accedere all'elenco dei livelli tramite JavaScript. Fortunatamente c'è un modo per farlo usando l'API REST di GeoServer. È possibile ottenere un elenco di featuretypes per un determinato spazio di lavoro e archivio dati usando qualcosa come:
http://www.yourgeoserver.com/geoserver/rest/workspaces/myws/featuretypes.json
Questo ti restituirà un oggetto JSON che elenca tutti i featuretypes all'interno dell'area di lavoro, puoi anche sostituire .json con .xml o .html per ottenere la risposta in quei formati. Quindi, come fare questo in OpenLayers? Fortunatamente OpenLayers fornisce un incapsulamento dell'oggetto XMLHttpRequest sotto forma di OpenLayers.Request
oggetto. Un semplice esempio usando l'URL REST sopra sarebbe:
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
}
});
C'è un buon documento sulla richiesta di dati remoti con OpenLayers qui .
Spero che ti dia qualche altro approccio da considerare.