在传单中创建一个cql过滤器

时间:2017-02-27 12:05:27

标签: leaflet postgis geoserver

请问我可以从以下问题中获得一些帮助。我想在传单中创建一个CQL过滤器,它过滤来自GeoServer的数据,数据托管在PostGIS数据库中。

例如,从数据库中的NAME字段中选择一个库名。过滤器将是可变的,因为用户可以通过输入对话框字段输入不同的名称。

我将我的图层显示为WMS,虽然我能够在openlayers 3中使用交互式过滤器,但我仍然不喜欢传单。

我是GIS的Web开发方面的新手,我们将非常感谢任何有关正确方向的帮助或指示。

亲切的问候, 卡梅伦

2 个答案:

答案 0 :(得分:1)

在传单中,您可以使用TileLayer.WMS在地图上绘制wms图层。像这样:

var nexrad = L.tileLayer.wms("http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi", {
    layers: 'nexrad-n0r-900913',
    format: 'image/png',
    transparent: true,
    attribution: "Weather data © 2012 IEM Nexrad"
});

你会看到一些标准的传单WMS选项,如格式,版本..crs等。

但是传单在url中发送所有额外的参数/选项以支持non-standard WMS parameter。 CQL_FILTER就是其中之一,所以你需要做的是提供cql_filter选项(列名区分大小写):

var nexrad = L.tileLayer.wms("http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi", {
    layers: 'nexrad-n0r-900913',
    format: 'image/png',
    transparent: true,
    cql_filter: 'NAME=filterhere'
    attribution: "Weather data © 2012 IEM Nexrad"
});

答案 1 :(得分:0)

这是我第一次在论坛上发帖,已经得到了很多帮助!

我设法按照我的代码中的建议获取cql_filter,如下所示:

var contours = L.tileLayer.wms('http://gis01-dbn:8080/geoserver/Inyaninga_243-198/wms', {
        layers: 'Inyaninga_243-198:contours_3857',
        format: 'image/png',
        transparent: true,
        cql_filter: 'elevation= 126', 
        });

是否有任何方法可以使此高程参数接收用户输入和更新?

我在html中创建了一个表单:

 <form>
    Elevation(m):<br>
   <input type="text" id="myInput">
   <input type="button" value="Elevation">
</form>

但是,我很难将“myInput”传递给cql_filter以接受用户可以输入的值。

我尝试创建一个容纳cql_filter的函数,但在加载WMS时再次无法将其调用到cql_filter选项中。