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

这一节是关于在cesium地球上绘制各种要素的,包括矩形、多边形、圆、椭圆、柱体、锥体、盒子和球体。个人觉得这个内容应该放在第一节先学,因为cesium很多东西都是以绘制为基础。

一、Rectangle(矩形)

1、加载Rectangle

Rectangle就是通过传入的两个点,在地球上绘制一个矩形。本来一个矩形应该需要四个点,但函数只需要两个点,如下图API:

解释得明白,也就是传入矩形的左下角和右上角。如果传成了左上角和右下角,会得报如下错误:

正确代码如下:

function addRectangle () {
    let entity = viewer.entities.add({
        rectangle: {
            coordinates: Cesium.Rectangle.fromDegrees(108.941991, 27.917029, 109.941991, 28.917029),
            outline: true,
            outlineColor: Cesium.Color.WHITE,
            outlineWidth: 4,
            stRotation: Cesium.Math.toRadians(45),
            material: stripeMaterial,
        },
    });
    // viewer.flyTo(entity)
}

2、outline与height

用上面的代码,得到的结果是这样的。如下图:

即矩形是帖在地表上的,此时outline也没有起作用,因为在在没有默认情况下,矩形就是帖地的,而且些时会有一个警告信息:Entity geometry outlines are unsupported on terrain. Outlines will be disabled. To enable outlines, disable geometry terrain clamping by explicitly setting height to 0。如下图:

二、Polygon(多边形)

Polygon以PolygonHierarchy类型创建,代码如下:

function addPolygon () {
    let entity = viewer.entities.add({
        polygon: {
            hierarchy: new Cesium.PolygonHierarchy(
                Cesium.Cartesian3.fromDegreesArray([
                    -107.0,
                    27.0,
                    -107.0,
                    22.0,
                    -102.0,
                    23.0,
                    -97.0,
                    21.0,
                    -97.0,
                    25.0,
                ])
            ),
            outline: true,
            outlineColor: Cesium.Color.WHITE,
            outlineWidth: 4,
            material: stripeMaterial,
        },
    });
    viewer.flyTo(entity)
}

Polygon属性与Rectangle类似。

三、Ellipse(椭圆)

Ellipse是绘制圆或椭圆的,椭圆有长半轴和短半轴,长短半轴不一样就是椭圆;而圆是特殊的椭圆,它长短半轴一样长。所以cesium里,绘制圆和椭圆都是一样的代码,只是设置了不同长短半轴。代码如下:

function addEllipse () {
    let entity = viewer.entities.add({
        position: Cesium.Cartesian3.fromDegrees(-117.0, 35.0),
        ellipse: {
            semiMinorAxis: 100000.0,// 长半轴
            semiMajorAxis: 200000.0,//短半轴
            // height: 100000.0,
            // extrudedHeight: 200000.0,
            rotation: Cesium.Math.toRadians(90.0),
            outline: true,
            outlineColor: Cesium.Color.WHITE,
            outlineWidth: 4,
            material: Cesium.Color.fromRandom({ alpha: 1.0 }),
        },
    });
    viewer.flyTo(entity)
}

其它属性与Rectangle类似。

三、cylinder圆柱与圆锥)

cesium里,cylinder可以绘制圆柱与可以绘制圆锥。  代码如下:

function addCylinder () {
    let entity = viewer.entities.add({
        position: Cesium.Cartesian3.fromDegrees(-70.0, 45.0, 100000.0),
        cylinder: {
            length: 20000.0,柱面长度
            topRadius: 25000.0, 上柱面圆半径
            bottomRadius: 15000.0,下柱面圆半径
            outline: true,
            outlineColor: Cesium.Color.WHITE,
            outlineWidth: 4,
            material: Cesium.Color.fromRandom({ alpha: 1.0 }),
        },
    });
    viewer.flyTo(entity)
}

绘制结果如图:

绘制圆锥只需要设置上柱面圆半径为0,或下柱面圆半径为0即可。如下图:

四、box(盒子)与Ellipsoid(球体)

box(Ellipsoid)是cesium通过指定位置和长宽高来绘制盒子(球体)的接口,其中东西为长、南北为宽。需要注意的是boxbox(Ellipsoid)的options中并没有height属性还指定盒子的离地高度,而在中心点坐标中指定。box绘制代码如下:

function addBox () {
    let p = Cesium.Cartesian3.fromDegrees(107.941991, 25.917029, 3000)
    let entity = viewer.entities.add({
        position: p,
        //加载蓝色中心点
        point: {
            color: Cesium.Color.BLUE,
            pixelSize: 8
        },
        box: {
            dimensions: new Cesium.Cartesian3(1900.0, 900.0, 300.0),//盒子的长、宽、高
            outline: true,
            outlineColor: Cesium.Color.WHITE,
            outlineWidth: 2,
            material: Cesium.Color.RED.withAlpha(0.3),
        },
    });
    viewer.flyTo(entity)
}

绘制结果如图:

Ellipsoid绘制代码如下:

function addEllipsoid () {
    let p = Cesium.Cartesian3.fromDegrees(107.941991, 26.917029, 18000)
    let entity = viewer.entities.add({
        position: p,
        ellipsoid: {
            radii: new Cesium.Cartesian3(16700.0, 6700.0, 6700.0),//球体的长、宽、高,当长=宽=高时为正球体
            outline: true,
            outlineColor: Cesium.Color.WHITE,
            outlineWidth: 2,
            material: Cesium.Color.fromRandom({ alpha: 0.5 }),
        },
    });
    viewer.flyTo(entity)
}

绘制结果如下图:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值