MATLAB Answers

what's wrong with this code? polygon function

3 views (last 30 days)
I have a netcdf file containg data for a region over 4 country. I only want to have the data over specific country and not the rest of the region. I read so many document but still I cant do that and need help. here what's I've done yet:
filename= 'chirps-v2.0.monthly.nc'
time= ncread(filename,'time') %read time
lat = ncread(filename,'latitude'); %reading latitude
lon = ncread(filename,'longitude'); %reading longitude
precip = ncread(filename,'precip'); %reading the main variable precip=(lon*lat*time)
precip_mean= mean(precip, 3) %average of precip in all times
[x, y] = borders('Iran Islamic Republic of');
in = inpolygon(x,y,lon,lat) %!!!!! I GOT ERROR HERE !!!!! I write rest of code based on examples in MathWorks
precip_mean=precip_mean';
precip_mean(~in)=NaN;
surf(lon, lat, Mean_precip(:,:,:).'); view(2)
shading interp
colormap jet
hold on
pgon = polyshape (x,y,'simplify',false);
plot(pgon,'FaceColor','none','edgecolor','k','facealpha',1);
I want only precip that are in my study region's border.

  4 Comments

Show 1 older comment
Behzad Navidi
Behzad Navidi on 4 Nov 2019
Oh sorry, I forgot that:
Matrix dimensions must agree.
Error in inpolygon>close_loops (line 233)
if ~any(xnan | ynan)
Error in inpolygon (line 83)
[xv, yv] = close_loops(xv, yv);
Behzad Navidi
Behzad Navidi on 4 Nov 2019
size(x)
ans =
1 2201
size (y)
ans =
1 2201
size(lat)
ans =
360 1
size(lon)
ans =
720 1
size (precip)
ans =
720 360 1512
size(precip_mean)
ans =
720 360

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 4 Nov 2019
inpolygon requires the first two arguments (query locations) to be the same size as each other, and the polygon definition in the third and fourth argument to be vectors the same size as each other. You cannot define the boundaries with 360 lat and 720 long.

  7 Comments

Show 4 older comments
Walter Roberson
Walter Roberson on 5 Nov 2019
That looks to me to be classic reversal of x and y, but I cannot see at the moment where that is happening. lon = x, lat = y
Behzad Navidi
Behzad Navidi on 5 Nov 2019
I get it from here: https://www.chadagreene.com/CDT/CDT_Getting_Started.html
Behzad Navidi
Behzad Navidi on 5 Nov 2019
I was trying some edits this day from morning till now but surrender. I don't know what to do. I tried it on 4 different NetCDF from different climate models. your help is really precious for me. thank you for your time.

Sign in to comment.

More Answers (0)

Sign in to answer this question.

Tags