NC文件读取及批量转为TIFF-史上最详细讲解-含代码(ArcGIS/MATLAB)

这篇具有很好参考价值的文章主要介绍了NC文件读取及批量转为TIFF-史上最详细讲解-含代码(ArcGIS/MATLAB)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

何为NC文件,如何读取,如何批量转为TIFF(ArcGIS/MATLAB)


前言

相信有好多遥感、地信、地理的同学经常会用到全球月均降水数据/气温等数据,而该类数据常以NC文件保存,大家拿到手后常常会迷惑,这是一种什么数据格式,如何读取,又如何转为我们熟悉的栅格数据。今天来为大家答疑解惑。

一、NC文件的介绍

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

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

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

二、查看NC结构

使用MATLAB查看
●使用函数ncdisp
使用方法:
ncFilePath = [‘E:\个人文档1\项目\数据\2000-2020_tmp\tmp_2000_2002.nc’]; %设定NC路径
ncdisp(ncFilePath);
●读取结果
以下为该NC文件的结构,包含类型、维度、和变量;其中变量中又含有经度、纬度、时间、pre(这也就是我们需要的变量);
我们可以形象的理解为:经纬度是它的平面坐标,时间是它的维度,构成一个三维空矩阵,然后将pre分别填充到该矩阵中,就形成了这样的一个数据结构。
●注意:进行这一步操作,直白点就是看它的数据结构以及该文件的介绍,其次是为了确定维度和变量的名称,后续需要用到。
这里例如,经度的名称为lon,纬度的为lat,时间为time,变量为tmp.

nc转tif,MATLAB,arcgis,matlab,开发语言

三、读取NC

这里分为两个软件来讲解,arcgis带有读取NC文件功能,但是仅能读取单个文件,如果数量够多,无疑消耗大量的时间,这里我们使用MATLAB进行批量读取并转换为TIFF。

3.1 ArcGIS读取

1.打开ArcGIS,点击工具箱,找到多维工具,点击下方的创建NetCDF栅格图层。

nc转tif,MATLAB,arcgis,matlab,开发语言

2.弹出如下界面,输入netCDF文件,然后会自动加载如下变量,维度值可以选择time,然后在下面的表格time后面的值中填入相应的日期,即可加载你想读取的NC中某一时间维度的数据,不进行处理的话默认加载维度的第一个值。然后点击确认。
注意:注意该路径不能含有中文,否则不能自动加载以下变量,而且会报错。

nc转tif,MATLAB,arcgis,matlab,开发语言

  1. 结果如下,即读取成功,保存栅格图层即可。
    注意:但是这种方法只能导出一个时间点的栅格数据,nc一般都是多维度时间,那如何批量导出呢?接着看下面。

3.2 Matlab读取

  1. 先读取任意一组维度的数据来看看,使用一下代码。设置一下自己的路径
clc
clear
ncFilePath = ['E:\个人文档1\项目\数据\2000-2020_tmp\tmp_2000_2002.nc']; %设定NC路径
ncdisp(ncFilePath); %查看NC结构
data1=ncread(ncFilePath,'tmp'); 读取NC文件中的变量,注意要设置正确的变量名,该数据集变量名为tmp,怎么查看,参考上文开始的讲解
data3=data1(:,:,1); %读取该数据集维度中的第1个时间序列数据
  1. 结果如下所示:可以发现data1显示7680471736,前面两个也就是我们说的经纬度,后面36也就是时间序列(该NC含3年数据,3*12月=36月),data3就是读取的2000年1月份的tmp数据。

nc转tif,MATLAB,arcgis,matlab,开发语言

  1. 显示data3。选择data3,点击绘图工具,选择imagesc显示该数据,炸一看有点奇怪,仔细一看是一个鸡的形状(中国),但是它是显示的方向不对。应该先逆时针旋转90°,再镜像一下(翻转)。

nc转tif,MATLAB,arcgis,matlab,开发语言

  1. 我们加上如下代码,一个是逆时针,一个是翻转。发现中国地形正常了。
 data4=rot90(data3); %逆时针旋转90°
 data5=flipud(data4); %矩阵的翻转
 imagesc(data5);

四、批量读取NC并保存成TIFF格式

  1. MATLAB中将数据保存成TIFF格式牵扯到地理坐标系的问题。两种做法:一是利用Matlab中的georasterref函数来创建tif的地理坐标系,二是读取一个现成tiff文件,当做参考地理坐标系。由于第一种方法可能会出现偏移或者出错,为了保证数据的准确性,我们使用第二种方法。
  1. 同第三节的Arcgis读取操作,先读取NC中的某一期数据。然后定义投影,投影操作如下。

nc转tif,MATLAB,arcgis,matlab,开发语言

  1. 查看属性,如果空间参考中有坐标系,即定义成功,如果定义了后还是没有,进行下一步操作。

nc转tif,MATLAB,arcgis,matlab,开发语言

  1. 如图选中图层,右击选择属性,设定图层的坐标系。

nc转tif,MATLAB,arcgis,matlab,开发语言

  1. 点击导出数据。将栅格数据集(原始)更改为数据框(当前),即可发现空间参考中有坐标系了,设置下保存路径,点击保存即可。

nc转tif,MATLAB,arcgis,matlab,开发语言
nc转tif,MATLAB,arcgis,matlab,开发语言

  1. 保存成功后结果如下所示。

nc转tif,MATLAB,arcgis,matlab,开发语言

4.2 批量保存为TIFF格式

1.废话不多说,直接上代码。将下面代码copy可直接用,需要调整的地方在文中已进行标注(需要调整),更改下文件路径即可,再有就是循环的地方,根据自己需求进行调整。

clc
clear
%%  导入NC数据集
ncFilePath = ['E:\个人文档1\项目数据\2000-2020_pre\2000-2020\pre_2020.nc']; %设定NC路径**需要调整**
ncdisp(ncFilePath); %查看NC数据结构
%% 导入TIFF影像的坐标信息
[A,R]=geotiffread('E:\li\pre_2018.tif');%该处路径为上述Arcgis中导出带坐标系的TIFF文件**需要调整**
info=geotiffinfo('E:\li\pre_2018.tif'); %该处路径为上述Arcgis中导出带坐标系的TIFF文件 **需要调整**
%% 读取pre数据
data=ncread(ncFilePath,'pre');  
%% 批量处理
for year=2000:2020  %年循环**需要调整**
        data1=data(:,:,1+12*(year-2000):12*(year-1999)); %得到每年的12个月数据。注意,第一个减去的时间与循环的起始时间相同,第二个减去的时间在起始时间的基础上减1。如该处的20001999**需要调整**
        data3=sum(data1,3)/12; %表示沿X轴的第3维求和,求年平均数据
        data4=rot90(data3); %使矩阵逆时针旋转90°
        data5=flipud(data4); %矩阵的翻转
        filename=strcat('E:\个人文档1\项目\数据\NC_TO_TIFF\pre\year\中国',int2str(year),'年pre.tif'); %**需要调整**
        geotiffwrite(filename,data5,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag);
    for mon=1:12  %月循环
        data2=data1(:,:,mon);  %读取月数据
        data4=rot90(data2);%使矩阵逆时针旋转90°
        data5=flipud(data4); %矩阵的翻转
        filename=strcat('E:\个人文档1\项目数据\NC_TO_TIFF\pre\month\中国',int2str(year),'_',int2str(mon),'月pre.tif'); **需要调整**
        geotiffwrite(filename,data5,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag);
    end
end

2.导出成功。

nc转tif,MATLAB,arcgis,matlab,开发语言

4.3 导出结果验证

选取2000年1月份的结果,在ARCGIS中打开,发现数值在-32768-2339之间;在MATLAB中调出该期NC原始数据,提取最大最小值提取,可以发现和该数据99%接近,至于有细微的个位数误差,是由于将TIFF影像导入到ARcgis中进行了金字塔重采样。说明导出的结果是没问题的。

nc转tif,MATLAB,arcgis,matlab,开发语言

Ending

好了,以上就是本次讲解的内容了,希望能给大家带来帮助,有问题也欢迎在下方留言探讨。文章来源地址https://www.toymoban.com/news/detail-813267.html

到了这里,关于NC文件读取及批量转为TIFF-史上最详细讲解-含代码(ArcGIS/MATLAB)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 史上最详细的八大排序详解!(建议收藏)

    🚀write in front🚀 📜所属专栏:初阶数据结构 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对我最大的激励和支持!!! 关注我,关注我,关注我 , 你们将会看到更多的优质内容!!   从今天开始,我们就进入

    2023年04月20日
    浏览(48)
  • OpenStack搭建史上最详细步骤 (快速入手)

    搭建openstack平台所需要的两个镜像包:CentOS-7-X86_64-DVD-1804.iso 和 chinaskill_cloud_iaas.iso镜像文件。 在VMware上准备两台虚拟机,分别作为controller(控制)节点和compute节点. 下面是VMware上虚拟机的基础配置。 computecontroller 双网卡,NAT模式和仅主机模式,配置硬盘各给50G 多添的一块

    2024年02月02日
    浏览(45)
  • Nacos 安装教程(史上最详细保姆级教程)

    作者:大三的土狗 专栏:SpringCloud    Nacos的全称是Dynamic Naming and Configuration Service,Na为naming/nameServer即注册中心,co为configuration即注册中心,service是指该注册/配置中心都是以服务为核心。   Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,

    2024年02月03日
    浏览(54)
  • Java对接微信支付(史上最详细)

    本文将介绍如何使用Java对接微信支付,包括获取支付参数、支付回调处理等步骤。本文适用于已经熟悉微信支付基本原理的读者。 JDK 1.8 Maven Spring Boot 2.x 微信支付开发文档 为了进行支付,我们需要先获取微信支付的参数信息,包括appid、商户id、支付密钥等。 配置文件 我们

    2024年02月15日
    浏览(38)
  • Ubuntu安装Burp Suite--史上最详细教程

    VMware Workstation下载网址: https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html Burp Suite v2021.6安装包: 链接: https://pan.baidu.com/s/1OqiYpRr2XnWPw6B1Tum2hw?pwd=2001 提取码:2001 ubuntu-18.04.6安装包: 链接: https://pan.baidu.com/s/1SR1Q9ggLnIOErgOLQpzXkA?pwd=2001 提取码:2001 创建新的虚拟

    2024年02月09日
    浏览(43)
  • C++ system()函数的常用用法 (史上最详细)

    目录 一.推荐:     1. system(\\\"pause\\\")     2. system(\\\"color *\\\")     3.system(\\\"title *\\\")     4. system(\\\"cls\\\") 二.文件操作:     1. system(\\\"start *\\\")     2. system(\\\"del *\\\")     3. system(\\\"copy A B\\\")     4. system(\\\"move A B\\\") 三.系统操作     1. 关机,重启,睡眠     2. 日期/时间     3. task     1. system(\\\"pause\\\"

    2024年02月12日
    浏览(43)
  • 算法设计与分析期末复习题(史上最详细)

    算法设计与分析期末复习题(一) 1、二分搜索算法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 2、下列不是动态规划算法基本步骤的是( A )。 A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解 3、最大效益优先是( A )的一

    2023年04月09日
    浏览(47)
  • 史上最详细注释,用flask写一个博客系统

    文本用flask写个博客系统,源码带有详细注释,通俗易懂,拿去就能用。点 这里 查看演示。博客效果如下,博客首页: 这个博客麻雀虽小,但五脏俱全。有如下功能: 博客文章浏览 用户注册 用户登录/登出 发文章/修改文章/删除文章 为了简单,没有用MySQL数据,使用了Sql

    2024年02月06日
    浏览(44)
  • 史上最详细之Eclipse导入Idea中并运行

    通过idea的open file菜单进行打开我们的项目 或者 主要配置的项目为下图箭头所指地方。 配置JDK,保证下面两个地方的版本一致,不然启动会报错,最后一个选项配置项目的输出路径。 修改 配置项目的文件夹标识。 配置项目的输入路径。 添加项目的jar包依赖。将我们在lib文

    2024年02月03日
    浏览(50)
  • 【adb】 win11 配置 adb环境 史上最详细

    在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。 而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。 开发环境:windows11 adb官网下载 选择Windows版本 确认下载 下载下来的压缩

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包