技术参照:
技术参照:
cesium在vue中进行架构设计与实现_cesium怎么修改entity的层级-CSDN博客
iClientOL实现前端gis开发架构_前端iclientol-CSDN博客
天地图电子地图矢量地图底图结合图像学实现风格底图地图-CSDN博客
iclient for ol实现风险区识别_iclient-ol polygon-CSDN博客
java实现反距离权重插值算法生成geojson矢量数据_contour.tracingcontourlines-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博客