java实现大气无风环境污染物扩散模拟

news2024/10/6 8:35:25

一、扩散公式整理

二、编写java代码实现

String strJson = InterpolationUtils.calGaussPlumePoints0(z,height,q,lon,lat, size,scale,airStable);
return strJson.replaceAll("NaN","0").replaceAll("Infinity",String.valueOf(q));
String strJson = InterpolationUtils.calGaussPlumeEquiSurface(z,height,u ,q,wd,lon,lat, dataInterval,size,scale,airStable);
return strJson;

三、前端openlayers调用代码

geoJsonFe:{
  renderType:"level",
  renderField:"hvalue",
  FieldScope:[{min:-1,max:29.9,symbol:Layersymbols.screenVecSymbol1},{min:29.9,max:49.9,symbol:Layersymbols.screenVecSymbol2},{min:49.9,max:69.9,symbol:Layersymbols.screenVecSymbol3},{min:69.9,max:89.0,symbol:Layersymbols.screenVecSymbol4},{min:89.9,max:149.9,symbol:Layersymbols.screenVecSymbol5},{min:149.9,max:999999,symbol:Layersymbols.screenVecSymbol6}]
},
geoJsonFeP:{
  renderType:"level",
  renderField:"val",
  FieldScope:[{min:-1,max:30,symbol:Layersymbols.aqiSymbol1},{min:30,max:50,symbol:Layersymbols.aqiSymbol2},{min:50,max:70,symbol:Layersymbols.aqiSymbol3},{min:70,max:90,symbol:Layersymbols.aqiSymbol4},{min:90,max:150,symbol:Layersymbols.aqiSymbol5},{min:150,max:999999,symbol:Layersymbols.aqiSymbol6}]
}
screenVecSymbol1:new Style({
  stroke: new Stroke({
    color: 'rgba(0, 206, 0, 0.1)',
    width: 1,
  }),
  fill: new Fill({
    color: 'rgba(0, 206, 0, 0.6)',
  }),
}),
screenVecSymbol2:new Style({
  stroke: new Stroke({
    color: 'rgba(254, 255, 3, 0.1)',
    width: 1,
  }),
  fill: new Fill({
    color: 'rgba(254, 255, 3, 0.6)',
  }),
}),
screenVecSymbol3:new Style({
  stroke: new Stroke({
    color: 'rgba(255, 101, 0, 0.1)',
    width: 1,
  }),
  fill: new Fill({
    color: 'rgba(255, 101, 0, 0.6)',
  }),
}),
screenVecSymbol4:new Style({
  stroke: new Stroke({
    color: 'rgba(254, 0, 0, 0.1)',
    width: 1,
  }),
  fill: new Fill({
    color: 'rgba(254, 0, 0, 0.6)',
  }),
}),
screenVecSymbol5:new Style({
  stroke: new Stroke({
    color: 'rgba(129, 0, 127, 0.1)',
    width: 1,
  }),
  fill: new Fill({
    color: 'rgba(129, 0, 127, 0.6)',
  }),
}),
screenVecSymbol6:new Style({
  stroke: new Stroke({
    color: 'rgba(128, 0, 0, 0.1)',
    width: 1,
  }),
  fill: new Fill({
    color: 'rgba(128, 0, 0, 0.6)',
  }),
}),
aqiSymbol1: new Style({
  image: new Circle({
    radius: 6,
    stroke: new Stroke({
      color: '#62B8FF',
    }),
    fill: new Fill({
      color: 'rgba(0, 206, 0, 1)'
    })
  })
}),
aqiSymbol2: new Style({
  image: new Circle({
    radius: 6,
    stroke: new Stroke({
      color: '#62B8FF',
    }),
    fill: new Fill({
      color: 'rgba(254, 255, 3, 1)'
    })
  })
}),
aqiSymbol3: new Style({
  image: new Circle({
    radius: 6,
    stroke: new Stroke({
      color: '#62B8FF',
    }),
    fill: new Fill({
      color: 'rgba(255, 101, 0, 1)'
    })
  })
}),
aqiSymbol4: new Style({
  image: new Circle({
    radius: 6,
    stroke: new Stroke({
      color: '#62B8FF',
    }),
    fill: new Fill({
      color: 'rgba(254, 0, 0, 1)'
    })
  })
}),
aqiSymbol5: new Style({
  image: new Circle({
    radius: 6,
    stroke: new Stroke({
      color: '#62B8FF',
    }),
    fill: new Fill({
      color: 'rgba(129, 0, 127, 1)'
    })
  })
}),
aqiSymbol6: new Style({
  image: new Circle({
    radius: 6,
    stroke: new Stroke({
      color: '#62B8FF',
    }),
    fill: new Fill({
      color: 'rgba(128, 0, 0, 1)'
    })
  })
})
//通用创建geojson要素
export function commonCreateGeojsonFeatures (map, layerKey, LayersRenderSet, geo, labelField) {
  if (Object.keys(geo).length == 0 && geo.features.length == 0) return;
  let features = geo.features;
  for (let i in features) {
    let areaFeature = {};

    if (features[i].geometry.type == "MultiPolygon") {
      areaFeature = new Feature({
        geometry: new MultiPolygon(features[i].geometry.coordinates),
      });
    } else if (features[i].geometry.type == "Polygon") {
      areaFeature = new Feature({
        geometry: new Polygon(features[i].geometry.coordinates),
      });
    }
    else if (features[i].geometry.type == "MultiLineString") {
      areaFeature = new Feature({
        geometry: new MultiLineString(features[i].geometry.coordinates),
      });
    }
    else if (features[i].geometry.type == "LineString") {
      areaFeature = new Feature({
        geometry: new LineString(features[i].geometry.coordinates),
      });
    }
    else if (features[i].geometry.type == "Point") {
      areaFeature = new Feature({
        geometry: new Point(features[i].geometry.coordinates),
      });
    }
    let featureStyle = getLyaerRenderSymbol(LayersRenderSet, layerKey, features[i].properties).clone()
    areaFeature.setStyle(featureStyle)
    areaFeature.setProperties(features[i].properties);
    areaFeature.values_.values_=features[i].properties
    getLayerByCode(map,layerKey).getSource().addFeature(areaFeature);
    if (features[i].properties[labelField] != undefined && labelField != '') {
      setFeatureLabel(areaFeature,features[i].properties[labelField].toString())
    }
  }
}

四、模拟效果展示

 

有风模拟参照:高斯羽烟gis应用java实现模型计算_兴诚的博客-CSDN博客

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

技术合作交流qq:2401315930 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】P23 决策树、熵和信息增益

决策树、熵与信息增益 决策树熵信息增益Python 与 决策树 决策树 决策树(Decision Tree) 是一种基于树形结构的分类算法,它通过一系列的询问(也称为测试或判定条件)来判断一个数据实例属于哪个类别。 以一个案例贯穿…

Go | 一分钟掌握Go | 2 - 集成开发工具

作者:Mars酱 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我! 工具介绍 编码是一门传统手艺活,手艺好不好很重要,器…

高精度气象模拟软件WRF实践技术

【原文链接】:高精度气象模拟软件WRF(Weather Research Forecasting)实践技术及案例应用https://mp.weixin.qq.com/s?__bizMzU5NTkyMzcxNw&mid2247538149&idx3&sn3890c3b29f34bcb07678a9dd4b9947b2&chksmfe68938fc91f1a99bbced2113b09cad822711e7f…

开发者必读!常用的二维码生成器 API 推荐

引言 二维码是一种能够存储信息的图形码,它在现代社会中扮演着越来越重要的角色。生成二维码的过程通常需要使用二维码生成器,而现在有很多二维码生成器 API 可以供开发者使用。 在本文中,我们将讨论二维码生成器 API 的工作原理、应用场景…

CHAPTER 6: 《DESIGN A KEY-VALUE STORE》 第6章 《设计一个键值存储》

CHAPTER 6: DESIGN A KEY-VALUE STORE 键值存储(也称为键值数据库)是一种非关系数据库。每一个唯一标识符存储为与其关联值的键。这种数据配对称为“键-值”对。 在一个键-值对中,键必须是唯一的,与该键相关联的值可以是通过密钥访问。键可以是纯文本或…

编译原理个人作业--第五章——基于 编译原理 国防工业出版社 第三版

1 文法 G 1 G_1 G1​为 E → E T ∣ T T → T ∗ F ∣ F F → ( E ) ∣ i E\rightarrow ET|T\\ T\rightarrow T*F|F\\ F\rightarrow(E)|i E→ET∣TT→T∗F∣FF→(E)∣i 请证明 E T ∗ F ET*F ET∗F是他的一个句型(课本写的是ET*T感觉是印错了),指出它的所有短语…

这份最新阿里、腾讯、华为、字节等大厂的薪资和职级对比,你看过没?

互联网大厂新入职员工各职级薪资对应表(技术线)~ 最新阿里、腾讯、华为、字节跳动等大厂的薪资和职级对比 上面的表格不排除有很极端的收入情况,但至少能囊括一部分同职级的收入。这个表是“技术线”新入职员工的职级和薪资情况,非技术线(如产品、运营、…

pbootcms自动配图出图插件

pbootcms文章无图自动出图配图插件的优点 1、提高文章的可读性和吸引力:插入图片可以丰富文章的内容和形式,增强读者的阅读体验和吸引力,提高文章的点击率和转化率。 2、节省时间和精力:手动添加图片需要花费大量时间和精力去寻找…

【LeetCode: 1416. 恢复数组 | 暴力递归=>记忆化搜索=>动态规划 】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【花雕学AI】超级提问模型大全!150个ChatGPT神奇示例,让你的聊天更有趣!

引言 你是否想要成为聊天高手,让你的对话更加有趣和深入?你是否想要掌握一些超级提问模型,让你的聊天更加有创意和挑战?你是否想要借助人工智能的力量,生成一些适合你的超级提问模型? 如果你的答案是肯定…

浅谈新能源电动汽与汽车传感器充电桩的影响

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要:随着我国能源战略发展以及低碳行动的实施,电动汽车已逐步广泛应用,而电动汽车的应用非常符合当今社会对环保意识的要求,以及有效节省化石燃料的消耗。由于其无污染…

Flutter+YesAPI 快速构建零运维的APP

前言 移动互联网经过多年的发展,已经进入一个成熟的阶段,几乎每个公司都有自己的移动应用程序或移动网站。随着5G技术的不断发展,也带来了更高效的数据传输速度和更稳定的网络连接,这使得更多的应用程序和服务能够在互联网上运行&…

NFT介绍及监管规则

什么是NFT NFT是Non-Fungible Token(非同质化代币)的缩写。 NFT是“Non-Fungible Token”的缩写,即非同质化代币。不同于FT(Fungible Token,同质化代币),每一个NFT都是独一无二且不可相互替代的…

cmake管理子程序,lib库和so库应用实践

cmake在管理大型项目时经常被用到,本文以简单程序演示来说明camke管理项目应用,其中包括主程序,子程序,so库程序,lib程序。 目录 1.程序目录结构 2.编译执行 3.清除临时文件 4.完整代码 1.程序目录结构 ├── bu…

【PWN刷题__ret2text】[BJDCTF 2020]babystack

新手上路~低速慢行~ 目录 前言 1. checksec 2. IDA 反汇编 3. payload编写 4. exp编写 5. pwntools用法 前言 作为pwn新手,尽可能在刷题中,记录、学习一些通用的知识点,因此wp是少不了的。 本题是一道简单的ret2text 1. checksec 没有…

6.2 龙格—库塔法

学习目标: 学习龙格-库塔法的具体明确的学习目标可以有以下几点: 理解龙格-库塔法的基本思想和原理:我们应该了解龙格-库塔法的数值求解思想和数值误差的概念,包括截断误差和稳定性等基本概念,并且要熟悉龙格-库塔法的…

大学生无线耳机怎么选?内行推荐四款高性价比蓝牙耳机

随着蓝牙耳机的使用频率越来越高,大学生成为了蓝牙耳机的主要用户群体之一。最近看到很多网友问,大学生无线耳机怎么选?针对这个问题,我来给大家推荐几款高性价比蓝牙耳机,一起来看看吧。 一、南卡小音舱Lite2蓝牙耳机…

MIMO-OFDM系统中信道估计的快速谐波搜索技术(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 目前,由OFDM技术与空时编码技术相融合而成的MIMO-OFDM技术已经引起了通信领域的广泛关注和研究.在无线通信系统中,MIMO-OFDM技…

11. 图的入门

11. 图的入门 11.1 图的实际应用: ​ 在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用场景我们都可以用即将要学习的图这种数据结构去解决。 地图: ​ 我们生活中经常使用的地图,基本上是由…

关于函数栈帧的创建与销毁和可变参数列表

目录 1. 深刻理解函数调用过程1.1 基本概念1.2 函数栈帧的创建于销毁1.2.1 栈帧创建1.2.2 栈帧销毁1.2.3 有趣的现象 2. 了解可变参数列表的使用与原理2.1 可变参数列表与函数栈帧的关系2.2 宏的工作过程2.3 宏的具体实现原理 1. 深刻理解函数调用过程 1.1 基本概念 关于函数…