图片摘要
本专栏目的是将netcdf格式的雪覆盖数据进行重新投影,需要使用的工具包括matlab和Arcgis,下面进入正题。
1.数据的下载与读取---matlab
最近我需要读取北半球的冰雪覆盖数据,下载的是MODIS/Terra Snow Cover Monthly L3 Global 0.05Deg CMG, Version 61,文件格式为netcdf,在matlab中读取发现其为polar_stereographic极坐标投影。
matlab读取程序
file = 'D:\文件\研究内容\Kakhovskoye\RAW_data\EUROPE_SNOW\ims2021281_4km_v1.3.nc';
ncdisp(file)
lon = ncread(file,'x');lat = ncread(file,'y');snow = ncread(file,'IMS_Surface_Values');
O.rg = snow';
imshow(O.rg),caxis([0,4])
绘图显示与官网提供的数据与投影方式一致。但是在matlab中读取netcdf文件的经纬度坐标没有办法进行后续的处理与计算,因此需要进行重新投影转换。
2.数据的投影栅格---arcgis
下面我们将NetCDF文件导入arcgis中,使用arcgis工具箱中的“多维工具”下的“创建NetCDF栅格图层”导入,得到以下的结果:
接下来选择【数据管理工具】->【投影和变换】下的【栅格】->【投影栅格】,选择输出坐标系为GCS_WGS_1984,点击确定,注意需要将结果导出后新建空白地图,再把文件重新导入arcgis中,即可得到正确的投影,此时再把这个文件导出成NetCDF文件。选择【多维工具】下的【栅格转NetCDF】。
再在matlab中读取即可得到正确的结果。
程序代码:
%% oringal
file = 'D:\文件\研究内容\Kakhovskoye\RAW_data\EUROPE_SNOW\ims2021281_4km_v1.3.nc';
ncdisp(file)
lon = ncread(file,'x');lat = ncread(file,'y');snow = ncread(file,'IMS_Surface_Values');
O.rg = snow';subplot(1,2,1)
imshow(O.rg),caxis([0,4])
%% reproject
file = 'D:\文件\研究内容\Kakhovskoye\RAW_data\EUROPE_SNOW\sd.nc';
ncdisp(file)
lon = ncread(file,'lon');lat = ncread(file,'lat');snow = ncread(file,'IMS_Surface_Values_Layer_Pro1.tif');
[lon,lat] = meshgrid(lon,lat);
O.lon = lon;O.lat = lat;O.rg = snow';
subplot(1,2,2),rg_plot(O)
caxis([0,4])
得到最终的结果:
后续有新的方法将更新!欢迎交流学习!