cesium加载大批量点

发布时间 2023-04-07 14:44:33作者: 2086nmj

如果想在Cesium中显示一个点,目前有这么几种方法:Primitive、Entity、czml文件、GeoJson文件等。

下面是显示64,800 个点的 PointPrimitiveobjects 的代码示例,并且让所有点同时都运动起来

var viewer = new Cesium.Viewer('cesiumContainer');
//  生成PointPrimitiveCollection对象
var pointCollection = viewer.scene.primitives.add(new Cesium.PointPrimitiveCollection());

//  生成64800个点,每个经度、纬度值各生成一个点,高度为0(贴地表)
//  每个点都添加到PointPrimitiveCollection对象中
for (var longitude = -180; longitude < 180; longitude++) {
    var color = Cesium.Color.PINK;
    if ((longitude % 2) === 0) {
        color = Cesium.Color.CYAN;
    }
    for (var latitude = -90; latitude < 90; latitude++) {
      pointCollection.add({
            position : Cesium.Cartesian3.fromDegrees(longitude, latitude),
            color : color
        });
    }
}

//  模拟每个点固定向外偏移(1km,1km,1km)(跟时间无关,每帧调用此函数)
function animatePoints() {
  var positionScratch = new Cesium.Cartesian3();
  var points = pointCollection._pointPrimitives;
  var length = points.length;
  for (var i = 0; i < length; ++i) {
      var point = points[i];
      Cesium.Cartesian3.clone(point.position, positionScratch);
      Cesium.Cartesian3.add(
          positionScratch,
          new Cesium.Cartesian3(1000, 1000, 1000),
          positionScratch);
      point.position = positionScratch;
  }
}

//  scene中的render 方法,每一帧都被会调用,用于场景的重绘
//  此处的preRender在render方法之前执行,也是每一帧被调用
//  由于每一帧调用animatePoints方法时,方法内部都将每个点
//    的位移向外移动1km,因此所有点就都运动起来了
viewer.scene.preRender.addEventListener(animatePoints);

参考:https://blog.csdn.net/u011575168/article/details/119985969