matlab将nc数据转换为tif

直接接入正题,用arcgis直接读取气象数据(.nc)是比较困难的,所以先用matlab将nc数据转换成易于arcgis处理的tif数据。

解决思路:将每个波段转换成一个tif文件。

matlab提供了geotiffwrite供我们直接输出tif数据。

该函数主要用到以下三个参数:

path:输出tif的全路径

Data:数据矩阵

Refference:空间参考信息

源码如下:

clc
clear
% nc文件根路径
ncFileBasePath='G:\';
% 输出tif根路径
tiffOutFileBasePath='G:\tif\';
% 获取该文件夹下所有nc文
imageList=dir(strcat(ncFileBasePath,'*.nc'));

for fileindex=1:length(imageList)
   % 完整文件名
   filename=imageList(fileindex).name;
   % 不带后缀的文件名
   filenameWithoutSufix=filename(1:find(filename=='.')-1);
   % nc文件的完整路径
   fileFullPath=strcat(ncFileBasePath,filename);
   
   ncinf = ncinfo(fileFullPath);
  
   ETaSets=ncread(fileFullPath,'spei');
   
   SizeInfo=size(ETaSets);
        for subsetIndex=1:SizeInfo(3)
        
           disp(subsetIndex);
           MonthData=ETaSets(:,:,subsetIndex);
           MonthData(isnan(MonthData))=-8888;
           tifOutputFullPath=strcat(tiffOutFileBasePath,filenameWithoutSufix,num2str(subsetIndex,'%02d'),'.tif');
           MonthData = rot90(MonthData);
           Refference=georasterref('RasterSize',size(MonthData),'Latlim',[-89.75 89.75],'Lonlim',[-179.75 179.75]); 
           Refference.ColumnsStartFrom = 'north';
           geotiffwrite(tifOutputFullPath,MonthData,Refference);
           
        end
   
end
disp('成功!');

大家在使用时可能会用到以下几个问题。

1.如何取到我想要的波段信息?

ETaSets=ncread(fileFullPath,'spei');

这里用到ncread函数,可以读取nc数据的某个属性,但每个函数中的属性名可能不一致。我们可以在ncinf中查看。

ncinf = ncinfo(fileFullPath);

在工作区双击ncinf变量,打开variables(变量)窗口

这里写图片描述

我们看到我们想要的变量名为‘spei’

2.Refference的经度范围和纬度范围?

Refference=georasterref('RasterSize',size(MonthData),'Latlim',[-89.75 89.75],'Lonlim',[-179.75 179.75]); 

同样可以在ncinf中查看到

分别双击lon和lat的attribute查看

这里写图片描述
3.用你的代码输出的图像是反转的?
类似下面的情况:

这里写图片描述

可以看到图像发生了一定的偏转,具体原因我也不太清楚,希望有大神指点,但是这种情况可以通过以下 几种方式调节:

将矩阵旋转一定角度:

% 逆时针旋转90°
MonthData = rot90(MonthData);
% 上下翻转
MonthData = flipud(MonthData)
% 左右翻转
MonthData = fliplr(MonthData)

设置Refference的属性:

Refference.ColumnsStartFrom = 'north';
Refference.ColumnsStartFrom = 'south';
Refference.RowsStartFrom = 'east';
Refference.RowsStartFrom = 'west';

经过以上设置就能得到精确的tif图像了

这里写图片描述

以上分析比较浅,有什么错误的地方欢迎指正。
在这里插入图片描述

  • 25
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
### 回答1: Python 作为一种流行的编程语言,具备强大的数据处理和可视化能力。Python 中有很多库可以用来读取并处理不同格式的数据,其中包括读取解析和画图 nc 文件的库。 要读取 nc 文件并进行可视化,需要使用 NetCDF4-Python 库。这个库是用于操作和分析 NetCDF 文件的工具集,它提供了读取、写入、重塑和操作 NetCDF 文件的功能。 首先,需要安装 NetCDF4-Python 库,可以使用 pip install netcdf4 命令进行安装。安装完成后,可以导入 NetCDF4-Python 库并使用其中的函数读取和操作 nc 文件。 例如,可以使用库中的 Dataset 类来打开并读取 nc 文件中的数据。可以使用 .variables 属性获得所有变量,并根据变量的名称获取相应的值。 接下来,可以使用 Matplotlib 库中的函数进行数据可视化。Matplotlib 是一个用于绘制二维图像的 Python 库,它提供了丰富的绘图函数,可以用于绘制各种类型的图表。 可以使用 Matplotlib 的 plot 函数绘制折线图、scatter 函数绘制散点图、contour 函数绘制等高线,等等。根据所需的图表类型和数据,选择适当的函数进行绘图。 绘图之后,可以使用 Matplotlib 的 show 函数来显示绘制的图像,并可以选择保存图像为图片文件。 通过以上步骤,我们可以利用 Python 读取 nc 数据并根据需要进行数据可视化。这样可以更好地理解和分析数据,从中发现规律,并为后续的数据处理工作提供依据。 ### 回答2: Python是一种简单而强大的编程语言,可以读取和处理各种数据集,包括nc(NetCDF)数据格式。对于读取和绘制nc数据,我们可以使用Python的xarray和matplotlib库。 首先,我们需要安装所需的库。可以通过运行以下命令在终端(或命令提示符)中安装所需的库: ``` pip install netCDF4 xarray matplotlib ``` 接下来,我们可以使用xarray库来读取nc数据集。例如,假设我们有一个名为“data.nc”的文件,其中包含了某个地区的温度数据。我们可以使用以下代码读取并打印数据集的信息: ```python import xarray as xr data = xr.open_dataset('data.nc') print(data) ``` 读取后,我们可以查看数据集的维度、变量和其他属性。根据数据集的结构,选择我们感兴趣的变量和维度。 接下来,我们可以使用matplotlib库来绘制数据。例如,假设我们选择“temperature”变量和“time”和“latitude”维度来绘制数据。我们可以使用以下代码来绘制一个简单的温度时间序列图: ```python import matplotlib.pyplot as plt temperature = data['temperature'] # 如果是3D数据,可以指定某个特定经度(longitude)或纬度(latitude) # temperature = data['temperature'].sel(longitude=10, latitude=20) plt.plot(temperature) plt.xlabel('Time') plt.ylabel('Temperature') plt.title('Temperature Time Series') plt.show() ``` 这样,我们就可以读取nc数据集并绘制相应的图形了。当然,根据数据集的结构和需要,我们可以进行更复杂的数据操作和绘图。 ### 回答3: Python 是一种强大的编程语言,它提供了许多库和模块,使我们能够轻松地读取、处理和可视化数据。要使用 Python 读取 nc(NetCDF)格式的数据并绘制图形,我们需要使用 `xarray` 和 `matplotlib` 这两个常用的库。 首先,我们需要在 Python 中安装 `xarray` 和 `matplotlib`。可以使用 `pip` 命令来安装它们: ```python pip install xarray pip install matplotlib ``` 接下来,我们需要导入这两个库: ```python import xarray as xr import matplotlib.pyplot as plt ``` 然后,我们可以使用 `open_dataset` 函数来读取 nc 数据集: ```python data = xr.open_dataset('path_to_your_nc_file.nc') ``` 请确保将 `path_to_your_nc_file.nc` 替换为您实际的 nc 文件路径。 一旦数据集被读取,我们就可以使用 `plot` 函数来绘制图形了。比如,如果我们想要绘制数据集的第一个变量,可以这样做: ```python data.to_dataframe().plot() plt.show() ``` `to_dataframe()` 函数将 `xarray` 数据转换为 `pandas` 的数据帧,使我们能够使用 `plot` 函数绘制图形。最后,使用 `show` 函数来显示图形。 以上就是使用 Python 读取 nc 数据并绘制图形的简要步骤。当然,根据具体的数据集和需求,可能还需要进行一些数据处理和图形美化方面的操作。但是通过这个基本的流程,我们已经可以开始读取和可视化 nc 数据了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值