首页 > 其他分享 >cesium拾取管网属性功能

cesium拾取管网属性功能

时间:2024-12-16 13:02:59浏览次数:11  
标签:const pickedObject 拾取 管网 Cesium cesium properties 属性

最近在做移动端地下管网可视化系统时,做到一个属性查询功能。就是拾取一根管道,读取该管道属性并显示。实现效果如下图。

核心代码如下:

// 开始拾取
const handlePick = () => {
  if (!cesiumStore.viewer) {
    Notify.create({
      type: "negative",
      message: "Cesium Viewer 未初始化。",
      position: "top",
    });
    return;
  }

  Notify.create({
    type: "positive",
    message: "已开始拾取,请点击实体。",
    position: "top",
  });

  handlerPick.value = new Cesium.ScreenSpaceEventHandler(
    cesiumStore.viewer.scene.canvas
  );

  handlerPick.value.setInputAction((click) => {
    const pickedObject = cesiumStore.viewer.scene.pick(click.position, 1, 1);
    if (pickedObject instanceof Cesium.Cesium3DTileFeature) {
      const propertyIds = pickedObject.getPropertyIds();
      const properties = propertyIds.reduce((acc, propName) => {
        acc[propName] = pickedObject.getProperty(propName);
        return acc;
      }, {});
      updatePropertyDisplay(properties);
    } else {
      console.log("No feature picked.");
    }
  }, Cesium.ScreenSpaceEventType.LEFT_DOWN);
};

// 更新属性展示内容
const updatePropertyDisplay = (properties) => {
  const propertyDisplay = document.getElementById("property-display");
  propertyDisplay.innerHTML = ""; // 清空内容

  for (const [key, value] of Object.entries(properties)) {
    const propertyLine = document.createElement("div");
    propertyLine.textContent = `${key}: ${value}`;
    propertyDisplay.appendChild(propertyLine);
  }

  // 确保展示区域可见
  propertyDisplay.style.display = "block";
};

这段代码通过调用 CesiumScreenSpaceEventHandler 接口,监听鼠标点击事件,使用 scene.pick 接口拾取 3D Tiles 场景中的 Feature(要素),提取其属性信息(通过 getPropertyIdsgetProperty 接口),并将这些属性动态展示到页面的指定区域。

但是现在遇到一些问题,就是在选择完Feature,显示完属性后,cesium场景开始极度卡顿,目前没有找到原因,有没有大神可以交流赐教!本人不胜感激!

标签:const,pickedObject,拾取,管网,Cesium,cesium,properties,属性
From: https://blog.csdn.net/qq_61140658/article/details/144504113

相关文章

  • Cesium高级开发教程之四:鹰眼地图#OpenLayers
    教程示例网站:https://thomaz529.github.io一、效果图二、代码init2DDiv(){this.mapDiv=document.createElement('div');this.mapDiv.setAttribute('id',this.mapId)constviewerContainer=this.viewer.cesiumWidget.container.pa......
  • 北斗网格位置码在低空空域管理的Cesium实现(陆续更新)
    北斗网格码作为前沿主流技术,在低空空域的数字化管理中发挥着重要作用。北斗网格位置码相关描述见国标:GB/T39409-2020(1)特定区域、特定级别的网格显示//特定区域如果跨东西半球、南北半球,分部分处理,遍历循环时比较方便//特定区域:中国区域版图constlon_west=72.0/......
  • 城市排水管网液位在线监测系统_实时管网监测流量
    在城市的基础设施中,排水管网起着至关重要的作用。它如同城市的“血管”,负责将雨水和污水及时排出,保障城市的正常运转。而城市排水管网液位在线监测系统的出现,为实时监测管网流量、确保排水系统的安全稳定运行提供了有力的技术支持。一、城市排水管网液位在线监测系统组成液......
  • Cesium 二三维切换
    Cesium二三维切换switch2D3D(){letmap=getMap();if(!map)return;letview=map.getCameraView();if(map.scene.mode==Cesium.SceneMode.SCENE3D){letpitch=((0-view.pitch)*Math.PI)/180;letlength=v......
  • Cesium中级开发教程之十四:水面波纹
    教程示例网站:https://thomaz529.github.io一、效果图二、代码createWaterMaterial(){viewer.scene.primitives.add(newCesium.Primitive({geometryInstances:newCesium.GeometryInstance({geometry:ne......
  • 【cesium重新梳理】1.cesium知识整理
    之前零零碎碎学过、用过cesium,但也没做记录,现在重新整理一下,方便学习回顾。1.cesium简介CesiumJS是一个开源JavaScript库,用于创建具有最佳性能、精度、视觉质量和易用性的世界级3D地球仪和地图。从航空航天到智能城市再到无人机,各行各业的开发人员都使用CesiumJS创建交互式We......
  • 【cesium】打造科技感建筑泛光效果
    一些智慧城市项目经常需要加载建筑白膜数据(3dtiles),并制作炫酷的炫光效果,在cesium中可以使用自定义着色器修改白膜建筑的外观。1.首先,加载3Dtiles格式的建筑白膜数据,这里我们使用一个免费的数据链接:data.mars3d.cn/3dtiles/jzw…这是mars3D提供的一个链接,发送请求就会返回3Dtil......
  • 【cesium】修改底图颜色为蓝色科技范儿
    cesium中,默认的底图颜色往往难以满足个性化需求,而【蓝色科技】风格常常备受青睐,本文从实操角度介绍实现方法。 简单来说,我们所用的方法叫做【反色滤镜】,总的分为2个步骤,反色,过滤。具体做法如下:首先要获取目标影像图层,这里不能直接对div进行操作,因为会将地图上的所有元素都......
  • 【转】cesium之添加天地图
    转自 https://www.cnblogs.com/s313139232/p/16351468.html公共参数:vartoken='7b56038c276128a86a5b946404bf4df4';//服务域名vartdtUrl='https://t{s}.tianditu.gov.cn/';//服务负载子域varsubdomains=['......
  • Cesium教程07_entity进阶
    基于Cesium和Vue的卫星轨道可视化本文介绍了如何使用Cesium和Vue构建一个动态卫星轨道可视化应用。该示例模拟了一个卫星围绕地球轨道运动的场景,并实现了实时的轨迹渲染、卫星扫描范围展示以及摄像头跟随功能。目录项目背景功能展示代码实现模板部分脚本部分样......