Я заметил, что вы уже нашли решение, которое работает для вас, но я подумал, что мог бы добавить некоторые дополнительные опции, которые вы или другие могут найти полезными.
В GeoServer есть возможность, известная как Virtual OWS Services . Сервисы WMS, WFS и WCS вместе называются сервисами OWS. Когда вы делаете запрос к одной из этих служб, вы делаете глобальный запрос, поэтому все зарегистрированные уровни возвращаются в документе о возможностях (если у вас нет настроек безопасности данных). В отличие от этого, виртуальный сервис является фильтрованным представлением глобального сервиса. Фильтрация выполняется в рабочих пространствах и доступна через несколько иной URL.
Давайте возьмем пример. Предположим, у вас есть рабочее пространство с именем myws, и именно в этом рабочем пространстве вы хотите перечислить слои. В этом случае вы можете сделать запрос к URL:
http://www.yourgeoserver.com/geoserver/myws/ows?SERVICE=WFS&REQUEST=GetCapabilities
В возвращенном документе о возможностях будут перечислены только слои, зарегистрированные в рабочей области myws .
Это один из подходов, однако вы изначально спрашивали о доступе к списку слоев через JavaScript. К счастью, есть способ сделать это, используя GeoServer REST API. Вы можете получить список FeatureTypes для данного рабочего пространства и хранилища данных , используя что - то вроде:
http://www.yourgeoserver.com/geoserver/rest/workspaces/myws/featuretypes.json
Это вернет вам JSON объект со списком всех FeatureTypes в пределах рабочей области, вы можете также заменить .json для .xml или .html , чтобы получить ответ в этих форматах. Итак, как это сделать в OpenLayers? К счастью, OpenLayers обеспечивает инкапсуляцию объекта XMLHttpRequest в форме OpenLayers.Request
объекта. Простой пример с использованием приведенного выше URL REST:
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
}
});
Существует хороший документ на запрос удаленных данных с OpenLayers здесь .
Надеюсь, что это дает вам некоторые другие подходы для рассмотрения.