• Matlab / Arcgis处理nc数据


    nc文件现在比较常见了,处理的方式也有很多比如python、matlab、arcgis还有R等。这篇博客主要写一下用arcgis和matlab联合处理nc的方式,可能有些复杂但是算是比较基础的操作,也能理解nc文件内部的一些原理。

    下面是我的一些操作实例,可以参考一下不同数据的处理思路
    Matlab / ArcGIS 处理GPM全球月均降水数据
    Arcpy / Matlab / Arcgis处理CMIP6数据
    matlab将多个nc文件进行合成TIF

    1 nc文件的不同类型

    目前我见过的、处理过的就两种,一种是栅格类(Raster)的nc文件,这种很好处理因为它的数据点都是等间距投影;一种是要素类(Feature)的nc文件,这种处理比较麻烦,因为它的数据点之间间距不相等(比如上面的CMIP6数据博客)。如何区别这两种数据呢?可以用matlab读取他们的经纬度数据,

    clear all; clc
    [ncname,ncpath] = uigetfile('*.*','请选择nc文件');
    ncdisp([ncpath,ncname])
    lat = ncread([ncpath,ncname],'latitude');
    lon = ncread([ncpath,ncname],'longitude');
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果该数据的经纬度数据是一维矩阵,那么就是栅格类的;
    在这里插入图片描述

    如果经纬度数据是二维矩阵,那么就是要素类的。
    在这里插入图片描述

    2 arcgis读取nc文件

    知道了nc是什么类型之后,在arcgis里(我用的是arcgis pro来展示其实二者都是一样的)找到多维工具Multidimension Tool——NetCDF,可以看到两个工具:创建NetCDF栅格(Make NetCDF Raster Layer)和创建NetCDF要素(Make NetCDF Feature Layer)。选择哪一个就要看你的nc数据是什么类型:栅格类就选Raster、要素类就选Feature。
    在这里插入图片描述
    那如果我不知道它是那种类型呢?那就直接选栅格Raster,能出结果就是栅格,出不了结果会报错就说明是要素,换成要素类工具。

    3 栅格类nc处理

    3.1 arcgis处理栅格类nc

    栅格类的比较好处理,直接打开创建NetCDF栅格(Make NetCDF Raster Layer),然后选择nc文件,variable、x、y一般会自动选择,你也可以切换自己的variable,dimension value一般选择时间time,随后运行即可出现一个栅格图层。然后把这个栅格图层导出即可。
    在这里插入图片描述
    导出结果:
    在这里插入图片描述

    但是这种方法只能导出一个时间点的栅格数据,nc一般都是多维度时间,那如何批量导出呢?

    3.2 matlab处理栅格nc

    matlab处理这种栅格nc还是比较简单的,直接ncread把变量读取进来,然后想怎么处理怎么处理(求平均、做EOF等等)。
    matlab里主要用的一些函数:ncread:主要读取nc文件中的数据,ncdisp:显示nc文件的一些信息

    但是matlab处理的时候需要注意几个点:
    首先是读取进来之后数据的空间分布问题:(原文在此matlab经验正交分解函数EOF的实现—基于Climate Data Toolbox操作
    在这里插入图片描述
    当时我的研究区域是南海,可以看到我把海温数据读取进来之后是颠倒的一个状态,变成了一个横向的状态(可以找你研究区域特殊的地点,比如我这个可以看到海南岛是横着的状态),那就需要对你读取进来的数据进行一个处理,可以是转置、也可以用flipud上下翻转等。
    在这里插入图片描述
    其次是关于数据的导出,比如我有一个nc文件,他是20年南海月均海温数据,我现在在matlab里读进来了,求了平均得到20年年均南海海温,那我想把这个数据导出为tif怎么办呢?
    思路是这样的:你先在arcgis里读取这个nc并且导出一个tif文件,当作一个参考tif(我们要的是这个tif的地理坐标系),然后在matlab里用geotiffread读取这个参考tif,最后用geotiffwrite即可将20年年均南海海温给保存出去。
    有人用matlab自带的georasterref来创建tif的地理坐标系,我没有尝试过我担心这样做会出现偏移之类的,所以上述方法有一点麻烦。

    4 要素类nc处理

    这种nc不能用matlab处理了,只能用arcgis,如果想批量处理则需要用到python。
    详细操作可以看这篇博客,算是实例,可以参考思路:
    Arcpy / Matlab / Arcgis处理CMIP6数据

  • 相关阅读:
    Linux中压缩和解压(gzip压缩/gunzip解压)(zip压缩/unzip解压)(tar打包解压)
    SCConv:用于特征冗余的空间和通道重构卷积
    前端技能树,面试复习第 50 天—— Vue3.0 基础 | Vue3 有什么更新 | Composition API
    【矩阵分析】线性空间、λ矩阵、内积空间、Hermite矩阵、矩阵分解、矩阵范数、矩阵函数
    conda配置pytroch
    C51串口通信(蓝牙)
    大数据-玩转数据-Flink定时器
    工作卷?一行更比一行卷
    力扣第102题 广度优先搜索 二叉数 c++
    阿里云负载均衡(SLB)简介
  • 原文地址:https://blog.csdn.net/weixin_43637490/article/details/125990097