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

結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM