【问题标题】:Create filtered request to wms/wfs openlayers 3创建对 wms/wfs openlayers 3 的过滤请求
【发布时间】:2014-12-05 12:20:42
【问题描述】:

我需要为 Geoserver 创建一个过滤后的 WMS 请求。我正在重写一个使用 OpenLayers.Filter 发出这些请求的 openlayers 2 应用程序。在从 API 中删除过滤器的 Openlayers 3 中如何做到这一点?

这是一个查询在 Openlayers 2 中的示例:

function dateFilter(date) {
    var dateTimeFilterArray = [];

    var dateFilter = new OL.Filter.Comparison({
        type : OL.Filter.Comparison.BETWEEN,
        property : "stdate",
        lowerBoundary : date.fromDate,
        upperBoundary : date.toDate
    });

    dateTimeFilterArray.push(dateFilter);

    var timeFilter = new OL.Filter.Comparison({
        type : OL.Filter.Comparison.BETWEEN,
        property : "sttime",
        lowerBoundary : date.fromTime,
        upperBoundary : date.toTime
    });

    dateTimeFilterArray.push(timeFilter);

    return combineFilters(dateTimeFilterArray);
}

【问题讨论】:

    标签: filter openlayers wms openlayers-3


    【解决方案1】:

    对于对 GeoServer 的 WMS 请求,您可以使用 CQL 过滤器,例如

    function dateFilter(date) {
      var dateFilter =
          'stdate BETWEEN ' + date.fromDate + ' AND ' + date.toDate;
      var timeFilter =
          'sttime BETWEEN ' + date.fromTime + ' AND ' + date.toTime;
      return '(' + dateFilter + ') AND (' timeFilter + ')';
    }
    
    wmsSource.updateParams({
      CQL_FILTER: dateFilter(date)
    });
    

    请阅读ECQL reference 中的日期和时间文字,以确保您为 CQL 过滤器使用正确的日期和时间格式。我上面的 sn-p 假设您的 date 对象的属性已经采用正确的格式。它还假设您当前的 combineFilters() 函数使用逻辑 AND 组合过滤器。

    【讨论】:

    • 感谢您的描述性回答。这个概念很好用!
    • 嗨@ahocevar 有没有办法稍后删除CQL_FILTER
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多