Matlab 画地图时搞定经纬度注释 函数
1、全代码
function varargout = getxy(varargin)
%% 此函数用来搞定画地图时,经纬度坐标注释
% 输入:
% XArray:经度数组
% YArray:纬度数组
% d: 显示几个数
% 输出:
% x: 经度数组,数字
% x1: 经度数组,字符
% y: 纬度数组,数字
% y1: 纬度数组,字符
% ex: 经纬度极值:经大小,纬大小
% 使用示例:
% [x,x1,y,y1]=getxy(XArray,YArray,d);
% [x,x1,y,y1]=getxy(XArray,YArray);
% [x,x1,y,y1,ex]=getxy(XArray,YArray);
% XArray,YArray 东正西负,北正南负
%-------------------------------------------------------------------
%%%% Authors: Bill O'Hanlon
%%%% EMAIL: ohanlon@qq.com
%%%% DATE: 24-08-2020
%% 输入判断
if nargin==2
XArray=varargin{1};
YArray=varargin{2};
d=5;
elseif nargin==3
XArray=varargin{1};
YArray=varargin{2};
d=varargin{3};
else
disp('输入参数过多或过少');
return;
end
%% 求极值,并划分
Xmax=max(XArray);
Xmin=min(XArray);
Ymax=max(YArray);
Ymin=min(YArray);
extreme=zeros(4,1); %极值数组,存放极大极小值
Xmax=ceil(Xmax);
Ymax=ceil(Ymax);
Xmin=floor(Xmin);
Ymin=floor(Ymin);
extreme(1)=Xmax;
extreme(2)=Ymax;
extreme(3)=Xmin;
extreme(4)=Ymin;
detX=Xmax-Xmin;
detY=Ymax-Ymin;
dX=ceil(detX/d);
dY=ceil(detY/d);
x=Xmin+dX:dX:Xmax;
y=Ymin+dY:dY:Ymax;
%% 将划分好的转化为字符,并加°和S/N/W/E
x1=sprintfc('%g',x);%转成字符串数组
y1=sprintfc('%g',y);%转成字符串数组
n1=size(x1,2);n2=size(y1,2);
for i=1:n1
if x(i)>=0
x1{1,i}=[x1{1,i},'°E'];
else
x1{1,i}=x1{1,i}(2:end);
x1{1,i}=[x1{1,i},'°W'];
end
end
for i=1:n2
if y(i)>=0
y1{1,i}=[y1{1,i},'°N'];
else
y1{1,i}=y1{1,i}(2:end);
y1{1,i}=[y1{1,i},'°S'];
end
end
varargout{1}=x;
varargout{2}=x1;
varargout{3}=y;
varargout{4}=y1;
if nargout==5
varargout{5}=extreme;
end
end
2、调用
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
结果: