2

I'm running a map with lots of different WMS layers published by GeoServer. Some of them are queryable, some of them are not. How can I tell that with OpenLayers API?

I'm requesting GetFeatureInfo and I need to request only the queryable layers, layers with queryable param set to false always return "Layer is not queryable" when requested - and that's what I want to hide from users. I looked into OpenLayers.Map.layers and found no "queryable" property.

UPDATE (to the first comment): This works fine as long as I use it with localhost:8080/geoserver/wms?service=WMS&version=1.1.1&request=GetCapabilities&. When I tried to get capabilities from http://www.edpp.cz:8080/geoserver/wms?service=WMS&version=1.1.1&request=GetCapabilities&, I got empty array of layers as a result.

I'm trying it with the following code:

function getCapabilities(offline) {
    var url = '';
    if (offline) {
        url = 'localhost:8080/geoserver/wms?service=WMS&version=1.1.1&request=GetCapabilities&';
    }
    else {
        url = 'http://www.edpp.cz:8080/geoserver/wms?service=WMS&version=1.1.1&request=GetCapabilities&'
    }
    var layers = []
        ,result
        ,request = OpenLayers.Request.GET({
            url: url
            ,success: function(response) {
                var format = new OpenLayers.Format.XML()
                    ,xml = format.read(response.responseText)
                    ,text = format.write(xml)
                    ,CAPformat = new OpenLayers.Format.WMSCapabilities()
                    ,cap = CAPformat.read(xml);
                    if (cap.capability) {
                        for (var len = cap.capability.layers.length-1; len >= 0; len -= 1) {
                            if (cap.capability.layers[len].queryable) {
                                layers.push(cap.capability.layers[len].name);
                            }
                        }
                    }
            }
        });
    return layers; //ARRAY
}

1 Answer 1

5

The queriable information is contained in the WMS capabilities document, the one that gets returned when you hit http://host:port/geoserver/ows?request=GetCapabilities&service=WMS

OpenLayers has this class to parse it: http://dev.openlayers.org/docs/files/OpenLayers/Format/WMSCapabilities-js.html

2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.