ENVI IDL:如何基于气象站点数据进行反距离权重插值?

01 前言

仅仅练习,大可使用ArcGIS或者已经封装好的python模块进行插值,此处仅仅从底层理解如何从公式和代码理解反距离权重插值的过程,从而更深刻的理解IDL的使用和插值的理解。

02 函数说明

2.1 Read_CSV()函数

官方语法如下:

Result = READ_CSV( Filename [, COUNT=variable] [, HEADER=variable] [, MISSING_VALUE=value] [, N_TABLE_HEADER=value] [, NUM_RECORDS=value] [, RECORD_START=value] [, TABLE_HEADER=variable] [, TYPES=value] )

Filename表示读取的CSV文件的路径;
COUNT表示读取的CSV文件内表格的行数(不包含标签头即第一行)
HEADER表示读取的CSV文件内表头(以字符串数组存储表头信息,默认第一行记录为表头<如果有>)
MISSING_VALUE表示对于CSV文件内表格中的空值应该赋予何值呢?默认是赋予0。
N_TABLE_HEADER表示表头的行数,或许我们的表头不止一行,那么使用header就很难获取得到所有的表头信息,因此我们需要指定表头到底有多少行。一般与TABLE_HEADER连用,获取的多行表头返回给该参数,且其优先级高于header
NUM_RECORDS表示读取的总行数,默认是所有行都读取。
RECORD_START表示开始读取的行的索引,默认从0开始(0为表头行)
TYPES传入各个列的数据类型(字符串数组形式,每一列的记录的数据类型)以下是各个数据类型的参数:
在这里插入图片描述
""表示该列的数据类型自动确定数据类型。

03 代码

3.1 封装的反距离权重插值函数

;+
;   函数用途:
;       IDW插值相关(私有函数), 用于单个像元值的插值计算
;   函数参数:
;       ···
;-
function _idw, x0, y0, targets_exist, xs_exist, ys_exist,  p = pif ~keyword_set(p) then p = 2.0distances = sqrt((x0 - xs_exist) ^ 2.0 + (y0 - ys_exist) ^ 2.0)distances_coef = total(1.0 / (distances ^ p))interp_target = total(targets_exist / ((distances ^ p) * distances_coef))return, interp_target
end;+
;   函数用途:
;       该函数基于少数点位进行反距离权重插值(IDW)生成指定范围的插值栅格矩阵
;   函数参数:
;       targets_exist: 插值的目标向量(数组形式)
;       xs_exist: 与目标向量对应的X坐标向量集(数组形式)
;       ys_exist: 与目标向量对应的Y坐标向量集(数组形式)
;       out_res: 插值后输出的分辨率大小
;       target_interp: 输出插值后的目标矩阵
;-
pro idw, targets_exist, xs_exist, ys_exist, out_res, target_interp, p=pout_res_half = out_res / 2.0dx_min = min(xs_exist) - out_res_halfx_max = max(xs_exist) + out_res_halfy_min = min(ys_exist) - out_res_halfy_max = max(ys_exist) + out_res_halfcols = ceil((x_max - x_min) / out_res)rows = ceil((y_max - y_min) / out_res)target_interp = make_array(cols, rows, /double, value=!values.F_NAN)existing_cols = floor((xs_exist - x_min) / out_res)existing_rows = floor((y_max - ys_exist) / out_res)target_interp[existing_cols, existing_rows] = targets_existfor col_ix=0, cols - 1 do beginfor row_ix=0, rows - 1 do beginif ~finite(target_interp[col_ix, row_ix], /nan) then continuex0 = x_min + col_ix * out_res + out_res_halfy0 = y_max - row_ix * out_res - out_res_halftarget_interp[col_ix, row_ix] = _idw(x0, y0, targets_exist, xs_exist, ys_exist, p=p)endforendfor
end

3.2 主程序

; @Author	: ChaoQiezi
; @Time		: 2023117-下午2:17:56
; @Email	: chaoqiezi.one@qq.com; 该程序用于 对站点(CSV)文件中的空气质量参数(多种污染物浓度)进行指定范围的插值; 主程序
pro idw_interp; 准备in_path = 'D:\Objects\JuniorFallTerm\IDLProgram\Experiments\ExperimentalData\Week7\air_quality_data.csv\'out_dir = 'D:\Objects\JuniorFallTerm\IDLProgram\Experiments\ExperimentalData\Week7\out_me\'if ~file_test(out_dir, /directory) then file_mkdir, out_dirout_res = 0.001d  ; 输出分辨率,(°)out_res_half = out_res / 2.0d; 读取ds = read_csv(in_path, count=count, header=header, missing_value=!values.F_NAN)lon = ds.(0)lat = ds.(1)targets_name = header[2:*]foreach target_name, targets_name, ix do begintarget = ds.(ix + 2)idw, target, lon, lat, out_res, target_interp; 地理结构体geo_info={$MODELPIXELSCALETAG: [out_res, out_res, 0.0], $  ; 分辨率MODELTIEPOINTTAG: [0.0, 0.0, 0.0, min(lon) - out_res_half, max(lat) + out_res_half, 0.0], $  ; 角点信息GTMODELTYPEGEOKEY: 2, $  ; 设置为地理坐标系GTRASTERTYPEGEOKEY: 1, $  ; 像素的表示类型, 北上图像(North-Up)GEOGRAPHICTYPEGEOKEY: 4326, $  ; 地理坐标系为WGS84GEOGCITATIONGEOKEY: 'GCS_WGS_1984', $GEOGANGULARUNITSGEOKEY: 9102}  ; 单位为度; 输出out_path = out_dir + 'IDW_' + target_name + '.tiff'write_tiff, out_path, target_interp, geotiff=geo_info, /doubleprint, target_name, ' IDW插值完成: ', timer_keep(), ' s', format='%s%s%0.2f%s'endforeach
end

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

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

相关文章

概念解析 | 菲涅尔方程 Fresnel Equations :揭示光的奥秘面纱

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:菲涅尔方程 菲涅尔方程:揭示光的奥秘面纱 背景介绍 当光从一种介质传播到另一种介质时,部分光会折射进入新介质,部分会反射回原介质。这一现象被称为光的折射和反射。 19世纪…

Python---字典---dict

1、为什么需要字典 如果想要存储一个人的信息&#xff0c;姓名&#xff1a;Tom&#xff0c;年龄&#xff1a;20周岁&#xff0c;性别&#xff1a;男&#xff0c;如何快速存储。 person [Tom, 20, 男] 在日常生活中&#xff0c;姓名、年龄以及性别同属于一个人的基本特征。 但…

爬虫之数据解析

何为数据解析 概念&#xff1a;就是将爬取到数据中局部的指定的数据进行提取作用&#xff1a;实现聚焦爬虫数据解析通用原理&#xff1a; html是用来展示数据&#xff0c;html中展示的数据正是我们要爬取或者采集的数据数据解析的通用原理&#xff1a; 标签定位提取标签中存储…

Please No More Sigma(构造矩阵)

Please No More Sigma 给f(n)定义如下&#xff1a; f(n)1 n1,2; f(n)f(n-1)f(n-2) n>2; 给定n&#xff0c;求下式模1e97后的值 Input 第一行一个数字T&#xff0c;表示样例数 以下有T行&#xff0c;每行一个数&#xff0c;表示n。 保证T<100&#xff0c;n<100000…

使用Filter实现登录验证

1、什么是Filter Filter可认为是Servlet的一种特殊用法&#xff0c;主要是对用户发起的请求进行预处理或后处理&#xff0c;意思就是在请求到达用户想请求的地址之前先进入Filter&#xff0c;或者在离开用户请求之后进入Filter。Filter类似于门卫&#xff0c;你在进入之前门卫…

51单片机入门

一、单片机以及开发板介绍 写在前面&#xff1a;本文为作者自学笔记&#xff0c;课程为哔哩哔哩江协科技51单片机入门教程&#xff0c;感兴趣可以看看&#xff0c;适合普中A2开发板或者HC6800-ESV2.0江协科技课程所用开发板。 工具安装请另行搜索&#xff0c;这里不做介绍&…

数值分析算法(简介)

数值分析是研究使用数值计算方法解决数学问题的领域。当在比赛中使用高级语言进行编程时&#xff0c;可以编写相应的库函数来实现数值分析中常用的算法&#xff0c;如方程组求解、矩阵运算和函数积分等算法。下面我将介绍一些常用的数值分析算法以及可能需要编写的库函数。 方…

CompareM-平均氨基酸一致性(AAI)计算

文章目录 Comparem简介比较基因组统计基因组使用模式其他 安装使用基于基因组计算氨基酸一致性基于基因组蛋白计算氨基酸一致性 结果转变成矩阵参考 Comparem简介 CompareM 是一个支持进行大规模基因组比较分析的软件工具包。它提供跨基因组&#xff08;如氨基酸一致性&#x…

《未来之路:技术探索与梦想的追逐》

创作纪念日 日期&#xff1a;2023年07月05日文章标题&#xff1a;《从零开始-与大语言模型对话学技术-gradio篇&#xff08;1&#xff09;》成为创作者第128天 在这个平凡的一天&#xff0c;我撰写了自己的第一篇技术博客&#xff0c;题为《从零开始-与大语言模型对话学技术-…

阅读是一座随身携带的避难所:毛姆读书随笔

>> 我想要指明的第一件事就是阅读应当是享受的。当然&#xff0c;为了应对考试或学习知识&#xff0c;我们需要阅读许多书&#xff0c;这类阅读中是不存在什么享受的。我们只是为了获得知识而进行阅读。唯一能做的便是祈祷因为我们需要它&#xff0c;所以我们不至于在通读…

深度学习的集体智慧:最新发展综述

一、说明 我们调查了来自复杂系统的想法&#xff0c;如群体智能、自组织和紧急行为&#xff0c;这些想法在机器学习中越来越受欢迎。人工神经网络正在影响我们的日常生活&#xff0c;从执行预测性任务&#xff08;如推荐、面部识别和对象分类&#xff09;到生成任务&#xff08…

RT-DETR算法改进:更换损失函数DIoU损失函数,提升RT-DETR检测精度

💡本篇内容:RT-DETR算法改进:更换损失函数DIoU损失函数 💡本博客 改进源代码改进 适用于 RT-DETR目标检测算法(ultralytics项目版本) 按步骤操作运行改进后的代码即可🚀🚀🚀 💡改进 RT-DETR 目标检测算法专属 文章目录 一、DIoU理论部分 + 最新 RT-DETR算法…

从0到0.01入门React | 008.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

深度学习/pytoch/pycharm学习过程中遇到的问题

1.在pycharm中打断点后&#xff0c;debug无反应&#xff0c;直到程序退出。 解决&#xff1a;将项目目录中的.idea文件夹删除&#xff0c;重启pycharm可解决 2.plt.imshow(img),plt.show()不显示图片。 解决&#xff1a;import matplotlib&#xff0c;matplotlib.use(TkAgg)…

自动计算零售数据分析指标?BI软件表示可行

随着BI技术的飞速发展&#xff0c;借助系统来计算分析指标也不是什么难事&#xff0c;即便是面对组合多变的零售数据分析指标&#xff0c;奥威BI软件也依旧可以又快又精准地完成指标计算。 BI软件可以自动计算零售数据分析指标&#xff0c;如销售额、库存量、订单量等。在计算…

JavaWeb篇_07——Tomcat组件介绍

Tomcat组件 Server组件 启动一个server实例&#xff08;即一个JVM进程&#xff09;&#xff0c;它监听在8005端口以接收shutdown命令。Server的定义不能使用同一个端口&#xff0c;这意味着如果在同一个物理机上启动了多个Server实例&#xff0c;必须配置它们使用不同的端口。…

[工业自动化-11]:西门子S7-15xxx编程 - PLC从站 - 分布式IO从站/从机

目录 一、什么是以分布式IO从站/从机 二、分布式IO从站的意义 三、ET200分布式从站系列 一、什么是以分布式IO从站/从机 在工业自动化领域中&#xff0c;分布式 IO 系统是目前应用最为广泛的一种 I/O 系统&#xff0c;其中分布式 IO 从站是一个重要的组成部分。 分布式 IO …

问答推广怎么做?问答口碑营销的优势有哪些?

互联网问答平台上线以来&#xff0c;问答口碑营销一直是企业进行网络营销推广不可缺少的一种方式&#xff0c;那么&#xff0c;什么是问答营销推广呢&#xff1f;如何开展问答营销推广&#xff1f;问答营销有哪些优势呢&#xff1f;小马识途营销顾问在本文分析一下。 什么是问答…

Redis系列-四种部署方式-单机部署+主从模式+哨兵模式【7】

目录 Redis系列-四种部署方式-单机部署主从模式【7】redis-四种部署模式单机模式主从模式数据同步的方式全量数据同步增量数据同步 Redis哨兵模式总结缺点&#xff1a;哨兵模式应用sentinel.conf配置项 REF 个人主页: 【⭐️个人主页】 需要您的【&#x1f496; 点赞关注】支持…

移动医疗科技:开发互联网医院系统源码

在这个数字化时代&#xff0c;互联网医院系统成为了提供便捷、高效医疗服务的重要手段。本文将介绍利用移动医疗科技开发互联网医院系统的源码&#xff0c;为医疗行业的数字化转型提供有力支持。 智慧医疗、互联网医院这一类平台可以通过线上的形式进行部分医疗服务&#xff…