0001 function [x,y,z]=grdcut(grdfile, region)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 if ( nargin ~= 2 )
0020 help grdcut;
0021 return;
0022 end
0023
0024
0025
0026 if ( region(1) >= region(2) )
0027 fprintf ( 2, 'West longitude must be numerically smaller than east longitude.\n' );
0028 help grdcut;
0029 return;
0030 end
0031 if ( region(3) >= region(4) )
0032 fprintf ( 2, 'South longitude must be numerically smaller than north longitude.\n' );
0033 help grdcut;
0034 return;
0035 end
0036
0037 west_longitude = region(1);
0038 east_longitude = region(2);
0039 south_latitude = region(3);
0040 north_latitude = region(4);
0041
0042 cdfid=mexcdf('open',grdfile,'nowrite');
0043
0044 oldopts=mexcdf('setopts',0);
0045
0046 x_range=mexcdf('varget',cdfid,'x_range',0,2);
0047 y_range=mexcdf('varget',cdfid,'y_range',0,2);
0048 spacing=mexcdf('varget',cdfid,'spacing',0,2);
0049
0050 dims=mexcdf('varget',cdfid,'dimension',0,2);
0051
0052 nx=dims(1);
0053 ny=dims(2);
0054
0055 x=x_range(1)+[0:(nx-1)]*spacing(1);
0056 y=y_range(1)+[0:(ny-1)]*spacing(2);
0057
0058
0059
0060
0061
0062 xinds = find ( (x>=west_longitude) & (x<=east_longitude) );
0063 x = x(xinds);
0064 yinds = find ( (y>=south_latitude) & (y<=north_latitude) );
0065 y = y(yinds);
0066
0067 z = zeros(length(yinds),length(xinds));
0068 n = length(yinds);
0069 for i = 1:n
0070 z_row = mexcdf ( 'varget', cdfid, 'z', (ny - (yinds(i)-1))*nx, nx );
0071 z(i,:) = z_row(xinds)';
0072 end
0073
0074
0075
0076 mexcdf('close',cdfid);
0077
0078