大气污染溯源算法及其技术实现

  • 污染溯源基础概念知识

大气污染溯源是指识别并追踪污染物的来源及其传输过程,以确定造成大气污染的根本原因和污染物传播路径的技术和方法。这对于制定有效的控制和减轻污染策略至关重要。大气污染的溯源主要涉及以下几个方面:

  1. 污染源识别:首先要确定污染源的类型,大气污染主要分为自然源(如火山爆发、沙尘暴、森林火灾产生的烟尘)和人为源(工业排放、汽车尾气、农业燃烧、燃煤电厂、建筑活动)。
  2. 化学与物理分析 - 通过对大气样本(如降水、颗粒物、气溶胶体、气体)进行化学成分分析,识别污染物的种类(如二氧化硫化物、氮氧化物、臭氧族化合物、重金属、挥发性有机化合物)。
  3. 同位素标记与分子标志物 - 使用稳定同位素和放射性同位素标记、分子标志物追踪特定污染物,比如13H、13C、14N等,可以揭示污染物的来源和传输路径。
  4. 模型模拟 - 利用大气传输模型模拟污染物的扩散过程,如高斯羽烟、WRF模型、CMAQS模型,结合气象数据(风向、温湿度、压力、风速、逆温层)模拟污染物的传播轨迹。
  5. 遥感技术 - 利用卫星遥感、无人机、航空遥感图像分析大气污染状况,监测大范围的污染分布,如PM2.5、NOx、O3浓度。
  6. 时空分析 - 结合时间序列分析和空间统计方法,如GIS分析,追踪污染变化趋势和空间分布,识别热点区域。
  7. 数据融合与大数据 - 利用多源数据(环境监测站、移动监测、社会经济数据)融合分析,通过AI、机器学习算法提高溯源精度。大气污染溯源是一项复杂的跨学科工作,需要环境科学、化学、气象学、计算机科学、地理信息科学等多领域知识的综合应用。通过这些技术手段,可以准确找到污染源头,为政策制定和环保措施提供科学依据,减少大气污染对人体健康和环境的负面影响。
  • 大气污染溯源流程
2.1站点污染物超标异常报警监测

大气污染物超标监测是环境监测中一个关键环节,它涉及到对空气中存在的各种有害物质浓度进行定期或连续监测,以确保其浓度保持在国家或地方规定的安全限值内。当监测结果显示污染物浓度超过这些限值时,即认为是超标。以下是对大气污染物监测超标处理的一般流程:

  1. 实时监测与数据收集:使用在线监测设备(如自动监测站、传感器网络)连续监测大气中的主要污染物,如二氧化硫氧化物(SOx)、氮氧化物(NOx)、颗粒物(PM2.5、PM10)、臭氧、异味等,实时收集数据。
  2. 数据验证与分析:对收集到的数据进行质量控制和校验,确保数据的准确性和可靠性。运用统计分析、趋势分析、时空分布等方法,识别超标原因。

3. 超标预警:设定阈值预警系统,一旦监测数据超过设定的阈值,立即触发预警,可视化展示实时高值预警站点。

2.2融合气象条件溯源

气象条件下的污染物高斯扩散原理:

环境科学中的高斯扩散模型在环境科学领域,高斯模型常用于模拟污染物在大气、水体或土壤中扩散的过程。高斯模型假设污染物的浓度分布遵循高斯分布,其中污染物的浓度随着距离源的距离增加而呈指数下降。这通常用于预测污染物的浓度场、评估环境影响、规划应急响应或制定污染控制策略。

统计学中的高斯分布在统计学中,高斯分布是一种连续概率分布,常用于描述自然界中许多随机变量的分布,如误差或测量误差。高斯分布由均值(μ)、方差(σ²)决定,公式为: [ f(x)=\frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}]在环境模型中,高斯分布用来描述污染物浓度的概率分布,即在某一特定点的污染物浓度值的概率,随着距离污染源的距离增加而按高斯分布规律衰减小。

高斯扩散方程在数学上,高斯扩散方程描述了这种浓度随时间变化的扩散过程,它是一个偏微分方程,通常形式为: [ \frac{\partial c}{\partial t} = D \nabla \Delta c] 其中 (c) 是浓度,(t) 是时间,(D) 是扩散系数,(\Delta) 是拉普朗克算子,代表空间二阶导数。编程语言(如.NET、Java等)中实现高斯模型,或是在GIS、气象、大气科学、医疗、警务等领域的应用;

示例应用验证

2.3污染溯源查找

风速小于1.5m/s查找周边25公里范围内企业

风速1.5m/s以上查找上下风口22.5度范围内企业

2.4相关性分析

相关性分析是统计学中一种重要的方法,用于研究两个或多个变量之间相互关系的性质,主要包括关系的方向(正相关或负相关)、强度以及是否存在线性。相关性分析不意味着因果关系,而是表明变量之间的伴随关系或关联度量度。以下是相关性分析的一些核心概念和方法:

相关系类型

•正相关:**当一个变量增加时,另一个变量也倾向于增加,如身高和体重。

•负相关:**一个变量增加时,另一个变量倾向于减少,如冰淇淋销量与气温。

•无相关:**两个变量变化无明显关联,或关系随机。

相关系强度

相关系数值(通常用r表示)衡量相关强度:

•|r ≈ 0:几乎无相关

•0.3 ≤ |r| < .5:低度相关

•.5 ≤ |r| < .8:中度相关

•|r| ≈ 1:高度相关

见方法

•Pearson相关系数:用于度量连续变量,假设数据近似正态分布。

•Spearman秩相关:连续或分类变量,不关心变量分布,关注排序关系。

•Kendall相关:非参数,适用于小样本量数据,排序数据。

•偏相关:控制其他变量影响,分析两变量间净相关。

应用

•气象:影响分析。

分析过程

  1. 数据收集:确保数据质量,代表性。
  2. 预处理:缺失值处理,异常值处理。
  3. 选择模型:根据数据类型选相关系数。
  4. 计算:软件执行分析。
  5. 解读:图表,理解r值。

相关性分析是理解和预测模型、决策支持科学假设的重要工具。

关联企业和企业站点进行溯源相关性分析(推最近26小时,相关性分析连续24小时)

2.4集成AI精准溯源

后台代码算法实现

try {Map<String, Object> kv = new HashMap<>();kv.put("labelMap", new HashMap<>());Map<String, String> headerMap = new HashMap<>();if(authorization==null)authorization="eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX2tleSI6IjlkNGZjN2VjLWRkMDEtNDE1MC1iMjRjLTZlMDFhM2EzOWMzYSIsInVzZXJuYW1lIjoiYWRtaW4ifQ.Yoxhd_UCCMiBPHHsFaFAZp2q0kQZ7guXR6oTA4wz3CNEYKIOZ1U-IOE2pxDzEzVG2N-CWI8S4arj3ffNXF5V8g";headerMap.put("Authorization", authorization);String[] confs= FileUtils.ReadTxt("peConfig.txt").split(";");JSONArray datalist = null;String url = confs[0] + "/stationExceed/changingTrends?contaminant=" + factor + "&end=" + end + "&start=" + start + "&stationIds=" + id;JSONObject obj = JSON.parseObject(HttpUtils.get(url,kv, headerMap));logger.warn("请求的地址为:"+url+"返回的数据为"+obj);datalist = (JSONArray)((JSONObject)((JSONArray)(((JSONObject)obj.get("data")).get("series"))).get(0)).get("values");double[] x = new double[datalist.size()-2];for (int i = datalist.size()-1,j=0; i > 1; i--,j++) {x[j] = TransferDouble(datalist.get(i));}String entIds = "";JSONArray datalist1 = null;String url1 = confs[0] + "/station/list?stationTypeDictIds="+stationTypeDictIds;JSONObject obj1 = JSON.parseObject(HttpUtils.get(url1,kv, headerMap));
//            logger.warn("请求的地址为:"+url1+"返回的数据为"+obj1);datalist1 = (JSONArray)obj1.get("data");JSONArray eArr = new JSONArray();String thetas = "";if(windSpeed>=1.5){for(int i = 0; i < datalist1.size(); i++){double distancel=InterpolationUtils.GetDistance(lon,lat,TransferDouble(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("lon")),TransferDouble(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("lat")));if(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("id").equals(id)||distancel>100000){continue;}double dgr=InterpolationUtils.getDegrees(lon,lat,TransferDouble(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("lon")),TransferDouble(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("lat")));if(dgr <0 ){dgr += 360.0;}if(wd>=11.25&wd<=349.75){if(Math.abs(dgr-wd)<=11.25){eArr.add(datalist1.get(i));entIds = entIds + ((JSONObject)datalist1.get(i)).get("id").toString() + ",";thetas=thetas+String.valueOf(Math.abs(dgr-wd))+",";}}else {if(dgr<11.25){dgr += 360.0;}if(wd<11.25){wd += 360.0;}if(Math.abs(dgr-wd)<=11.25){eArr.add(datalist1.get(i));entIds = entIds + ((JSONObject)datalist1.get(i)).get("id").toString() + ",";thetas=thetas+String.valueOf(Math.abs(dgr-wd))+",";}}if(eArr.size()==5){break;}}int ecount = eArr.size()+5;for(int i = 0; i < datalist1.size(); i++){double distancel=InterpolationUtils.GetDistance(lon,lat,TransferDouble(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("lon")),TransferDouble(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("lat")));if(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("id").equals(id)||distancel>100000){continue;}double dgr=InterpolationUtils.getDegrees(lon,lat,TransferDouble(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("lon")),TransferDouble(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("lat")));if(dgr <0 ){dgr += 360.0;}double wd1=wd;if(wd>180){wd1=wd-180;}else {wd1=wd+180;}if(wd1>=11.25&wd1<=349.75){if(Math.abs(dgr-wd1)<=11.25){eArr.add(datalist1.get(i));entIds = entIds + ((JSONObject)datalist1.get(i)).get("id").toString() + ",";thetas=thetas+String.valueOf(Math.abs(dgr-wd))+",";}}else {if(dgr<11.25){dgr += 360.0;}if(wd1<11.25){wd1 += 360.0;}if(Math.abs(dgr-wd1)<=11.25){eArr.add(datalist1.get(i));entIds = entIds + ((JSONObject)datalist1.get(i)).get("id").toString() + ",";thetas=thetas+String.valueOf(Math.abs(dgr-wd1))+",";}}if(eArr.size()==ecount){break;}}}else {for(int i = 0; i < datalist1.size(); i++){if(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("id").equals(id)){continue;}double dgr=InterpolationUtils.getDegrees(lon,lat,TransferDouble(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("lon")),TransferDouble(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("lat")));double ds=InterpolationUtils.GetDistance(lon,lat,TransferDouble(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("lon")),TransferDouble(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("lat")));if(ds <25000 ){eArr.add(datalist1.get(i));entIds = entIds + ((JSONObject)datalist1.get(i)).get("id").toString() + ",";thetas=thetas+String.valueOf(Math.abs(dgr-wd))+",";}if(eArr.size()==10){break;}}}for(int i = 0; i < datalist1.size(); i++){if(((com.alibaba.fastjson.JSONObject)datalist1.get(i)).get("id").equals(id)){eArr.add(datalist1.get(i));entIds = entIds + ((JSONObject)datalist1.get(i)).get("id").toString() + ",";thetas=thetas+"0,";break;}}if(entIds.equals("")){return "";}JSONArray datalist2 = null;String url2 = confs[0] + "/stationExceed/changingTrends?contaminant=" + factor + "&end=" + end + "&stationIds=" + entIds.substring(0, entIds.length() - 2) + "&start=" + start;JSONObject obj2 = JSON.parseObject(HttpUtils.get(url2,kv, headerMap));logger.warn("请求的地址为:"+url2+"返回的数据为"+obj2);datalist2 = (JSONArray)((JSONObject)obj2.get("data")).get("series");double[] pearsonCorrelations=new double[datalist2.size()];double[] emissionCorrelations=new double[datalist2.size()];for(int i=0;i<datalist2.size();i++){JSONArray datalistL=(JSONArray)(((JSONObject)datalist2.get(i)).get("values"));double[] y1 = new double[datalistL.size()-2];double[] y2 = new double[datalistL.size()-2];double[] y3 = new double[datalistL.size()-2];for (int k = datalist.size()-1,j=0; k > 1; k--,j++) {y1[j] = TransferDouble(datalistL.get(k));}for (int k = datalist.size()-2,j=0; k > 0; k--,j++) {y2[j] = TransferDouble(datalistL.get(k));}for (int k = datalist.size()-3,j=0; k > -1; k--,j++) {y3[j] = TransferDouble(datalistL.get(k));}double correlation1 = StatisticsUtil.correlation(x, y1, PEARSON_ID);double correlation2 = StatisticsUtil.correlation(x, y2, PEARSON_ID);double correlation3 = StatisticsUtil.correlation(x, y3, PEARSON_ID);if(Double.isNaN(correlation1)){correlation1 = 0;}if(Double.isNaN(correlation2)){correlation2 = 0;}if(Double.isNaN(correlation3)){correlation3 = 0;}pearsonCorrelations[i]=correlation1;double q = y1[0];if(correlation2>pearsonCorrelations[i]){pearsonCorrelations[i]=correlation2;q = y2[0];}if(correlation3>pearsonCorrelations[i]){pearsonCorrelations[i]=correlation3;q = y3[0];}double lz=Math.sqrt(Math.pow(((JSONObject)eArr.get(i)).getDouble("lon")-lon,2)+Math.pow(((JSONObject)eArr.get(i)).getDouble("lat")-lat,2));double lX=lz*Math.cos(TransferDouble(thetas.split(",")[i])/180);double lY=lz*Math.sin(TransferDouble(thetas.split(",")[i])/180);emissionCorrelations[i]=InterpolationUtils.interpolation_GaussPlumeP(lX, lY,1, windSpeed, q, 0,"A");((JSONObject) eArr.get(i)).put("emissionCorrelation",emissionCorrelations[i]*1000);((JSONObject) eArr.get(i)).put("pearsonCorrelation",pearsonCorrelations[i]);((JSONObject) eArr.get(i)).put("lineGeoField","[["+((JSONObject)eArr.get(i)).getString("lon")+","+((JSONObject)eArr.get(i)).getString("lat")+"],["+lon+","+lat+"]]");}return eArr.toJSONString();}catch (Exception e){return "";}

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

技术合作交流qq:2401315930

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker搭建Redis主从 + Redis哨兵模式(一主一从俩哨兵)

我这里是搭建一主一从&#xff0c;俩哨兵&#xff0c;准备两台服务器&#xff0c;分别安装docker 我这里有两台centos服务器 主服务器IP&#xff1a;192.168.252.134 从服务器IP&#xff1a;192.168.252.135 1.两台服务器分别拉取redis镜像 docker pull redis 2.查看镜像 d…

深入探索C++继承机制:从概念到实践的全面指南

目录 继承的概念及定义 继承的概念 继承的定义 定义格式 继承方式和访问限定符 继承基类成员访问方式的变化 默认继承方式 基类和派生类对象赋值转换 继承中的作用域 派生类的默认成员函数 继承与友元 继承与静态成员 继承的方式 菱形虚拟继承 菱形虚拟继承原理 继承…

【NumPy】掌握NumPy的histogram函数:数据直方图的生成与应用详解

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

AIGC笔记--基于PEFT库使用LoRA

1--相关讲解 LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS LoRA 在 Stable Diffusion 中的三种应用&#xff1a;原理讲解与代码示例 PEFT-LoRA 2--基本原理 固定原始层&#xff0c;通过添加和训练两个低秩矩阵&#xff0c;达到微调模型的效果&#xff1b; 3--简单代…

奇门遁甲古籍1《奇门秘术》(双页版)PDF电子书

《奇门秘术》 全书共102页 时间有限&#xff0c;仅上传部分图片&#xff0c;结缘私&#xff01;

ROS基础学习-话题通信机制研究

研究ROS通信机制 研究ROS通信机制 0.前言1.话题通信1.1 理论模型1.2 话题通讯的基本操作1.2.1 C++1.2.2 Python中使用自己的虚拟环境包1.2.2.1 参考11.2.2.2 参考21.2.2.3 /usr/bin/env:“python”:没有那个文件或目录1.2.3 Python1.2.2.1 发布方1.2.2.2 订阅方1.2.2.3 添加可执…

一些Spring的理解

说说你对Spring的理解 首先Spring是一个生态&#xff1a;可以构建企业级应用程序所需的一切基础设施 但是&#xff0c;通常Spring指的就是Spring Framework&#xff0c;它有两大核心&#xff1a; IOC和DI 它的核心就是一个对象管理工厂容器&#xff0c;Spring工厂用于生产Bea…

03 Prometheus+Grafana可视化配置

03 PrometheusGrafana可视化配置 大家好&#xff0c;我是秋意零。接上篇Prometheus入门安装教程 grafana官网下载安装包比较慢&#xff0c;如果没有魔法。可关注公众号【秋意零】回复101获取 Grafana官网下载&#xff1a;https://grafana.com/grafana/download 这里采用的二进制…

2024年社会发展、人文艺术与文化国际会议(ICSDHAC 2024)

2024年社会发展、人文艺术与文化国际会议&#xff08;ICSDHAC 2024&#xff09; 会议简介 2024年国际社会发展、人文、艺术和文化会议&#xff08;ICSDHAC 2024&#xff09;将在广州举行。会议旨在为从事社会发展、人文、艺术和文化研究的专家学者提供一个平台&#xff0c;分…

为什么说想当产品经理,最好的时候就是现在?

今年,随着人工智能(AI)技术的火热,AI产品经理岗位的需求也一路暴涨,薪资也同步水涨船高。 根据美国招聘社交媒体Glassdoor的数据,AI产品经理年收入高达125万元,是普通产品经理年收入的1.43倍,更是项目经理年收入的2.14倍。在中国,大厂AI产品经理的月收入也高达3到7万左右。但即…

【ai】livekit服务本地开发模式及example app信令交互详细流程

文档要安装git lfs 下载当前最新版本1.6.1 windows版本&#xff1a;启动dev模式 服务器启动 (.venv) PS D:\XTRANS\pythonProject\LIVEKIT> cd .\livekit_release\ (.venv) PS D:\XTRANS\pythonProject\LIVEKIT\livekit_release> lsDirectory: D:\XTRANS\pythonProject\L…

yolo 算法 易主

标题&#xff1a;YOLOv10: Real-Time End-to-End Object Detection 论文&#xff1a;https://arxiv.org/pdf/2405.14458ethttps%3A//arxiv.org/pdf/2405.14458.zhihu.com/?targethttps%3A//arxiv.org/pdf/2405.14458 源码&#xff1a;https://github.com/THU-MIG/yolov10 分析…

Django Web:搭建Websocket服务器(入门篇)

Django Web架构 搭建Websocket服务器&#xff08;1&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:htt…

算法之堆排序

堆排序是一种基于比较的排序算法&#xff0c;通过构建二叉堆&#xff08;Binary Heap&#xff09;&#xff0c;可以利用堆的性质进行高效的排序。二叉堆是一个完全二叉树&#xff0c;可以有最大堆和最小堆两种形式。在最大堆中&#xff0c;父节点的值总是大于或等于其子节点的值…

Linux文本处理三剑客(详解)

一、文本三剑客是什么&#xff1f; 1. 对于接触过Linux操作系统的人来说&#xff0c;应该都听过说Linux中的文本三剑客吧&#xff0c;即awk、grep、sed&#xff0c;也是必须要掌握的Linux命令之一&#xff0c;三者都是用来处理文本的&#xff0c;但侧重点各不相同&#xff0c;a…

kubeadm引导欧拉系统高可用的K8S1.28.X

文章目录 一. 核心组件架构二. 有状态与无状态应用三. 资源对象3.1 规约与状态3.2 资源的分类-元数据,集群,命名空间3.2.1 元数据3.2.2 集群资源 3.3 命名空间级3.3.1 pod3.3.2 pod-副本集3.3.3 pod-控制器 四. Kubeadm安装k8s集群4.1 初始操作4.2 ~~所有节点安装Docker&#x…

Java基础:基本语法(一)

Java基础&#xff1a;基本语法&#xff08;一&#xff09; 文章目录 Java基础&#xff1a;基本语法&#xff08;一&#xff09;1. 前言2. 开发环境搭建2.1 Java开发工具包下载2.2 环境变量配置2.3 Java程序的运行过程 3. 数据类型3.1 基本数据类型3.2 引用数据类型 4. 常量与变…

maven部署到私服

方法一:网页上传 1、账号登录 用户名/密码 2、地址 http://自己的ip:自己的端口/nexus 3、查看Repositories列表&#xff0c;选择Public Repositories&#xff0c;确定待上传jar包不在私服中 4、选择3rd party仓库&#xff0c;点击Artifact Upload页签 5、GAV Definition选…

SQL面试题练习 —— 连续登录超过N天用户(一)

题目 现有用户登录日志表 t_login_log,包含用户ID(user_id),登录日期(login_date)。数据已经按照用户日期去重&#xff0c;请查出连续登录超过4天的用户ID。 样例数据 样例输出 建表语句 CREATE TABLE t_login_log (user_id VARCHAR(255) COMMENT 用户ID,login_date DATE CO…

08.tomcat多实例

在加两个tomcat实例 [rootweb01 ~]# ll apache-tomcat-8.0.27.tar.gz -rw-r--r-- 1 root root 9128610 10月 5 2015 apache-tomcat-8.0.27.tar.gz [rootweb01 ~]# tar xf apache-tomcat-8.0.27.tar.gz [rootweb01 ~]# cp -a apache-tomcat-8.0.27 tomcat_8081 [rootweb01 ~…