一、问题描述:
地图服务是geoserver发布的wms地图服务,使用cesium加载渲染,加载代码如下。
// Cesium加载wms
var wms = new Cesium.WebMapServiceImageryProvider({
url: '',
layers: '',//图层名称,或者:工作区:图层名
parameters:{
service:'WMS',
format:'image/jpeg',
srs: 'EPSG:4326',
transparent: true,//是否透明
BBOX: '106.1,26.8,106.2,27'
}
});
设置BBOX参数之后,后端会产生多次wms请求,前端会重复显示多个请求结果,如图所示。
二、解决办法:
遇到这个问题,先从WMS地图服务开始查找原因,
WMS地图服务定义的三个接口是GetCapabilities、GetMap和GetFeatureInfo,其中GetFeatureInfo是可选的。
- GetCapabilities接口的目的是获取服务元数据。
- GetMap接口返回一张地图。
- GetFeatureInfo接口用于获取地图指定空间位置的要素信息。
地图加载明显通过调用GetMap接口,所以查找了对应对应的接口参数,设置发现问题并没有解决,但是通过openLayers加载BBOX参数生效,所以定位问题应该是出现在Cesium的WebMapServiceImageryProvider接口设置上。
通过查找API文档,发现WebMapServiceImageryProvider提供了rectangle来设置加载地图的地图的矩形范围,传入一个Rectangle对象,问题解决。
//Rectangle对象
new Cesium.Rectangle(west, south, east, north)
//成功加载代码
var wms = new Cesium.WebMapServiceImageryProvider({
url: '',
layers: '',//图层名称,或者:工作区:图层名
parameters:{
service:'WMS',
format:'image/jpeg',
srs: 'EPSG:4326',
transparent: true,//是否透明
},
rectangle: Cesium.Rectangle.fromDegrees(106.1,26.8,106.2,27),
});