У меня есть строгое требование извлекать имена всех слоев в хранилище GeoServer, используя OpenLayers. Я просмотрел этот пост здесь , но он не отвечает на мой вопрос. Я также прошел через REST API GeoServer, который был бы идеальным, если бы я использовал другой язык, например C #, Java или PHP. Но я хочу сделать это полностью в JavaScript.
ОБНОВЛЕНИЕ:
Из того, что я вижу в WFS GetCapabilities
документе, я могу получить имена всех слоев, отправив запрос WFS GetCapabilities, используя фильтры. Но я не уверен, возможно ли включить фильтры в GetCapabilities
запрос. Я также не представляю, как будет выглядеть такой фильтр.
Любые советы о том, как я могу добиться этого, будут высоко оценены. Любой альтернативный подход также будет оценен.
ОБНОВИТЬ:
Я считаю, что нашел решение здесь ; «Запросы WFS GetCapabilities можно отфильтровать, чтобы они возвращали только слои, соответствующие определенному пространству имен. Для этого добавьте в свой запрос следующий код: namespace = <namespace>
». Я надеюсь, что это помогает кому-то еще.
источник
Ответы:
Я заметил, что вы уже нашли решение, которое работает для вас, но я подумал, что мог бы добавить некоторые дополнительные опции, которые вы или другие могут найти полезными.
В GeoServer есть возможность, известная как Virtual OWS Services . Сервисы WMS, WFS и WCS вместе называются сервисами OWS. Когда вы делаете запрос к одной из этих служб, вы делаете глобальный запрос, поэтому все зарегистрированные уровни возвращаются в документе о возможностях (если у вас нет настроек безопасности данных). В отличие от этого, виртуальный сервис является фильтрованным представлением глобального сервиса. Фильтрация выполняется в рабочих пространствах и доступна через несколько иной URL.
Давайте возьмем пример. Предположим, у вас есть рабочее пространство с именем myws, и именно в этом рабочем пространстве вы хотите перечислить слои. В этом случае вы можете сделать запрос к URL:
В возвращенном документе о возможностях будут перечислены только слои, зарегистрированные в рабочей области myws .
Это один из подходов, однако вы изначально спрашивали о доступе к списку слоев через JavaScript. К счастью, есть способ сделать это, используя GeoServer REST API. Вы можете получить список FeatureTypes для данного рабочего пространства и хранилища данных , используя что - то вроде:
Это вернет вам JSON объект со списком всех FeatureTypes в пределах рабочей области, вы можете также заменить .json для .xml или .html , чтобы получить ответ в этих форматах. Итак, как это сделать в OpenLayers? К счастью, OpenLayers обеспечивает инкапсуляцию объекта XMLHttpRequest в форме
OpenLayers.Request
объекта. Простой пример с использованием приведенного выше URL REST:Существует хороший документ на запрос удаленных данных с OpenLayers здесь .
Надеюсь, что это дает вам некоторые другие подходы для рассмотрения.
источник
Этот ответ может помочь кому-то. Я хотел создать список своих слоев автоматически, используя Javascript и Leaflet. Используя ответ Чендерсона, я сделал следующий код:
Таким образом, я могу добавить ключевое слово «group: GEOGRAPHY» на слой Geoserver, и мне не нужно вручную кодировать каждый слой и его группу. Имя используется для создания слоя (возможно , с помощью L.WMS.source) и название является HTML метка.
источник
Попробуйте проверить этот ответ . это также дает демо. Не забывайте, что слои обслуживаются различными службами, как там упоминалось.
я надеюсь, что это поможет вам ...
источник
WFS GetCapabilities
запрос. Но я только хочу получить названия слоев, ничего больше. Это означает, что я должен включить фильтры в свой запрос. Но я до сих пор не знаю, как добавить фильтры вWFS GetCapabilties
запрос, который будет возвращать только имена слоев. Обратитесь к моему обновлению выше. Есть указатели?