MATLAB地图工具箱学习总结(三)地图工具箱的基本知识
MATLAB地图工具箱学习总结(三)地图工具箱的基本知识
今天想要介绍的是一些比较基础的函数。了解了这些函数,地图投影的基本概念才能真正明白。而要想继续研究MATLAB中有关地图投影的函数,尤其是未来我要提到的投影文件源代码,知晓这些函数的功能必不可少。本篇文章将会罗列三个案例,并在后面一一进行讲解。
1 作业案例:地图投影作业1
这次的案例从作业1开始。作业1是要求计算出地球椭球体的一些基本参数,包括子午圈曲率半径、卯酉圈曲率半径、平均曲率半径和纬圈半径等。当初我交上的作业完全是数学公式的堆砌,不过其实MATLAB中有相关的函数。
在这里用到了三个函数,包括referenceEllipsoid, rcurve和rsphere,其中angle是输入的角度。利用这两个函数轻松就将以上四种椭球体的参数获得了。
让我们来分析一下代码。
首先需要介绍的是referenceEllipsoid(参考椭球体)函数。和这个函数相似的还有referenceSphere(参考球体)和oblateSpheroid函数,都是关于参考系的设置。函数括号中的参数也很明显,分别是设置为WGS84坐标系,单位是km.在进行地图投影的计算前,设置好所需的参考椭球是必须的。MATLAB中包含了多种参考椭球,可以直接使用,只需要查看函数帮助就可以了。
接下来要讲得是rcurve函数。这个函数可以计算各种曲率半径。其基本用法为:rcurve(propertyName,ellipsoid,lat).在上面案例中提到的三个参数分别是:transverse,用来计算卯酉圈曲率半径;meridian,用来计算子午圈曲率半径;parallel,用来计算纬线圈半径。只要接下来输入所用参考椭球和纬度,即可计算出相应的参数。
最后要讲一下rsphere函数。这个函数用来计算地球球体的半径。它有多种计算方式,其中triaxial参数可以计算出平均曲率半径。公式为sqrt(a*b),即几何平均值。此外还包括authalic、euler等参数,具体形式请查看帮助。
2 作业案例2:地图投影作业2
作业2的问题是,一个人从哪里出发,先向东走,再向北走(过了北极后方向仍然不变),最终回到原点,且向东向北走的距离相同。其核心问题是求经线和纬线长度。还记得当时把一整长串积分公式好不容易录入MATLAB,MATLAB向我报告积分太多算不了。后来改用了其泰勒展开式的一部分带入进行计算,好在成功了。不过在本文里我并没有更好的解法。但我想借此机会介绍几个函数。分别是departure,meridianarc,meridianfwd,distance,reckon。
departure函数的作用在于计算纬线的长度。其基本用法是departure(lon1,lon2,lat,ellipsoid),首先输入两条经线,再输入纬度,带入椭球体参数即可计算出相应纬线的长度。
meridianarc、meridianfwd函数刚好与departure函数相反,是用来求经线长度的。meridianarc的基本用法是s=meridianarc(phi1,phi2,ellipsoid),即只要输入纬度即可算出它们间相隔的距离s。meridianfwd则和meridianarc互为正反算。其基本用法是phi2=meridianfwd(phi1,s,ellipsoid),即输入一点经度,再输入相隔的距离和椭球体,即可算出相对应的经度。需要注意到的是,这两个函数都需要输入弧度制的经度,所以一定要先转换好再输入。
以上三个函数的效果如下:
distance和reckon两个函数都和距离有关。distance的基本用法是[arclen,az]=distance(lat1,lon1,lat2,lon2),很明显,只要输入两个点的经纬度,即可获得两点间的距离。这个距离默认为大圆距离,当然也可以设置rh,求恒向线的距离。获得的arclen即为距离,此外还可以获得az,即两点之间的方位角。reckon的基本用法是[latout,lonout]=reckon(lat,lon,arclen,az),这和distance刚好相反。输入一个点的经纬度,距离和方位角,即可求出距离这个点相应距离和相应方位角的点。
3 作业案例3:地图投影作业7
在作业7中,老师要求我们每个人根据标准纬线,使用圆锥等角投影显示各自家乡的省份。我想在这里提一提MATLAB中地图投影最基本的组织原理。
在工具箱中,有一个mstruct的句柄,这便是地图投影组织结构。建立axesm后,使用命令:gcm就可以获得当前的投影信息。我们以墨卡托投影为例来看一下里面包含了哪些结构。
当然不仅仅这些,下面还有很多属性没有列出。这里面就显示了axesm的各种属性。而这些属性我在本系列的第一篇中就提到了,虽然当时的我还没有理解其中的原理。
对于属性的设置,除了用axesm可以进行设置外,还可以分别使用getm和setm对属性进行读取和设置。getm就是读取投影属性,使用方法为:getm(gcm,propertyName),即输入你想要了解的属性即可。而setm则需要在propertyName后加具体的值,那么地图投影就会跟着改变。
其中有一个mapparallels是解决这道题的关键,这个属性正是指的地图投影的标准纬线。nparallels可以设定标准纬线的个数,当nparallels为1时,可以设定一个mapparallels,说明是切投影,两个值的时候则是割投影。要注意的是,并不是所有的投影类型都支持设置该属性,因此在使用前要确认这个投影是否能设置标准纬线。
不知不觉,当我写到这个时候,地图投影的课程已经结课了。最后的作业是自定义投影,也是花了我不少时间,不过还是做出来了。那么,下一篇也就将是本系列的最后一篇了,希望能够给使用MATLAB地图工具箱的人带来更多的帮助。
天靖居士
2016.5.16
8.17更新说明:具体代码请参考:https://git.oschina.net/kkyyhh96/MapProjectInMatlab
MATLAB地图工具箱学习总结(三)地图工具箱的基本知识的更多相关文章
- MATLAB地图工具箱学习总结(四)自定义投影
MATLAB地图工具箱学习总结(四)自定义投影 这是本系列的最后一篇文章,准备给大家讲讲自定义投影怎么做.在做这项作业的时候,自己也是花了不少时间,将所有地图投影源文件都看了一遍,简单分析了一下源代码 ...
- MATLAB地图工具箱学习总结(二)大圆和恒向线
MATLAB地图工具箱学习总结(二)大圆和恒向线 今天要和大家谈一谈大圆.恒向线航道的画法.还是先从案例开始说起,再分别介绍相关的函数. 1 作业案例:地图投影作 ...
- MATLAB地图工具箱学习总结(一)从地图投影说起
MATLAB地图工具箱学习总结(一)从地图投影说起 前言 本学期地图投影课上,李连营老师建议我们使用MATLAB完成每周的作业.从大二上学期开始接触MATLAB学习数学运算和地理数据处理的我,自然不会 ...
- MATLAB地图工具箱学习心得(二)设计可变参数和位置拾取的“放大镜”式投影程序
最近刚好因为一些原因整理这方面的内容,所以还是把这篇鸽了一年多的博客顺手写出来了∠( ᐛ 」∠)_.因为是当时课程设计的一部分,程序上难免会有一些不足和bug,在这里将设计的思路分享给大家. 本篇博客 ...
- MATLAB地图工具箱学习心得(一)关于地图分带投影的拼接
关于matlab地图投影系列: MATLAB地图工具箱学习心得(二)设计可变参数和位置拾取的"放大镜"式投影程序 --- 本学期的地图投影课程已经结束了,这篇博客用于记录自己在学习 ...
- cocos2dx进阶学习之瓦片地图编辑器
之前学习了瓦片地图类,现在我们来学习下瓦片地图制作工具 这个是开源的工具,可以从网上下载,下面我们演示下怎么做地图 步骤1 将需要用到的图片放到一个目录下,比如我机器上就是d:\tiled,这些图片是 ...
- PDNN: 深度学习的一个Python工具箱
PDNN: 深度学习的一个Python工具箱 PDNN是一个在Theano环境下开发出来的一个Python深度学习工具箱.它由苗亚杰(Yajie Miao)原创.现在仍然在不断努力去丰富它的功能和扩展 ...
- 【百度地图API】如何利用地图API制作汽车沿道路行驶的动画?——如何获得道路层数据
原文:[百度地图API]如何利用地图API制作汽车沿道路行驶的动画?--如何获得道路层数据 有几个做汽车导航的朋友问我说,他们想在地图上制作一辆车沿着道路行驶的动画.可是,百度地图的道路数据并没有公开 ...
- html5游戏开发--"动静"结合(二)-用地图块拼成大地图 & 初探lufylegend
一.前言 本次教程将向大家讲解如何用HTML5将小地图块拼成大地图,以及如何用现有的高级html5游戏开发库件lufylegend.js开发游戏. 首先让我们来了解了解如何用html5实现动画,毕竟“ ...
随机推荐
- awk的数组使用经历
背景:之前是一个数学妞,所以操作系统类的就由windows系列霸占了,甚至“cmd"是什么东西,环境变量是什么概念......其实说那么多就是想表明一点:你现在很有可能比我知道得多得多呢! ...
- ios上的 button和input-button为什么不水平居中的
在iphone6plus上的button中文本上不居中,如下图: 造成的原因,是button的padding不为零,造成的,因而设置padding: 0:就可以解决
- Python开发【十二章】:ORM sqlalchemy
一.对象映射关系(ORM) orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却 ...
- input只能输入数字并限制长度
<style> /*在chrome下移除input[number]的上下箭头*/ input::-webkit-outer-spin-button,input::-webkit-inner ...
- mysql 实战 or、in与union all 的查询效率
OR.in和union all 查询效率到底哪个快. 网上很多的声音都是说union all 快于 or.in,因为or.in会导致全表扫描,他们给出了很多的实例. 但真的union all真的快于o ...
- Java被忽略的基本知识(四)
Java IO(不是一般的重要) 54.IO中的流:字节流(InputStream.OutputStream).字符流(Reader.Writer).转换流(InputStreamReader.Out ...
- 基于Centos7+Nginx+Tomcat8的负载均衡服务器的搭建
由于工作的需求,在使用中,需要搭建负载均衡,研究了Apache+Tomat负载均衡的方案,并且通过检索相关的文章,进行了比较发现,Apache负载负载均衡在使用的效率上,远远不如Nginx的效率高,因 ...
- [tmp] hu60@所有人插件
<div style="padding:3px;text-align:right;"> <a style="background:green;color ...
- node 异步编程
node 异步编程 我了解到的node异步编程可分成: 1.回调函数 2.pub/sub模式(发布/订阅模式) 3.promise 4.generator 5.async await 一.直接回调函数 ...
- 通过cygwin安装openSSH
openSSH的安装是学习hadoop必不可少的一步,如果ssh装不好,hadoop的安装会进行不下去.本人初学hadoop时发现以前安装ssh走了一些弯路,现在又有了一些认识,所以重写了这篇日志,供 ...