cesium--绘制多边形polygon

本文详细介绍了如何使用CesiumJS API中的PolygonGraphics和相关参数,绘制带有内部孔洞的复杂多边形,并提供了具体代码示例,帮助读者掌握在地球模型上创建精确地理图形的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在线沙盒案例:
https://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=Polygon.html
api查询地址:
https://cesiumjs.org/refdoc/

查询结果截图:
在这里插入图片描述
区别:

名称作用
CoplanarPolygonGeometry
CoplanarPolygonOutlineGeometry
PolygonGeometry这个好像是给底层用的
PolygonGeometryUpdater一般客户端不用
PolygonHierarchy定义多边形及其孔的线性环的层次。这些孔本身也可能有嵌套内部多边形的孔。
PolygonOutlineGeometry椭球上多边形轮廓的描述。多边形由多边形层次定义。
PolygonGraphics描述由组成外部形状和任何嵌套孔的线性环层次定义的多边形。多边形符合球体的曲率,可以放置在表面或高度上,也可以随意拉伸成一个体积。

黄色的是我们经常用到的

api详解

名称作用
hierarchy指定多边形层次结构,说白了就是多边形的经纬度
height距离地表高度
heightReference相对高度的高度
extrudedHeight厚度
extrudedHeightReference相对厚度
show控制显隐
fill是否填充
material填充颜色
outline是否有外边线
outlineColor外边线颜色
outlineWidth外边线宽度
stRotation指定多边形纹理从北逆时针旋转的数值属性。
granularity指定每个纬度和经度点之间的角度距离的数值属性
perPositionHeight是否利用每个点的高度,制造幅度?
closeTop是否关闭多边形的顶部,也就是拿掉盖子
closeBottom是否关闭底部
shadows阴影
distanceDisplayCondition定义与相机的距离
classificationType一个枚举属性,指定此多边形在地面上时是将地形、三维图块分类,还是两者都分类
arcType线条类型
zIndex遮盖顺序

例子

简单的例子就不列举了,这里主要教大家画回环
我们知道,画完了图形,需要添加到实体中,才能在地球上显示

//几何绘制
var gemeotryDraw = {
    //绘制长方体
    cuboidDraw: function () {
        //难点在于回环的理解,画回环,需要先画出这个多边形,然后在这个多边形里,挖出一块来
        //通过经纬度,笛卡尔坐标系,定义多边形的四个顶点
        var positions=Cesium.Cartesian3.fromDegreesArray([105,20,117,20,122,30,105,30]);     
        //同理,定义需要挖的形状的四个顶点
        var hole=Cesium.Cartesian3.fromDegreesArray([110,23,112,23,115,27,110,27]);
        //定义需要传给hierrchy的参数
        var x={
            positions:positions,
            //由于挖的这个洞,是x本身的一种数组集合,所以每一个对象里,又是一个x的形式
            holes:[{positions:hole}]
        };
        var cuboid = viewer.entities.add({
            name: "长方体",
            polygon:{
                hierarchy:x,
                height: 10000,
                //extrudedHeight: 21000,
                outline: true,
                outlineWidth: 100,
                //fill: false,
                arcType: Cesium.ArcType.RHUMB,
                material: Cesium.Color.RED
            } 
        });
        viewer.zoomTo(cuboid);
    },
    clear: function () {

    }
    //绘制圆形

}

效果图如下:
在这里插入图片描述

### 实现绘制图形编号的方法 在 Vue-Cesium 项目中,为了给绘制的图形添加编号,可以通过创建有标签的实体来实现这一需求。具体来说,在定义每一个几何体的同时,还可以通过 `label` 属性为该对象附加一个文本标签用于显示其对应的序号。 下面是一个简单的例子展示如何在一个多边形上设置编号: ```javascript const index = 1; // 假设这是第一个被添加的实体 // 创建一个多边形并为其分配唯一ID以及位置信息 const entity = viewer.entities.add({ id: 'polygon_' + index, polygon: { hierarchy: Cesium.Cartesian3.fromDegreesArray([ -109.080842, 45.002073, -104.058488, 45.002073, -104.053011, 41.003906, -105.728954, 41.003906 ]), height: 5000, material: Cesium.Color.BLUE.withAlpha(0.5), outline: true, outlineColor: Cesium.Color.BLACK }, label: { // 添加此部分以包含编号作为标签 text: String(index), // 将索引转换成字符串形式 font: '14px monospace', fillColor: Cesium.Color.WHITE, showBackground: false, horizontalOrigin: Cesium.HorizontalOrigin.LEFT, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, position: new Cesium.Cartographic( Cesium.Math.toRadians(-106.86966), Cesium.Math.toRadians(43.0029895), 5000 ) } }); ``` 上述代码片段展示了怎样利用 `viewer.entities.add()` 函数中的 `label` 参数来设定每个图形上的文字说明[^3]。对于动态生成多个有序列号的对象,则可以在循环结构内部调整变量 `index` 的值,并相应地改变每个多边形的位置和其他属性。 此外,如果希望这些编号能够随着视图的变化而自动调整位置以便始终保持可见状态,那么可能还需要进一步配置 `label` 的定位方式或者其他相关参数。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李卓书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值