• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: 其他
  • 标签: MAIAC  MODIS  投影  

资源简介

读取MODIS的MAIAC AOD 1km产品小程序,从自带的Sinusoidal投影转为常用的经纬度,注释详细,如果需要可能需要自行修改。

资源截图

代码片段和文件信息

# liding 2019.12.30
#+++++++++++++++读取MAIAC.hdf数据++++++++++++++++++++++
#该数据比较怪异,一个是组织结构
# (MAIAC的反演算法造成的,一个数据里有多轨数据,这里使用了均值)
#另一个是投影,无经纬度信息 (使用了投影包)
#+++++++++++++++读取MAIAC.hdf数据+++++++++++++++++++++++
#from osgeo import gdalosr
import pyproj
from pathlib import Path
import xarray as xr
import numpy as np
in_dir = Path(‘./dat‘)
ot_dir = Path(‘./result‘)
k = 0
for i in in_dir.glob(‘*.hdf‘):
    inp = i
    print(inp)
    with xr.open_dataset(inpengine = ‘netcdf4‘) as ds:
        AOD_1k = ds[‘Optical_Depth_055‘].values  #读取数值
        attr_ = ds.attrs  #读取坐标
    #数据是多轨的,需要进行平均
    aod_550 = np.full([AOD_1k.shape[1]AOD_1k.shape[2]]np.nan)
    for ii in range(AOD_1k.shape[1]):
        for jj in range(AOD_1k.shape[2]):
            aod_550[iijj] = np.nanmean(AOD_1k[:iijj]) #需要使用避免nan的均值
    #投影是GCTP_SNSOID的,需要转化,只有左上角和右下角坐标
    for key_val in attr_.items():
        if key_ == ‘Structmetadata.0‘:
            s_val = val.split()
    for ii in s_val:
        if ‘pperLeftPointMtrs‘ in ii:
            x_up = float(ii[ii.index(‘(‘)+1:ii.index(‘‘)])
            y_up = float(ii[ii.index(‘‘)+1:-1])
        if ‘LowerRightMtrs‘ in ii:
            x_down = float(ii[ii.index(‘(‘)+1:ii.index(‘‘)])
            y_down = float(ii[ii.index(‘‘)+1:-1])
    #坐标网格化
    grid_xgrid_y = np.meshgrid(np.linspace(x_upx_downAOD_1k.shape[1])np.linspace(y_upy_downAOD_1k.shape[2]))
    p = pyproj.Proj(‘+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181 +b=6371007.181 +units=m +no_defs‘)  #modis坐标投影系统(可替换,还有2个一样的),查找https://spatialreference.org/ref/
    lat = np.full(grid_x.shapenp.nan) #经纬度空矩阵,便于存放数据
    lon = np.full(grid_x.shapenp.nan)
    #循环计算每个格点的投影,注意检查是否符合规律,避免弄反
    for l in range(lat.shape[0]):
        for r in range(lat.shape[1]):
            lon[lr] lat[lr] = p(grid_x[lr] grid_y[lr] inverse=True)
    #保存(注意名字)
    ot_file = ot_dir/(i.name[9:16]+‘_‘+i.name[-8:-5])
    np.savez(ot_filelon=lonlat=lataod550=aod_550)

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2342  2020-05-22 10:09  read_MAIAC.py

评论

共有 条评论