cesium数据(七)关于单体化
cesium中的单体化,有几种方案
- 使用batchID,这种方式,需要修改3dtile的瓦片,在模型中添加batchID信息,最好是能拿到原始数据进行重新生产
- 使用三维+二维服务的方式,三维界面中获取鼠标的位置,根据位置去二维服务中查询,然后获取范围,再反馈给界面,例如鼠标点击三维模型上的房子,拿到坐标,到二维服务中查到房子的范围多边形,返回给三维界面,界面上绘制多边形展示,这种不需要拿到原始数据,但是效率难以保证
- 将上面提到的二维服务中的一部分成果,组织一下,前端直接加载,查找的时候就不需要通过服务 a. 自己定义存储自己解析,比如json b. 本篇的主角: cesium自带的格式–3dtile 中的 geom
关于geom,cesium沙盒中只有一个示例 3D Tiles Point Cloud Classification 体现了它的用法,
- 它使用一个额外的3dtile图层对已有的3dtile进行了分类。
- 可以对每个类别设置属性,进行样式设置,可以选中,这基本达到了目标(比如绑定ID,通过点击获取ID,再跟别的系统融合)
主要源码如下
try {
// Point Cloud by Prof. Peter Allen, Columbia University Robotics Lab. Scanning by Alejandro Troccoli and Matei Ciocarlie.
const tileset = await Cesium.Cesium3DTileset.fromIonAssetId(16421);
viewer.scene.primitives.add(tileset);
// Geometry Tiles are experimental and the format is subject to change in the future.
// For more details, see:
// https://github.com/CesiumGS/3d-tiles/tree/vctr/TileFormats/Geometry
const classificationTileset = await Cesium.Cesium3DTileset.fromUrl(
"../../SampleData/Cesium3DTiles/Classification/PointCloud/tileset.json",
{
classificationType: Cesium.ClassificationType.CESIUM_3D_TILE,
}
);
viewer.scene.primitives.add(classificationTileset);
classificationTileset.style = new Cesium.Cesium3DTileStyle({
color: {
conditions: [
["${id} === 'roof1'", "color('#004FFF', 0.5)"],
["${id} === 'towerBottom1'", "color('#33BB66', 0.5)"],
["${id} === 'towerTop1'", "color('#0099AA', 0.5)"],
["${id} === 'roof2'", "color('#004FFF', 0.5)"],
["${id} === 'tower3'", "color('#FF8833', 0.5)"],
["${id} === 'tower4'", "color('#FFAA22', 0.5)"],
["true", "color('#FFFF00', 0.5)"],
],
},
});
} catch (error) {
console.log(`Error loading tileset: ${error}`);
}
3dtile 官方的文档里有geom的介绍,也可以通过翻源码学习,然后进行解析,进而将其余的数据转换成geom,于是我有一个大胆的想法,自己写个转换的工具网站,不知道有多少人感兴趣
扩展
信息收集