点击查看:最新Cesium可视化系统实战视频课程

202502061632150e00a33d5bfa23df6ae98e9ab1a4a954539Cesium是一个强大的Web地球可视化框架,它提供了丰富的API来展示三维地理信息,并使得开发者可以在地图上标注、展示各种图形对象。在Cesium中,点(Point)是最常用的图形之一,用于在地图上标识一个位置、强调某些位置的特征。

1. 点的基本概念

在Cesium中,点是一个简单的地理对象,它是通过一个位置(经纬度和高度)来定义的。通常,点在地图上以小圆形或者其他图形的方式显示。你可以控制点的大小、颜色、透明度等属性,以实现不同的视觉效果。

2. 创建点对象

要在Cesium中添加一个点,你通常需要使用 viewer.entities.add 方法,该方法向视图中添加一个实体对象。每个实体都可以具有多个属性,其中包括点的位置、样式、标注等。下面是一个简化的示例:


viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(114.07, 24.54, 100),  // 点的位置
  point: {  // 定义点的样式
    pixelSize: 20,  // 点的像素大小
    color: Cesium.Color.RED,  // 点的颜色
    outlineColor: Cesium.Color.BLACK,  // 点的轮廓颜色
    outlineWidth: 4  // 点的轮廓宽度
  }
});

3. 点的位置

点的位置是通过 position 属性定义的,它可以是一个 Cartesian3 坐标系的坐标。在上面的例子中,Cesium.Cartesian3.fromDegrees(114.07, 24.54, 100) 将经纬度(114.07°E, 24.54°N)转换为 Cartesian3 坐标系的坐标,并且设置点的高度为100米。

4. 点的样式设置

点的外观可以通过 point 属性来配置。该属性是一个对象,它允许我们设置点的多种样式。

  • pixelSize: 设置点的像素大小,默认情况下点的大小是固定的,可以通过调整此属性来改变点的可视大小。上面代码中设置为 20,表示点的大小为20像素。
  • color: 设置点的颜色,这里使用 Cesium.Color.RED 来表示红色。你可以使用不同的 Cesium.Color 颜色来改变点的颜色,例如 Cesium.Color.GREENCesium.Color.BLUE
  • outlineColor: 设置点的轮廓颜色。轮廓颜色一般是点的外部边框的颜色,通常用于增加点的可视效果,在这段代码中设置为黑色 Cesium.Color.BLACK
  • outlineWidth: 设置点的轮廓宽度。默认情况下,点没有轮廓,轮廓宽度可以设置为任何整数值,增加或减少边框的粗细度。

5. 通过相机视距动态调整点的大小

有时候你可能希望点的大小根据相机的距离进行动态调整。Cesium提供了一个 scaleByDistance 属性,利用 Cesium.NearFarScalar 类来实现这一效果。scaleByDistance 可以根据相机的距离来动态改变点的大小。

scaleByDistance: new Cesium.NearFarScalar(
  1000,  // 相机的最小距离
  5,     // 相机最小距离对应的点大小
  1000000,  // 相机的最大距离
  1      // 相机最大距离对应的点大小
)
  • 1000 1000000 分别表示相机的最小和最大距离(单位:米)。
  • 5 1 分别表示当相机距离为最小值和最大值时点的大小。

在相机靠近时,点的尺寸会较大;而当相机远离时,点的尺寸会变得更小。此功能非常适合在三维场景中根据相机视距来平衡性能和视觉效果。

6. 通过视距调整透明度

类似地,translucencyByDistance 属性允许我们根据相机与点之间的距离来调整点的透明度。通过 Cesium.NearFarScalar 类的设置,我们可以定义相机视距与透明度之间的映射关系。

translucencyByDistance: new Cesium.NearFarScalar(
  1000,      // 相机的最小距离
  1,         // 相机最小距离对应的透明度
  1000000,   // 相机的最大距离
  0.1        // 相机最大距离对应的透明度
)
  • 1 表示相机靠近时点的透明度为100%(完全不透明)。
  • 0.1 表示相机远离时,点的透明度会降低至10%,这使得点的可见性随着距离的增大而逐渐减弱。

这种特性非常有用,尤其是在密集的三维环境中,可以通过动态调整点的透明度来优化场景的清晰度和性能。

7. 完整代码示例

结合上述的所有属性,以下是一个完整的例子,展示了如何在Cesium中添加一个动态调整大小和透明度的点:


viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(114.07, 24.54, 100),  // 点的位置
  point: {  // 定义点的样式
    pixelSize: 20,  // 点的像素大小
    color: Cesium.Color.RED,  // 点的颜色
    outlineColor: Cesium.Color.BLACK,  // 点的轮廓颜色
    outlineWidth: 4,  // 点的轮廓宽度
    scaleByDistance: new Cesium.NearFarScalar(
      1000,   // 最小距离
      5,      // 最小距离时的点大小
      1000000,  // 最大距离
      1       // 最大距离时的点大小
    ),
    translucencyByDistance: new Cesium.NearFarScalar(
      1000,      // 最小距离
      1,         // 最小距离时的透明度
      1000000,   // 最大距离
      0.1        // 最大距离时的透明度
    )
  }
});

8. 总结

在Cesium中,点是一个非常基础且常用的三维地理对象。通过调整点的位置、样式和视距参数,可以实现非常丰富的可视化效果。特别是 scaleByDistancetranslucencyByDistance,它们可以根据相机的距离动态调整点的大小和透明度,使得你在复杂场景中能够更好地优化性能和用户体验。通过合理配置这些参数,你可以为用户提供一个更为直观且美观的地图界面。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注