cesium数据(七)关于单体化

cesium数据(七)关于单体化

cesium中的单体化,有几种方案

  1. 使用batchID,这种方式,需要修改3dtile的瓦片,在模型中添加batchID信息,最好是能拿到原始数据进行重新生产
  2. 使用三维+二维服务的方式,三维界面中获取鼠标的位置,根据位置去二维服务中查询,然后获取范围,再反馈给界面,例如鼠标点击三维模型上的房子,拿到坐标,到二维服务中查到房子的范围多边形,返回给三维界面,界面上绘制多边形展示,这种不需要拿到原始数据,但是效率难以保证
  3. 将上面提到的二维服务中的一部分成果,组织一下,前端直接加载,查找的时候就不需要通过服务 a. 自己定义存储自己解析,比如json b. 本篇的主角: cesium自带的格式–3dtile 中的 geom

关于geom,cesium沙盒中只有一个示例 3D Tiles Point Cloud Classification 体现了它的用法,

  1. 它使用一个额外的3dtile图层对已有的3dtile进行了分类。
  2. 可以对每个类别设置属性,进行样式设置,可以选中,这基本达到了目标(比如绑定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}`);
}
a

3dtile 官方的文档里有geom的介绍,也可以通过翻源码学习,然后进行解析,进而将其余的数据转换成geom,于是我有一个大胆的想法,自己写个转换的工具网站,不知道有多少人感兴趣

扩展

信息收集

【腾讯文档】信息收集

a

发表评论

电子邮件地址不会被公开。 必填项已用*标注