当前位置: 首页 > news >正文

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

相关文章:

  • Matlab 从全国 shp 中扣出某一省份的shp并画图 函数
  • Matlab 根据 shp 裁剪矩阵/图像 函数
  • 误差理论与平差基础学习笔记(Ⅱ)
  • Linux bash 编程笔记(基础篇)
  • 基于C语言 的实现数学上常用的功能
  • C++ 编程笔记【1】(基础篇)
  • 对各种单位的汇总
  • Linux Vim 编辑器的使用笔记
  • GNSS 常用缩略语汇总
  • Origin 使用笔记
  • 对 VIIRS/NPP 夜光数据的解读
  • matlab 对数组/矩阵 的一些常用操作+如何判断两个含有nan的矩阵是否相等?
  • Matlab 计算年积日
  • Matlab 填补缺失数据
  • Linux 中 awk 与 sed 操作
  • Android组件 - 收藏集 - 掘金
  • Angular4 模板式表单用法以及验证
  • CSS 专业技巧
  • Electron入门介绍
  • EOS是什么
  • fetch 从初识到应用
  • Hibernate最全面试题
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Mac转Windows的拯救指南
  • mysql 5.6 原生Online DDL解析
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • PHP的Ev教程三(Periodic watcher)
  • python docx文档转html页面
  • supervisor 永不挂掉的进程 安装以及使用
  • Vue 动态创建 component
  • vue:响应原理
  • 汉诺塔算法
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 学习笔记:对象,原型和继承(1)
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 进程与线程(三)——进程/线程间通信
  • #FPGA(基础知识)
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #QT(一种朴素的计算器实现方法)
  • #Spring-boot高级
  • (09)Hive——CTE 公共表达式
  • (1)Nginx简介和安装教程
  • (33)STM32——485实验笔记
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (学习日记)2024.01.19
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)