Problems with showing geolocated data with geoshow. Error in Zdata

17 vues (au cours des 30 derniers jours)
PetterS
PetterS le 12 Fév 2015
Commenté : Chad Greene le 20 Fév 2015
Hi. I have a number of netCDF files containing geolocated satellite data that I need to plot and analyze, but I’m having some difficulties doing so. For example I have a file called COTdm201101010000001230023301MA.nc containing optical cloud thickness for a specific time. This is how I try to open and read it:
netCDF_info = ncinfo('COTdm201101010000001230023301MA.nc');
lat = ncread('COTdm201101010000001230023301MA.nc','lat');
lon = ncread('COTdm201101010000001230023301MA.nc','lon');
cot = ncread('COTdm201101010000001230023301MA.nc','cot');
And at this point everything works and I have one variable “lat” with 3600 latitude values from -90° to +90°. Another one called “lon” also with 3600 values from -90° to +90° and finally a variable called “cot” with 3600x3600 values for cloud thickness.
If I understand the documentation behind the mapping toolbox correctly this should be a simple matter of using “geoshow(lat,lon,Z)”, which in this case would be “ geoshow(lat,lon,cot) ”. But when I do this I get the error:
Warning: Error creating or updating Surface
Error in value of property ZData
Array is wrong shape or size
Which I don’t really understand, to me the array seems to have exactly the correct shape. What am I doing wrong here? I should also mention that there are some gaps in the cot variable that are “NaN” if I look inside the variable, could that be the problem or am I just doing something fundamentally wrong with the geoshow? Maybe it is that my data isn’t covering the entire globe and geoshow expects it to do so?
  2 commentaires
Rob Comer
Rob Comer le 12 Fév 2015
Can you say what size(lat), size(lon), and size(cot) are?
PetterS
PetterS le 17 Fév 2015
yes.
size(lat)= 3600 1
size(lon)= 3600 1
size(cot)= 3600 3600
I suspected that the problem could be that both lat and long are in the format 3600x1 and instead they should be 3600x1 and 1x3600 respectively, but I believe that I have tried to transpose them in all combinations that I can think of and it doesn’t matter.

Connectez-vous pour commenter.

Réponse acceptée

Chad Greene
Chad Greene le 19 Fév 2015
Use meshgrid.
[latgrid,longrid] = meshgrid(lat,lon);
geoshow(latgrid,longrid,cot,'DisplayType','texturemap')
  2 commentaires
PetterS
PetterS le 19 Fév 2015
Yes that worked, thank you!
Chad Greene
Chad Greene le 20 Fév 2015
great!

Connectez-vous pour commenter.

Plus de réponses (1)

Kelly Luetkemeyer
Kelly Luetkemeyer le 12 Fév 2015
You can explicitly tell geoshow to treat your data as a surface. Try either of these commands:
geoshow(lat,lon,cot,'DisplayType','surface')
or
geoshow(lat,lon,cot,'DisplayType','texturemap')
  1 commentaire
PetterS
PetterS le 12 Fév 2015
I tried both commands but unfortunately I’m getting exactly the same error message as before

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by