GIS实现数字孪生工程系统及平台应用

   技术参照:

cesium在vue中进行架构设计与实现_cesium怎么修改entity的层级-CSDN博客

iClientOL实现前端gis开发架构_前端iclientol-CSDN博客

天地图电子地图矢量地图底图结合图像学实现风格底图地图-CSDN博客

iclient for ol实现风险区识别_iclient-ol polygon-CSDN博客

java实现反距离权重插值算法生成geojson矢量数据_contour.tracingcontourlines-CSDN博客

java+iClientOpenlayers实现城市内涝积涝模拟内涝模拟演进-CSDN博客

最新水文数据、河网、湖泊、河流水域矢量数据-CSDN博客

产汇流模拟及代码实现(洪水山洪模拟应用)_产汇流 cesium-CSDN博客

工程安全监测分析模型与智能算法模型方案_大坝安全监测模型-CSDN博客

        围绕工程建设、工程运行、工程维护等重点工作,完善水利工程监测体系、实现与各级平台信息融合共享、互联互通,实现在线监测和自动化控制,强化水利工程建设全生命周期监管,推进工程标准化智能管理,保障水利工程安全运行。

业务挑战

方案介绍

方案组成

        以平台为核心,构建数字孪生工程,构建四预业务应用;对物理水利工程全要素和建设、运行全过程进行数字化映射、智能化模拟,虚拟再现真实水利工程。

业务场景

水利工程标准化数字管理
领导驾驶舱
工程移动监管
水利工程数字孪生

方案优势

建管运管—体化

        通过数字化手段,将水利工程的规划、设计、建设、运维等各阶段进行整合,实现全过程的数字化管理和智能化决策

业务流程数字化

        实现业务流程的自动化、智能化和可视化,大幅提高水利工程的运行效率和管理水平

责任落实精准化

        通过数字孪生技术,将水利工程各个阶段的工作任务、责任人、完成时间等要素进行精准的数字化管理,实现任务的可视化、可衡量和可考核

信用监管体系化

        将水利工程的各个阶段环节的信用信息进行整合、分析、评级、监管等,构建一个全面的信用监管体系

日常管理精细化

        实现制度建设、计划管理、任务分解、执行与监督、质量安全管理、人员管理、资料管理和沟通协调的全生命周期管理方式

工况识别智能化

        通过采集水利工程全要素数据及流域全流程数据,搭建水利数字孪生平台,将物理与虚拟的水利工程相互映射,实现实时监控、预测和预警

安全预警自动化

        通过实时监测水利工程的运行状态和周边环境,对工程健康状态及风险进行监管,实现安全预警自动化

数据信息全面化

        实现全要素、全流程、全生命周期的数据采集、处理、分析和应用,为水利工程提供全面、准确、可靠的数据支持

典型案例

补水工程水雨情测报系统

        通过遥测站点数据接收、水雨情监测预警、洪水预报、调度系统、移动应用展示系统、运维管理系统等模块,为补水工程调度提供及时、可靠的实时水雨情信息、洪水预警预报信息及科学合理的调度决策依据。

水库数字孪生平台

        汇集水库库容、水库雨情、水库水情、环境监测、水质监测、视频监测等信息建立孪生可视化平台,通过实时水雨情、气象预报、水情分析、洪水预报、大坝安全监测等功能为水库安全运行管理与水资源调度提供科学的决策支持。

部分关键技术代码实现:

export function CommonDrawPolygonEntities(data,zjnCesium,layersInfo,LayersRenderSet,LayersRenderLabelSet,layerId,PostionsField,IDField){
  CommonRemoveEntities(zjnCesium,layersInfo,layerId);
  let len = data.length;
  for (let i = 0; i < len; i++) {
    if (data[i][PostionsField] != null){
      // let positionsXYZ = Cartesian3.fromDegrees(parseFloat(data[i][LGTDField]), parseFloat(data[i][LTTDField]));
      let curID = zjnCesium.viewer.entities.getById(data[i][IDField]);
      //如果当前实体不存在则绘制
      if(curID != undefined){
        continue;
      }
      let entity;
      let symbol=getLyaerRenderSymbol(LayersRenderSet,layerId,data[i]);
      if(symbol==undefined){
        continue;
      }
      entity = zjnCesium.viewer.entities.add({
        polygon: {
          // 获取指定属性(positions,holes(图形内需要挖空的区域))
          hierarchy: {
            positions: Cartesian3.fromDegreesArray(data[i][PostionsField]),
            holes: [{
              // positions: Cartesian3.fromDegreesArray([
              //   119, 32,
              //   115, 34,
              //   119, 40
              // ])
            }]
          },
          // 边框
          outline: true,
          // 边框颜色
          // outlineColor: Color.fromBytes(symbol.outlineColor[0],symbol.outlineColor[1],symbol.outlineColor[2],symbol.outlineColor[3]),
          outlineColor: Color.fromBytes(symbol.outlineColor[0],symbol.outlineColor[1],symbol.outlineColor[2],symbol.outlineColor[3]),
          // 边框尺寸
          outlineWidth: symbol.outlineWidth,
          // 填充的颜色,withAlpha透明度
          material: Color.fromBytes(symbol.color[0],symbol.color[1],symbol.color[2],symbol.color[3]),
          // 是否被提供的材质填充
          fill: true,
          extrudedHeight:symbol.extrudedHeight,
          // 恒定高度
          height: 0,
          // 显示在距相机的距离处的属性,多少区间内是可以显示的
          // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(1000, 10000000),
          // 是否显示
          show: layersInfo[layerId].options.isShow,
          // 顺序,仅当`clampToGround`为true并且支持地形上的折线时才有效。
          zIndex: 10
        }
      });
      layersInfo[layerId].entities.push(entity);
      let labelOptions=getLyaerRenderLabelSymbol(LayersRenderLabelSet,layerId,data[i]);
      if(typeof(labelOptions)=="undefined"){
        labelOptions=layersInfo[layerId].labelOptions;
      }
      if(layersInfo[layerId].options.showLabel){
        entity.label = {
          text : (typeof(labelOptions.prefixFieldPrefix)=="undefined"?'':labelOptions.prefixFieldPrefix.toString())+(typeof(labelOptions.prefixField)=='undefined'?'':(data[i][labelOptions.prefixField].toString()+(typeof(labelOptions.prefixFieldSuffix)=="undefined"?'':labelOptions.prefixFieldSuffix.toString())+'\n'))+(typeof(labelOptions.labelFieldPrefix)=="undefined"?'':labelOptions.labelFieldPrefix.toString())+(typeof(labelOptions.labelField)=="undefined"?'':data[i][labelOptions.labelField].toString())+(typeof(labelOptions.labelFieldSuffix)=="undefined"?'':labelOptions.labelFieldSuffix.toString())+(typeof(labelOptions.suffixField)=='undefined'?'':('\n'+(typeof(labelOptions.suffixFieldPrefix)=="undefined"?'':labelOptions.suffixFieldPrefix.toString())+data[i][labelOptions.suffixField].toString()))+(typeof(labelOptions.suffixFieldSuffix)=="undefined"?'':labelOptions.suffixFieldSuffix.toString()),
          scale: labelOptions.scale,
          font : labelOptions.font,
          fillColor : Color.fromBytes(labelOptions.fillColor[0],labelOptions.fillColor[1],labelOptions.fillColor[2],labelOptions.fillColor[3]),
          showBackground:labelOptions.showBackground,
          //backgroundColor: Color.ANTIQUEWHITE,
          backgroundColor: Color.fromBytes(labelOptions.backgroundColor[0],labelOptions.backgroundColor[1],labelOptions.backgroundColor[2],labelOptions.backgroundColor[3]),
          horizontalOrigin:HorizontalOrigin[labelOptions.horizontalOrigin],
          verticalOrigin:VerticalOrigin[labelOptions.verticalOrigin],
          pixelOffset: new Cartesian2(labelOptions.pixelOffset[0], labelOptions.pixelOffset[1]),
          heightReference: (zjnCesium.viewer.scene.mode == SceneMode.SCENE3D) ? HeightReference.CLAMP_TO_GROUND : null,
          //scaleByDistance : new NearFarScalar(labelOptions.scaleByDistance[0], labelOptions.scaleByDistance[1],  labelOptions.scaleByDistance[2], labelOptions.scaleByDistance[3]),
        }
      }
    }
  }
  if(layersInfo[layerId].options.isFlash){
    let fontDelta = -0.005;
    let fontSize = 0.6;
    let minFontSize = 0.2;
    let maxFontSize = 0.6;
    zjnCesium.viewer.scene.preUpdate.addEventListener(function(scene, time) {
      fontSize += fontDelta;
      if (fontSize >= maxFontSize || fontSize <= minFontSize) {
        fontDelta *= -1.0;
      }
      for(let i = 0; i < layersInfo[layerId].entities.length; ++i)
      {
        layersInfo[layerId].entities[i].billboard.scale = fontSize;
      }

    });
  }
}

    如果对您有所帮助,请点赞打赏支持!

技术合作交流qq:2401315930

最后分享一下地图下载器设计及下载地址:

链接:https://pan.baidu.com/s/1RZX7JpTpxES-G7GiaVUxOw 
提取码:61cn

地图下载器代码结构设计及功能实现_地图下载管理器解析-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

合抱阴阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值