Cesium基础-(Entity)-(PolylineVolume、Rectangle、Wall)

文摘   2024-12-02 21:36   宁夏  

14、PolylineVolume

image
image

Cesium中的PolylineVolume是一种用于创建具有体积效果的折线图形的工具。想象一下,如果你想要在空中画出一条有厚度的管道或者隧道,PolylineVolume可以帮助你实现这个效果。下面是PolylineVolume的属性、方法及描述的表格表示:

属性

属性名称类型默认值描述
showProperty|booleantrue指定体积的可见性。
positionsProperty|Array.
定义线条的Cartesian3位置数组。
shapeProperty|Array.
定义要拉伸的形状的Cartesian2位置数组。
cornerTypeProperty|CornerTypeCornerType.ROUNDED指定拐角的样式。
granularityProperty|numberCesium.Math.RADIANS_PER_DEGREE每个纬度和经度点之间的角度距离。
fillProperty|booleantrue指定是否用所提供的材料填充该体积。
materialMaterialProperty|ColorColor.WHITE指定用于填充体积的材料。
outlineProperty|booleanfalse指定是否概述体积。
outlineColorProperty|ColorColor.BLACK指定轮廓的颜色。
outlineWidthProperty|number1.0指定轮廓的宽度。注意:在Windows平台上的所有主流浏览器都会忽略此属性。
shadowsProperty|ShadowModeShadowMode.DISABLED指定体积是投射还是接收来自每个光源的阴影。
distanceDisplayConditionProperty|DistanceDisplayCondition
指定将在距相机的距离处显示此体积。

方法

方法名称参数返回类型描述
cloneresult: PolylineVolumeGraphicsPolylineVolumeGraphics复制此实例,将结果存储到提供的对象中,或者如果未提供则创建一个新实例。
mergesource: PolylineVolumeGraphicsvoid将此对象上每个未分配的属性分配给提供的源对象具有相同属性。

这些属性和方法可以帮助你控制体积折线的外观和行为,比如是否显示、填充颜色、轮廓、阴影等。通过使用这些属性和方法,可以在Cesium中创建出各种动态的体积折线效果,比如模拟空中的管道或者地面上的隧道。

代码:(详细注释)

// 定义一个名为addPolylineVolume的函数,它接受一个参数viewer,这个参数是一个Cesium Viewer实例
addPolylineVolume(viewer) {

  // 定义一个名为computeCircle的函数,用于计算圆形的边界点
  function computeCircle(radius) {
    let positions = []; // 初始化一个数组来存储圆上的点
    // 循环360次,每次增加1度,以生成圆上的点
    for (let i = 0; i < 360; i++) {
      let radians = Cesium.Math.toRadians(i); // 将角度转换为弧度
      // 计算圆上的点的坐标,并将其添加到positions数组中
      positions.push(
        new Cesium.Cartesian2(
          radius * Math.cos(radians), // 圆的x坐标
          radius * Math.sin(radians)  // 圆的y坐标
        )
      );
    }
    return positions; // 返回圆上的点的数组
  }

  // 使用viewer的entities.add方法添加一个新的实体到场景中
  viewer.entities.add({
    name: "polylineVolume", // 为实体设置一个名称,这里命名为"polylineVolume"
    polylineVolume: { // 定义一个线体积(polylineVolume)图形的属性
      positions: Cesium.Cartesian3.fromDegreesArray([
        -85.0, 32.0, // 点1: 经度-85.0,纬度32.0
        -85.0, 36.0, // 点2: 经度-85.0,纬度36.0
        -89.0, 36.0, // 点3: 经度-89.0,纬度36.0
      ]), // 定义线体积路径上的点
      shape: computeCircle(60000.0), // 调用computeCircle函数生成圆形边界点,半径为60000米
      material: Cesium.Color.RED, // 设置线体积的材质,这里使用红色
    },
  });
  // 使用viewer.zoomTo方法将视图缩放到新添加的实体,使其在视图中居中显示
  viewer.zoomTo(viewer.entities);
}

这段代码创建了一个线体积实体,并将其添加到Cesium的3D场景中。线体积是由一系列点定义的路径,以及一个沿着这条路径拉伸的形状(在这个例子中是一个圆形)。computeCircle函数用于生成圆形的边界点,这些点被用作线体积的形状。最后通过viewer.zoomTo方法将视图调整到这个新添加的实体上。

15、Rectangle

image
image
image

Cesium中的Rectangle是用于在地球上绘制矩形区域的一种方式。想象一下,如果你想要在一个地图上标记出一个矩形区域,比如一个湖泊或者一个城市的范围,Rectangle就是用来干这个的。下面是Rectangle的属性、方法及描述的表格表示:

属性

属性名称类型默认值描述
coordinatesProperty|Rectangle
定义矩形的经纬度坐标,包括西、东、南、北边界。
materialMaterialProperty|ColorColor.WHITE用于填充矩形的材料或颜色。
heightProperty|number0矩形相对于椭球体表面的高度。
extrudedHeightProperty|number
挤出矩形相对于椭球体表面的高度。
granularityProperty|numberCesium.Math.RADIANS_PER_DEGREE用于确定每个纬度和经度点之间的角度距离。
fillProperty|booleantrue是否用提供的材料填充矩形。
outlineProperty|booleanfalse是否绘制矩形的轮廓线。
outlineColorProperty|ColorColor.BLACK轮廓线的颜色。
outlineWidthProperty|number1.0轮廓线的宽度。注意:在Windows平台上的所有主流浏览器都会忽略此属性。
shadowsProperty|ShadowModeShadowMode.DISABLED是否显示阴影,可以是禁用、仅接收或两者都有。
distanceDisplayConditionProperty|DistanceDisplayCondition
指定矩形在距相机多远的距离内显示。

方法

方法名称参数返回类型描述
cloneresult: RectangleGraphicsRectangleGraphics复制此实例,将结果存储到提供的对象中,或者如果未提供则创建一个新实例。
mergesource: RectangleGraphicsvoid将此对象上每个未分配的属性分配给提供的源对象具有相同属性。

这些属性和方法可以帮助你控制矩形区域的外观和行为,比如是否显示、填充颜色、轮廓、阴影等。通过使用这些属性和方法,可以在Cesium中创建出各种动态的矩形效果,比如表示地理区域或者规划区域。

代码:

这段代码是用于在Cesium中绘制一个半透明的红色矩形,并将其聚焦到视图中。矩形的四个角由经纬度坐标定义,材质设置为半透明的红色。

// 定义一个名为addRectangle的函数,它接受一个名为viewer的参数,这个参数通常是Cesium的Viewer实例。
addRectangle(viewer) {
    // 在viewer的entities集合中添加一个新的实体。
    viewer.entities.add({
        // 给实体命名为"rectangle"
        name: "rectangle",
        // 定义一个rectangle属性,它包含了绘制矩形的配置。
        rectangle: {
            // coordinates属性定义了矩形的四个角的经纬度坐标。
            // 这里使用Cesium.Rectangle.fromDegrees方法创建一个矩形,坐标分别是:
            // 西经110度到东经80度,北纬20度到北纬25度。
            coordinates: Cesium.Rectangle.fromDegrees(
                -110.0, // 西边界经度
                20.0,   // 南边界纬度
                -80.0,  // 东边界经度
                25.0    // 北边界纬度
            ),
            // material属性定义了矩形的材质,这里使用Cesium.Color.RED.withAlpha(0.5)设置为半透明的红色。
            material: Cesium.Color.RED.withAlpha(0.5),
        },
    });

    // 使用viewer.zoomTo方法将视图聚焦到刚刚添加的实体上。
    viewer.zoomTo(viewer.entities);
}

16、Wall

image
image
image

Cesium中的Wall用于创建一个沿着一系列点向下延伸至地面的墙体。下面是Wall的属性、方法及描述的表格表示:

属性

属性名称类型默认值描述
showProperty|booleantrue指定墙体的可见性。
positionsProperty|Array.
定义墙体顶部的Cartesian3位置数组。
minimumHeightsProperty|Array.
定义墙体底部的高度数组,相对于地球表面。
maximumHeightsProperty|Array.
定义墙体顶部的高度数组,而不是每个位置的高度。
granularityProperty|numberCesium.Math.RADIANS_PER_DEGREE每个纬度和经度点之间的角距离。
fillProperty|booleantrue指定墙体是否填充了所提供的材料。
materialMaterialProperty|ColorColor.WHITE指定用于填充墙体的材料。
outlineProperty|booleanfalse指定是否勾勒出墙体的轮廓。
outlineColorProperty|ColorColor.BLACK指定轮廓的颜色。
outlineWidthProperty|number1.0指定轮廓的宽度。
shadowsProperty|ShadowModeShadowMode.DISABLED指定墙体是否投射或接收来自光源的阴影。
distanceDisplayConditionProperty|DistanceDisplayCondition
指定墙体在距相机多远的距离内显示。

方法

方法名称参数返回类型描述
cloneresult: WallGraphicsWallGraphics复制此实例,将结果存储到提供的对象中,或者如果未提供则创建一个新实例。
mergesource: WallGraphicsvoid将此对象上每个未分配的属性分配给提供的源对象具有相同属性。

这些属性和方法可以帮助你控制墙体的外观和行为,比如是否显示墙体、墙体的颜色和轮廓、以及墙体在何时可见等。通过使用这些属性和方法,可以在Cesium中创建出各种动态的墙体效果,比如建筑物的外墙或者隔离墙。

代码:

这段代码是用于在Cesium中绘制一个带有锯齿状高度和轮廓线的蓝色墙体,并将其聚焦到视图中。墙体由一系列沿着同一纬度线的点组成,每个点都有最小和最大高度,形成锯齿状的效果。墙体的材质设置为半透明的蓝色,并且有黑色的轮廓线。

// 定义一个名为addWall的函数,它接受一个名为viewer的参数,这个参数通常是Cesium的Viewer实例。
addWall(viewer) {

    // 在viewer的entities集合中添加一个新的实体。
    viewer.entities.add({
        // 给实体命名为"Blue wall with sawtooth heights and outline"
        name: "Blue wall with sawtooth heights and outline",
        // 定义一个wall属性,它包含了绘制墙体的配置。
        wall: {
            // positions属性定义了墙体上各点的坐标,这里使用Cesium.Cartesian3.fromDegreesArray方法
            // 将经纬度坐标转换成Cesium内部使用的笛卡尔坐标系。墙体是沿着纬度50.0度的一系列点。
            positions: Cesium.Cartesian3.fromDegreesArray([
                -115.0, 50.0,
                -112.5, 50.0,
                -110.0, 50.0,
                -107.5, 50.0,
                -105.0, 50.0,
                -102.5, 50.0,
                -100.0, 50.0,
                -97.5, 50.0,
                -95.0, 50.0,
                -92.5, 50.0,
                -90.0, 50.0,
            ]),
            // maximumHeights属性定义了墙体上各点的最大高度,这里设置了一个交替的高低模式。
            maximumHeights: [ // 设定每个点的最大高度
                100000,
                200000,
                100000,
                200000,
                100000,
                200000,
                100000,
                200000,
                100000,
                200000,
                100000,
            ],
            // minimumHeights属性定义了墙体上各点的最小高度,这里设置了一个交替的模式,从地面开始。
            minimumHeights: [// 设定每个点的最小高度
                0,
                100000,
                0,
                100000,
                0,
                100000,
                0,
                100000,
                0,
                100000,
                0,
            ],
            // material属性定义了墙体的材质,这里使用Cesium.Color.BLUE.withAlpha(0.5)设置为半透明的蓝色。
            material: Cesium.Color.BLUE.withAlpha(0.5),
            // outline属性设置为true,表示墙体有轮廓线。
            outline: true,
            // outlineColor属性定义了轮廓线的颜色,这里设置为黑色。
            outlineColor: Cesium.Color.BLACK,
        },
    });

    // 使用viewer.zoomTo方法将视图聚焦到刚刚添加的实体上。
    viewer.zoomTo(viewer.entities);
}

欢迎关注我的博客及B站

博客:

https://blog.csdn.net/weixin_44857463/article/details/129157708

B站:

https://space.bilibili.com/610654927?spm_id_from=..0.0


点击蓝字  关注我们
扫码关注
我们一起学习!

GISer世界
热门GIS开源库介绍、GIS开源库实战教程、GIS技术前沿动态(关注GIS技术的最新发展)、GIS行业应用案例分享(分享众多GIS在不同行业中的应用案例)、GIS技术交流互动
 最新文章