前言
前段时间一直在找nc转tiff格式的程序,中间遇到了很多问题,csdn上其它大神的程序有些虽然完整,但缺少实例,因为不同文件内容不同,转换方式也不同。以下是我遇到的一些问题以及解决方法。
提示:以下是本篇文章正文内容,下面案例可供参考
一、netCDF格式文件主要内容
NetCDF数据集(文件名后缀为.nc) 的格式不是固定的,它是使用者根据需求 自己定义的。一个NetCDF数据集包含维(dimensions)、变量(variables)和属性(attributes)三种描述类型,每种类型都会被分配一个名字和一个ID,这些类型共同描述了一个数据集,NetCDF库可以同时访问多个数据集,用ID来识别不同数据集。变量存储实际数据,维给出了变量维度信息,属性则给出了变量或数据集本身的辅助信息属性,又可以分为适用于整个文件的全局属性和适用于特定变量的局部属性,全局属性则描述了数据集的基本属性以及数据集的来源。一个NetCDF文件的结构包括以下对象:
NetCDF name{
Dimensions:… //定义维数
Variables:… //定义变量
Attributes:… //属性
Data:…//数据
}
二、准备工作
1.所需要的库
import numpy
import os
import shutil
from netCDF4 import Dataset
from osgeo import gdal, osr
import tkinter
from tkinter import filedialog
下载netCDF4的安装包,网址https://www.lfd.uci.edu/~gohlke/pythonlibs/
找到n开头的netCDF4,点击合适的安装包即开始下载:
注意:最好选择与自己python版本匹配的库,例如我的版本是3.8.*,那么就下载cp38---
下载完成之后,找到文件所在文件夹,在文件目录框输入cmd,然后回车便可以进入该目录下,随后输入pip install 下载的库全名。最后便是安装完成了。
2.GDAL库的安装
程序中,有from osgeo import gdal, osr。本来以为是osgeo库,折腾了很久结果发现是安装GDAL库,用pip安装一直报错,最终决定还是从网站下载安装方便网址https://www.lfd.uci.edu/~gohlke/pythonlibs/,主要过程与netCDF4相同,注意python的版本问题就行了。
3.thinker库
该库的主要目的是实现要转换文件所在路径的选取,这样nc路径就可以随意设置,同时转换完成的tiff文件也会保存在该目录下。
# 路径处理和变量定义,选择文件夹
'''打开选择文件夹对话框'''
print("第一次选择文件所在的文件夹,第二次选中该文件")
root = tkinter.Tk()
root.withdraw()
Folderpath = filedialog.askdirectory() # 获得选择好的文件夹
Filepath = filedialog.askopenfilename() # 获得选择好的文件,结果为文件的绝对路径
RootDir = Folderpath
SPEI_NC = Filepath # 输入文件的绝对路径
# 转换文件的输出路径-OutPath
OutPath = RootDir + '\\tiff'
# print(OutPath)
if os.path.exists(OutPath):
shutil.rmtree(OutPath)
os.mkdir(OutPath)
else:
os.mkdir(OutPath)
OutTif = OutPath + '\\Global_SPEI_Test.tif' # 将数据写出到该路径下的.tif文件中
三、nc格式文件主要内容的存储
将nc文件里面相关的参数信息读取出来,并存放进入txt文档中
# 将读取文件的信息写入到txt文档中
file_path = open(RootDir + '\\detail.txt', mode='w')
file_path.write(
f"转换成的tiff文件输出的路径:{OutPath}\n"
f"NC_DS的数据类型: {NC_DS, type(NC_DS)}\n"
f"变量的基本信息:{NC_DS.variables}\n"
f"了解SPEI的基本信息: {NC_DS.variables['spei']}\n"
f"SPEI的数据类型,和维数:{type(SPEI), SPEI.shape}\n"
f"地理坐标系统信息: {type(srs)}\n{srs}"
四、总结
源代码以及示例程序:netCDF转tiff源代码以及示例程序-小程序文档类资源-CSDN下载
主要参考的文章:基于Python+GDAL实现nc格式转geotiff格式_EWBA_GIS_RS_ER的博客-CSDN博客_gdal nc 转tif