AI 大气追踪污染之源:智能算法与技术实现webgis应用

在这里插入图片描述

大气污染溯源是环境科学领域的一项重要工作,它涉及到识别和追踪大气中的污染物来源及其传播路径。下面是一个优化排版的大气污染溯源基础概念知识概述:


1. 大气污染溯源基础概念知识

污染源识别
  • 自然源:火山爆发、沙尘暴、森林火灾等产生的烟尘
  • 人为源:工业排放、汽车尾气、农业燃烧、燃煤电厂、建筑活动
化学与物理分析
  • 对大气样本(如降水、颗粒物、气溶胶体、气体)进行化学成分分析
  • 识别污染物种类:二氧化硫、氮氧化物、臭氧族化合物、重金属、挥发性有机化合物
同位素标记与分子标志物
  • 使用稳定同位素和放射性同位素标记
  • 分析分子标志物,如13H、13C、14N等,揭示污染物来源和传输路径
模型模拟
  • 利用大气传输模型模拟污染物扩散过程
    • 高斯羽烟模型
    • WRF模型
    • CMAQS模型
  • 结合气象数据(风向、温湿度、压力、风速、逆温层)模拟污染物传播轨迹
遥感技术
  • 利用卫星遥感、无人机、航空遥感图像分析大气污染状况
  • 监测大范围污染分布:PM2.5、NOx、O3浓度
时空分析
  • 结合时间序列分析和空间统计方法
  • 使用GIS分析追踪污染变化趋势和空间分布
  • 识别污染热点区域
数据融合与大数据
  • 利用多源数据(环境监测站、移动监测、社会经济数据)融合分析
  • 通过AI、机器学习算法提高溯源精度
大气污染溯源流程

大气污染溯源是一项跨学科工作,需要环境科学、化学、气象学、计算机科学、地理信息科学等多领域知识的综合应用。通过这些技术手段,可以准确找到污染源头,为政策制定和环保措施提供科学依据,减少大气污染对人体健康和环境的负面影响。


这个概述提供了大气污染溯源的基本概念和主要流程,有助于理解这一复杂过程的关键步骤和技术方法。
在大气污染溯源中,气象条件的融合对于提高污染物扩散模拟的准确性至关重要。下面是一个优化排版的关于融合气象条件进行溯源的介绍:


大气污染物超标监测是确保空气质量安全的重要环节。以下是对大气污染物超标异常报警监测的一般流程的优化排版:


2.1 站点污染物超标异常报警监测

实时监测与数据收集
  • 在线监测设备:使用自动监测站和传感器网络。
  • 监测对象:连续监测大气中的有害物质,包括:
    • 二氧化硫氧化物(SOx)
    • 氮氧化物(NOx)
    • 颗粒物(PM2.5、PM10)
    • 臭氧
    • 异味等
数据验证与分析
  • 质量控制:对收集到的数据进行校验,确保准确性和可靠性。
  • 分析方法
    • 统计分析
    • 趋势分析
    • 时空分布分析
  • 目的:识别污染物超标的原因。
超标预警
  • 阈值预警系统:设定预警阈值。
  • 触发机制:监测数据一旦超过阈值,立即触发预警。
  • 可视化展示:实时显示高值预警站点。

2.2 融合气象条件溯源

污染物高斯扩散原理

环境科学中的高斯扩散模型

  • 高斯模型用于模拟污染物在大气、水体或土壤中的扩散过程。
  • 假设污染物浓度分布遵循高斯分布,指数下降随距离源的增加。

统计学中的高斯分布

  • 描述自然界中随机变量的分布,如误差或测量误差。
  • 在这里插入图片描述

高斯扩散方程
在这里插入图片描述

编程实现与应用领域
  • 在编程语言(如.NET、Java等)中实现高斯模型。
  • 应用于GIS、气象、大气科学、医疗、警务等领域。
示例应用验证
  • 验证高斯模型在实际环境中的应用效果。
  • 调整模型参数以适应具体的气象条件和地理环境。

通过融合气象条件,如风速、风向、温度、湿度和大气稳定性等,可以更准确地模拟污染物的扩散路径和浓度分布。这有助于提高大气污染溯源的精确度,为制定有效的污染控制策略提供科学依据。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/21ea2f8db7934ef5affccea233267d88.png#pic_center

在这里插入图片描述
在污染溯源查找中,风速是一个关键的气象参数,它影响着污染物的扩散和传输。当风速小于1.5m/s时,污染物可能在较近的范围内累积。以下是对风速小于1.5m/s时查找周边25公里范围内企业的优化排版:


2.3 污染溯源查找

风速小于1.5m/s时的策略

周边企业排查

  • 在风速小于1.5m/s的情况下,污染物扩散能力较弱,因此需要重点排查周边25公里范围内的企业

步骤

  1. 收集信息:收集25公里范围内所有企业的基本信息和排放数据。
  2. 初步筛选:根据企业的排放记录和生产活动,进行初步筛选,确定可能的污染源。
  3. 现场调查:对筛选出的企业进行现场调查,检查排放设施和控制措施。
  4. 数据对比:将现场调查结果与监测数据进行对比,以确认污染源。
  5. 综合评估:综合考虑企业的排放量、排放类型、地理位置等因素,评估其对污染的贡献。
    在这里插入图片描述
    风速1.5m/s以上查找上下风口22.5度范围内企业
    在这里插入图片描述
    相关性分析是一种研究变量之间关系的统计方法,它可以帮助我们理解数据之间的关系,但并不直接表明因果关系。以下是对相关性分析的优化排版介绍:

2.4 相关性分析

核心概念

相关系类型

  • 正相关:一个变量增加时,另一个变量也增加(如身高和体重)。
  • 负相关:一个变量增加时,另一个变量减少(如冰淇淋销量与气温)。
  • 无相关:两个变量之间没有明显的关联。

相关系强度

方法
  • 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:2945853209
在这里插入图片描述
网址:https://threelab.cn/

  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值