Author: Benjamin Marchant
License: CC BY 4.0
from matplotlib.pyplot import figure
from pyhdf.SD import SD, SDC
from pyhdf.HDF import *
from pyhdf.VS import *
from datetime import date
from os import path
import pprint
import os
import glob
import random
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns; sns.set()
import numpy as np
import numpy.ma as ma
import pandas as pd
import cartopy.crs as ccrs
import pprint
import warnings
warnings.filterwarnings('ignore')
file_name = "MYD14.A2019213.1200.061.2020302181517.hdf"
file = SD('./inputs/'+file_name, SDC.READ)
file_info = file.info()
print(file_info)
datasets_dic = file.datasets()
sds_dic = {}
for key, value in datasets_dic.items():
#print key, value, value[3]
sds_dic[value[3]] = key
pprint.pprint( sds_dic )
sds_obj = file.select('fire mask') # select sds
fm_data = sds_obj.get() # get sds data
print( fm_data )
Obtaining SDS attributes
pprint.pprint( sds_obj.attributes() )
def plot_fire_mask(data):
data_shape = data.shape
figure(num=None, figsize=(12, 10), dpi=80, facecolor='w', edgecolor='k')
cmap = sns.color_palette('RdBu_r', n_colors=10)
cmap = mpl.colors.ListedColormap(cmap)
bounds = [-0.5, 1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
img = plt.imshow(np.fliplr(data), cmap=cmap, norm=norm,interpolation='none', origin='lower', aspect='auto')
cbar_bounds = [-0.5,0.5, 1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5]
cbar_ticks = [0,1,2,3,4,5,6,7,8,9]
cbar = plt.colorbar(img, cmap=cmap, norm=norm, boundaries=cbar_bounds, ticks=cbar_ticks)
cbar.ax.set_yticklabels(cbar_ticks, fontsize=10)
plt.title('VIIRS I-Bands Fire Mask', fontsize=16)
l = [int(i) for i in np.linspace(0,data_shape[1],6)]
plt.xticks(l, [i for i in reversed(l)], rotation=0, fontsize=11 )
l = [int(i) for i in np.linspace(0,data_shape[0],9)]
plt.yticks(l, l, rotation=0, fontsize=11 )
plt.xticks(fontsize=11)
plt.yticks(fontsize=11)
plt.show()
return None
plot_fire_mask(fm_data)
fm_data[ fm_data > 6 ]
sds_obj = file.select('algorithm QA') # select sds
qa_data = sds_obj.get() # get sds data
print( qa_data )
pprint.pprint( sds_obj.attributes() )
sds_obj = file.select('FP_line')
df_fire_pixels = pd.DataFrame()
if fm_data[ fm_data > 6 ].shape[0] > 0:
for key, value in datasets_dic.items():
if 'FP_' in key:
sds_dic[value[3]] = key
#print(key)
sds_obj = file.select(key) # select sds
#pprint.pprint( sds_obj.attributes() )
data = sds_obj.get() # get sds data
#print(data.shape)
df_fire_pixels[key] = data
df_fire_pixels
plt.figure(figsize=(16,9))
proj = ccrs.PlateCarree()
ease_extent = [-180., 180., 90., -90.]
ax = plt.axes(projection=proj)
ax.set_extent(ease_extent, crs=proj)
ax.gridlines(color='gray', linestyle='--')
ax.coastlines()
longs = df_fire_pixels['FP_longitude']
lats = df_fire_pixels['FP_latitude']
plt.scatter( longs, lats,
color='red', linewidth=2, marker='o', s=2,
transform=ccrs.PlateCarree(),
)
plt.tight_layout()
plt.show()
plt.close()
file.end()