cesium实现加载面状文件(PolygonGeometry)绘制墙体(WallGeometry)


Cesium实战系列文章总目录传送门

加载面状的geojson文件,实现墙体(WallGeometry)的绘制。

1.实现效果

在这里插入图片描述

2.实现方法

首先看一下官方文档关于PolygonGeometry和WallGeometry的构成解释。

2.1 PolygonGeometry

在这里插入图片描述PolygonGeometry使用PolygonHierarchy属性保存点位数据。
positions指面状外边界的坐标数组;holes只面状内部“洞”数据。

2.2 WallGeometry

在这里插入图片描述
**positions:**也是指底部点数组。但还包含墙体的最大最小高度数据,该数据与底部点数组是一一对应的。

2.3将面转换为墙显示

只需要将面的底部点数组传给墙体,并设置墙体的最大最小高度数据即可。
这里使用primitives方式加载数据,具体代码如下:

// 使用primitive方式加载geojson
let urlPath = './data/park/parks.geojson';
// 使用jQuery异步加载json数据
$.get(urlPath, function(data) {
    const features = data.features;
    addDataToGlobe(features);
})

function addDataToGlobe(features) {
    const instances = [];
    for (let i = 0; i < features.length; i++) {
        for (let j = 0; j < features[i].geometry.coordinates.length; j++) {
            const polygonArray = features[i].geometry.coordinates[j].toString().split(',');
            const geometry = new Cesium.WallGeometry({
                positions: Cesium.Cartesian3.fromDegreesArray(polygonArray),
                // 设置高度
                maximumHeights: new Array(polygonArray.length).fill(50),
                minimunHeights: new Array(polygonArray.length).fill(0),
            })
            instances.push(new Cesium.GeometryInstance({
                geometry: geometry,
                attributes: {
                    color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.GREEN),
                },
            }));
        }
    }
    // 合并单个geometry,提高渲染效率
    const primitive = new Cesium.Primitive({
        geometryInstances: instances,
        // PerInstanceColorAppearance:使用每个实例自定义的颜色着色
        appearance: new Cesium.PerInstanceColorAppearance(),
    });
    this.viewer.scene.primitives.add(primitive);
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

右弦GISer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值