SuperMap iClient3D for WebGL模型炸开

作者 Kele

前言

在三维项目中,BIM模型是非常常见的数据格式,BIM分层、BIM爆炸查看内部结构是三维系统常见的功能。对于BIM爆炸,我想大家都知道其实现原理是控制构件的偏移,然而要实现各个构件向四周发散型的爆炸效果,各个构件的偏移方向及偏移量该如何计算呢,接下来我向大家提供一种新的思路

一、实现思路

实现模型爆炸的核心接口是模型偏移,setBatchObjsTranslate
实现模型向四周爆炸效果,那么每个模型构建的偏移方向、偏移距离都会不同,我们按以下步骤实现
1.获取整个图层中心点
2.获取各个构建中心点
3.计算各个构建的偏移方向和偏移距离
4.实现偏移

二、数据准备

1.获取各个构建中心点
在这里插入图片描述

坐标系选择wgs84,该方法只能获取模型构建xy坐标,接下来获取模型构建z坐标
在这里插入图片描述

通过模型属性提取,获得最大最小高度,再通过计算平均值得到中心点z值(顶部高程 + 底部高程)/ 2,记得提前建好字段来保存z值
在这里插入图片描述

这样,我们就获取到各个构建的中心点坐标了
由于后面我们会通过数据服务查询的方式获取这些坐标,为了使查询更快,我们将模型的属性信息单独存为属性表,查询数据的时候查询这个属性表
在这里插入图片描述

2.模型数据生成缓存
将模型数据集添加到场景,保存场景,对场景生成缓存
缓存成功后,打开生成的工作空间,将数据源添加进来,确保当前工作空间有数据源和场景
发布数据服务和三维服务

三、WebGL实现步骤

1.获取图层中心点

function getLayerCenterPos() {
    building = viewer.scene.layers.find('楼板_办公楼__@DatasourceYYD007');
    if(building){
        let cartographic = Cesium.Cartographic.fromCartesian(building._position);
        let longitude = Cesium.Math.toDegrees(cartographic.longitude);
        let latitude = Cesium.Math.toDegrees(cartographic.latitude);
        let height = cartographic.height;
        let layerCenterPos = Cesium.Cartesian3.fromDegrees(longitude,latitude,height);
        return layerCenterPos
    }
}

2.获取构建中心点
构建中心点坐标我们已经在上面处理好了,现在通过查询数据服务获取

function modelTranslate(layerCenterPos) {
    let sqlParameter = {
        toIndex: -1,
        datasetNames: ["DatasourceYYD007:info"],
        getFeatureMode: "SQL",
        queryParameter: {
            attributeFilter: "smid>=0"
        }
    };
    let url = dataUrl;
    let queryData = JSON.stringify(sqlParameter);

    $.ajax({
        type: "post",
        url: url,
        data: queryData,
        success: function (result) {
            let resultObj = JSON.parse(result);
            for(let item of resultObj.features){
            	//构件中心点
                let center = Cesium.Cartesian3.fromDegrees(Number(item.fieldValues[12]),Number(item.fieldValues[13]),Number(item.fieldValues[14]));
            }
        },
        error: function (msg) {
            console.log(msg);
        },
    })
}

3.通过图层中心点和各个构建中心点,计算偏移参数

//将图层中心点变换成4*4矩阵
let transform = Cesium.Transforms.eastNorthUpToFixedFrame(layerCenterPos);
let inverseTransform = Cesium.Matrix4.inverseTransformation(transform, {});
//计算图层中心点矩阵与构建中心点乘积,得到变换矩阵
Cesium.Matrix4.multiplyByPoint(inverseTransform, center, center);
//计算图层中心点与构建中心点距离
let distance = Cesium.Cartesian3.magnitude(center);
oExplode.directions.push(Cesium.Cartesian3.clone(center));
Cesium.Cartesian3.normalize(center, center);
oExplode.distances.push(distance);
oExplode.directions_normalize.push(center);
oExplode.ids.push(Number(item.fieldValues[0]));

4.执行偏移

Cesium.knockout.track(viewModel);
let toolbar = document.getElementById('toolbar');
Cesium.knockout.applyBindings(viewModel, toolbar);
Cesium.knockout.getObservable(viewModel, 'scale').subscribe(
        function (newValue) {
            let option = {};
            for (let i = 0; i < oExplode.ids.length; i++) {
                let currentTranslate = new Cesium.Cartesian3(
                		//新偏移量 = 原始偏移量*偏移比例*输入偏移值
                        oExplode.directions_normalize[i].x * oExplode.scale[i] * newValue,
                        oExplode.directions_normalize[i].y * oExplode.scale[i] * newValue,
                        oExplode.directions_normalize[i].z * oExplode.scale[i] * newValue
                );
                option[i] = currentTranslate
            }
            building.setBatchObjsTranslate(option)
        }
);

四、效果展示

在这里插入图片描述
小提示:偏移接口底层优化过,需要结合最新WebGL包使用,demo和包获取地址:
链接:https://pan.baidu.com/s/15MDsElNVFaiTfkK5XZ6j5A
提取码:6655

### 回答1: SuperMap iClient 3D for WebGL 是一款基于 WebGL 技术的三维地图开发工具,主要用于构建具有三维效果的地图应用程序。该工具提供了丰富的 API 接口和示例代码,可以帮助开发者快速上手,实现各种三维地图功能,如地形展示、建筑物模型、动态效果等。同时,SuperMap iClient 3D for WebGL 还支持多种数据格式,包括 SuperMap iServer 数据、OGC 标准数据、KML、GeoJSON 等,可以满足不同应用场景的需求。 ### 回答2: SuperMap iClient3D for WebGL是一个基于WebGL技术的三维地图开发框架。它提供了一系列的API和工具,使开发人员能够更加轻松地构建出高质量的三维地图应用。下面,我将从以下几个方面介绍SuperMap iClient3D for WebGL教程。 一、环境配置 SuperMap iClient3D for WebGL的开发需要先配置开发环境,包括安装Node.js、下载安装SuperMap iServer、下载安装SuperMap iClient3D资源包、创建Web应用程序。 二、基本概念 在学习SuperMap iClient3D for WebGL之前,需要了解一些基本概念。这些概念包括:场景(Scene)、层(Layer)、覆盖物(Overlay)等。在使用SuperMap iClient3D for WebGL时需要理解这些概念。 三、API使用 SuperMap iClient3D for WebGL提供了众多的API,使用这些API能够快速构建出一个三维地图应用。这些API包括:场景相关的API,如创建场景、设置场景属性等;层相关的API,如加载图层数据、隐藏、显示图层等;覆盖物相关的API,如创建点、线、面等覆盖物。 四、进阶应用 在掌握SuperMap iClient3D for WebGL的基础之后,可以通过进阶应用来进一步加深对这个框架的理解。进阶应用包括地球的三维测量、地球的动态效果、地球的热点区域等。 总之,SuperMap iClient3D for WebGL是一个非常实用的三维地图开发框架。通过学习其教程,开发人员可以更加方便、快速地构建出高质量的三维地图应用。 ### 回答3: SuperMap iClient 3D for WebGL是一款基于WebGL技术的开源GIS JavaScript库,用于构建高效、功能强大的3D GIS应用程序。这个库支持在Web浏览器里实现高质量的三维可视化效果,包括三维地形、建筑物、模型、标签等。现在,我来为你们讲解一下关于SuperMap iClient 3D for WebGL的教程。 一、前置知识 在接触SuperMap iClient 3D for WebGL之前,建议你先学习基本的WebGL知识和JavaScript语言,也应该具备计算机图形学基础和3D模型制作知识。 二、环境配置 在使用SuperMap iClient 3D for WebGL前,我们需要进行环境配置,在编写和运行项目时可以根据需要安装一系列依赖项,例如Node.js、npm包管理器、Gulp自动化工具、webpack工具和TypeScript编译器等。 三、基本使用 SuperMap iClient 3D for WebGL提供了丰富的API以实现3D可视化应用程序的开发,其中包括地图、图层、标注、工具、渲染等方面。同时,它还提供了多种数据格式的支持,如XYZ、OGC、JSON、KML、GML等。此外,SuperMap iClient 3D for WebGL还支持多种操作和交互方式,如平移、旋转、缩放、选取、编辑等,让用户可以更加自由地探索和编辑地图数据。 四、示例应用 SuperMap iClient 3D for WebGL提供了一系列的示例应用程序,可以帮助用户更好的理解其使用方法和特点,其中包括一些经典的三维场景展示和实时数据可视化等。例如,用户可以体验到城市三维建模、天气预报、热力图、空气质量监控等实用的功能。此外,SuperMap iClient 3D for WebGL也提供了一些模板和组件,供用户快速搭建自己的3D GIS应用程序。 总之,SuperMap iClient 3D for WebGL是一款非常优秀的基于WebGL技术的GIS JavaScript库,具有开源、高效、功能强大、易用等特点,可以为用户提供丰富多彩的三维GIS应用程序。当然,在使用前,建议用户先了解基本的WebGL和JavaScript知识,同时还需配置好开发环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值