Cesium初探-实体

在 Cesium 中,"实体"(Entity)是一个核心概念,它代表了可以在场景中渲染的任何东西,从简单的点、线、多边形到复杂的模型和图像。实体可以用来表示地理空间数据,如地标、轨迹、卫星轨道等。

以下是一些关于 Cesium 实体的关键知识点:

  1. 定义:

    • 实体是 Cesium 中用于描述地理空间对象的数据结构。
    • 每个实体都有一组属性,这些属性定义了它的外观、位置和其他特性。
  2. 属性:

    • 实体可以拥有多种属性,包括但不限于:
      • name: 实体的名称。
      • position: 实体的位置,通常使用 Cartesian3 对象表示。
      • orientation: 实体的方向,可以使用 QuaternionEulerAngles 表示。
      • ellipsoid: 如果实体是一个椭球体,则可以定义其大小和形状。
      • polygon: 定义一个多边形。
      • polyline: 定义一条或多条折线。
      • point: 定义一个点。
      • label: 可以添加文本标签。
      • model: 加载并显示 3D 模型。
      • availability: 定义实体何时可见。
      • availabilityClock: 定义可用性的时钟范围。
      • interval: 实体的有效时间间隔。
      • description: 提供有关实体的详细信息,通常显示为弹出框的内容。
      • properties: 用户自定义的属性集合。
  3. 时间动态性:

    • 实体可以随时间变化,例如,位置可以是时间的函数。
    • 这种时间变化可以通过 SampledPositionPropertySampledProperty 类来实现。
  4. 层次结构:

    • 实体可以组织成树状结构,其中父实体可以包含子实体。
    • 这样的层次结构有助于管理复杂场景和实现继承行为。
  5. 事件监听器:

    • 可以为实体添加事件监听器来响应用户交互,例如点击或悬停。
  6. 样式和外观:

    • 实体的各种视觉属性(颜色、透明度等)可以被设置。
    • 样式也可以随时间变化。
  7. 与场景的交互:

    • 实体可以与场景中的其他元素进行交互,比如与其他实体之间的碰撞检测。
  8. 性能优化:

    • 大量实体可能会对性能造成影响,因此需要考虑使用批处理、LOD (Level of Detail) 等技术来提高效率。
  9. API 和文档:

    • Cesium 的官方文档提供了详细的 API 文档和教程,可以帮助开发者更好地理解和使用实体功能。

接下来看实例!

创建实体

点实体

javascript 复制代码
// 添加实体
  // 方法1
  const point1 = new Cesium.Entity({
    id: 'point1',
    position: new Cesium.Cartesian3.fromDegrees(117, 39),
    point: {
      color: Cesium.Color.RED,
      pixelSize: 20
    }
  })
  viewer.entities.add(point1)
  // 推荐写法
  const point2 = viewer.entities.add({
    id: 'point2',
    position: Cesium.Cartesian3.fromDegrees(117, 40, 50),
    point: {
      color: Cesium.Color.RED,
      pixelSize: 20
    }
  })
  // 选择合适视角聚焦实体
  viewer.zoomTo(point2)

线实体

javascript 复制代码
// 添加线段
  const line1 = viewer.entities.add({
    id: 'line1',
    polyline: {
      positions: Cesium.Cartesian3.fromDegreesArray([117,40,117,41]),
      width: 2,
      material: Cesium.Color.BEIGE
    }
  })

标签实体

javascript 复制代码
// 添加label
  const label1 = viewer.entities.add({
    id: 'label1',
    position: Cesium.Cartesian3.fromDegrees(117, 40),
    label: {
      text: '我的股票',
      fillColor: Cesium.Color.GOLD,
      showBackground: true,
      backgroundColor: new Cesium.Color([254, 25, 36]),
      scale: 1,
      // 相对于position的偏移:前者控制左右,正为右移;后者控制上下,正为下移
      pixelOffset: new Cesium.Cartesian2(0, -70)
    }
  })
  viewer.zoomTo(label1)

面实体(平面 or 有厚度滴)

javascript 复制代码
// 添加面(体)
  const ploygon1 = viewer.entities.add({
    id: 'polygon1',
    polygon: {
      hierarchy: {
        positions: Cesium.Cartesian3.fromDegreesArray([117,40,117,41,118,40.5])
      }, 
      material: Cesium.Color.BEIGE,
      height: 20,
      extrudedHeight: 10,
      outline: true,
      outlineColor: Cesium.Color.BLUE
    }
  })

立方体(以给定点为中心,设置长宽高)

javascript 复制代码
// 添加立方体,以点为中心,设置长宽高
  const box1 = viewer.entities.add({
    id: 'box1',
    position: Cesium.Cartesian3.fromDegrees(117, 40),
    box: {
      dimensions: new Cesium.Cartesian3(20,10,50),
      material: Cesium.Color.ALICEBLUE
    }
  })

椭球体(以给定点为球心,设置长短半轴及厚度)

javascript 复制代码
// 添加椭圆
  const ellipse1 = viewer.entities.add({
    id: 'ellipse1',
    position: Cesium.Cartesian3.fromDegrees(117, 40),
    ellipse: {
      semiMajorAxis: 50,
      semiMinorAxis: 30,
      material: Cesium.Color.BISQUE,
      extrudedHeight: 50,
      rotation: Math.PI / 2
    }
  })
  viewer.zoomTo(ellipse1)

删除实体

如果你想从场景中移除实体,可以使用 remove 方法,亦可以使用removeAll方法全部移除。

javascript 复制代码
// 删除实体
const del = ()=>{
  viewer.entities.remove(label1)
}
const delAll = ()=>{
  viewer.entities.removeAll()
}
相关推荐
玩电脑的辣条哥2 小时前
Python如何播放本地音乐并在web页面播放
开发语言·前端·python
ew452182 小时前
ElementUI表格表头自定义添加checkbox,点击选中样式不生效
前端·javascript·elementui
suibian52352 小时前
AI时代:前端开发的职业发展路径拓宽
前端·人工智能
画月的亮2 小时前
element-ui 使用过程中遇到的一些问题及解决方法
javascript·vue.js·ui
Moon.92 小时前
el-table的hasChildren不生效?子级没数据还显示箭头号?树形数据无法展开和收缩
前端·vue.js·html
m0_526119402 小时前
点击el-dialog弹框跳到其他页面浏览器的滚动条消失了多了 el-popup-parent--hidden
javascript·vue.js·elementui
垚垚 Securify 前沿站2 小时前
深入了解 AppScan 工具的使用:筑牢 Web 应用安全防线
运维·前端·网络·安全·web安全·系统安全
工业甲酰苯胺5 小时前
Vue3 基础概念与环境搭建
前端·javascript·vue.js
lyj1689975 小时前
el-tree选中数据重组成树
javascript·vue.js·elementui
mosquito_lover16 小时前
怎么把pyqt界面做的像web一样漂亮
前端·python·pyqt