Percebo que você já encontrou uma solução que funciona para você, mas pensei em adicionar algumas opções adicionais que você ou outras pessoas possam achar úteis.
No GeoServer, existe um recurso conhecido como Virtual OWS Services . Os serviços WMS, WFS e WCS são conhecidos coletivamente como serviços OWS. Ao fazer uma solicitação para um desses serviços, você está fazendo uma solicitação global, para que todas as camadas registradas sejam retornadas no documento de recursos (a menos que você tenha configurações de segurança de dados). Por outro lado, um serviço virtual é uma visualização filtrada do serviço global. A filtragem é feita nas áreas de trabalho e é acessada através de um URL ligeiramente diferente.
Vamos dar um exemplo. Suponha que você tenha um espaço de trabalho chamado myws e é nesse espaço de trabalho que você gostaria de listar as camadas. Nesse caso, você pode fazer uma solicitação ao URL:
http://www.yourgeoserver.com/geoserver/myws/ows?SERVICE=WFS&REQUEST=GetCapabilities
O documento de recursos retornados listará apenas as camadas registradas no espaço de trabalho myws .
Essa é uma abordagem, no entanto, você havia perguntado originalmente sobre o acesso à lista de camadas por meio de JavaScript. Felizmente, há uma maneira de fazer isso usando a API REST do GeoServer. Você pode obter uma lista de tipos de características para um determinado espaço de trabalho e armazenamento de dados usando algo como:
http://www.yourgeoserver.com/geoserver/rest/workspaces/myws/featuretypes.json
Isso retornará um objeto JSON listando todos os tipos de características no espaço de trabalho. Você também pode substituir .json por .xml ou .html para obter a resposta nesses formatos. Então, como fazer isso no OpenLayers? Felizmente, o OpenLayers fornece um encapsulamento do objeto XMLHttpRequest na forma de OpenLayers.Request
objeto. Um exemplo simples usando o URL REST acima seria:
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
}
});
Há um bom documento sobre como solicitar dados remotos com o OpenLayers aqui .
Espero que isso lhe dê algumas outras abordagens a serem consideradas.