nc数据读取之利用netCDF4模块读取含多个嵌套Group的数据

内嵌Group的nc数据,看成文件夹下的子文件夹里有数据集
使用数据为特殊的哨兵卫星(S5P)数据
直接上代码,该代码实现的是简单的提取netcdf4数据提取为含经纬度和value的点集(TXT),可供Arcgis导入使用,可参考另一篇博文,直接将获取的点击输出为shp文件

# -*- coding: utf-8 -*-
import numpy as np
import netCDF4n
import os


class Create_nc_addxy:
    def __init__(self, filePath):
        self.filePath = filePath  # 文件路径
    def creat_addxy(self):
        # 写成传参
        # filePath = nc数据路径
        curPath = os.path.abspath(os.path.dirname(__file__))
        rootPath = os.path.split(curPath)[0]
        rootDir = os.path.split(rootPath)[0]
        projDir = os.path.split(rootDir)[0]
        filename = os.path.splitext(os.path.split(self.filePath)[1])[0]
        outputfile = projDir + '/data/workspace/txtfile/' + filename + '.txt'
        # outputfile = txt路径
        dataset = 'nitrogendioxide_tropospheric_column'
        # 剔除了-9999
        # scanline Y 3245 & ground_pixel X 450
        file_info = netCDF4.Dataset(self.filePath, mode='r')
        # 获取数据
        ntc = file_info.groups['PRODUCT'].variables[dataset][()]
        lon = file_info.groups['PRODUCT'].variables['longitude'][()]
        lat = file_info.groups['PRODUCT'].variables['latitude'][()]
        # 取出数据并转为一维数组
        z, row, col = ntc.shape
        ntc_arr = np.asarray(ntc).reshape((row * col))
        lon_arr = np.asarray(lon).reshape((row * col))
        lat_arr = np.asarray(lat).reshape((row * col))
        # 剔除-9999
        null_index = np.where((ntc_arr > 9.1e+35) | (ntc_arr < 0))
        index = list(null_index[0])
        ntc_arr = np.delete(ntc_arr, index)
        lon_arr = np.delete(lon_arr, index)
        lat_arr = np.delete(lat_arr, index)
        # TROPOMI用的是标准单位,然而通用的是 10^15 molec./cm^2,所以要乘上系数6.02214x10^4来转换(6.02214e+4) 看官网数据说明
        ntc_arr = ntc_arr * (6.02214e+4)*(1.0e+15)
        # 制作文本数据fid,lon,lat,value
        fid = np.array(range(len(ntc_arr))).tolist()
        ntc_arr_list = ntc_arr.tolist()
        lon_arr_list = lon_arr.tolist()
        lat_arr_list = lat_arr.tolist()
        all_arr = [fid, lon_arr_list, lat_arr_list, ntc_arr_list]
        all_arr = np.array(all_arr)
        all_arr = np.transpose(all_arr)
        all_arr = all_arr.tolist()
        # a=','.join(all_arr)
        a = [str(i).replace('[', '').replace(']', '').replace(' ', '') for i in all_arr]
        # 添加头文件
        with open(outputfile, 'w') as f:
            f.write('fid,lon,lat,value' + '\n')
        with open(outputfile, 'a') as f:
            s = '\n'.join(a)
            f.write(s)
        return outputfile

你可能感兴趣的:(Python,GIS_Python)