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

目录

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-CSDN博客

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Python是一种功能强大的编程语言,因其灵活性和易用性,被广泛用于各种应用实战案例中。其中一个案例是使用Python来处理ModisModerate Resolution Imaging Spectroradiometer)数据,并计算温度植被干旱指数(TVDI)。 Modis是一种远程感知卫星传感器,可提供地球表面的高分辨率影像。利用Modis数据,可以获取温度、植被指数等信息来评估干旱程度。温度植被干旱指数(TVDI)是一种广泛采用的指标,用于描述植被生长和干旱状况之间的关系。 Python中有许多库可以用于处理地理空间数据和遥感数据,例如GDAL、NumPy和Pandas等。在这个案例中,我们可以使用这些库来读取和处理Modis数据,并计算TVDI指数。 首先,我们需要将Modis数据导入Python环境中。使用GDAL库可以方便地读取遥感数据的各个波段。然后,通过计算温度和植被指数,例如NDVI(Normalized Difference Vegetation Index),可以得到相应的数值。 接下来,我们可以根据TVDI的计算公式,结合温度和植被指数,计算TVDI指数。根据地区的特点和需求,可以调整计算公式的参数。在完成计算后,可以将结果可视化,以便更直观地理解干旱情况。 总而言之,Python在处理Modis数据并计算温度植被干旱指数方面非常有用。通过使用Python的各种库和工具,可以对遥感数据进行处理和分析,并得出干旱指数的结果。这种方法不仅可以提供更准确的干旱评估结果,还可以为相关研究和应用提供有价值的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值