一、Cesium前端实现倾斜摄影数据单体化
查看Cesium SDK包示例 Classification.html
二、动态单体化
整体思路:
1、找到一个倾斜摄影数据中一个建筑物底面shp,获取其中一点的x,y,及高程z
选取x,y,z/2 将其转换为世界坐标
var position = Cesium.Cartesian3.fromDegrees(x, y, z);
2、套用代码
var center = new Cesium.Cartesian3(position.x, position.y, position.z);// 输入已转换得到的世界坐标
var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center);// 其中以提供的原点为中心的东北向上轴到提供的椭球的固定参考系
// Cesium.Matrix3.fromHeadingPitchRoll(headingPitchRoll, result) → Matrix3 第一个参数 headingPitchRoll 第二个参数result
// Cesium.HeadingPitchRoll(heading, pitch, roll) → HeadingPitchRoll heading 航向,pitch 俯仰,roll 滚动
var hprRotation = Cesium.Matrix3.fromHeadingPitchRoll(new Cesium.HeadingPitchRoll(2.619728786416368, 0.0, 0.0));// 旋转
var hpr = Cesium.Matrix4.fromRotationTranslation(hprRotation, new Cesium.Cartesian3(0.0, 0.0, -2.0));
// 获取矩阵
Cesium.Matrix4.multiply(modelMatrix, hpr, modelMatrix);
var buildingHighlight = scene.primitives.add(new Cesium.ClassificationPrimitive({
geometryInstances : new Cesium.GeometryInstance({
geometry : Cesium.BoxGeometry.fromDimensions({
vertexFormat : Cesium.PerInstanceColorAppearance.VERTEX_FORMAT,// 相切关系
dimensions : new Cesium.Cartesian3(89.0, 66.5, 49.0) // 三个参数为长,宽,高
}),
modelMatrix : modelMatrix,
attributes : {
color : Cesium.ColorGeometryInstanceAttribute.fromColor(new Cesium.Color(1.0, 0.0, 0.0, 0.5)),
show : new Cesium.ShowGeometryInstanceAttribute(true)
},
id : 'volume'
}),
classificationType : Cesium.ClassificationType.CESIUM_3D_TILE
}));
3、在初始化时将建筑物底面shp生成一个box的entity隐藏,绑定点击事件,点击事件促发,走第一步第二步代码
二、设置最大最小显示级别
viewer.scene.screenSpaceCameraController.minimumZoomDistance = 1200;
viewer.scene.screenSpaceCameraController.maximumZoomDistance = 2500;
理论来源:
- https://www.cnblogs.com/lyggqm/p/10563590.html?tdsourcetag=s_pcqq_aiomsg // 3DTiles单体化的理论知识
PS:后续小编的主要精力放到GIS理论开发知识的大众化的道路了,通过浅显易懂的语言,结合多年行业应用开发,通过微信订阅号传播(每周更新三篇文章及相关GIS编码知识),为GIS的发展尽微博之力。终极目标是让GIS不再专业,让GIS更加大众,使得GIS深入各行业应用,让每位GISER都有一股自豪感!以下是我的微信订阅号二维码,感兴趣的可以交流沟通!
一位更懂IT的GISER,一位更懂GIS的IT