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

结果:
在这里插入图片描述

CSDN 脑子秀逗了,说图片违规,dd,
博客园链接:https://www.cnblogs.com/Gou-Hailong/p/13559123.html

V2.0
2020.11.1,今天调用这个函数的时候,发现一个问题。就是,x,y这俩是数据,x1,y1这俩是与其对应的字符串;但是,set(gca,'XTick',x,'XTicklabel',x1);这个代码里面的x是矩阵对应的列数,这个列数并不是x保存的数据,所以更新了一下这个函数。我将此版本称为V1.0,现贴在下面(第一个版本对应一系列函数,不能改,否则那些函数就塌了):

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:      01-11-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
xstep=XArray(2)-XArray(1);  %得到俩数组的步长
ystep=YArray(2)-YArray(1);
x=(x-Xmin)./xstep;          %得到x1,y1对应的整数。
y=abs((y-Ymin))./ystep;
varargout{1}=x;
varargout{2}=x1;
varargout{3}=y;
varargout{4}=y1;
if nargout==5
    varargout{5}=extreme;
end

end
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪猪头拯救地球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值