通过Python实现NC文件转GeoTiff格式
通过Python实现NC文件转GeoTiff格式
〇、目录
- 通过Python实现NC文件转GeoTiff格式
- 一、前言
- 二、基本了解
- 三、功能实现
- 四、成图预览
- 五、参考
- 六、总结
一、前言
- 基于Python和GDAL库介绍处理nc文件的基本操作
- 简单处理nc文件为GeoTiff文件的Python函数
二、基本了解
什么是NC格式
NC文件即NetCDF (Network Common Data Form),是一种通用的数据存储格式。广泛用于存储地学、大气科学、海洋科学等一系列多维数据,可封装时间、经度、纬度、降水、温度等多个维度数据,数据结构清晰易读,可以很方便的提取、应用。
什么是GeoTiff格式
GeoTIFF 是一种地理栅格文件,可以理解为专门存储地理信息的Tiff图像文件格式。地理坐标系、地图投影等要素直接嵌入到图像文件中。
Python处理nc文件需要用到的库
NetCDF4用于读取NC文件;numpy用于数据修改;osgeo的子库gdal和osr,前者用于实现转换和栅格编辑功能,后者可用于确定地理坐标系和地图投影。
import numpy as np import netCDF4 as nc from osgeo import gdal,osr
建议使用 Anaconda 配置虚拟Python环境,可以很方便地进行包管理,我这里使用的环境版本是
python 3.6.12(64bit) numpy 1.19.1 netCDF4 1.4.2 gdal 3.0.2
三、功能实现
查看NC文件信息
import netCDF4 as nc import numpy as npitem = r'***.nc'#选取一个nc文件路径 DS = nc.Dataset(item)print(DS,type(NC_DS)) # 返回DS的数据类型,<class 'netCDF4._netCDF4.Dataset'> print('{:-<100}'.format('----'))print(DS.variables) # 了解变量的基本信息 print('{:-<100}'.format('----'))print(DS.variables['lon']) # 了解某一变量如“lon”(经度)的基本信息 print('{:-<100}'.format('----'))TEMP = NC_DS.variables['temp'][666,123,:] # 这是一个三维数据的NC文件,["纬度","经度","温度"],需要按实际修改 print(TEMP) # 查看特定维度数据
NC文件转GeoTiff
#NetCDF文件处理 def Convert(item,day): DS = nc.Dataset(item)Lat = DS.variables['lat'][:]Lon = DS.variables['lon'][:]PREC = DS.variables['prec'][day,:,:] #[day,lon,lat],即生成 某天 全纬度、经度范围 图像PREC = np.asarray(PREC) #数据类型转换PREC[np.where(PREC == -33321)] = np.nan #异常值处理#影像的部分信息LonMin,LatMax,LonMax,LatMin = [Lon.min(),Lat.max(),Lon.max(),Lat.min()] #构建tiff框架prec_ds = gdal.GetDriverByName('Gtiff').Create(OutTif,len(Lon),len(Lat),1,gdal.GDT_Float32) #dst_ds = driver.Create(dst_filename, xsize, ysize,bands, eType=gdal.GDT_Byte)#设置影像的显示范围prec_ds.SetGeoTransform(LonMin,0.1, 0, LatMin, 0, 0.1)#SetGeoTransform(double xLeft,double dX,double yProjOnX,double yTop,double x,ProjOnY,double dY)#这里通常选取的是左上角点的坐标(lonmin,latmax),但如此我的图像会上下颠倒,不知为何#图像分辨率xsize ysize通常在NC属性中给出,也可以 xsize = (lonmax-lonmin)/len(lon)#设置地理坐标系和投影坐标系,这里设置为WGS_84,索引号4326srs = osr.SpatialReference()# 获取地理坐标系统信息,用于选取需要的地理坐标系统print(type(srs))print(srs)srs.ImportFromEPSG(4326) # 定义输出的坐标系为"WGS 84",AUTHORITY["EPSG","4326"]prec_ds.SetProjection(srs.ExportToWkt()) # 给新建图层赋予投影信息# 数据写出prec_ds.GetRasterBand(1).SetNoDataValue(-9999)prec_ds.GetRasterBand(1).WriteArray(PREC) # 将数据写入内存prec_ds.GetRasterBand(1).GetStatistics(0,1)# 添加统计信息prec_ds.FlushCache() # 将数据写入硬盘prec_ds = None # 关闭
设置自定义投影
#设置地理坐标系和投影坐标系,这里设置为WGS_84_Alberssr = osr.SpatialReference() #获取地理坐标系统信息,用于选取需要的地理坐标系统print(type(sr))print(sr)sr.SetProjCS('WGS_84_Albers')sr.SetWellKnownGeogCS('WGS84')#设置地理坐标系为WGS_84sr.SetLCC(35,50,0,90,0,0)#设置等面积圆锥投影的参数wkt = sr.ExportToWkt()#print(wkt)sr.ImportFromWkt(wkt) # 将定义好的参数导出为WKT prec_ds.SetProjection(sr.ExportToWkt()) # 给新建图层赋予投影信息
用掩膜裁剪
from osgeo import gdal import os import timedef clip(input_shape,input_raster,output_raster):# 栅格文件路径,打开栅格文件input_raster=gdal.Open(input_raster)# 裁剪,gdal.warp函数,input_shape是掩膜文件ds = gdal.Warp(output_raster,input_raster,format = 'GTiff',cutlineDSName = input_shape, dstNodata = -9999)#设置nodata值为-9999,ArcGIS自动识别为nodata# 添加统计信息 ds.GetRasterBand(1).GetStatistics(0,1) # 关闭文件ds = None
四、成图预览
- 生成的 Tiff 图像
- ArcGIS打开属性
- 掩膜裁剪成图
五、参考
- 基于Python+GDAL实现nc格式转geotiff格式.
- 使用python的netCDF4库读取.nc文件 和 创建.nc文件.
- Python3.GDAL从shp文件生成mask.
六、总结
本文包括了NC文件读取,NC文件转TIFF、TIFF文件掩膜裁剪、自定投影操作。吸收了多篇文章内容整合而成。代码多有错误,烦请指正。
通过Python实现NC文件转GeoTiff格式相关推荐
- Python读取nc文件转tif
前言 使用Python解析.nc文件,并导出为WGS84地理坐标系的tif格式文件. PS: Anaconda 安装netCDF4库,在prompt中输入: conda install netCDF4 ...
- Arcmap转nc文件为TIFF格式(以逐月降水量数据集转年均数据为例)
国家青藏高原科学数据中心提供了1901-2020年中国1km分辨率逐月降水量数据(中国1km分辨率逐月降水量数据集(1901-2020)-国家青藏高原科学数据中心),数据集为nc格式. 使用Arcma ...
- python读取nc文件数据生成专业气象图
python读取nc文件数据生成专业气象图如色斑图.等值线.风向标,如下图所示: 代码如下: # -*- coding: utf-8 -*- """ Created on ...
- 批量将NC文件转为tif格式
批量将多年的NC文件转为tif格式进行处理(来源:https://www.geek-share.com/detail/2763962738.html) 所参考和借鉴的文章的链接如下: https:// ...
- python读取nc文件并转换成csv_使用Python截取nc文件数据保存到CSV文件-Go语言中文社区...
问题要求: 编写一个函数完成以下任务:截取经度在23°N-40°N,纬度在118°E-131°E范围内各属性不同深度的数据,使用Python中合适的数据结构将截取的数据保存到同名CSV文件中.(nc文 ...
- python处理csv文件将字符串格式XXXX年XX月XX日转化为datetime64XXXX-XX-XX格式,可以进行索引设置和日期计算
python处理csv文件将字符串格式XXXX年XX月XX日转化为datetime64XXXX-XX-XX格式,可以进行索引设置和日期计算 python读取csv文件中,某列卫XXXX年XX月XX日, ...
- 基于Python的netCDF格式文件转换为GeoTiff格式
文章目录 目录 文章目录 前言 一.netCDF格式文件主要内容 二.准备工作 1.所需要的库 netCDF4库 2.GDAL库的安装 3.thinker库 三.nc格式文件主要内容的存储 四.总结 ...
- python处理nc文件并输出_利用python如何处理nc数据详解
前言 这两天帮一个朋友处理了些 nc 数据,本以为很简单的事情,没想到里面涉及到了很多的细节和坑,无论是"知难行易"还是"知易行难"都不能充分的说明问题,还是& ...
- python读取nc文件转成img_使用python的netCDF4库读取.nc文件 和 创建.nc文件[转]
使用python netCDF4库读取.nc文件 和 创建.nc文件 1. 介绍 .nc(network Common Data Format)文件是气象上常用的数据格式,python上读取.nc使用 ...
最新文章
- Android NullPointerException解决方法(空指针异常)
- ui设计师常用的设计工具_2020年应该使用哪个UI设计工具?
- Laravel服务提供器
- Flask实现分页功能
- 一份阿里员工的Java问题排查工具单
- 【跃迁之路】【737天】程序员高效学习方法论探索系列(实验阶段494-2019.2.27)...
- 给本地Git配置账号信息
- python correlation_相关性系数介绍+python代码实现 correlation analysis
- HR别掉坑里了,送你最精确的计薪算法!
- codesmith执行时提示“调用的目标发生了异常”的处理过程经验。
- java实现23种设计模式之普通工厂模式和抽象工厂模式
- 开务正式加入中国信通院数据库应用创新实验室
- python-Django 增删改和分页
- Linux驱动开发-编写W25Q64(Flash)驱动
- 3dB等波纹低通滤波器设计(HFSS)
- 基于51单片机的声音分贝测量与显示仿真
- Carmack平方根函数经典案例
- MDK3358平台QT示例-ADS1110温度采集示例
- tcp/udp 常用端口列表
- HTML 和 CSS 重构网页 (Steam主页)