netcdf files in a predefined domain
Mostrar comentarios más antiguos
Hello,
I am trying to read multiple netcdf4 files in a predefined area (lat and lon). I want values OUTSIDE my predefined area to be equal to '-99' but below code changes all the values to -99.
NOTE: in the below code lat_edge and lon_edge are lat and lon values from first satellite and sub_lat and sub_lon are lat and lon values from second satellite. I'm doing collocation first.
lat_edge=double([min(lat(:)) max(lat(:))]);
lon_edge=double([min(lon(:)) max(lon(:))]);
index_out_edge=find(sub_lat(:)<=lat_edge(1) | sub_lat(:)>=lat_edge(2) | sub_lon(:)<=lon_edge(1) | sub_lon(:)>=lon_edge(2));
CLTT_temp = ncread(files{i},'CLTT');
CLTT_temp_FINAL=CLTT_temp(min(row):max(row),min(col):max(col)); %min and max row col are lat lon indices from second satellite.
CLTT_temp_FINAL(index_out_edge)=-99;
kindly tell me what I'm missing in my code.
thank you.
6 comentarios
Walter Roberson
el 11 de Mzo. de 2021
What shows up for
nnz(sub_lat(:)>lat_edge(1) & sub_lat(:)<lat_edge(2) & sub_lon(:)>lon_edge(1) & sub_lon(:)<lon_edge(2))
If this shows up as 0 then every point was determined to be out of bounds.
IMC
el 11 de Mzo. de 2021
Walter Roberson
el 11 de Mzo. de 2021
What are
lat_edge
lon_edge
min(sub_lat(:)), max(sub_lat(:))
min(sub_lon(:)), max(sub_lon(:))
IMC
el 14 de Mzo. de 2021
Walter Roberson
el 15 de Mzo. de 2021
It looks like the distribution of your values might be biased. I suggest investigating with something like
lat_edge = double([min(lat(:)) max(lat(:))]);
lon_edge = double([min(lon(:)) max(lon(:))]);
fill(lon_edge([1 2 2 1]), lat_edge([1 1 2 2]), [.5 .5 .5]);
hold on
scatter(sub_lon, sub_lat, [], 'r')
hold off
xlim auto
ylim auto
The red marks that show up in the mid-gray background are the ones that should be located by index_out_edge. My suspicion is that you will find all your marks are outside the rectangle.
IMC
el 16 de Mzo. de 2021
Respuestas (1)
KSSV
el 11 de Mzo. de 2021
Something like this should work:
index_out_edge = ~(((sub_lat(:)<=lat_edge(1) | sub_lat(:)>=lat_edge(2)) && (sub_lon(:)<=lon_edge(1) | sub_lon(:)>=lon_edge(2))));
Categorías
Más información sobre NetCDF en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!