Anaconda環境下將netCDF文件轉換爲TIFF格式

Anaconda環境下將netCDF文件轉換爲TIFF格式,python將nc.文件轉換爲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_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代碼,祝學習進步 ?


更新一波:

在這裏插入圖片描述
跑過之後數據不對刪除重新運行,發現一直報錯,關閉python,重新啓動再運行一次就好了!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章