Skip to content

entity实体操作

添加点线面实体

在cesium中,添加实体可以操作viewer.entities.add(entity)进行添加

在下面创建了一个点、线、多边形实体,分别用id区分,之后直接通过add方法将三个实体添加到viewer中,并且通过zoomTo方法将相机移动到该实体的中心位置

js
function drawPoint() {
  const point = {
    id: 'point',
    position: Cesium.Cartesian3.fromDegrees(112.4175, 25.655, 0),
    point: {
      pixelSize: 5,
      color: Cesium.Color.BLUE,
      outlineWidth: 2,
      outlineColor: Cesium.Color.RED,
    }
  }

  const line = {
    id: 'line',
    polyline: {
      positions: Cesium.Cartesian3.fromDegreesArray([
        112.4175, 25.655,
        112.4175, 27.655,
        113.4175, 26.655,
      ]),
      width: 20,
      material: Cesium.Color.RED.withAlpha(0.5),
    }
  }

  const polygon = {
    id: 'polygon',
    polygon: {
      hierarchy: Cesium.Cartesian3.fromDegreesArray([
        114.4175, 31.655,
        125.4175, 31.655,
        125.4175, 36.655,
        116.4175, 36.655,
      ]),
      height: 100,
      // 平面厚度
      extrudedHeight: 10000,
      // material: Cesium.Color.BLUE.withAlpha(0.5),
      // 添加纹理贴图  在当前^1.112.0版本当中repeat不生效,并且绘制的纹理只有图片的一小部分
      material: new Cesium.ImageMaterialProperty({
        image: './src/assets/image/zhihu.png',
        repeat: new Cesium.Cartesian2(10, 10),
      }),
      outline: true,
      outlineColor: Cesium.Color.RED.withAlpha(0.5),
      outlineWidth: 10,
      fill: true,
    }
  }

  viewer.value.entities.add(point)
  viewer.value.entities.add(line)
  viewer.value.entities.add(polygon)

  viewer.value.zoomTo(polygon)
}

实体删除

在cesium中,删除实体可以操作viewer.entities.remove(entity)进行删除

当给实体设置了id属性时,可以使用removeById方法删除,也可以通过remove方法删除,也可以使用removeAll方法删除所有实体

js
function removePoint() {
  // 通过id删除
  viewer.value.entities.removeById('point')
  // 通过对象删除
  const line = viewer.value.entities.getById('line')
  viewer.value.entities.remove(line)
  // 全部删除
  viewer.value.entities.removeAll()
}

添加billBoard标牌实体

billboard是cesium中一种标牌的实体,可以添加在点、线、面等实体上,可以设置标牌的图片、文字、颜色等属性

js
function drawBillBoard() {
  const billBoard = {
    position: Cesium.Cartesian3.fromDegrees(112.4175, 25.655, 0),
    billboard: {
      image: '/src/assets/logo.png',
      scale: 0.2,
      // sizeInMeters: true, // 设置为true,点的大小将以米为单位
      horizontalOrigin: Cesium.HorizontalOrigin.CENTER, // 水平相对中心位置
      verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
      pixelOffset: new Cesium.Cartesian2(0, 30), // 偏移角度
      rotation: Math.PI / 2, // 旋转角度 相对于PI
      // scaleByDistance: new Cesium.NearFarScalar(20000, 1, 8000000, 3), // 近大远小 比例
      // pixelOffsetScaleByDistance: new Cesium.NearFarScalar(20000, 1, 8000000, 3), // 近大远小 偏移量
      // translucencyByDistance: new Cesium.NearFarScalar(20000, 1, 8000000, 0), // 近大远小 透明度
      // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(2000, 800000), // 只在距离内显示
    },
    label: {
      text: 'Hello World',
      scale: 0.5,
      style: Cesium.LabelStyle.FILL_AND_OUTLINE,
      fillColor: Cesium.Color.BLUE,
      outlineColor: Cesium.Color.RED,
      showBackground: true,
      // backgroundColor: Cesium.Color.YELLOW,
      // backgroundColor: new Cesium.Color(1, 1, 1, 1),
      // backgroundColor: Cesium.Color.fromBytes(0, 0, 0, 255),
      // backgroundColor: Cesium.Color.fromCartesian4(new Cesium.Cartesian4(1, 1, 1, 1)),
      backgroundColor: Cesium.Color.fromCssColorString('#f40'),
      pixelOffset: new Cesium.Cartesian2(0, 0),
      eyeOffset: new Cesium.Cartesian3(0, 0, -10),
    }
  }
  viewer.value.entities.add(billBoard)
}

添加模型实体

这里可以添加模型实体,可以添加gltf、glb、等模型文件

js
function addGLBModel() {
  const position = Cesium.Cartesian3.fromDegrees(112.4175, 25.655, 0);
  // 调整模型的旋转弧度  通过Cesium.Math.toRadians进行控制(模型的朝向)
  let hpRoll = new Cesium.HeadingPitchRoll(0, Cesium.Math.toRadians(40), Cesium.Math.toRadians(40));
  let orientation = Cesium.Transforms.headingPitchRollQuaternion(position, hpRoll);
  const model = viewer.value.entities.add({
    id: '',
    position: position,
    orientation: orientation,
    model: {
      uri: './src/assets/glb/island.glb',
      // color: Cesium.Color.BLUE,
      // 颜色和模型颜色混合模式 HIGHLIGHT 高亮 MIX 混合 REPLACE 替换
      // colorBlendMode: Cesium.ColorBlendMode.HIGHLIGHT,
      // minimumPixelSize: 128,
      // maximumScale: 20000,
      // 轮廓颜色和大小
      silhouetteColor: Cesium.Color.RED,
      silhouetteSize: 10,
      // 在一个范围内才展示
      // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(1000, 800000),
      // 开启模型的动画
      shouldAnimate: true,
      // 显示阴影 需要在初始化地图时开启场景的阴影效果
      shadows: Cesium.ShadowMode.ENABLED
    }
  })
  viewer.value.zoomTo(model)
}

扩展:阴影展示

在上图可以看到模型的阴影效果,不单单只是在model上加个shadows阴影属性就可以了,还需要在初始化地图时开启场景的阴影效果

js
viewer.value.shadows = true
viewer.value.scene.globe.enableLighting = true
  • [ ] 计划 A
  • [x] 计划 B

By Modify.