基于Python+GDAL实现nc格式转geotiff格式

  • 1. 目的
  • 2. 版本
  • 3. 基础知识
    •  3.1 什么是nc文件?
    •  3.2 基于Python处理nc文件需要用到的库
  • 4. 程序示例
  • 5. 问题
    •   5.1 影像分辨率的设置
  • 参考资料

1. 目的

(1)掌握基于Python处理nc格式文件的基本方法
(2)学会将程序函数化,提高程序可读性【待补充】

2. 版本

(1)2019年6月20日;    Version 1

3. 基础知识

 3.1 什么是nc文件?

  NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmospheric Research,UCAR)的Unidata项目科学家针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作NetCDF 数据集[1]

 3.2 基于Python处理nc文件需要用到的库

  基于Python处理nc数据必要的库是netCDF4,同时如果需要将nc文件转换为tiff文件,还需要osgeo库中的gdal子库和osr子库。

4. 程序示例

  以Python将nc格式的标准化降水蒸散发指数(SPEI)文件转换为tif格式的文件为例,说明nc转tif的python实现过程,SPEI数据下载自西班牙国家研究委员会(CSIC)下属的SPEI下载网站[2]


'''1. 目的:基于Python将.nc文件转换为.tif文件2. 山东青岛  2019年6月20日
'''
# 0. 模块导入
import numpy as np
import netCDF4 as Dataset
from osgeo import gdal,osr# 1. 路径处理和变量定义
RootDir = r'F:\SPEI_NC'
SPEI_NC = RootDir + '\\spei12.nc' # 输入文件
# 1.1 输出路径-OutPath
OutPath = RootDir + '\\SPEI_TIF'
if os.path.exists(OutPath):shutil.rmtree(OutPath)os.mkdir(OutPath)
else:os.mkdir(OutPath)
OutTif = OutPath + '\\Global_SPEI_Test.tif' # 2. NetCDF文件处理
NC_DS = Dataset(SPEI_NC)
print(NC_DS,type(NC_DS)) # 了解NC_DS的数据类型,<class 'netCDF4._netCDF4.Dataset'>
print(NC_DS.variables) # 了解变量的基本信息
print(NC_DS.variables['spei']) # 了解SPEI的基本信息
Lat = NC_DS.variables['lat'][:]
Lon = NC_DS.variables['Lon'][:]
SPEI = NC_DS.variables['spei'][13,:,:] # 1901年1月的SPEI_12,注意SPEI的存储形式决定了读取方式
print(type(SPEI),SPEI.shape) # 了解SPEI的数据类型,和维数# 2.1 异常值处理
SPEI = np.asarray(SPEI) # 数据类型转换
SPEI[np.where(SPEI == 1.e+30)] = -99 # 3. 将数据写出到.tif文件中# 3.1 影像的左上角和右下角坐标
LonMin,LatMax,LonMax,LatMin = [Lon.min(),Lat.max(),Lon.max(),Lat.min()] # 3.2 影像的分辨率,此处float(N_Lon)-1是为了保证分辨率为0.5 degree,不知是否合理,望指正
N_Lat = len(Lat)
N_Lon = len(Lon)
Lon_Res = (LonMax - LonMin) /(float(N_Lon)-1)
Lat_Res = (LatMax - LatMin) / (float(N_Lat)-1)# 3.3 构建.tiff文件框架
spei_ds = gdal.GetDriverByName('Gtiff').Create(OutTif,N_Lon,N_Lat,1,gdal.GDT_Float32) # 3.4 设置影像的显示范围
geotransform = (LonMin,Lon_Res, 0, LatMin, 0, Lat_Res)
spei_ds.SetGeoTransform(geotransform)# 3.5 地理坐标系统信息
srs = osr.SpatialReference() #获取地理坐标系统信息,用于选取需要的地理坐标系统
print(type(srs))
print(srs)
srs.ImportFromEPSG(4326) # 定义输出的坐标系为"WGS 84",AUTHORITY["EPSG","4326"]
spei_ds.SetProjection(srs.ExportToWkt()) # 给新建图层赋予投影信息# 3.6 数据写出
spei_ds.GetRasterBand(1).WriteArray(SPEI) # 将数据写入内存,此时没有写入硬盘
spei_ds.FlushCache() # 将数据写入硬盘
spei_ds = None # 关闭spei_ds指针,注意必须关闭print('Finished')

5. 问题

  5.1 影像分辨率的设置
 # 3.2 影像的分辨率,此处float(N_Lon)-1是为了保证分辨率为0.5 degree,不知是否合理,望指正
N_Lat = len(Lat)
N_Lon = len(Lon)
Lon_Res = (LonMax - LonMin) /(float(N_Lon)-1)
Lat_Res = (LatMax - LatMin) / (float(N_Lat)-1)

参考资料

[1] : netCDF百度百科
[2] : MATLAB中利用ncread函数读取nc文件

基于Python+GDAL实现nc格式转geotiff格式相关推荐

  1. 通过Python实现NC文件转GeoTiff格式

    通过Python实现NC文件转GeoTiff格式 〇.目录 通过Python实现NC文件转GeoTiff格式 一.前言 二.基本了解 三.功能实现 四.成图预览 五.参考 六.总结 一.前言 基于Py ...

  2. Python GDAL工具使用及使用VRT格式数据处理

    前言 VRT即虚拟栅格文件. 使用方法 先找到gadl工具exe文件的路径 D:\Anaconda\envs\geopandas\Library\bin 对数据列表构建vrt: 首先在工具路径下打开c ...

  3. 使用python GDAL生成COG(Cloud Optimized GeoTIFF)

    参考资料: https://trac.osgeo.org/gdal/wiki/CloudOptimizedGeoTIFF#HowtogenerateitwithGDAL https://gdal.or ...

  4. 基于Python的netCDF格式文件转换为GeoTiff格式

    文章目录 目录 文章目录 前言 一.netCDF格式文件主要内容 二.准备工作 1.所需要的库 netCDF4库 2.GDAL库的安装 3.thinker库 三.nc格式文件主要内容的存储 四.总结 ...

  5. Python GDAL矢量转栅格详解

    前言:挺久没有更新博客了,前段时间课程实验中需要用代码将矢量数据转成栅格,常见的点栅格化方法通过计算将点坐标(X,Y)转换到格网坐标(I,J),线栅格化方法主要有DDA算法.Bresenham算法等, ...

  6. 基于Python的文件操作之第1课读文件

    学习目标 掌握基于python对文件相关操作 每种格式包含很多相关操作,学习只要掌握知识点的用法,参考笔记可以实现相关的练习即可,不必背会,在企业开发过程中边搜实现. 学习内容 了解python函数和 ...

  7. python 读取geotiff_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...

    (1)利用python GDAL库读写geotiff格式的遥感影像方法,具有很好的参考价值,不错! from osgeo import gdal import numpy as np def read ...

  8. python读取tiff影像_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...

    (1)利用python GDAL库读写geotiff格式的遥感影像方法,具有很好的参考价值,不错! from osgeo import gdal import numpy as np def read ...

  9. 使用python转换netCDF与GeoTIFF格式

    使用python转换netCDF与GeoTIFF格式 1. 导论 2. netCDF转GeoTIFF 2.1 基础方式 2.2 使用rioxarray包 3. GeoTIFF转netCDF 3.1 基 ...

最新文章

  1. ​你真正了解使用过的数据集吗?数据集有什么关系?数据集之间有多像?
  2. 王道考研 计算机网络5 分层结构 协议 服务 接口
  3. 解决“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误
  4. 响应式滑动菜单_如何创建响应式滑动菜单
  5. C#:const 和readonly的区别
  6. locate-updatedb命令检索不全
  7. matlab 16qam误码率图,16qam理论误码率与实际误码率matlab仿真程序.docx
  8. 文本数据标注工具Doccano
  9. wps表格 做折线图
  10. 不是python文件操作的相关函数_从零开始学Python(七):文件存储I/O流和异常捕捉
  11. 蓝牙模块惨痛教训——模块与单片机串口的隔离(更新)
  12. 买了xbox的这两年
  13. 基于sqlite的android数据库编程,Android编程之SQLite数据库操作方法详解
  14. python股票量化交易(8)---K线图:锤头,射击之星,早晨之星
  15. 机械革命 Code Go 评测
  16. [蓝桥杯]连号区间数[题目详解]
  17. 案例分享 | 如何实践 4 个用户体验设计原则
  18. 一些常用的语音特征提取算法
  19. atmega16/32加锁后的解锁方法
  20. 成功的秘诀就是不要畏惧失败

热门文章

  1. unity2D小游戏打地鼠
  2. 卷积神经网络——24位彩色图像的卷积的详细介绍
  3. 羊皮纸背景计算机,整天面对屏幕的你,请收下这几个护眼小技巧
  4. 计算机的优缺点英语作文100词,电子词典的优缺点英语作文 关于电子词典的优缺点的英语作文...
  5. 爱丁堡大学计算机专业alevel,爱丁堡大学各专业alevel要求简单介绍及入学条件
  6. busybox的安装和配置/最小根文件系统的制作
  7. 网络云存储技术Windows server 2012 (项目十三 NFS共享的配置与管理)
  8. js倒计时代码(从现在距离明年元旦还剩多少时间)?
  9. discuzX2插件制作教程
  10. DAMA认证|数据治理和数字化的12项原则