关于matlab地图投影系列:

MATLAB地图工具箱学习心得(二)设计可变参数和位置拾取的“放大镜”式投影程序

---

本学期的地图投影课程已经结束了,这篇博客用于记录自己在学习当中的一些心得,也为了给遇到同样问题的人提供一些可参考的思路。当然,限于时间和本人的能力,文章中必然会出现一些错误,希望大家发现之后能够指正,谢谢。

李老师为了加深我们对地图投影的理解,前后布置了11次作业。本学期的作业内容大致可分为以下四类:

  一是概念描述类,通过文字描述加深对定义、方法、意义等概念的理解。
  二是计算推导类,借助 matlab 计算地球上某些参数或推导投影的某些性质。
  三是利用 matlab mapping toolbox 工具绘制投影和分析变形。
  四是利用 matlab 设计地图投影的 GUI 程序 。
在此,将本学期的 11 次作业按照先后顺序列出:
作业一:
  简述平行投影和中心投影的定义,区别与联系
作业二:
  计算任意纬度的子午圈曲率半径,卯酉圈曲率半径和平均曲率半径,并分析其随纬度变化规律
作业三:
  (1)计算从赤道到纬度线 10°、20°······90°的子午线弧长
  (2)计算从纬度线 10°、20°······90°的纬圈半径
  (3)计算从赤道起算的话10°×10°的球面梯形面积(扩展:计算任意球面梯形面积,并分析其分布规律)
  (4)当计算用于中国全图的某一斜方位投影,确定中心点 Q 的 phi=30°N,lambda=105°E,经纬网密度为 5°,计算 alpha 和 Z
  (5)什么是球面坐标系,有何意义?
  (6)地理坐标如何转变到球面极坐标系?
  (7)确定新极点的方法有哪些?
作业四:
  判断投影方程 x=R*phi,y=R*lambda 的投影性质(扩展:在 matlab 中设计程序,用以判断任意方程的投影性质)
作业五:
  推导抛物型、双曲型、椭圆型投影与等角、等面积、等距离投影的关系
作业六:
  (1)推导说明等面积和等距离方位投影为何不存在割投影
  (2)分别绘制正轴、横轴、斜轴的等角、等面积、等距离方位投影,并进行变形分析
作业七:
  (1)绘制武汉到伦敦的大圆航线、恒向线以及混合航线,并进行比较
  (2)分别绘制正轴、横轴、斜轴的等角、等面积、等距离圆柱投影,并进行变形分析
作业八:
  (1)分析中国地图正轴等角割圆锥投影的标准纬线变化的影响
  (2)分别绘制正轴、横轴、斜轴的等角、等面积、等距离割圆锥投影,并进行变形分析
作业九:
  (1)计算比较经度 0°-6°,纬度 0°-4°的球面梯形面积、高斯-克吕格投影面积、UTM 投影面积以及双标准经线等角横圆柱投影面积
  (2)高斯-克吕格投影变形分析及其分带拼接
  (3)UTM 投影变形分析及其分带拼接
作业十:
  (1)自定义绘制伪投影,并进行变形分析
  (2)利用滑块等控件实现 m、n 参数动态变化的扁圆等面积投影程序
作业十一:
  设计“放大镜”式的等距离方位投影 matlab 程序,实现“放大镜”随鼠标选点而移动,调节放大镜范围,缩放比例等功能。

作业中的前面一些部分作为比较常规的题目,例如曲率半径等参数计算,在matlab中直接带入公式即可,当然也可以参考https://www.cnblogs.com/kkyyhh96/p/5405968.html这几篇博客利用工具箱进行计算。这篇文章的作者相当详细地总结了matlab mapping toolbox的使用技巧(不得不说学长真的太厉害了!),所以一些基础的部分,投影绘制、变形分析、各种航线、自定义投影之类的知识这里就不过多讨论了。我们从最后几个作业入手,谈谈利用matlab实现地图投影应用和设计地图投影程序的技巧。

一、  谈谈分带投影和分带拼接

写的时候本来只想谈谈matlab地图投影程序设计,但是转念一想,分带投影的拼接似乎没有其他博客记录过,这也是李老师布置的作业中的一个重点,所以就在这里提一下,提供一种思路。

首先将高斯-克吕格投影按6度带投影,为了便捷起见,只拼接从中央经线为3°的位置开始的前10个带。若需要拼接60个带,或者拼接3°带以此类推。

这里所谓拼接,就是将所有的分带拼到一起形成教材上那种连续的带状的地图。分带思想就是同一个显示区域显示多个带的投影图像,这让我们很自然地想到利用函数subplot。

然而subplot函数呈现的子图之间有着让人无法忍受的间距,如果直接用于拼接地图,既不美观也不符合要求。为此,我们需要利用自定义子图间距的方式展现每幅子图。

function ha = tight_subplot(Nh, Nw, gap, marg_h, marg_w)
%Nh 为行数,Nw为列数
%gap为间距向量(h,w)
%marg_h(up,down)边界
%marg_w(left,right)边界
%h(ii)代表每一个图幅,在主函数中调用

if nargin<3; gap = .02; end
if nargin<4 || isempty(marg_h); marg_h = .05; end
if nargin<5; marg_w = .05; end if numel(gap)==1;
gap = [gap gap];
end
if numel(marg_w)==1;
marg_w = [marg_w marg_w];
end
if numel(marg_h)==1;
marg_h = [marg_h marg_h];
end axh = (1-sum(marg_h)-(Nh-1)*gap(1))/Nh;
axw = (1-sum(marg_w)-(Nw-1)*gap(2))/Nw; py = 1-marg_h(2)-axh; ha = zeros(Nh*Nw,1);
ii = 0;
for ih = 1:Nh
px = marg_w(1); for ix = 1:Nw
ii = ii+1;
ha(ii) = axes('Units','normalized', ...
'Position',[px py axw axh], ...
'XTickLabel','', ...
'YTickLabel','');
px = px+axw+gap(2);
end
py = py-axh-gap(1);
end

UTM投影的拼接过程与高斯投影是一样的,让我们看一下拼接所用到的代码。记得要设置当前绘图区域gca不可见

set(gca,'Visible','off')

否则投影的每一个带都会有一个白色背景图框,相互遮盖看起来非常丑。

%UTM拼接
ha=tight_subplot(1,10,[-0.11 -0.11],[0.01 0.01],[0.35 0.35])
for ii=1:10
set(0,'defaultfigurecolor','w')
axes(ha(ii));
axesm ('unitranmerc','frame','on','origin',[0 183+6*ii 0],'flonlimit',[-3,3]);
%flatlimit控制投影的纬度范围,flonlimit控制经度范围,均为相对值
geoshow(landareas,'FaceColor',[0.5 1 0.5],'EdgeColor',[.6 .6 .6]);
set(gca,'Visible','off')
end

最终绘制出来的投影就相互拼接到一起了,让我们看一下效果。

MATLAB地图工具箱学习心得(一)关于地图分带投影的拼接的更多相关文章

  1. MATLAB地图工具箱学习心得(二)设计可变参数和位置拾取的“放大镜”式投影程序

    最近刚好因为一些原因整理这方面的内容,所以还是把这篇鸽了一年多的博客顺手写出来了∠( ᐛ 」∠)_.因为是当时课程设计的一部分,程序上难免会有一些不足和bug,在这里将设计的思路分享给大家. 本篇博客 ...

  2. MATLAB地图工具箱学习总结(四)自定义投影

    MATLAB地图工具箱学习总结(四)自定义投影 这是本系列的最后一篇文章,准备给大家讲讲自定义投影怎么做.在做这项作业的时候,自己也是花了不少时间,将所有地图投影源文件都看了一遍,简单分析了一下源代码 ...

  3. MATLAB地图工具箱学习总结(三)地图工具箱的基本知识

    MATLAB地图工具箱学习总结(三)地图工具箱的基本知识 今天想要介绍的是一些比较基础的函数.了解了这些函数,地图投影的基本概念才能真正明白.而要想继续研究MATLAB中有关地图投影的函数,尤其是未来 ...

  4. MATLAB地图工具箱学习总结(二)大圆和恒向线

    MATLAB地图工具箱学习总结(二)大圆和恒向线 今天要和大家谈一谈大圆.恒向线航道的画法.还是先从案例开始说起,再分别介绍相关的函数. 1                    作业案例:地图投影作 ...

  5. MATLAB地图工具箱学习总结(一)从地图投影说起

    MATLAB地图工具箱学习总结(一)从地图投影说起 前言 本学期地图投影课上,李连营老师建议我们使用MATLAB完成每周的作业.从大二上学期开始接触MATLAB学习数学运算和地理数据处理的我,自然不会 ...

  6. Matlab神经网络工具箱学习之一

    1.神经网络设计的流程 2.神经网络设计四个层次 3.神经网络模型 4.神经网络结构 5.创建神经网络对象 6.配置神经网络的输入输出 7.理解神经网络工具箱的数据结构 8.神经网络训练 1.神经网络 ...

  7. Matlab神经网络工具箱学习之二

    螃蟹的分类 这个例子的目的是根据螃蟹的品种.背壳的长宽等等属性来判断螃蟹的性别,雄性还是雌性. 训练数据一共有六个属性: species, frontallip, rearwidth, length, ...

  8. MATLAB 地图工具箱 m_map 的安装和入门技巧(转)

    reference: http://blog.sina.com.cn/s/blog_8fc890a20102v6pm.html   需要用一些地图工具,arcgis懒得装了,GMT(generic m ...

  9. Windows phone 8 学习笔记(8) 定位地图导航

    原文:Windows phone 8 学习笔记(8) 定位地图导航 Windows phone 8 已经不使用自家的bing地图,新地图控件可以指定制图模式.视图等.bing地图的定位误差比较大,在模 ...

随机推荐

  1. IO、NIO和AIO的区别

      IO和NIO的区别:其本质就是阻塞和非阻塞的区别. 阻塞概念:应用程序在获取网络数据的时候,如果网络传输数据很慢,那么久一直等着,知道传输完毕为止.非阻塞概念:应用程序直接可以获取已经准备就绪好的 ...

  2. Hadoop的安装配置(一)

    一.Hadoop的安装①Hadoop运行的前提是本机已经安装了JDK,配置JAVA_HOME变量②在Hadoop中启动多种不同类型的进程        例如NN,DN,RM,NM,这些进程需要进行通信 ...

  3. 有哪些不同类型的IOC(依赖注入)方式?

    构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖. Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参stati ...

  4. 使用 JDBC 操作数据库时,如何提升读取数据的性能?如 何提升更新数据的性能?

    要提升读取数据的性能,可以指定通过结果集(ResultSet)对象的 setFetchSize() 方法指定每次抓取的记录数(典型的空间换时间策略):要提升更新数据的性能 可以使用 PreparedS ...

  5. springboot-访问数据库

    在springboot中,默认的JPA实现是Hibernate,JPA是Java Persistence API的简称,中文名Java持久层API <!--数据库--> <depen ...

  6. 【C/C++】C语言基础知识【第二版】

    基础语法 输出语句 #include <stdio.h> int main(void) { printf("-------分界线1------- \n"); print ...

  7. C++ | 虚函数产生条件

    虚函数产生的条件 能否成为虚函数主要有以下两种判断依据,如果以下两种条件均满足,则具有成为虚函数的条件. 1.虚函数机制为动多态提供支持,而虚函数表中存放着虚函数的地址.因此虚函数必须是可以取地址的函 ...

  8. vim的vimrc配置

    windows "# modified by Neoh set helplang=cn "使用中文帮助文档 set encoding=utf-8 "查看utf-8格式的帮 ...

  9. Altium Designer PCB文件的绘制(下:PCB布线和检查)

    在完成电路板的布局工作后,就可以开始布线操作了.在PCB的设计中,布线是完成产品设计的最重要的步骤,其要求最高.技术最细.工作量最大.PCB布线可分为单面布线.双面布线.多层布线.布线的方式有自动布线 ...

  10. java中如果我老是少捕获什么异常,如何处理?

    马克-to-win:程序又一次在出现问题的情况下,优雅结束了.上例中蓝色部分是多重捕获catch.马克-to-win:观察上面三个例子,结论就是即使你已经捕获了很多异常,但是假如你还是少捕获了什么异常 ...