Anaconda环境下将netCDF文件转换为TIFF格式
目录
Anaconda环境下将netCDF文件转换为TIFF格式
Spyder中导入Arcpy
目前的ArcGIS主要支持 python 2.x 版本,所以首先需要在Anaconda下新建一个python 2.7版本的编译器。如下图:
打开自己的编译器(以Spyder为例),在右侧IPython处可以看到目前的编译器版本和系统操作位数,导入Arcpy一定要32位才可以。如果不满足,则打开Anaconda Prompt
在命令行输入 set CONDA_FORCE_32BIT=1 ** #更改环境为32 bit
然后使用conda info **可以查看当前的环境(找到 platform,应该对应为win-32)
conda create -n env_name python=2.7 执行此命令创建 python2.7(env_name 为命名,个人随意,python的版本要与自己电脑上的Arcgis相一致)
安装过程中会有Proceed(y/n)?,当然选y啦
紧接着激活刚刚创建的环境,activate env_name
在这个环境下安装Spyder conda install spyder -y ,如果去anaconda的主界面安装,装下来的Spyder仍然是64位,所以看到这里就继续一次装好算了啦
以上过程完成就成功大半,然后是设置路径的问题:
如图,根据自己的实际情况设置路径,即可:
然后可以在Spyder中测试以下,是否可行。
另,有一篇介绍详细的博客,推荐 https://blog.csdn.net/qq_27386899/article/details/84761665
注明出处什么的在哪里整 😃 来源:CSDN博客,沉研
将netCDF文件导出为TIFF格式
有了Arcpy这个板块,接下来处理netCDF文件
这里对netCDF文件不作介绍
首先,提前介绍两个arcpy中的函数
arcpy.MakeNetCDFRasterLayer_md(inNetCDF, variable, x_dimension, y_dimension, nowFile, band_dimension, dimension_values, valueSelectionMethod)
参数较多,介绍重要的:
inNetCDF :输入的 NetCDF 文件
variable :向输出栅格分配单元值时使用的 netCDF 文件的变量,将要显示的值(如气温、降水等)
x_dimension, y_dimension:经纬度坐标或者输出图层的 x y 坐标
nowFile :输出栅格数据的名称
dimension_values :在输出图层中显示变量时要使用的维度(如时间)的值(如 01/30/05)。默认情况下,将使用维度的第一个值。
另:附上Arcgis Pro给出的参考, https://pro.arcgis.com/zh-cn/pro-app/tool-reference/multidimension/make-netcdf-raster-layer.htm
另外一个:
arcpy.CopyRaster_management(nowFile, outpath, "", "", "", "NONE", "NONE", "")
复制栅格函数,其中:
nowFile:想要复制的栅格数据集或镶嵌数据集
outpath:要创建的栅格数据集的名称和格式
另:附上ArcGIS网站的参考,http://desktop.arcgis.com/zh-cn/arcmap/10.3/tools/data-management-toolbox/copy-raster.htm
import arcpy
from arcpy.sa import * #引入模块
outLoc = r"E:\data\tif1" #输出路径
inNetCDF = r"E:\data\Data_forcing_01mo_010deg\Precipitation rate.nc" #输入路径
variable = 'prec' #此处是.nc数据中的变量名(降水)
x_dimension = "lon"
y_dimension = "lat"
band_dimension = ""
valueSelectionMethod = "BY_VALUE" #以上五个变量为第一个函数会用到的变量,提前定义好
nc_FP = arcpy.NetCDFFileProperties(inNetCDF) #读取netCDF文件
nc_Dim = nc_FP.getDimensions() #获取维度信息,返回一个维度列表 ['lon','lat','time']
'''
在一个.nc文件中有444个时间,每一个月有一个降水数据,所以导出有444个tiff图像
为了给导出图像方便命名,要使用 dimension_values ,每一个输出的变量值都是使用该维度的值
'''
for dimension in nc_Dim:
if dimension == "time":
top = nc_FP.getDimensionSize(dimension) #获取维度的大小
for i in range(0, top):
dimension_values = nc_FP.getDimensionValue(dimension, i)
nowFile =str(dimension_values[0:7])
nowFile = nowFile.translate(None, '/')
dv1 = ["time", dimension_values]
dimension_values = [dv1]
outpath= outLoc+"\\"+nowFile + ".tif"
arcpy.MakeNetCDFRasterLayer_md(inNetCDF,variable,x_dimension,y_dimension,nowFile,band_dimension, dimension_values, valueSelectionMethod)
arcpy.CopyRaster_management(nowFile, outpath, "", "", "", "NONE", "NONE", "")
print('success')
以上是python代码,祝学习进步 😃
转载自:https://blog.csdn.net/weixin_43498333/article/details/89060094