美文网首页
Cesium绘制轨迹线与轨迹点

Cesium绘制轨迹线与轨迹点

作者: 这代码不好写 | 来源:发表于2022-10-27 13:55 被阅读0次

介绍使用primitives创建线条轨迹以及轨迹点
以及entities大概介绍

  1. Cesium上建立风场动态粒子效果
  2. vue3.0+vite+Cesium使用记录


元数据涉及保密不便提供,可按照以下模式生成

const points = [
 [lon, lat, height, time],
 [lon, lat, height, time],
];

甲、建议自行封装类对生成prmitives进行管理

创建不同的实例调用不同的函数与变量存储,便于后续更改与重建

(1)、创建点

方法一,使用primitivesPointPrimitiveCollection-------流畅(实验数据3.5W条)

`const pointsDataSource = viewer.scene.primitives.add(new Cesium.PointPrimitiveCollection())`
// 创建点
// pointColor : #fff
for (const index in points) {
     pointsDataSource.add({
          pixelSize: 10,
          color: Cesium.Color.fromCssColorString(pointColor),
          position: Cesium.Cartesian3.fromDegrees(item[0], item[1], item[2]),
        });
}
// 销毁点
pointsDataSource?.removeAll();

方法二,使用entitiesCustomDataSource--------卡的飞起(实验数据3.5W条)

//创建点
const pointsDataSource = new Cesium.CustomDataSource('createPoint');
for (const index in points) {
pointsDataSource.entities.add({
    position: Cesium.Cartesian3.fromDegrees(item[0], item[1], item[2]),
    show: true,
    point: {
      color: Cesium.Color.fromCssColorString(pointColor),
      pixelSize: 10,
    },
  });
}
viewer.dataSources.add(pointsDataSource);
// 清除点
pointsDataSource?.entities.removeAll();

(2)、创建线

方法一 使用primitivesPolylineCollection

const newArr1 = []; let newArr2 = [];
    // eslint-disable-next-line array-callback-return
    points.map((item) => {
      newArr1.push(item[0]);
      newArr1.push(item[1]);
      newArr1.push(item[2]);
    });
    newArr2 = newArr1;
    /// map原由fromDegreesArray 所需的数据属于[lon, lat, height, lon, lat, height, ...]
    /// 所以需要map改造
    
    /// 创建线
   const lineDataSource = viewer.scene.primitives.add(new Cesium.PolylineCollection());
   lineDataSource.add({
      width: 2,
      positions: this.Cesium.Cartesian3.fromDegreesArrayHeights(newArr2),
      material: this.Cesium.Material.fromType('Color', {
        color: this.Cesium.Color.fromCssColorString(lineColor),
      }),
    });
    
    /// 销毁线
    lineDataSource?.removeAll();
    

方法二 使用entitiesCustomDataSource

/// 创建线
const lineDataSource = new Cesium.CustomDataSource('createLine');
lineDataSource.entities.add({
      name: 'line',
      polyline: {
        positions: Cesium.Cartesian3.fromDegreesArrayHeights(newArr2),
        width: 2,
        material: Cesium.Color.fromCssColorString(lineColor),
        clampToGround: true,
      },
    });
    viewer.dataSources.add(lineDataSource);
   /// 销毁线条
   lineDataSource?.entities.removeAll()

出现问题当创建线与创建点都使用CustomDataSource,
polyline 的参数中clampToGround设置为false时,会报错cesium API版本为1.95
线和点同时用的时候会有这个问题
还有使用entities太卡了

(3)、创建广告牌

/// imgStart : 图标地址
billboards.add({
    position: Cesium.Cartesian3.fromDegrees(item[0], item[1], item[2]),
    image: imgStart,
    width: 18,
    height: 18,
    verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
  })

(4)、创建labels

labels.add({
  position: Cesium.Cartesian3.fromDegrees(item[0], item[1], item[2]),
  text: `${item[0]},${item[1]},Time:${item[3]}`,
  font: '10px sans-serif',
});

乙、进行销毁与重建

销毁与重建的目的

(1)、实行每个实例单独管理

(2)、可自由进行隐藏与展示

(3)、实例重建时必须进行先销毁在重建

(4)、减少内存

丙、 Primitive与Entity性能对比

Primitive 使用primitives装载
Entity使用entities装载

整两张图对比下


Entity 和primitive 对比

entity偏向数据,primitive偏向图形.primitive更底层
entity用法简单,primitive用法复杂。我们会有这样的疑问:entity已经封装的如此完美,调用如此便 > 捷,为何还要primitive接口呢?区别就是加载效率。primitive更接近webgl底层,没有entity各种各样 > 的附加属性,因此在加载时效率会更高。


Entity

QQ截图20221027104038.png

Primitive

QQ截图20221027103704.png

相关文章

  • Cesium绘制轨迹线与轨迹点

    介绍使用primitives创建线条轨迹以及轨迹点以及entities大概介绍 Cesium上建立风场动态粒子效果...

  • Cesium轨迹线

    功能描述 添加自定义material,利用shader和贴图实现轨迹线效果。 示例效果 贴图 自定义材质 使用示例

  • iOS CAShapeLayer 绘制柱状图动画

    图形绘制 线条绘制 单轨迹线条绘制设置线宽,动画进可以通过 KeyPath 设置为 strokeEnd 进行渲染,...

  • ArcGIS轨迹线生成

    在ArcGIS对生成的轨迹点进行生成轨迹线 轨迹线生成步骤 1、将爬取的经纬度数据转化为POI的点数据。在Exce...

  • 四代机轨迹线代表的的颜色

    1:店外: 黄色轨迹线代表横穿路过: 2:进门时轨迹线的颜色: 深蓝色代表不会被计数 3:店内 ...

  • Qt编写地图综合应用22-动态轨迹

    一、前言 上一篇文章写道拿到路径规划的轨迹点坐标集合,并且已经可以通过调用addPolyline绘制线段的形式将轨...

  • turf:利用bezierSpline()方法平滑轨迹线

    轨迹回放在gis项目需求中比较常见。通常是获取轨迹线遍历线段中的点位(或者webservice推送点位),对其设置...

  • Primitive篇(PrimitiveTriangles 面)

    前两篇博客我们了解了自定义点和线绘制,这篇我们接着学习cesium自定义绘制面。与点和线的绘制流程一样,只是设置的...

  • 2. 有限元模拟系列之GOCAD断层建模

    断层轨迹线投影到DEM面上去后,要开始着手进行断层建模。 1. 生成分段断层面根据地表断层轨迹线和前期处理好的断层...

  • Primitive篇(PrimitivePolyline 线)

    上一篇博客我们了解了自定义点绘制,这篇我们接着学习cesium自定义绘制线。点和线的绘制,流程一样,只是设置的属性...

网友评论

      本文标题:Cesium绘制轨迹线与轨迹点

      本文链接:https://www.haomeiwen.com/subject/bcsttdtx.html