⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m_track.m

📁 A mapping package for Matlab:这是一款功能十分强大的地理绘图工具包
💻 M
字号:
function m_track(lon,lat,varargin);% M_TRACK Draw a trackline on a map%%	M_TRACK draws navigation tracklines on a map. The trackline%	itself is optionally annontated with tick marks, time labels, and%	date labels.%%	M_TRACK (lon,lat) draws just a plain line. lon&lat are in decimal%	degrees, +N, -S, +E, -W.%%	M_TRACK (lon,lat,navtimes) draws a line, with tick marks every%	hour, time labels every four hours, and date labels every twelve%	hours. navtimes is in MatLab "serial date numbers," representing the%	number of days since January 1, 0000. By convention, ticks and %	time labels are drawn on the starboard side, dates on the port.%%	M_TRACK (lon,lat,navtime, 'string', property/value pairs) can be%	used to change tick marks, time and date label properties. Allowable%	combinations are:%%	'ticks'		tickmark interval in minutes, default=60%	'times'		time label interval in minutes, default=240 (4hrs)%	'dates'		date label interval in minutes, default=720 (12hrs)%	'timef[ormat]'	format of time string, see datestr(), default=15%	'datef[ormat]'	format of date string, see datestr(), default=2%	'color'		color of track/labels, default is black%	'linew[idth]'	width of trackline, default is current%	'lines[tyle]'	style of line, default is solid line%	'fonts[ize]'	size of font, default is current%	'fontn[ame]'	name of font, default is current%       'clip'		'on' or 'off' (clipping to map)%	'orien[t]'	label orientation, 'true' or 'upright', default='true'%%	time labels need to be whole multiples of tick intervals. date%	labels need to be whole multiples of time labels. using '0' for%	any value will tick/label all points. using a negative number%	will suppress tick/label.% m_track.m, Peter Lemmond, peter@whoi.edu 13/Nov/98%% RP - 14/Nov/98 - corrected angle for first label, added tags, added CLIP%                  options, made labels always face upwards% PL - 04/Dec/98 - added orientation option, to allow labels to either% 		   always follow heading ('true') or to always face upwards%		   ('upright'). changed quite a bit internally to make%		   faster and fix some bugs%    - 23/Aug/01 - if numinputs = 2 an extra initialization statement%                  was needed (thanks to Dan Lowen for this fix).global MAP_PROJECTION MAP_VAR_LIST% Have to have initialized a map firstif isempty (MAP_PROJECTION),   disp ('No Map Projection initialized - call M_PROJ first!');   return;end;numinputs = nargin;			% save thisTICKS = 60;				% default of 60 minute ticksTIMES = 240;				% default of 4 hour times, 240 minsDATES = 720;				% default of 12 hour dates, 720 minutesTIMEF = 15;				% default of HH:MMDATEF = 2;				% default of mm/dd/yyCOLOR = 'k';				% default is blackLINES = '-';				% default is solid lineLINEW = get(gca,'linewidth');		% default is current widthFONTS = get(gca,'fontsize');		% default is current fontsizeFONTN = get(gca,'fontname');		% default is current fontnameCLIP  = 'on';				% default is to clipORIEN = 'true';				% default is always follow headingMINSPERDAY = 1440;% need at least lon & latif numinputs < 2   disp ('Need at least lon & lat vectors!');   return;else   l=length(lat);   m=length(lon);   if (l ~= m)      disp ('long and lat vectors must be the same length');      return;   end;end;% check for time input. has to be the first vararginif numinputs > 2   if ischar(varargin{1})      navTimes = [];      k = 1;   else      navTimes=varargin{1};      k = 2;   endelse % numinputs = 2  % Extra case courtesy Dan Lowen.        navTimes = [];        k = 1;end% look at any remaining optionswhile k<length(varargin),   optn=[lower(varargin{k}) '   '];   switch optn(1:5),      case 'ticks',	 TICKS=varargin{k+1};      case 'times',	 TIMES=varargin{k+1};      case 'dates',	 DATES=varargin{k+1};      case 'timef',	 TIMEF=varargin{k+1};      case 'datef',	 DATEF=varargin{k+1};      case 'color',	 COLOR=varargin{k+1};      case 'linew',	 LINEW=varargin{k+1};      case 'lines',	 LINES=varargin{k+1};      case 'fontn',	 FONTN=varargin{k+1};      case 'fonts',	 FONTS=varargin{k+1};      case 'clip ',	 CLIP=varargin{k+1};      case 'orien',	 ORIEN=varargin{k+1};   end;   k=k+2;end;% always want the line drawn at full resolution.[x,y] = m_ll2xy(lon,lat,'clip',CLIP);line(x,y,'clip',CLIP,'lines',LINES,'linew',LINEW,'color',COLOR, ...    'tag', 'm_track_line');n=length(navTimes);if ~n   return				% no navtimes, all doneelseif (l ~= n)   disp('long, lat, and navtimes vectors must be same length');   return;end;if TICKS < 0				% w/o ticks, nothing more   return;end% which points to tick. will interpolate to exact, whole minute values,% unless all requestedif (TICKS == 0)   ty = y;   tx = x;   ttim = navTimes;else   tmp = TICKS/MINSPERDAY;   i = tmp*ceil(min(navTimes)/tmp);   j = tmp*floor(max(navTimes)/tmp);   ttim = i:tmp:j;   ty = interp1(navTimes,y,ttim,'linear');   tx = interp1(navTimes,x,ttim,'linear');endnt = length(ttim);% where do the time labels go?if TIMES < 0				   ltim=zeros(1,nt);			% no time lableselseif TIMES == 0   ltim=ones(1,nt);			% time label every tickelse   tmp=TIMES/MINSPERDAY;   ltim=~(mod(ttim,tmp));end% and date labels?if DATES < 0   dtim=zeros(1,nt);			% no date labelselseif DATES == 0   dtim=ltim;				% date label every time labelelse   tmp=DATES/MINSPERDAY;   dtim=~(mod(ttim,tmp));end% since the 'rotation' attribute must be a scalar, have to loop thru% and plot everything one at a timefor i=1:nt   % angle for plotting. ticks are always perpendicular. will use the   % point before and after this one to compute the angle         dy  = ty(min(nt,i+1)) - ty(max(1,i-1));   dx  = tx(min(nt,i+1)) - tx(max(1,i-1));   angle = atan2(dy,dx)*180/pi - 90;      % go ahead and tick here      text(tx(i),ty(i),'-', 'vertical', 'middle', 'horizontal', 'left', ...       'color', COLOR, 'fontsize', FONTS, 'fontname', FONTN, ...       'clip',CLIP,'rotation', angle,'tag','m_track_tick');   % maybe time label here?      if ltim(i)            % make label at desired orientation            if ((abs(angle) < 90) | ~strcmp(ORIEN,'upright'))	 leadstr = ' ';	 tailstr = '';	 ang_off = 0;	 tmlab   = 'left';	 datlab  = 'right';      else	 leadstr ='';	 tailstr =' ';	 ang_off =180;	 tmlab   ='right';	 datlab  ='left';      end            % go ahead and plot the time            text(tx(i),ty(i), ...	  [leadstr leadstr datestr(ttim(i),TIMEF) tailstr tailstr], ...	  'color', COLOR, 'fontsize', FONTS, 'fontname', FONTN, ...	  'vertical', 'middle', 'horizontal', tmlab, 'rotation', ...	  angle+ang_off, 'clip', CLIP, 'tag','m_track_time');      % maybe date label here?            if dtim(i)	 text(tx(i), ty(i), ...	     [tailstr datestr(ttim(i),DATEF) leadstr], ...	     'color', COLOR, 'fontsize', FONTS, 'fontname', FONTN, ...	     'vertical', 'middle', 'horizontal', datlab, 'rotation', ...	     angle-ang_off, 'clip', CLIP, 'tag','m_track_date');            end				% end of date labelling   end					% end of time labellingend					% end of ticking

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -