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

结果:

原文地址:https://www.cnblogs.com/Gou-Hailong/p/13559123.html