通过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的子库gdalosr,前者用于实现转换和栅格编辑功能,后者可用于确定地理坐标系和地图投影。

      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
      

三、功能实现

  1. 查看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) # 查看特定维度数据
    

  1. 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 # 关闭
    

  1. 设置自定义投影

        #设置地理坐标系和投影坐标系,这里设置为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()) # 给新建图层赋予投影信息
    

  1. 用掩膜裁剪

    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
    

四、成图预览

  1. 生成的 Tiff 图像

  1. ArcGIS打开属性

  1. 掩膜裁剪成图

五、参考

  1. 基于Python+GDAL实现nc格式转geotiff格式.
  2. 使用python的netCDF4库读取.nc文件 和 创建.nc文件.
  3. Python3.GDAL从shp文件生成mask.

六、总结

本文包括了NC文件读取,NC文件转TIFF、TIFF文件掩膜裁剪、自定投影操作。吸收了多篇文章内容整合而成。代码多有错误,烦请指正。

通过Python实现NC文件转GeoTiff格式相关推荐

  1. Python读取nc文件转tif

    前言 使用Python解析.nc文件,并导出为WGS84地理坐标系的tif格式文件. PS: Anaconda 安装netCDF4库,在prompt中输入: conda install netCDF4 ...

  2. Arcmap转nc文件为TIFF格式(以逐月降水量数据集转年均数据为例)

    国家青藏高原科学数据中心提供了1901-2020年中国1km分辨率逐月降水量数据(中国1km分辨率逐月降水量数据集(1901-2020)-国家青藏高原科学数据中心),数据集为nc格式. 使用Arcma ...

  3. python读取nc文件数据生成专业气象图

    python读取nc文件数据生成专业气象图如色斑图.等值线.风向标,如下图所示: 代码如下: # -*- coding: utf-8 -*- """ Created on ...

  4. 批量将NC文件转为tif格式

    批量将多年的NC文件转为tif格式进行处理(来源:https://www.geek-share.com/detail/2763962738.html) 所参考和借鉴的文章的链接如下: https:// ...

  5. python读取nc文件并转换成csv_使用Python截取nc文件数据保存到CSV文件-Go语言中文社区...

    问题要求: 编写一个函数完成以下任务:截取经度在23°N-40°N,纬度在118°E-131°E范围内各属性不同深度的数据,使用Python中合适的数据结构将截取的数据保存到同名CSV文件中.(nc文 ...

  6. python处理csv文件将字符串格式XXXX年XX月XX日转化为datetime64XXXX-XX-XX格式,可以进行索引设置和日期计算

    python处理csv文件将字符串格式XXXX年XX月XX日转化为datetime64XXXX-XX-XX格式,可以进行索引设置和日期计算 python读取csv文件中,某列卫XXXX年XX月XX日, ...

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

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

  8. python处理nc文件并输出_利用python如何处理nc数据详解

    前言 这两天帮一个朋友处理了些 nc 数据,本以为很简单的事情,没想到里面涉及到了很多的细节和坑,无论是"知难行易"还是"知易行难"都不能充分的说明问题,还是& ...

  9. python读取nc文件转成img_使用python的netCDF4库读取.nc文件 和 创建.nc文件[转]

    使用python netCDF4库读取.nc文件 和 创建.nc文件 1. 介绍 .nc(network Common Data Format)文件是气象上常用的数据格式,python上读取.nc使用 ...

最新文章

  1. Android NullPointerException解决方法(空指针异常)
  2. ui设计师常用的设计工具_2020年应该使用哪个UI设计工具?
  3. Laravel服务提供器
  4. Flask实现分页功能
  5. 一份阿里员工的Java问题排查工具单
  6. 【跃迁之路】【737天】程序员高效学习方法论探索系列(实验阶段494-2019.2.27)...
  7. 给本地Git配置账号信息
  8. python correlation_相关性系数介绍+python代码实现 correlation analysis
  9. HR别掉坑里了,送你最精确的计薪算法!
  10. codesmith执行时提示“调用的目标发生了异常”的处理过程经验。
  11. java实现23种设计模式之普通工厂模式和抽象工厂模式
  12. 开务正式加入中国信通院数据库应用创新实验室
  13. python-Django 增删改和分页
  14. Linux驱动开发-编写W25Q64(Flash)驱动
  15. 3dB等波纹低通滤波器设计(HFSS)
  16. 基于51单片机的声音分贝测量与显示仿真
  17. Carmack平方根函数经典案例
  18. MDK3358平台QT示例-ADS1110温度采集示例
  19. tcp/udp 常用端口列表
  20. HTML 和 CSS 重构网页 (Steam主页)

热门文章

  1. MySQL英语不好能学吗_英语不好,我能学好编程语言吗
  2. 基因数据处理56之bwa运行paird-end(1千万条100bp的reads).md
  3. 中微SC8F5771模拟IIC通信——指令运行速度的探索(附编译软件与烧录软件)
  4. OpenCV4-C++读图、显示图
  5. springmvc 跨域访问
  6. 2021年中国纸包装行业发展现状及市场格局分析[图]
  7. Hadoop 文件系统与 COS 之间的数据迁移
  8. 手写一套迷你版HTTP服务器
  9. My feelings
  10. Linux磁盘管理练习题(习题+演示)