【Python】EOS-MODIS-1B数据处理

本文介绍了如何使用Python处理MODIS Level 1B Calibrated Radiance数据,涉及数据读取、辐射定标、地理定位和地图渲染。重点讲解了辐射定标公式及关键参数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

0 MODIS数据

1 数据处理

参考


0 MODIS数据介绍

Level 1B Calibrated Radiances - 1km - LAADS DAAC

热红外数据集:Earth View 1KM Emissive Bands Scaled Integers

radiance_scales和radiance_offset这两项参数代表波段的增益和偏移量,是辐射定标的系数。

MODIS辐射定标通用公式:Radiance = scales*(DATA-offset)

1 数据处理

import os
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np
from pyhdf.SD import SD, SDC


FILE_NAME = 'MOD021KM.A2015002.1410.006.2015003034910.hdf'
DATAFIELD_NAME = 'EV_1KM_Emissive'


hdf = SD(FILE_NAME, SDC.READ)

attrs = hdf.attributes(full=1)
nsa = attrs["Number of Scans"]
number_of_Scans = nsa[0]

# Read dataset.
data2D = hdf.select(DATAFIELD_NAME)
data = data2D[0,:,:].astype(np.double)


# Read geolocation dataset from MOD03 product.
lat = hdf.select('Latitude')
latitude = lat[:,:]
lon = hdf.select('Longitude')
longitude = lon[:,:]

attrs=lat.attributes(full=1)
fna = attrs["frame_numbers"]
frame_numbers = fna[0][0]
lna = attrs["line_numbers"]
line_numbers = lna[0][0]


# Retrieve attributes.
attrs = data2D.attributes(full=1)
lna=attrs["long_name"]
long_name = lna[0]
aoa=attrs["radiance_offsets"]
add_offset = aoa[0][0]
sfa=attrs["radiance_scales"]
scale_factor = sfa[0][0]  
fva=attrs["_FillValue"]
_FillValue = fva[0]
vra=attrs["valid_range"]
valid_min = vra[0][0]        
valid_max = vra[0][1]
ua=attrs["units"]
units = ua[0]
        
invalid = np.logical_or(data > valid_max,
                        data < valid_min)
invalid = np.logical_or(invalid, data == _FillValue)
data[invalid] = np.nan
data = (data - add_offset) * scale_factor 
data = np.ma.masked_array(data, np.isnan(data))
# Find middle location.
lat_m = np.nanmean(latitude)
lon_m = np.nanmean(longitude)        
# Render the plot in a lambert equal area projection.
m = Basemap(projection='laea', resolution='l', lat_ts=65,
            lat_0=lat_m, lon_0=lon_m,
            width=3000000, height=2500000)
m.drawcoastlines(linewidth=0.5)
m.drawparallels(np.arange(50., 91., 10.), labels=[1, 0, 0, 0])
m.drawmeridians(np.arange(-180, 181., 30), labels=[0, 0, 0, 1])

data0 = data[:number_of_Scans*2,:271]
for i in range(0,number_of_Scans*2):
	for j in range(0,271):
		newi = i*5 + int(line_numbers)
		newj = j*5 + int(frame_numbers)
		# print(newi,newj)
		data0[i,j] = data[newi,newj]

m.pcolormesh(longitude, latitude, data0, latlon=True)
cb=m.colorbar()
cb.set_label(units, fontsize=8)

# Long name value is really long.
# print long_name

basename = os.path.basename(FILE_NAME)
# Split display of long name.
plt.title('{0}\n{1}\n{2}\n{3}'.format(basename,
                                      long_name[0:81],
                                      long_name[81:158],
                                      long_name[158:]),
          fontsize=8)
fig = plt.gcf()
pngfile = "{0}.py.png".format(basename)
fig.savefig(pngfile)

官网图片:

参考

1、EOS-MODIS官网 LAADS DAAC

2、MODIS热红外数据辐射亮度值的计算 MODIS热红外数据辐射亮度值的计算_David_jiang-优快云博客

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值