【问题标题】:How to pass WMS cql_filter through Leaflet TimeDimension?如何通过 Leaflet TimeDimension 传递 WMS cql_filter?
【发布时间】:2021-12-23 21:33:49
【问题描述】:

是否知道如何通过 Leaflet TimeDimension 传递 WMS cql_filter?

我正在使用 Geoserver 和 Leaflet,使用 Geoserver 中的 Cross Layer filter 扩展和 Leaflet 的 TimeDimension 插件。我有两个点层,一个停车位(静态,没有日期时间字段)和一个船(移动,有日期时间字段)。我可以像这样通过 TimeDimension 很好地显示哪些停车位是空的(5 米以外的船)或被占用(5 米内的船):

var vacant_parking = L.tileLayer.wms(baseUrl, {
layers: 'workspace:parking_spacesLayer',
cql_filter: 'BEYOND(the_geom,collectGeometries(queryCollection(\'workspace:boatsLayer\',\'the_geom\',\'datetime=2021-11-09\')),5,meters)',
format: 'image/png',
transparent: true
});

var vacant_parking_time = L.timeDimension.layer.wms(vacant_parking, {
updateTimeDimension: true
});

但我需要通过 timeDimension 传递 cql_filter 以便能够动态显示哪些停车位是空置(或占用)的,而不是仅在固定时间进行过滤(例如 datetime=2021-11-09)或用户通过时间维度控件提供的时间段。

我尝试了几种不同的组合,但这些都不起作用,因为 timeDimension 仅读取指定层('workspace:parking_spacesLayer')中的日期时间字段,而不是 cql 过滤器中的船层('workspace:boatsLayer' )。具体来说,我想在对parking_spacesLayer 执行cql_filter 之前,使用当前选择的timedimension 时间对boatsLayer 进行预过滤,以在任何给定时间突出显示空置(或占用)的停车位。

我试过了:

将boats 层嵌套在 timeDimension 层中以在 timedimension 中包含 cql 过滤器

var vacant_parking_time = L.timeDimension.layer.wms(
   (L.tileLayer.wms(baseUrl, {
     layers: 'workspace:parking_spacesLayer',
     cql_filter: 'BEYOND(the_geom,collectGeometries(queryCollection(\'workspace:boatsLayer\',\'the_geom\',\'INCLUDE\')),5,meters)',
     format: 'image/png',
    transparent: true
    })), {
    updateTimeDimension: true
}).addTo(map);

同时将两个图层添加到 WMS(图层:'workspace:parking_spacesLayer,boatsLayer'),这会通过时间维度过滤两个图层,但不执行 cql_filter。

并像这样替换指定的时间,将 my_date 替换为“2021-11-03”(适用于固定时间)或 this.time; this._timeDimension.getCurrentTime(); this._timeDimension.currentLoadedTime(); $(".timecontrol-date").text(); $(".timecontrol-date").html().split("T")[0]; (这些都不起作用)。

cql_filter: 'BEYOND(the_geom,collectGeometries(queryCollection(\'workspace:boatsLayer\',\'the_geom\',\'datetime=' + my_date + '\')),5,meters)',

但到目前为止还没有工作。我怀疑我可能需要使用 .apply() 或 .call() 函数来不断更新 datetime 字段。

有什么想法吗?

【问题讨论】:

    标签: leaflet cql geoserver


    【解决方案1】:

    为此,有一个名为 WPS-download 的插件,您可以使用此插件扩展您的地理服务器。之后就可以为动态时间变化生成 MP4 视频了。

    【讨论】:

    • 感谢提示,我来看看 WPS 几何函数。
    • 嗨,Paul,Geoserver 有一点值得关注。在 Geoserver 2.20 之前 WPS 下载插件有问题。请使用最新版本。升级到 2.20 后,我们在 2.19 中遇到了一些问题,问题立即解决。
    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多