Collect data from multiple sets of lat and long instead of just one set

3 visualizzazioni (ultimi 30 giorni)
I have this code below in matlab, it collects data from AOD in a set of lat and long, however, I want to collect in multiple locations of lat and lon. Do you have any idea? I have this code below in matlab, it collects data from AOD in a set of lat and long, however, I want to collect in several places of lat and lon. Do you have any idea? The script I used is below.
The data looks like this: MYD04_3K.A2010001.1540.061.2018053201411.hdf
%%
% MYD04 - DADOS PARTE 1
% DATAS -> MYD04_3K.A2010001.1540.061.2018053201411.hdf
%% PROGRAMA_LER_HDF_SÉRIE_TEMPORAL_AOD_MODIS
% OBETIVO: ler arquivos HDF e extrair a série temporal da variável desejada
% DESCRIÇÃO: abre um arquivo HDF de um diretório específico,identifica dentro do HDF as variáveis que se deseja trabalhar
% (ex.: Latitude, Longitude, optical_depth_land_and_ocean), escreve esses arquivos de forma(double), identifica nesses arquivos
% os valores de erro/desprezíveis (ex.: -9999), substitui por "NaN", gera um arquivo corrigido, multiplica os dados dessa matriz
% pelo fator de conversão especificado no arquivo HDF (ex.:0.01), gera um novo arquivo(com os valores físicos reais) e em seguida plota os gráficos
%% REGISTRA_DIRETÓRIOS
clc
clear all
% close all
%%
% DirDSc=pwd;
DirMYD = '/media/augusto/SATELITES/MYD043K'
% DirDMY='D:\MODIS-ATM\MODIS043K\MYD043K';
% DirDMI='D:\MODIS-ATM\MCD19A2\MCD19A2d';
% LOCALIZA_ÁREAS_ESTUDO
% Encontra os pontos de lat e lon
%Localizações
%Bel: -1.473137 -48.485657
%Stm: -2.452059 -54.753617
%Alt: -3.217477 -52.230464
%Mab: -5.394255 -49.135187
%ParaC: -4.27 -52.60
DirShp='/media/augusto/AUGUSTOG/IBGEShp/bcim_2016_shapefiles_21-11-2018';cd(DirShp);
shpc = shaperead('loc_capital_p.shp'); %capitais AS
cgeo={shpc.X;shpc.Y;shpc.nome}';
disp(cgeo);
cgeo=input('Informe a coordenada (graus) do local de estudo /Ex: [-02.133333 -58.983609]:');
pixe_l=input('Informe o pixel, cujo centro é local de estudo /Ex: [15]:');
lat_n=cgeo(1,1)+((pixe_l(1,1)./2)./111.1);
lat_s=cgeo(1,1)-((pixe_l(1,1)./2)./111.1);
lon_e=cgeo(1,2)+((pixe_l(1,1)./2)./111.1);
lon_w=cgeo(1,2)-((pixe_l(1,1)./2)./111.1);
%%
% LER_HDF
% Ler o arquivo HDF em um diretório específico.
% Ler as variáveis desejadas do grupo de variáveis disponibilizadas no arquivo HDF que foi aberto.
% 1) Latitude
% 2) Longitude
% 3) Optical_Deph_Land_and_Ocean
% 4) Solar_Zenith
t1=datestr(now);
disp(t1)
cd(DirMYD); %Terra
m=dir('*hdf*'); %diretorio das pastas
MYD04L2=[];
MYD04L2e=[];
% MYD04L2=[];
% MYD04L2e=[];
%%
for j=1:length(m)
jj=num2str(j);
OpenFile{1,1}=num2str(j);
OpenFile{1,2}=m(j).name;
disp(OpenFile) %mostra na tela posição processamento
ano(j)= str2double(m(j).name(11:14)); %#ok<SAGROW>
dia(j)= str2double(m(j).name(15:17)); %#ok<SAGROW>
% MOD_DAY=[];for i=3:length(dir);MOD_DAY=[MOD_DAY;[str2num(f(i).name(19:22))]];end;
%--------------------------------------------------------------------------
% Especificando a precisão dos números /nomeando variáveis HDF na workspace
cmd=['lat = double(hdfread(''' m(j).name ''', ''/mod04/Geolocation Fields/Latitude''));'];eval(cmd);
cmd=['lon = double(hdfread(''' m(j).name ''', ''/mod04/Geolocation Fields/Longitude''));'];eval(cmd);
cmd=['asz = double(hdfread(''' m(j).name ''', ''/mod04/Data Fields/Solar_Zenith''));'];eval(cmd);
cmd=['aod = double(hdfread(''' m(j).name ''', ''/mod04/Data Fields/Optical_Depth_Land_And_Ocean''));'];eval(cmd);
%--------------------------------------------------------------------------
% Substituindo erro p/ NaN
% Encontrando os índices (posição nas matrizes que possuem valores negativos e/ou menores que -9999)
id_lat=find(lat == -9999);
id_lon=find(lon == -9999);
lat(id_lat)=NaN; %#ok<SAGROW>
lon(id_lon)=NaN; %#ok<SAGROW>
id_aod=find(aod<=0);
aod(id_aod)=NaN; %#ok<SAGROW>
aod=0.001.*aod;
id_asz=find(asz<=-9999);
asz(id_asz)=NaN; %#ok<SAGROW>
asz=0.01.*asz;
%--------------------------------------------------------------------------
%Selecionando_pixel e a profundidade óptica média (representativa do pixel)
a_pixe=find(lat>=lat_s & lat<=lat_n & lon>=lon_w & lon<=lon_e);
cmd=['Dnum=[datenum(''31-Dez-' num2str(ano(j)-1) ' 00:00:00'') + (str2double(m(j).name(15:17)) + str2double(m(j).name(19:20))./24 + str2double(m(j).name(21:22))./60./24)];'];eval(cmd); % Date(n)
Dvec=datevec(Dnum); %DateVec
JDay=(str2double(m(j).name(15:17)) + str2double(m(j).name(19:20))./24 + str2double(m(j).name(21:22))./60./24); %JulianDate
MYD04L2=[MYD04L2;[Dnum,Dvec,JDay,nanmean(aod(a_pixe))]]; % p/TERRA usar MOD04L2
MYD04L2e=[MYD04L2e;[NaN(size(a_pixe)),lat(a_pixe),lon(a_pixe),(aod(a_pixe))]]; % p/TERRA usar MOD04L2
MYD04L2e(isnan(MYD04L2e(:,1)),1)=Dnum;
% MYD04L2=[MYD04L2;[Dnum,Dvec,JDay,nanmean(aod(a_pixe))]]; % p/AQUA usar MYD04L2
% MYD04L2e=[MYD04L2e;[NaN(size(a_pixe)),lat(a_pixe),lon(a_pixe),(aod(a_pixe))]]; % p/AQUA usar MYD04L2
% MYD04L2e(isnan(MYD04L2e(:,1)),1)=Dnum;
end
%%
cd ..
clear('id_aod','id_asz','ans','cmd','id_lat','id_lon');
t2=datestr(now);
%% MATRIZ FINAL DADOS MODIS (MOD04L23K)
MYDIS04L2=[MYD04L2]% MODIS04L2=[MOD04L2;MYD04L2]; % empilhando as matrizes
[ord,ind]=sort(MYDIS04L2(:,1)); % ordenando as medidas
MYDIS04L2=MYDIS04L2(ind,:);
%plot(MYDIS04L2(:,1),MYDIS04L2(:,9),'.')
  9 Commenti

Accedi per commentare.

Risposte (0)

Categorie

Scopri di più su MATLAB in Help Center e File Exchange

Prodotti


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by