Matlab 对nc文件进行处理

server/2024/9/23 20:27:17/

1.介绍nc文件
NetCDF全称为network Common Data Format,中文译法为“网络通用数据格式”;netcdf文件开始的目的是用于存储气象科学中的数据,现在已经成为许多数据采集软件的生成文件的格式。

•从数学上来说,netcdf存储的数据就是一个多自变量的单值函数。用公式来说就是f(x,y,z,…)=value;
•函数的自变量x,y,z等在netcdf中叫做维(dimension) 
•函数值value在netcdf中叫做变量(Variables)

一个Netcdf文件的结构包括以下对象:
•变量(Variables) :变量对应着真实的物理数据。
•维(dimension):一个维对应着函数中的某个自变量,或者说函数图象中的一个坐标轴,在线性代数中就是一个N维向量的一个分量。
•属性(Attribute) :属性对变量值和维的具体物理含义的注释或者说解释。

2. 对nc数据处理的心得
主要是需要将 nc 数据转为带有地理坐标系的 Geotif 文件,可以很方便的用 matlab 或者 python 完成单个或者批处理的转换,随后,利用感兴趣区的shapefile文件对 tif 文件进行裁剪从而达到提取数据的目的,裁剪我还未在matlab中实现过,批量裁剪有多种方法,我使用过Arcgis pro的模型构建器、python的库有GDAL、Arcpy等。更喜欢使用模型构建器,鼠标点点的事哈哈。

 3.实操

先补充一下matlab中矩阵坐标系,如下图,坐标原点在左上角,这对于我们使用permute函数(这函数我认为是第一难)至关重要

clc;clear;
files = ls('temp_ITPCAS-CMFD_V0106_B-01_01yr_010deg_1979-2015.nc');ncdisp(files)
temp = ncread(files,'temp');
lon = ncread(files,'lon');
lat = ncread(files,'lat');data = permute(temp,[2,1,3]);R = georasterref('RasterSize',size(data(:,:,1)),'Latlim',[min(lat) max(lat)],'Lonlim',[min(lon) max(lon)]);
geotiffwrite('test.tif',data(:,:,1),R,'CoordRefSysCode',4326);

 逐行解析:

ncdisp(files)

 查看nc文件的基本信息,会在命令行窗口返回如下结构

A.维度:700行*400列*37页

B.变量有:lon 经度、lat 纬度、 time 时间(实际是37年)、temp 温度(我们需要的,前三个都是维度的说明)

C.可以看到数据是以 经度*纬度*year存储的,但实际中应该是 纬度*经度*year存储,使用pearmute函数!!!

temp = ncread(files,'temp');
lon = ncread(files,'lon');
lat = ncread(files,'lat');data = permute(temp,[2,1,3]);

ncread函数,读取 nc 文件中 的temp变量、lon变量、lat变量,最后利用permute转成纬度*经度*year的形式。

R = georasterref('RasterSize',size(data(:,:,1)),'Latlim',[min(lat) max(lat)],'Lonlim',[min(lon) max(lon)]);
geotiffwrite('test.tif',data(:,:,1),R,'CoordRefSysCode',4326);

只将data(:,:,1),第一年写入了tif,R是参考系的意思。如果要将37年全写成tif,则可加个for循环,读者可自行尝试,会产生37个tif文件。

最后在Arcgis Pro中打开test.tif的效果如下:

最后想裁剪哪里就用一下模型构建器(批量)


http://www.ppmy.cn/server/19278.html

相关文章

SL3038 耐压150V恒压芯片 60V降24V 72V降12V降压IC

SL3038 是一款恒压芯片,其耐压值为 150V。这意味着它可以在高达 150V 的电压下工作而不会损坏。现在,让我们来讨论您提到的两个降压应用:从 60V 降到 24V 和从 72V 降到 12V。 1. 60V 降到 24V: 输入电压:60V 输出电…

聊聊实际工作中设计模式的使用

一直想在CSDN上写一篇关于软件设计模式的文章,草稿打了好久,但很长时间都没有想好该如何写,主要有几点考虑: 1、市面上同类的介绍实在太多了。正所谓第一个能够把美女比喻成鲜花的人是天才,第二个还这么说的是庸才&…

广州增城牛仔裤制衣厂房的降温

针对广州增城牛仔裤制衣厂房的降温问题,以下是一些建议的降温方案: 通风换气:改善厂房的通风状况是降温的首要步骤。可以安装大型工业风扇或排风扇,增加空气流通,减少热空气滞留。同时,确保厂房的门窗能够…

websocket爬虫

人群看板需求分析 先找到策略中心具体的数据。对应数据库中的数据 看看接口是否需要被逆向 点开消费者细分,可以找到人群包(人群名称) 点击查看透视 label字段分类: 在这里插入图片描述 预测年龄:tagTitle 苹果id&#x…

单片机小项目——直流电机+按键

利用普中单片机的代码实现在按下第k个独立按键时,直流电机运作k秒 #include "reg52.h"typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; sbit DC_MotorP1^0; //定义独立按键控制脚 sbit KEY1P3^1; sbit KEY2P3^0; sb…

k8s部署alertmanager

修改alertmanager-pvc.yaml文件中的信息&#xff0c;然后应用YAML文件 cat > /opt/k8s/alertmanager/alertmanager-pvc.yaml <<EOF apiVersion: v1 kind: PersistentVolumeClaim metadata:name: alertmanager-data-pvc spec:accessModes:- ReadWriteManystorageClass…

zabbix6.4告警配置(短信告警和邮件告警),脚本触发

目录 一、前提二、告警配置1.邮件告警脚本配置2.短信告警脚本配置3.zabbix添加报警媒介4.zabbix创建动作4.给用户添加报警媒介 一、前提 已经搭建好zabbix-server 在需要监控的mysql服务器上安装zabbix-agent2 上述安装步骤参考我的上篇文章&#xff1a;通过docker容器安装za…

【论文解读】End-to-End Autonomous Driving through V2X Cooperation

UniV2X 摘要引言方法Sparse-Dense Hybrid Data GenerationCross-View Data Fusion (Agent Fusion)Temporal Synchronization with Flow PredictionSpatial Synchronization with Rotation-Aware Query TransformationCross-View Query Matching and FusionEgo Identification a…