1、全代码
function varargout=drawsheng(varargin)
%% 此函数用于从全国 shp 中扣出某一省份的 shp 并画图
% 输入:
% file shp文件路径
% str 要扣的东西的名字
% 1 or 0 省1国家0,默省
% 输出:
% sheng 搞出来的 shp 结构体
% ex 经纬极值,后续用sheng 画图,有可能会用
% 调用:
% P2file=\'D:\下载\Useful\shp\国家基础地理数据\bou2_4m\bou2_4p.shp\';%省界多边形
% str=\'河南省\';
% [sheng,ex]=drawsheng(P2file,str);
% -------------------
% Sjfile=\'D:\下载\Useful\shp\国家基础地理数据\世界国家\世界国家.shp\';%国界
% str=\'中国\';
% [sheng,ex]=drawsheng(file,str,1);
% -------------------
% drawsheng(file,str);
% sheng=drawsheng(file,str);
% [sheng]=drawsheng(file,str);
% [sheng,ex]=drawsheng(file,str,1 or 0); %省1国家0
%-------------------------------------------------------------------
%%%% Authors: Bill O\'Hanlon
%%%% EMAIL: [email protected]
%%%% DATE: 24-08-2020
%% 输入
disp(\'--------function drawsheng--------\');
mode=1;%mode指示裁剪省或国家,省1国家0
t=0; %t指示是否是第一次找到目标结构
if nargin<2
disp(\'参数不足!\');
return;
elseif nargin==2
file=varargin{1};
str=varargin{2};
elseif nargin==3
file=varargin{1};
str=varargin{2};
mode=varargin{3};
else
disp(\'参数过多!\');
return;
end
P2=shaperead(file);
n=size(P2,1);
%% 得到省的结构体
sheng=struct;
if mode==1
for i=1:n
if strcmp(str,P2(i).NAME)
if t==0
sheng=P2(i);%找到第一个多边形
t=1;
else
a=P2(i);
sheng(end+(1:length(a))) = a;
end
end
end
else if mode==0
for i=1:n
if strcmp(str,P2(i).FCNAME)
if t==0
sheng=P2(i);%找到第一个多边形
t=1;
else
a=P2(i);
sheng(end+(1:length(a))) = a;
end
end
end
else
disp(\'第三个参数错误!\');
return;
end
end
disp(\'shp OK!\');
%% 开始画图
subplot(121);
% 下面搞定横纵坐标注释
XArray=[P2(:).X];%所有多边形的经度
YArray=[P2(:).Y];%%所有多边形的纬度
[x,x1,y,y1]=getxy(XArray,YArray);
disp(\'drawing...\');
mapshow(P2,\'FaceColor\',\'w\');
mapshow(sheng,\'FaceColor\',\'r\');
set(gca,\'XTick\',x,\'XTicklabel\',x1); %设置x,y轴
set(gca,\'YTick\',y,\'YTicklabel\',y1);
box on;
title([str \'的位置\']);
axis equal
subplot(122);
% 下面搞定横纵坐标注释
XArray=[sheng(:).X];%所有多边形的经度
YArray=[sheng(:).Y];%%所有多边形的纬度
[x,x1,y,y1,ex]=getxy(XArray,YArray);
mapshow(sheng,\'FaceColor\',\'r\');
set(gca,\'XTick\',x,\'XTicklabel\',x1); %设置x,y轴
set(gca,\'YTick\',y,\'YTicklabel\',y1);
box on;
title([str \'行政规划图\']);
axis equal
%% 输出
if nargout==0
return;
elseif nargout==1
varargout{1}=sheng;
elseif nargout==2
varargout{1}=sheng;
varargout{2}=ex;
end
disp(\'--------Finished!--------\');
end
依赖:
2、调用
P2file=\'D:\下载\Useful\shp\国家基础地理数据\bou2_4m\bou2_4p.shp\';%省界多边形
str=\'北京市\';
[sheng,ex]=drawsheng(P2file,str);
请发表评论