CESIUM例子学习(八)——Geometry and Appearances(2)

一、wall(墙)

cesium里提供了绘制墙的方法,也就是垂直于地表的一个面。绘制原理是沿着一条线,利用线上各点的最大高度和最小高度来绘制垂直于地表的面。默认情况下,最小高度是0,代码如下:

function addWall () {
    let entity = viewer.entities.add({
        wall: {
            指定墙顶上一系列的点
            positions: Cesium.Cartesian3.fromDegreesArray([
                106.941991, 25.917029,
                107.941991, 26.917029,
                108.941991, 27.917029,
            ]),
            maximumHeights: [500000, 600000, 500000],指定墙顶上一系列点的高度,也就是墙对应点上的高度。
            minimumHeights: [0, 300000, 0],指定墙下一系列点的高度,也就是墙下对应点离地的高度。不指定则帖地。
            outline: true,
            outlineColor: Cesium.Color.LIGHTGRAY,
            outlineWidth: 4,
            material: Cesium.Color.fromRandom({ alpha: 0.7 }),
        },
    });
    viewer.flyTo(entity)
}

绘制结果如下图:

代码中需要注意的是如果没有在positions中指定墙顶点的高度,也没有在maximumHeights中指定,则无法绘制出墙的效果。

二、corridor(廊)

cesium的corridor类似于GIS里的线状缓冲区。AP如下图:

其中不需要注意的是,height与extrudedHeight这两个属性。height:是廊相对于椭球体表面的距离;extrudedHeight是廊的挤出面(上表面)相对于椭球体表面的距离,此时,廊相当于有厚度的墙,而廊的高度=abs(height-extrudedHeight)。也就是当extrudedHeight大于height时,extrudedHeight是廊的挤出面(上表面),下表面高度是height。如下图:

当extrudedHeight小于height时,extrudedHeight是廊的下表面,height是上表面高度。如下图:

当extrudedHeight等于height或不设置extrudedHeight时,绘制的是以height为高度的面。如下图:

代码如下:

function addCorridor () {
    let positions = Cesium.Cartesian3.fromDegreesArray([
        108.941991, 27.917029,
        109.441991, 28.617029,
        109.641991, 28.317029,
        // 109.941991, 27.417029
    ])
    let entity = viewer.entities.add({
        polyline: {
            positions: positions,
            material: Cesium.Color.RED,
            width: 4,
            clampToGround: true,
        },
        corridor: {
            positions: positions,
            width: 500,
            height: 3000,
            extrudedHeight: 40,
            material: Cesium.Color.fromRandom({ alpha: 0.7 }),
        },
    });
    viewer.flyTo(entity)
}

三、PolylineVolume(管体)

PolylineVolume是cesium提供了绘制各种形状管体的接口,管体的横截面由属性参数shape接收。代码如下:

function addPolylineVolume () {
    positions = [];
    for (i = 0; i < 5; ++i) {
        positions.push(Cesium.Cartesian3.fromDegrees(108.941991 + i, 27.917029));
    }
    let entity = viewer.entities.add({
        polylineVolume: {
            positions: Cesium.Cartesian3.fromDegreesArray([
                -104.0,
                13.0,
                -107.0,
                18.0,
                -112.0,
                18.0,
            ]),
            shape: computeCircle(40000.0),
            material: Cesium.Color.WHITE,
        },
    });
    viewer.flyTo(entity)
    function computeCircle (radius) {
        var positions = [];
        for (var i = 0; i < 360; i++) {
            var radians = Cesium.Math.toRadians(i);
            positions.push(
                new Cesium.Cartesian2(
                    radius * Math.cos(radians),
                    radius * Math.sin(radians)
                )
            );
        }
        return positions;
    }
}

绘制结果如下图:

可以看到在管道的转变处,绘制自动作了平滑。这样利用PolylineVolume可以做一些简单的数据量小的管道绘制。对复杂的,数据量大的,还是做成模型瓦片。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要在Cesium中定位Geometry,您需要使用Cesium的实体(Entity)对象。实体对象能够让您在3D场景中创建和管理几何图形对象,例如点、线、面等。 要创建一个实体对象并定位Geometry,您可以按照以下步骤进行操作: 1. 创建一个实体对象:使用Cesium.Entity()构造函数创建一个实体对象。 2. 设置实体的位置:使用实体对象的position属性设置位置。位置可以是一个经纬度坐标,也可以是一个笛卡尔坐标。 3. 创建Geometry对象:使用Cesium.Geometry()构造函数创建一个几何图形对象。您可以选择使用Cesium提供的几何图形对象,也可以自己创建一个几何图形对象。 4. 创建Appearance对象:使用Cesium.Appearance()构造函数创建一个外观对象。外观对象定义几何图形的材质、颜色等属性。 5. 将GeometryAppearance对象附加到实体对象中:使用实体对象的geometryappearance属性将几何图形对象和外观对象附加到实体对象中。 6. 将实体对象添加到场景中:使用Cesium的实体管理器将实体对象添加到场景中。 下面是一个示例代码,展示如何在Cesium中定位一个圆形几何对象: ```javascript var viewer = new Cesium.Viewer('cesiumContainer'); // 创建一个实体对象 var entity = new Cesium.Entity(); // 设置实体的位置 entity.position = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883); // 创建Geometry对象 var circleGeometry = new Cesium.CircleGeometry({ center: Cesium.Cartesian3.ZERO, radius: 100000 }); // 创建Appearance对象 var circleAppearance = new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color: Cesium.Color.RED }) }); // 将GeometryAppearance对象附加到实体对象中 entity.geometry = circleGeometry; entity.appearance = circleAppearance; // 将实体对象添加到场景中 viewer.entities.add(entity); ``` ### 回答2: Cesium是一种广泛应用于地理信息系统(GIS)和虚拟地球领域的开源JavaScript库。它提供了一个强大的地理可视化引擎,可以在网页浏览器中实时展示和交互式探索地球表面的各种地理数据。 Cesium定位geometryCesium中的一个功能,用于定义和处理地理空间中的几何形状。几何形状可以是点、线、面或体,它们分别代表地球上的某个位置、路径、多边形或体积。 通过Cesium定位geometry,用户可以创建和编辑各种几何形状,并将其与其他地理数据进行关联。例如,可以使用Cesium定位geometry在地球表面上标记特定的位置,将不同位置连接起来形成路径,或者定义某个区域的边界。 除了创建和编辑几何形状,Cesium定位geometry还支持与其他功能和数据进行集成。例如,可以将几何形状与地图、卫星图像或其他地理数据集进行叠加显示。用户还可以通过鼠标或触摸屏等交互方式来操纵几何形状,例如平移、缩放或旋转等操作。 通过Cesium定位geometry,用户可以实现对地理数据实时的可视化和交互式探索。无论是在GIS应用中还是虚拟地球环境下,它都提供了一个强大而灵活的工具,可以帮助用户更好地理解和分析地球上的空间信息。 ### 回答3: Cesium定位geometry是一种开源的JavaScript库,用于在Cesium地理空间可视化平台上进行几何定位。它提供了丰富的功能和工具,可以处理二维和三维几何对象,并允许用户在地球表面或其他地理空间上进行定位和分析。 Cesium定位geometry支持多种几何对象,包括点、线、多段线、面和体积。用户可以通过指定坐标、属性和样式信息来创建这些对象,并将其添加到Cesium地球模型中进行显示。几何对象可以具有不同的颜色、大小和形状,以满足用户的需求。 该库还提供了一系列的几何操作和分析工具,可以对几何对象进行编辑、转换和查询。用户可以通过移动、旋转和缩放几何对象来修改其位置和形状。同时,用户可以利用空间分析工具来计算几何对象之间的距离、面积和体积等参数。 Cesium定位geometry还支持基于地理信息系统(GIS)数据的几何定位。用户可以将GIS数据导入到Cesium平台中,并将其转换为几何对象进行显示和分析。这样,用户可以在地球上展示各种地理信息,如道路、建筑物、水域等,并进行进一步的定位和分析。 总的来说,Cesium定位geometry是一个功能强大的几何定位库,它为用户提供了丰富的几何对象和操作工具,帮助他们在地理空间上进行准确的定位和分析。无论是进行数据可视化、地理信息系统开发还是地理空间分析,Cesium定位geometry都能够为用户提供高效便捷的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值