首页 > 其他分享 >cesium 3dtils 房屋打组 实现单个房屋选中效果

cesium 3dtils 房屋打组 实现单个房屋选中效果

时间:2023-10-18 12:45:00浏览次数:30  
标签:Cesium arr feature 3dtils window let fff cesium 房屋

效果

 scenetree.json记录的是模型的数据,这种element的节点上记录的 name 就是建模时给建筑物打组时起的名字,后面cesium创建模型时,建筑物上的每个feature都会添加这个name参数,根据这个name参数可以找到这个模型中的所有feature

 

 

    handler.setInputAction((event) => {
        saveView(viewer)
    }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);

  handler.setInputAction(function (movement) {
    const feature = viewer.scene.pick(movement.position);
    if (!Cesium.defined(feature)) {
      return;
    }
    window.pick = feature
    if (!feature.myId) {
      window.lcxFun()
    }

    if (window.oldFeatureId) {
      let arr = nodeMap.get(window.oldFeatureId)
      for (let fff of arr) {
        fff.color = new Cesium.Color(1, 1, 1, 1)
      }
    }

    window.oldFeatureId = feature.getProperty('id')
    let arr = nodeMap.get(feature.getProperty('id'))
    console.log(feature, feature.getProperty('id'), feature.getProperty('name'), feature.myId, arr);
    
    for (let fff of arr) {
      fff.color = Cesium.Color.fromCssColorString('#39A2FD')
    }
  }, Cesium.ScreenSpaceEventType.MIDDLE_CLICK);
if (!window.lcx) {
    window.lcx = new Map()
  }

  model.tileLoad.addEventListener(function(tile: { content: any }) {
    let content = tile.content;
    let featuresLength = content.featuresLength;
    
    if (featuresLength <= 0) {
      for (let child of content._contents) {
        console.log("child要素数量为:", child.featuresLength, "child", child);
        window.lcx.set(window.lcx.size + "-child", child)
      }
    } else {
      console.log("要素数量为:", featuresLength, "content", content);
      window.lcx.set(window.lcx.size + "-root", content)
    }
  })

  window.lcxFun = function() {
    window.nodeMap = new Map()
    for (let key of window.lcx.keys()) {
      let content = window.lcx.get(key)
      let featuresLength = content.featuresLength
      for (let i = 0; i < featuresLength; i++) {
        let feature = content.getFeature(i)
        feature.myId = key + "-" + i
        let arr = window.nodeMap.get(feature.getProperty('id')) || []
        arr.push(feature)
        window.nodeMap.set(feature.getProperty('id'), arr)
      }
    }    
  }

 

标签:Cesium,arr,feature,3dtils,window,let,fff,cesium,房屋
From: https://www.cnblogs.com/LcxSummer/p/17771810.html

相关文章

  • Cesium加载三维模型rendering.Rendering has stopped
    使用Cesium加载数据量大、精度高的三维模型数据经常在运行一段时间后,会报如下错误:Anerroroccurredwhilerendering.Renderinghasstopped.TypeError:Failedtoexecute'shaderSource'on'WebGLRenderingContext':parameter1isnotoftype'WebGLShader'.这是由于GPU......
  • 基于web房屋租售管理系统-计算机毕业设计源码+LW文档
    摘 要当今,在这个信息化的时代,人们的生活越来越便利。因此如果运用java技术建设房屋租售管理系统系统使其与互联网有效的结合起来,实现房屋租售管理系统系统的网络化,为学校师生乃至社会提供更为全面、便捷的服务。根据本系统的研究现状和发展方向,首先系统从需求分析、结构设计、数......
  • 基于微信小程序的房屋租赁管理系统
    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于微信小程序的房屋租赁管理系统的开发全过程。通过分析基于微信小程序的房屋租赁管理系统管理的不足,创建了一个计算机管理基于微信小程序的房屋租赁管理系统的方案。文章介绍了基于......
  • Cesium制作鹰眼效果
    Cesium制作鹰眼效果就是在右下角放一个缩略的地球,转动大的地球的同时,也转动右下角的小地球,以保证随时可以看到一个地球的局部图,实际原理是在右下角放置一个div,也同时初始化为一个cesium的模型。在转动大的地球时,出发事件将转动的角度,缩放的大小也同步到右下角小的地球上,现实两个球......
  • Cesium做镜头飞入目标的动画
    很多时候需要实现一个镜头飞入目标的动画效果,也就是刚进入页面的时候从默认位置旋转地球到目标点,并逐渐放近镜头的动画,Cesium提供一个fly的动画效果,设置目标点的经纬度和高度,以及设置对准目标点时镜头的角度,这里根据上一篇的内容将镜头逐渐拉到中国地图中首都北京的位置,并设置动画......
  • 一图解密《会呼吸的房子》0碳房屋密码
    ......
  • Cesium地形抬升效果怎么做?
    地形抬升的思路是什么也需要切分3角面?改地形顶点数据 还是改vs着色器呀?如果需要改源码的话,怎么改?来源:Cesium深入浅出群(854943530)......
  • Cesium绘制一个正方体
    这节讲在cesium中绘制一个正方体,与threejs类似,在一个场景中添加一个正方体就好了,设置正方体的长宽高和位置,不过绘制的方式和threejs有很大的区别,这里还是用的类似百度echarts的绘制方式,通过json格式的配置文件描述正方体的长宽高和位置,以下是相关源码,可以替换掉token后复制到html文......
  • Cesium学习笔记9——鼠标交互绘制
    html代码1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="utf-8"/>5<metahttp-equiv="X-UA-Compatible"content="IE=edge"/>6<metaname="view......
  • 基于springboot的房屋租赁系统
    房屋是人类生活栖息的重要场所,随着城市中的流动人口的增多,人们对房屋租赁需求越来越高,为满足用户查询房屋、预约看房、房屋租赁的需求,特开发了本基于SpringBoot的房屋租赁系统。本文重点阐述了房屋租赁系统的开发过程,以实际运用为开发背景,基于SpringBoot框架,运用了Java技术和MYSQ......