% % This example code illustrates how to access and visualize LAADS % MODIS MOD04 L2 swath file in MATLAB. % % If you have any questions, suggestions, comments on this example, please use % the HDF-EOS Forum (http://hdfeos.org/forums). % % % If you would like to see an example of any other NASA HDF/HDF-EOS data % product that is not listed in the HDF-EOS Comprehensive Examples page % (http://hdfeos.org/zoo), feel free to contact us at eoshelp@hdfgroup.org % or post it at the HDF-EOS Forum (http://hdfeos.org/forums). % % Usage:save this script and run (without .m at the end) % % $matlab -nosplash -nodesktop -r MOD04_L2_A2010001_0000_005_2010005211741_hdf % % Tested under: MATLAB R2015a % Last updated: 2015-07-29 clear % Set file name and swath name. FILE_NAME='MOD04_L2.A2015014.1215.006.2015035101044.hdf'; SWATH_NAME='mod04'; % Open HDF-EOS2 file. file_id = hdfsw('open', FILE_NAME, 'rdonly'); % Open swath. swath_id = hdfsw('attach', file_id, SWATH_NAME); % Read data from a data field. DATAFIELD_NAME='Optical_Depth_Land_And_Ocean'; [data, fail] = hdfsw('readfield', swath_id, DATAFIELD_NAME, [], [], []); % Read lat and lon data. [lon, status] = hdfsw('readfield', swath_id, 'Longitude', [], [], []); [lat, status] = hdfsw('readfield', swath_id, 'Latitude', [], [], []); % Detach from the Swath Object. hdfsw('detach', swath_id); hdfsw('close', file_id); % Convert the data to double type for plot. data=double(data); lon=double(lon); lat=double(lat); % Read attributes from the data field SD_id = hdfsd('start',FILE_NAME, 'rdonly'); sds_index = hdfsd('nametoindex', SD_id, DATAFIELD_NAME); sds_id = hdfsd('select',SD_id, sds_index); % Read _FillValue from the data field. fillvalue_index = hdfsd('findattr', sds_id, '_FillValue'); [fillvalue, status] = hdfsd('readattr',sds_id, fillvalue_index); % Read units from the data field. units_index = hdfsd('findattr', sds_id, 'units'); [units, status] = hdfsd('readattr',sds_id, units_index); % Read scale_factor from the data field. scale_index = hdfsd('findattr', sds_id, 'scale_factor'); [scale, status] = hdfsd('readattr',sds_id, scale_index); % Read add_offset from the data field. offset_index = hdfsd('findattr', sds_id, 'add_offset'); [offset, status] = hdfsd('readattr',sds_id, offset_index); % Terminate access to the corresponding data set. hdfsd('endaccess', sds_id); % Close the file. hdfsd('end', SD_id); % Replace the filled value with NaN. data(data==fillvalue) = NaN; % Multiply scale and adding offset, the equation is scale *(data-offset). data = scale*(data-offset); % Plot the data using contourfm and axesm. pole=[-90 0 0]; latlim=[-90,ceil(max(max(lat)))]; lonlim=[floor(min(min(lon))),ceil(max(max(lon)))]; min_data=floor(min(min(data))); max_data=ceil(max(max(data))); f = figure('Name', FILE_NAME, 'visible', 'off'); % Create the plot. axesm('MapProjection','eqdcylin',... 'Frame','on','Grid','on', ... 'MeridianLabel','on','ParallelLabel','on','MLabelParallel','south') coast = load('coast.mat'); % surfm is faster than contourfm. surfm(lat, lon, data); colormap('Jet'); h=colorbar(); plotm(coast.lat,coast.long,'k') % Draw unit. set(get(h, 'title'), 'string', 'None', ... 'FontSize', 12, 'FontWeight','bold', ... 'Interpreter', 'none'); % Put title. tstring = {FILE_NAME;DATAFIELD_NAME}; title(tstring, 'Interpreter', 'none', 'FontSize', 16, ... 'FontWeight','bold'); % The following fixed-size screen size will look better in JPEG if % your screen is too large. scrsz = [1 1 800 600]; set(f, 'position', scrsz, 'PaperPositionMode', 'auto'); saveas(f, [FILE_NAME '.m.jpg']); exit;