📄 m_plotbndry.m
字号:
function [bndry_lon,bndry_lat] = m_plotbndry(name,varargin)% M_PLOTBNDRY plots text files of Lat,Lon for political boundaries.% Text files (derived from the DCW) are obtained from % http://www.maproom.psu.edu/cgi-bin/ian/points/index.cgi%% M_PLOTBNDRY(NAME) plots the state or country specified in the% string NAME, which may include a path name. The routine will% then a) search the specified path for a mat-file of that name% b) search the specified path for an ascii *2pts.txt file% of that name, and, if found convert it to a mat-file.% c) failing that, it will open a file dialog box.%% M_PLOTBNDRY(NAME, ...line properties) will use the specified % line properties in drawing the boundary.%% [LON,LAT]=M_PLOTBNDRY(...) returns vectors of the boundary% points.%% Note: If errors occur when a file is first plotted, check that % the entire file was downloaded. It should end with two consecutive% END lines.% Original Author: Michael W. Mann%% Changes: R. Pawlowicz 21/12/98 - changed interface to read from% given directory, allow output, allow various line % properties to be specified.% 6/Nov/00 - eliminate returned stuff if ';' neglected (thx to D Byrne)% 19/Mar/04 - .mat files not being created because of a bug found by James Connor.% Set current projection to geographicCurrentmap=m_coord('set');m_coord('geographic');targetfile = [name,'2pts.mat']; %try to find binary filetargetpath = dir(targetfile);if ( length(targetpath)~=0 ) %then load file. load(targetfile); m_line(bndry_lon,bndry_lat,'tag','m_plotbndry',varargin{:}); else %Can't find binary file, load and process text file. % Create .mat file from data read. targetfile = [name,'2pts.txt']; targetpath = dir(targetfile); if ( length(targetpath)==0 ) %then [filename,pathname]=uigetfile('*2pts.txt',['Select ',targetfile,' file']); if ( filename == 0 ), error(['Could not find ',targetfile]), end targetpath = [pathname,filename]; end %if [fid,message] = fopen(targetfile,'r'); if ( fid < 0 ) %then fclose(fid); error(message); end %if namein = fgetl(fid); if ( ~findstr(lower(name),lower(namein)) ) %then fclose(fid); error(['File contains wrong state! ','Desired: ',name,' Found: ',namein]); end %if done = 0; polynum = 0; numpts = []; while ( ~done ) %read in polygon index line = fgetl(fid); field = sscanf(line,'%3c'); if ( strcmp(upper(field),'END') ) %then found EOF done = 1; else %start reading in polygon polynum = polynum + 1; polynumin = sscanf(line,'%u'); if ( polynum ~= polynumin ) %then fclose(fid); error(['Didn''t find polynum ',num2str(polynum),... ', found ',num2str(polynumin),' .']); end %if line = fgetl(fid); %skip polygon centroid line = fgetl(fid); %first point ptcount = 0; while ( ~strcmp(upper(line(1:3)),'END') ) ptcount = ptcount + 1; line = fgetl(fid); end %while numpts = [numpts,ptcount]; end %if end %while Npolygon = length(numpts); fclose(fid); %Close file. % Vectors for composite outline bndry_lat = zeros(1,sum(numpts)+Npolygon); bndry_lon = zeros(1,sum(numpts)+Npolygon); i1 = 0; %index to last filled entry in vectors fid = fopen(targetfile,'r'); %reopen file line = fgetl(fid); %ignore namefield for i = 1:Npolygon line = fgetl(fid); %ignore polygon index line = fgetl(fid); %ignore centroid lat,lon [poly,count] = fscanf(fid,'%g',[2,inf]); %read data line = fgetl(fid); %ignore END % Save data for reuse as .mat file i0 = i1 + 1; i1 = i0 + numpts(i); bndry_lon(i0:i1) = [poly(1,:),NaN]; %add NaN to lift pen bndry_lat(i0:i1) = [poly(2,:),NaN]; %add NaN to lift pen end %for fclose(fid); m_line(bndry_lon,bndry_lat,'tag','m_plotbndry',varargin{:}); nchar = length(targetfile); % Bug fix thanks to James Connor matfile = [targetfile(1:(nchar-4)),'.mat']; save(matfile,'bndry_lat','bndry_lon'); end %ifm_coord(Currentmap.name);if nargout==0, clear bndry_lon bndry_latend;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -