Skip to content

属性详解

description:对象的描述信息

实体对象的描述信息,可以是 html 字符串,在对象信息弹框显示时会用到,Cesium 自带的信息框挂载在 viewer.infoBox 上,类型为 InfoBox ,信息框会在对象被选中时触发。

比如将实体对象的描述信息设置为一个简单的字符串

ts
let viewer = new Cesium.Viewer("cesiumContainer");
viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(112, 40, 100),
  point: {
    pixelSize: 10,
  },
  label: {
    text: "测试",
  },
  description: "实体对象的信息",
});

描述信息支持 html 字符串内容,可以通过 html 字符串内容,构建对象的表格信息

ts
let viewer = new Cesium.Viewer("cesiumContainer");
viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(112, 40, 100),
  point: {
    pixelSize: 10,
  },
  label: {
    text: "测试",
  },
  name: "测试的实体对象",
  description: `
    <table class="cesium-infoBox-defaultTable">
    <tbody>
        <tr>
            <th>名称</th>
            <td>测试的实体对象</td>
        </tr>
        <tr>
            <th>描述</th>
            <td>实体对象的描述信息</td>
        </tr>
        <tr>
            <th>创建时间</th>
            <td>2024年8月26日</td>
        </tr>
    </tbody>
</table>
    `,
});

properties:对象的属性集合

用于存储实体对象的属性信息,如果您了解 GeoJson 数据格式,您会比较容易理解,因为一个 GeoJson 对象就包括一个 geometry 几何信息和一个 properties 属性信息。实体对象的 properties 会被包装复杂的对象,在获取对应的信息时,需要通过对应的方法进行获取

ts
let viewer = new Cesium.Viewer("cesiumContainer");
let entity = viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(112, 40, 100),
  point: {
    pixelSize: 10,
  },
  label: {
    text: "测试",
  },
  name: "测试的实体对象",
  properties: {
    name: "对象名称",
    description: "对象描述",
  },
});

console.log(entity);
console.log(entity.properties.getValue("name"));

console

availability:对象的可用性(有效性)

用于将实体对象与时间进行绑定,实体在那个时间范围内有效,在有效时间范围外实体不会被渲染出来,需要结合时间轴来使用。

ts
let viewer = new Cesium.Viewer("cesiumContainer", {
  shouldAnimate: true,
});

const start = Cesium.JulianDate.fromDate(new Date(2015, 2, 25, 16));
const stop = Cesium.JulianDate.addSeconds(start, 360, new Cesium.JulianDate());

//设置时间轴的起始时间
viewer.clock.startTime = start.clone();
viewer.clock.stopTime = stop.clone();
viewer.clock.currentTime = start.clone();
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP; //时间循环
viewer.clock.multiplier = 100; //10为正常时间 这里快进10倍
viewer.timeline.zoomTo(start, stop);

let entity = viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(112, 40, 100),
  point: {
    pixelSize: 10,
  },
  label: {
    text: "测试",
  },
  name: "测试的实体对象",
  properties: {
    name: "对象名称",
    description: "对象描述",
  },
  //时间轴上的时间总共360秒
  availability: new Cesium.TimeIntervalCollection([
    //第 0 - 100秒可用
    new Cesium.TimeInterval({
      start: start,
      stop: Cesium.JulianDate.addSeconds(start, 100, new Cesium.JulianDate()),
    }),
    //第 300 - 360秒可用 也就是第 100 - 300秒的区间不可用
    new Cesium.TimeInterval({
      start: Cesium.JulianDate.addSeconds(start, 300, new Cesium.JulianDate()),
      stop: Cesium.JulianDate.addSeconds(start, 360, new Cesium.JulianDate()),
    }),
  ]),
});

position:对象的位置(世界坐标)

为实体对象所关联的图形提供位置信息,比如 piontbillboardmodel 等图形需要通过该属性来设置正确的地理位置。

ts
let entity = viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(112, 40, 100),
  point: {
    pixelSize: 10,
  },
  label: {
    text: "测试",
  },
});

orientation:对象的方向(姿态)

为实体对象所关联的图形提供方向信息,主要是 model 图形,比如加载一个模型,如果不指定方向,那么该模型默认指向正东

ts
let viewer = new Cesium.Viewer("cesiumContainer");
viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(112, 40, 100),
  model: {
    uri: "/assets/models/CesiumAir/Cesium_Air.glb",
    scale: 10,
  },
});

可以通过 orientation 设置其方向指向正北,orientation 属性类型为 Quaternion 即四元素,四元素不太好理解,我们一般通过 Transforms 类将熟悉的 HeadingPitchRoll 转换为四元素。

viewFrom:锁定对象时的相机偏移量

设置 viewer.trackedEntity 时,相机与目标的偏移量,类似相机一章中说的的 camera.setView()orientation 设置 Cartesian3 对象的情况。以下代码展示设置 viewFrom 和没有设置 viewFrom 时,设置 viewer.trackedEntity 的区别。

parent:对象关联的父级 Entity

与此实体关联的父级实体,设置父实体的状态时,可能会影响此实体,比如设置父级实体不可见,那么该实体也不可见

MGis 地理三维库