| function outStr=formatStr(inStr,nLen,opt) % pad the input string to specified length with blank space % usage: % outStr=formatStr(inStr,expected-Length [,align-option]) % if align-option == 0 'right-align' [ by default ] % == 1 'center-align' % == 2 'left-align' % history: % Feb 24 2012: first coded for myShowNc % http://scriptdemo.blogspot.com if nargin==1 nLen=0; elseif nargin==2 opt=0; elseif nargin~=3 help formatStr; return end oriLen=length(inStr); if (oriLen>=nLen) outStr=inStr; else switch (opt) case {0} nSpace=nLen-oriLen; outStr=[repmat(' ',1,nSpace),inStr]; case {1} nSpace=ceil(0.5*(nLen-oriLen)); outStr=[repmat(' ',1,nSpace),inStr]; nSpace=nLen-oriLen-nSpace; if (nSpace>0) outStr=[outStr,repmat(' ',1,nSpace)]; end case {2} nSpace=nLen-oriLen; outStr=[inStr,repmat(' ',1,nSpace)]; otherwise disp('Unknown option'); return end end |
Saturday, February 25, 2012
[Matlab] format a string to a specific length
[Matlab] show the variable information from a netcdf file
| function myShowNc(ncFileName) % show information of a given netcdf file, similar to ncdump % using matlab native netcdf functions % usage: % myShowNc(netcdf-filename) % http://scriptdemo.blogspot.com if nargin==0 help myShowNc return end if ~exist(ncFileName,'file') error([ncFileName,' is not found!']); end ncfid=netcdf.open(ncFileName,'NC_NOWRITE'); % check dimensions [ndims,nvars,ngatts,unlimdimID] = netcdf.inq(ncfid); myncinfo.unLimID=unlimdimID; myncinfo.dimname=cell(ndims,1); myncinfo.dimlength=zeros(ndims,1); myncinfo.varname=cell(nvars,1); myncinfo.vardims=cell(nvars,1); myncinfo.varscale=ones(nvars,1); myncinfo.varoffset=zeros(nvars,1); disp(['netcdf file: ',ncFileName]) disp(' dimension:') for Ndim=1:ndims [myncinfo.dimname{Ndim},myncinfo.dimlength(Ndim)]=netcdf.inqDim(ncfid,Ndim-1); disp([' ',fixStrLen(myncinfo.dimname{Ndim},10),': ',num2str(myncinfo.dimlength(Ndim))]) end disp(' variables:') disp([' ',fixStrLen('var-name |',12,0),fixStrLen('var-dims',30,0),fixStrLen('scale',10,1),fixStrLen('offset',10,1)]) % check variables for nv=1:nvars [myncinfo.varname{nv},myncinfo.vardims{nv}, ... myncinfo.varscale(nv),myncinfo.varoffset(nv)]=getVarInfo(ncfid,nv-1,myncinfo); disp([' ', fixStrLen([myncinfo.varname{nv},' |'],12) , fixStrLen(myncinfo.vardims{nv},30), ... fixStrLen(num2str(myncinfo.varscale(nv)),10,1),fixStrLen(num2str(myncinfo.varoffset(nv)),10,1)]) end netcdf.close(ncfid); %-------------------------------------------------------------------------------------- function outStr=fixStrLen(inStr,nLen,opt) % renamed to formatStr in another post. % if opt == 0 'right-align' [default case] % opt == 1 'center-align' % opt == 2 'left-align' if nargin==1 nLen=0; elseif nargin==2 opt=0; elseif nargin~=3 help fixStrLen; return end oriLen=length(inStr); if (oriLen>=nLen) outStr=inStr; else switch (opt) case {0} nSpace=nLen-oriLen; outStr=[repmat(' ',1,nSpace),inStr]; case {1} nSpace=ceil(0.5*(nLen-oriLen)); outStr=[repmat(' ',1,nSpace),inStr]; nSpace=nLen-oriLen-nSpace; if (nSpace>0) outStr=[outStr,repmat(' ',1,nSpace)]; end case {2} nSpace=nLen-oriLen; outStr=[inStr,repmat(' ',1,nSpace)]; otherwise disp('Unknown option'); return end end function [varname,dimsStr,myScale,myOffSet]=getVarInfo(ncfid,varID,myncinfo) [varname,vartype,vardimids,numAtts]=netcdf.inqVar(ncfid,varID); myScale=1; myOffSet=0; for numA=1:numAtts tmpattname=netcdf.inqAttName(ncfid,varID,numA-1); switch lower(tmpattname) case {'scale_factor','scalefactor'} myScale=netcdf.getAtt(ncfid,varID,tmpattname); case {'add_offset','off_set','offset','offset_value'} myOffSet=netcdf.getAtt(ncfid,varID,tmpattname); otherwise % do nothing end end % get dimStr if ~isempty(vardimids) dimsStr=myncinfo.dimname{vardimids(1)+1}; for nd=2:length(vardimids) dimsStr=[myncinfo.dimname{vardimids(nd)+1},' x ',dimsStr]; end else dimsStr='unlimited'; end |
Labels:
dimension,
header,
Matlab,
nc,
ncdump,
netcdf,
offset,
scale factor,
variable name
Sunday, February 5, 2012
[Matlab] Convert a 2D mesh to a single kml file
| function mesh2kml(kmlfile,long,lat,iskip,jskip) % convert a 2D mesh grid into a single plain kml file % will create the horizontal and vertical mesh-line seperately % usage: % mesh2kml(kml-filename,longitude,latitude [iskip, jskip]) % iskip: reduce the points when to generate i-direction-mesh-line % jskip: reduce the points when to generate j-direction-mesh-line % e.g., % lon=-90:2:20; % lat=37:65; % [lon,lat]=meshgrid(lon,lat); % mesh2kml('mesh2kml_test',lon,lat,1,1); % will produce a kml file named mesh2kml_test in current folder % % http://scriptdemo.blogspot.com if nargin<3 help mesh2kml return end if nargin==3 iskip=5; jskip=5; elseif nargin==4 jskip=5; end fid=fopen([kmlfile,'.kml'],'wt'); writekmlHeader(fid,kmlfile); if length(long)~=numel(long) % mesh [NY,NX]=size(long); %i-index longUD=flipud(long); latUD=flipud(lat); longI=long; latI=lat; longI(:,2:2:end)=longUD(:,2:2:end); latI(:,2:2:end)=latUD(:,2:2:end); clear longUD latUD jindex=sort(unique([1 jskip:jskip:NY NY])); longI=reshape(longI(jindex,:),1,[]); latI=reshape(latI(jindex,:),1,[]); fprintf(fid,'%s \n','<Placemark>'); fprintf(fid,'%s \n',['<name>',kmlfile,'-I</name>']); fprintf(fid,'%s \n','<LineString>'); fprintf(fid,'%s \n','<tessellate>1</tessellate>'); % fprintf(fid,'%s \n','<coordinates>'); fprintf(fid,'%0.6f,%0.6f,0.0 \n', [longI;latI]); fprintf(fid,'%s \n','</coordinates>'); fprintf(fid,'%s \n','</LineString>'); fprintf(fid,'%s \n','</Placemark>'); %j-index longLR=fliplr(long); latLR=fliplr(lat); longJ=long; latJ=lat; longJ(2:2:end,:)=longLR(2:2:end,:); latJ(2:2:end,:)=latLR(2:2:end,:); clear longLR latLR longJ=longJ'; latJ=latJ'; iindex=sort(unique([1 iskip:iskip:NX NX])); longJ=reshape(longJ(iindex,:),1,[]); latJ=reshape(latJ(iindex,:),1,[]); fprintf(fid,'%s \n','<Placemark>'); fprintf(fid,'%s \n',['<name>',kmlfile,'-J</name>']); fprintf(fid,'%s \n','<LineString>'); fprintf(fid,'%s \n','<tessellate>1</tessellate>'); % fprintf(fid,'%s \n','<coordinates>'); fprintf(fid,'%0.6f,%0.6f,0.0 \n', [longJ;latJ]); fprintf(fid,'%s \n','</coordinates>'); fprintf(fid,'%s \n','</LineString>'); fprintf(fid,'%s \n','</Placemark>'); else long=reshape(long,1,[]); lat=reshape(lat,1,[]); fprintf(fid,'%s \n','<Placemark>'); fprintf(fid,'%s \n',['<name>',kmlfile,'</name>']); fprintf(fid,'%s \n','<LineString>'); fprintf(fid,'%s \n','<tessellate>1</tessellate>'); % fprintf(fid,'%s \n','<coordinates>'); fprintf(fid,'%0.6f,%0.6f,0.0 \n', [long;lat]); fprintf(fid,'%s \n','</coordinates>'); fprintf(fid,'%s \n','</LineString>'); fprintf(fid,'%s \n','</Placemark>'); end writekmlEnd(fid); fclose(fid); function writekmlHeader(fid,kmlName) fprintf(fid,'%s \n','<?xml version="1.0" encoding="UTF-8"?>'); fprintf(fid,'%s','<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" '); fprintf(fid,'%s \n','xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">'); fprintf(fid,'%s \n','<Document>'); fprintf(fid,'%s \n',['<name>',kmlName,'.kml</name>']); function writekmlEnd(fid) fprintf(fid,'%s \n','</Document>'); fprintf(fid,'%s \n','</kml>'); |
Subscribe to:
Posts (Atom)
