Anaconda环境下将netCDF文件转换为TIFF格式

Anaconda环境下将netCDF文件转换为TIFF格式,python将nc.文件转换为TIFF

Spyder中导入Arcpy

目前的ArcGIS主要支持 python 2.x 版本,所以首先需要在Anaconda下新建一个python 2.7版本的编译器。如下图:

Anaconda环境下将netCDF文件转换为TIFF格式_第1张图片

打开自己的编译器(以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位,所以看到这里就继续一次装好算了啦

以上过程完成就成功大半,然后是设置路径的问题:
如图,根据自己的实际情况设置路径,即可:

Anaconda环境下将netCDF文件转换为TIFF格式_第2张图片

然后可以在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_value = nc_FP.getDimensionValue(dimension, i)    #遍历每一个时间值,输出1981/1/1
            year_value = str(dimension_value[0:4])          #对每一个值提取年份
            if eval(year_value) >= 1986:                   #判断年份,本项目需要 1986-2015 ,取年份大于1986年
                nowFile =str(dimension_value[0:7])        #取前七位,作为输出名
                nowFile = nowFile.translate(None, '/')     #去掉输出名中的‘/’,输出示例:19861
                print(nowFile)
                
                dv1 = ["time", dimension_value]          #列表
                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代码,祝学习进步 ?


更新一波:

Anaconda环境下将netCDF文件转换为TIFF格式_第3张图片
跑过之后数据不对删除重新运行,发现一直报错,关闭python,重新启动再运行一次就好了!!!!

你可能感兴趣的:(Python,python,netCDF,TIFF)