GIS实现测雨雷达系统及应用

技术参照:

  技术参照:

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

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

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

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

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

java调用python动态生成光电雷达图-CSDN博客

iClientOpenlayers实现风场类封装_new windlayer报错-CSDN博客

java实现地形dem产汇流流场数据提取解析_java获取多边形的 dem数据-CSDN博客

气象数据NC、grb2解析成矢量json、CMIS、MICPS及图片应用到webgis_grb2文件-CSDN博客

        水利测雨雷达是以地面以上2km垂直高度大气中的液态水为主要探测目标物的雷达。通过以雷达站为中心、半径≥45km水平范围内、地面以上至2km垂直高度大气中无缝的连续仰角步进扫描作业,实现近地面层液态水含量的精细化测量,可实现一定区域的高分辨率面雨量实时监测,提高面雨量监测精度,降低局地强降雨漏报风险,延长洪水预见期,为洪水、内涝预警预报提供更准确数据。

行业痛点

        在全球气候变暖的背景下,暴雨极端性越来越突出,中小河流洪水和山洪等灾害频繁发生,给人民群众生命财产带来严重威胁,为了更好地应对这些挑战,水利部多次强调,要加快构建气象卫星和测雨雷达、雨量站、水文站组成的雨水情监测“三道防线”,测雨雷达系统是雨水情监测第一道防线中的重要一环,在降雨监测和流域防洪中扮演着至关重要的角色,高精度的测雨雷达系统的建设和应用对于提升致灾暴雨精细监测、精准预报预警能力具有重要作用。

方案介绍

        采用X波段双偏振雷达技术,融合雨强反演算法、衰减订正算法、多源雨量融合算法、短临预报算法,构建包含降水反演、降水成果应用、运维管理、成果评估等应用的测雨雷达系统并进行组网运行,将短临降雨耦合洪水预报预警,提前对洪水和山洪灾害进行风险预警,提高预报预警的准确性和时效性,为区域防洪决策提供支撑。测雨雷达系统包括雷达硬件设备、雨滴谱仪监测设备(可选)、雷达数据处理软件、雷达应用服务软件以及附属配套设备等。

核心能力

实时雨量自动测报

        提供实时掌握降雨量数据,将数据汇集到雨量监测系统平台进行实时监测、分析,可5min输出一次雨量监测成果。

区域面雨量测量

        可监控半径45km(面积约6300km²)以上区域的面雨量,提供单站和组网雷达回波监测产品及相关应用。

高分辨率格点雨量输出

        30m×30m格点、 75m×75m格点精细化监测及临近预报产品,可支撑精细小流域(区域)面雨量监测及临近预报、乡镇级致灾暴雨告警/预警应用服务等业务应用。

业务场景

山洪灾害暴雨监测预警

        实时监测降雨情况,结合地形地貌等信息,判断山洪灾害风险。

中小流域突发性洪水

        对洪水事件进行预测和监测,及时发出警报,提醒当地居民和相关部门采取必要的预防措施。

城市洪涝暴雨监测预警

        帮助决策者及时了解城市地区的降雨情况,为城市洪涝暴雨的预警和防御提供重要的参考依据。

大范围水面降雨监测

        实时获取大范围内的空间分布和时间分布的降雨数据,辅助采取必要的防范措施。

方案优势

监测范围广

        测雨雷达系统可以监测以雷达为中心,半径45公里范围的降水信息。

位面雨量监测

        与地面雨量站单点监测相比,测雨雷达位面雨量监测,可有效防止局部强降雨漏测风险。

监测成果精确可靠

        通过近30场雨的评估,得到雨量等级完全一致、降雨历时完全一致、雨区面积基本一致的结论。

自动化程度高

        测雨雷达采用小型模块结构及高性能的集成SoC架构,几乎无需移动部件,因此具有很高的自动化程度,降低了人工维护成本。

监测分辨率高

        测雨雷达可以监控覆盖范围内的每个30m×30m(或75m×75m)格点的降雨量,有利于提高洪水预报和城市内涝预报的精度。

实时监测

        测雨雷达可以输出分钟级的实时降雨数据,有利于提高防汛预警和调度的及时性和有效性。

提前预警

        通过监测降雨演变趋势,测雨雷达系统可以提前预测可能的降雨和洪水风险,为防灾减灾提供关键信息。

维护成本低

        一体化设计,硬件系统稳定可靠,日常维护简单。另外,测雨雷达系统可以远程监控,不需要人工值守,大大降低了人力成本。

典型案例

        截止2022年底,全国水利部门共部署测雨雷达40部。

部分关键技术代码实现:

/**
 * common create entities *
 * */
export function CommonDrawEntities(data,zjnCesium,layersInfo,LayersRenderSet,LayersRenderLabelSet,layerId,LGTDField,LTTDField,IDField){
    CommonRemoveEntities(zjnCesium,layersInfo,layerId);
    let len = data.length;
    let scene = zjnCesium.viewer.scene;
    for (let i = 0; i < len; i++) {
        if (data[i][LGTDField] != null && data[i][LTTDField] != 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;
            }
            if(layersInfo[layerId].entityType=='billboard'){
                entity = zjnCesium.viewer.entities.add({
                    id: data[i][IDField]||generateUUID(),
                    position: positionsXYZ,
                    show:layersInfo[layerId].options.isShow,
                    billboard: {
                        image: symbol.img,
                        heightReference: (zjnCesium.viewer.scene.mode == SceneMode.SCENE3D) ? HeightReference.CLAMP_TO_GROUND : null,
                        scale: symbol.scale,
                        clampToGround: true
                    },
                    data: data[i],
                    name: layersInfo[layerId].options.name,
                    layerId:layerId
                });
            }
            if(layersInfo[layerId].entityType=='point'){
                entity = zjnCesium.viewer.entities.add({
                    id: data[i][IDField]||generateUUID(),
                    position: positionsXYZ,
                    show:layersInfo[layerId].options.isShow,
                    point: {
                        pixelSize: symbol.pixelSize,
                        color:Color.fromBytes(symbol.color[0],symbol.color[1],symbol.color[2],symbol.color[3]),
                        outlineColor:Color.fromBytes(symbol.outlineColor[0],symbol.outlineColor[1],symbol.outlineColor[2],symbol.outlineColor[3]),
                        outlineWidth:symbol.outlineWidth,
                        heightReference: (zjnCesium.viewer.scene.mode == SceneMode.SCENE3D) ? HeightReference.CLAMP_TO_GROUND : null,
                        clampToGround: true
                    },
                    data: data[i],
                    name: layersInfo[layerId].options.name,
                    layerId:layerId
                });
            }
            if(layersInfo[layerId].entityType=='ellipse'){
              entity = zjnCesium.viewer.entities.add({
                id: data[i][IDField]||generateUUID(),
                position: positionsXYZ,
                show:layersInfo[layerId].options.isShow,
                ellipse: {
                  semiMinorAxis: symbol.semiMinorAxis,
                  semiMajorAxis: symbol.semiMajorAxis,
                  rotation: CMath.toRadians(symbol.rotation),
                  outline: symbol.outline,
                  outlineColor: Color.fromBytes(symbol.outlineColor[0],symbol.outlineColor[1],symbol.outlineColor[2],symbol.outlineColor[3]),
                  outlineWidth: symbol.outlineWidth,
                  stRotation: CMath.toRadians(symbol.stRotation),
                  height: symbol.height,
                  extrudedHeight: symbol.extrudedHeight,
                  material: Color.fromBytes(symbol.color[0],symbol.color[1],symbol.color[2],symbol.color[3]),
                },
                data: data[i],
                name: layersInfo[layerId].options.name,
                layerId:layerId
              });
            }
            if(layersInfo[layerId].entityType=='cylinder'){
              entity = zjnCesium.viewer.entities.add({
                id: data[i][IDField]||generateUUID(),
                position: positionsXYZ,
                show:layersInfo[layerId].options.isShow,
                cylinder: {
                  length: symbol.length,
                  topRadius: symbol.topRadius,
                  bottomRadius: symbol.bottomRadius,
                  material: Color.fromBytes(symbol.color[0],symbol.color[1],symbol.color[2],symbol.color[3]),
                },
                data: data[i],
                name: layersInfo[layerId].options.name,
                layerId:layerId
              });
            }
            if(layersInfo[layerId].entityType=='box'){
              entity = zjnCesium.viewer.entities.add({
                id: data[i][IDField]||generateUUID(),
                position: positionsXYZ,
                show:layersInfo[layerId].options.isShow,
                box: {
                  dimensions: new Cartesian3(symbol.dimensions[0], symbol.dimensions[1], symbol.dimensions[2]),
                  outline: symbol.outline,
                  outlineColor: Color.fromBytes(symbol.outlineColor[0],symbol.outlineColor[1],symbol.outlineColor[2],symbol.outlineColor[3]),
                  outlineWidth: symbol.outlineWidth,
                  material: Color.fromBytes(symbol.color[0],symbol.color[1],symbol.color[2],symbol.color[3]),
                },
                data: data[i],
                name: layersInfo[layerId].options.name,
                layerId:layerId
              });
            }
            if(layersInfo[layerId].entityType=='ellipsoid'){
              entity = zjnCesium.viewer.entities.add({
                id: data[i][IDField]||generateUUID(),
                position: positionsXYZ,
                show:layersInfo[layerId].options.isShow,
                ellipsoid: {
                  radii: new Cartesian3(symbol.radii[0], symbol.radii[1], symbol.radii[2]),
                  outline: symbol.outline,
                  outlineColor: Color.fromBytes(symbol.outlineColor[0],symbol.outlineColor[1],symbol.outlineColor[2],symbol.outlineColor[3]),
                  outlineWidth: symbol.outlineWidth,
                  material: Color.fromBytes(symbol.color[0],symbol.color[1],symbol.color[2],symbol.color[3]),
                },
                data: data[i],
                name: layersInfo[layerId].options.name,
                layerId:layerId
              });
            }
            layersInfo[layerId].entities.push(entity);
            let labelOptions=getLyaerRenderLabelSymbol(LayersRenderLabelSet,layerId,data[i]);
            if(typeof(labelOptions)=="undefined"){
                labelOptions=layersInfo[layerId].labelOptions;
            }
            try{
              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]),
                }
              }
            }catch (e) {
              console.log("错误对象",data[i])

            }
        }
    }
    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、付费专栏及课程。

余额充值