Geoserver发布服务以及加载WMS影像图层参考GeoServer发布服务+跨域问题+Cesium调用WMS/WFS服务,本文主要讲述如何实现属性查询功能。
WMS服务GetMap请求API文档中介绍了GetMap操作的标准参数如下图所示。
除此之外,GeoServer还为GetMap操作提供了一些非标准请求参数,具体见WMS vendor parameters,本文将使用参数cql_filter实现属性查询功能。
cql_filter参数与标准filter参数类似,但cql_filter使用ECQL表示,filter使用OGC XML过滤器,相比之下ECQL语法更紧凑和可读。有关详细ECQL语法可参阅ECQL Reference以及CQL and ECQL。
按照ECQL语法编写过滤条件,例如cql_filter = station BETWEEN 556000 AND 556100或cql_filter = company = 'A公司'(station和company是图层要素的其中两个属性名),将过滤条件加入GetMap请求参数中,代码如下。 请求结果筛选掉不满足条件的要素,返回符合过滤条件要素的影像图层。
let wmsImageryProvider = new Cesium.WebMapServiceImageryProvider({
url: "http://localhost:8090/geoserver/wms",
layers: "Cesium:G55_1",
parameters: {
service: "WMS",
format: "image/png",
transparent: true,
cql_filter: "station BETWEEN 556000 AND 556100",
// cql_filter: "company = 'A公司'",
},
});
this.viewer.imageryLayers.addImageryProvider(wmsImageryProvider);
还可以将地图返回格式指定为geojson,通过axios请求返回满足条件的要素信息。
http({
methods: "POST",
url: "http://localhost:8090/geoserver/wms",
params: {
version:"1.1.0",
request: "GetMap",
layers: "Cesium:G55_1", //图层名称
format: "application/json;type=geojson",
cql_filter: "station BETWEEN 556000 AND 556100",
// width、height、bbox参数可到 Geoserver 发布的服务中查看
width: 330,
height: 768,
bbox: "112.8705873684138,39.4111049785004,112.88893260898077,39.45372330078136",
},
});
}