文章目录
- 问题
- 分析
问题
设置影响图层覆盖范围时,出现三维和二维切换后展示不够完整的情况,
Cesium.Rectangle.fromDegrees(-180, -90, 180, 90)创建的矩形区域,按理说是已经设置了全覆盖,但切换二维后并不全覆盖
例如
- 三维下
- 切换到二维
分析
-
Cesium.Rectangle.fromDegrees(-180, -90, 180, 90)会创建一个经纬网的矩形区域,表示覆盖了全球范围的矩形区域。然而,在二维显示中,由于地球是一个三维的球体,所以无法将整个矩形区域在一个平面上完整展示出来。
-
在二维地图或屏幕上,经纬网通常以平面投影的方式呈现,像是将地球表面展开在一个平面上。这种投影方式会导致较远离地球赤道的地区在视觉上被拉长或压缩,从而使得经纬网的矩形区域在二维显示中可能看起来不够完整。
-
这是由于地球的曲率和二维投影之间的差异所导致的。为了更准确地表示地球的表面,通常需要使用三维地球模型或球面投影来展示地球的形状和地理区域。如果你需要更完整地显示经纬网的矩形区域,可以考虑使用三维地球视图或者其他具有球形投影的工具来实现。比如如下:
// 创建Cesium Viewer
var viewer = new Cesium.Viewer('cesiumContainer');// 创建PolylineCollection来存储网格线
var gridLines = new Cesium.PolylineCollection();// 设置网格线的样式
var gridMaterial = Cesium.Material.fromType(Cesium.Material.ColorType);
gridMaterial.uniforms.color = new Cesium.Color(1.0, 0.0, 0.0, 0.5);// 绘制经线
for (var i = -180; i <= 180; i += 15) {var positions = [];for (var j = -90; j <= 90; j += 1) {positions.push(Cesium.Cartesian3.fromDegrees(i, j));}var gridLine = gridLines.add({positions: positions,width: 1,material: gridMaterial});
}// 绘制纬线
for (var k = -90; k <= 90; k += 15) {var positions = [];for (var l = -180; l <= 180; l += 1) {positions.push(Cesium.Cartesian3.fromDegrees(l, k));}var gridLine = gridLines.add({positions: positions,width: 1,material: gridMaterial});
}// 将网格线添加到场景中
viewer.scene.primitives.add(gridLines);
移除
viewer.entities.remove(this.gridRectangle)
但使用该方法时发现viewer.scene.primitives如下,是无法进行移除的,因此使用数组的 pop() 方法即可:
viewer.scene.primitives._primitives.pop()