WMS Layer作为CQL过滤器的变量?

时间:2013-12-06 13:02:50

标签: openlayers geoserver

我一直在成功使用this CQL过滤器示例。 但是,我想进一步开发它,第一个目标是允许用户选择要过滤的层。为此,我在html表单上添加了另一个字段,其中列出了所有可用的图层。 现在的问题是:如何将该字符串用作CQL过滤器函数的变量? 我的代码如下所示:

function updateFilter() {
        var cql = document.getElementById("cql");

        // use a CQL parser for easy filter Validation
        var format = new OpenLayers.Format.CQL();

        //if filter exists, remove it
        //This will also be useful when empty filter is present
        if(Layer_to_Query.params.CQL_FILTER){
            delete Layer_to_Query.params.CQL_FILTER;
        }

        var filter;
        try {
            filter = format.read(cql.value); //we are just checking if we can parse it
        } catch (err) {
            if(cql.value!=""){ //no need to give alert when filter is empty
                alert("Filter cannot  parsed");
            }               
        }
        if (filter) {
            Layer_to_Query.mergeNewParams({'CQL_FILTER':cql.value}) //add the cql filter to the Layer
        }
//redraw the layer
        Layer_to_Query.redraw({force:true});
        return  false;
    }   

那么,关于如何将表单层名称作为Layer_to_Query传递给函数的任何想法? 提前致谢!

1 个答案:

答案 0 :(得分:0)

这有点复杂,因为我无法看到您如何设置地图并将图层名称添加到表格等。基本上,您将不得不从地图中的列表返回图层对象。您可以递归搜索图层,直到找到与该字段中的名称匹配的图层。由于我不知道您的展示方式或您正在使用的库,我可以更具体或让您知道更好的方法。

无论哪种方式,这都需要进行一些编码,并且不会成为简单的几行代码答案。