当前位置: 首页 > article >正文

Cesium中3Dtiles模型的信息读取和高亮显示单独瓦片

一、信息读取

参考官方文档:Csium3DTileset - Cesium Documentation

加载模型

var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
            url: 'tileset.json'//加载3D Tiles
        }));

 在使用过程中可以通过在控制台输出对象后看一下对象的类型然后上官方文档看去,文档很全

有两种方法获取所有瓦片

1.官方提供的渲染结束后的监听器,可以直接返回一个tile对象

//加载完瓦片之后再显示按钮     

   tileset.tileLoad.addEventListener(function (tile) {
            //这里和下边的操作一样
        })

 2.直接获取tileset的属性

这种方法适合写成函数,可以根据自己想要的时间来触发

function func() {
            tile = tileset.root//和渲染后返回的一样
            let featuresLength = tile.content.featuresLength;
            let feature = tile.content.getFeature(0).getProperty("Type");
            //这里是第一个瓦片的Type属性,如果不知道有哪些属性可以用下边代码输出所有属性
            // var propertyNames = pickedFeature.getPropertyNames();
            // var length = propertyNames.length;
            // for (var i = 0; i < length; ++i) {
            //     var propertyName = propertyNames[i];
            //     console.log(propertyName + ': ' + pickedFeature.getProperty(propertyName));
            // }
        }

瓦片的id属性有两个一个是_batchId,一个是pickId.key,我的模型中这俩值不一样,不知道为什么。但是在未点击的时候pickId是空的,所以我默认把_batchId作为数据库中的主键 

二、高亮显示单个或指定瓦片 

先设置一个高亮瓦片的变量,下边两种共用

var highlighted = { feature: undefined, originalColor: new Cesium.Color() };

 1.鼠标点击后高亮显示

添加鼠标点击事件监听器

// 鼠标点击事件处理函数
    var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
    handler.setInputAction(function (click) {
        // 将屏幕坐标转换为笛卡尔坐标
        var pickedFeature = viewer.scene.pick(click.position);
        
        //当未捕捉到要素的时候
        if (!Cesium.defined(pickedFeature)) {
            //取消所有高亮显示
            if (Cesium.defined(highlighted.feature)) {
                highlighted.feature.color = highlighted.originalColor;
                highlighted.feature = undefined;
            }
            return;
        }
        else {
            //高亮显示
            if (Cesium.defined(highlighted.feature)) {
                highlighted.feature.color = highlighted.originalColor;
                highlighted.feature = undefined;
            }
            highlighted.feature = pickedFeature;
            Cesium.Color.clone(pickedFeature.color, highlighted.originalColor);
            pickedFeature.color = Cesium.Color.LIME.withAlpha(0.5);
            showMessage('您选择Id为:' + pickedFeature.pickId.key + 'Type属性为:' + pickedFeature.getProperty('Type'));
        }

    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);

2.鼠标移动过程中跟随高亮

添加屏幕移动事件监听器

//鼠标移动跟随高亮
    handler.setInputAction(function onMouseMove(movement) {
        // 将屏幕坐标转换为笛卡尔坐标
        var pickedFeature = viewer.scene.pick(movement.endPosition);
        //当未捕捉到要素的时候
        if (!Cesium.defined(pickedFeature)) {
            //取消所有高亮显示
            if (Cesium.defined(highlighted.feature)) {
                highlighted.feature.color = highlighted.originalColor;
                highlighted.feature = undefined;
            }
            return;
        }
        else {
            //高亮显示
            if (Cesium.defined(highlighted.feature)) {
                highlighted.feature.color = highlighted.originalColor;
                highlighted.feature = undefined;
            }
            highlighted.feature = pickedFeature;
            Cesium.Color.clone(pickedFeature.color, highlighted.originalColor);
            pickedFeature.color = Cesium.Color.LIME.withAlpha(0.5);
        }

    }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

showMessage是js+css写的简易提示消息,可以看这个博客

js+css消息提示框-CSDN博客【代码】js+css消息提示框。https://blog.csdn.net/vener_/article/details/143764044


http://www.kler.cn/a/399386.html

相关文章:

  • ReactPress与WordPress:一场内容管理系统的较量
  • 后仿真中的GLS测试用例的选取规则
  • 机器学习(1)
  • 深挖C++赋值
  • Python绘制雪花
  • MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并--封装到存储过程中
  • 刘艳兵-DBA033-如下那种应用场景符合Oracle ROWID存储规则?
  • 使用 Samba实现Ubuntu 中远程连接 Windows 主机进行文件传输
  • 免费下载 | 2024年金融数字化转型白皮书
  • HuggingFace:基于YOLOv8的人脸检测模型
  • xpath表达式学习总结
  • redis:RDB和AOF机制
  • 【算法】回文数索引、回文子串输出、整数反转
  • JavaScript 中的多重继承与 ES6 中的继承
  • Linux(光速安装+centos镜像 图片+大白话)
  • Python 小高考篇(7)常用模板
  • Python 小高考篇(6)常见错误及排查
  • Softmax Temperature
  • HarmonyOS:使用常用组件构建页面
  • uniapp vue3的下拉刷新和上拉加载
  • java 读取 有时需要sc.nextLine();读取换行符 有时不需要sc.nextLine();读取换行符 详解
  • 药香代码:Spring Boot中药实验管理实践
  • 在Flutter中,禁止侧滑的方法
  • 基于微信小程序的在线学习平台+LW示例参考
  • qt移植到讯为rk3568,包含一些错误总结
  • 2024 - 超火的多模态深度学习公共数据纯生信5+思路分享