jupyter notebook 代码
之所以采用jupyter进行代码介绍,是希望能帮助大家更好理解代码
若不想阅览下方nc数据描述部分,可跳转至:查看变量信息
最后附上了完整代码。
查看变量信息
第十八行开始逐个查看每个字段的描述,由于过多此处没有截取完全
最终确定需要字段为solar_mon
完整代码
该代码基于python2编写,其中gdal和osr在python3中可通过
from osgeo import gdal, osr
导入
# coding:utf-8
import netCDF4 as nc
import numpy as np
import gdal
import osr
from tqdm import tqdm
import os
def save_data(out_path, tif_data):
# 创建tif文件
driver = gdal.GetDriverByName('GTiff')
# 创建框架
out_tif = driver.Create(out_path, len_lon, len_lat, 1, gdal.GDT_Float32)
# 设置影像显示范围
geotransfor = (lonmin, lon_res, 0, latmax, 0, -lat_res) # -latres < 0
out_tif.SetGeoTransform(geotransfor)
# 获取地理坐标系统信息
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326) # 定义输出的坐标系为"WGS 84",AUTHORITY["EPSG","4326"]
out_tif.SetProjection(srs.ExportToWkt()) # 赋予投影信息
# 数据写出
out_tif.GetRasterBand(1).WriteArray(tif_data)
out_tif.FlushCache()
out_tif = None
if __name__ == '__main__':
path = r'D:\biyelunwen\data\fushe\CERES_EBAF_Edition4.1_200003-202007.nc'
# 读取数据
data = nc.Dataset(path)
# 查看变量
variables = data.variables
# for i in variables.keys():
# print('*'*10+i+'*'*10)
# print(variables[i])
# 获取经纬度
var_lon = variables['lon'][:]
var_lat = variables['lat'][:]
# 查看太阳辐射数据介绍
print(variables['solar_mon']) # 该数据以月值进行整合
# 获得数据起始时间
begin_time = variables['time'].units.split( )[2]
# 获取数据起始年份和月份
begin_year = int(begin_time.split('-')[0])
begin_month = int(begin_time.split('-')[1])
print(begin_year, begin_month)
# 获取影像左下角和右下角坐标
lonmin, latmax, lonmax, latmin = (var_lon.min(), var_lat.max(),
var_lon.max(), var_lat.min())
print(lonmin, latmax, lonmax, latmin)
# 计算分辨率
len_lat = len(var_lat)
len_lon = len(var_lon)
lon_res = (lonmax - lonmin)/(len_lon - 1.0)
lat_res = (latmax - latmin)/(len_lat - 1.0)
# 获取数据
solar = variables['solar_mon']
basepath = r'../data/radi'
if not os.path.exists(basepath):
os.mkdir(basepath)
# 保存数据
for month in tqdm(range(solar.shape[0]), ncols=80, desc=u'保存进度'):
if begin_month > 12:
begin_month = 1
out_tif_path = basepath + r'/radi_{}_{}{}'.format(begin_year, begin_month, '.tif')
data = np.asarray(solar[month])
save_data(out_tif_path, data)
if begin_month == 12:
begin_year += 1
begin_month += 1