Python处理NetCDF格式数据(以PM2.5数据为例)并导出为TIFF数据(附源代码)

Python处理NetCDF格式数据(以PM2.5数据为例)并导出为TIFF数据(附源代码)

Python处理NetCDF格式数据
以PM2.5数据为例
PM2.5数据出处:Atmospheric Composition Analysis Group
并导出为TIFF

-------------------------------------------------------

所用代码如下

存在一个不太理解问题,还请各位指教:
读取原始nc数据后,需将提取的PM2.5逆时针旋转90°才可以

#!usr/bin/env python
# -*- coding: utf-8 -*-

import os
import gdal,osr
import netCDF4 as nc
import numpy as np

def	extract_nc(nc_file):
	dataset = nc.Dataset(nc_file)
	print(dataset.variables.keys())
	
	# 读取经纬度
	var_lat = dataset.variables["LAT"][:]
	var_lon = dataset.variables["LON"][:]

	PM25_1 = dataset.variables["PM25"]
	PM25 = np.rot90(PM25_1,1) # 此处我没有找到比较好的解决方法,若不进行此处的逆时针旋转,数据集输出将会有误,且会被旋转90°

	# 影像的左上角和右下角坐标
	LonMin, LatMax, LonMax, LatMin = [var_lon.min(), var_lat.max(), var_lon.max(), var_lat.min()]
	# 分辨率计算,可以计算得到
	# 也可以自己手动输入,我所用数据集的分辨率是0.01°×0.01°
	N_Lat = len(var_lat)
	N_Lon = len(var_lon)
	Lon_Res = (LonMax - LonMin) / (float(N_Lon) - 1)
	Lat_Res = (LatMax - LatMin) / (float(N_Lat) - 1)
 
	# 设置影像的显示范围
	# Lat_Res一定要是-的,此处取负号原因不是很明白
	geo = (LonMin, Lon_Res, 0, LatMax, 0, -Lat_Res)

	#构造projection
	src_srs = osr.SpatialReference()
	src_srs.ImportFromEPSG(4326) # 定义输出的坐标系为"WGS 84"AUTHORITY["EPSG","4326"]
	src_srs_wkt = src_srs.ExportToWkt()
	return PM25,geo,src_srs_wkt,N_Lon,N_Lat

def write_tiff(tiff_file,geo,proj,N_Lon,N_Lat,data_array):
	driver = gdal.GetDriverByName("Gtiff")

	outdataset = driver.Create(tiff_file,N_Lon,N_Lat,1,gdal.GDT_Float32)

	outdataset.SetGeoTransform(geo)
	outdataset.SetProjection(proj)

	band = outdataset.GetRasterBand(1)
	band.WriteArray(data_array)

def nc_to_tif(nc_file,output_dir):

	nc_file_name = os.path.basename(nc_file)
	output_file_name = os.path.join(output_dir,nc_file_name)

	pm25_file = output_file_name.replace(".nc", "_2000.tif")

	pm25, geo, proj,N_Lon,N_Lat=extract_nc(nc_file)

	write_tiff(pm25_file,geo,proj,N_Lon,N_Lat,pm25)

if __name__ == '__main__':
	# PM2.5数据
	PM_file = r"E:\AYiDaiYiLu\PM\2000PM.nc"
	# 解析结果存储路径
	tiff_dir = r"E:\AYiDaiYiLu"
	nc_to_tif(PM_file,tiff_dir)


注:

我主要是分析处理PM2.5数据,
一开始是直接使用.asc和.prj用arcgis打开,但由于是全球数据,耗时太长,浪费时间
所以想处理.nc数据直接转为tiff,中间也是问题百出,最终调试出可运行使用的代码,还请各位评论区交流自己处理PM2.5数据的方法,互相学习

在这里插入图片描述

参考博客出处
: python netcdf4读取nc格式的气象数据.
: python将nc文件转为tiff.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值