墨卡托投影是一种“等角正切圆柱投影”,荷兰地图学家墨卡托(Mercator)在1569年拟定:假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一幅标准纬线为零度(即赤道)的“墨卡托投影”绘制出的世界地图。
  墨卡托投影在今天对于航海事业起着极为重要的作用,目前世界各国绘制海洋地图时仍广泛使用墨卡托投影,国际水路局(IHB)规定:“除特殊情况外,各国都要用墨卡托投影绘制海图”。国际水路局发行的《大洋水深总图》是把全世界分成24幅编辑的,在南北纬72度之间就是使用墨卡托投影绘成的。

墨卡托投影性质

  由于墨卡托投影的经纬线离开赤道逐渐以相同倍数伸长,所以又称为渐长投影,由于它是具有等角性质的圆筒投影,所以也叫做等角圆筒投影。注意:这种投影不适合高纬地区,通常纬度60度以上区域,不用此投影。
  墨卡托投影有一个特别的特性:所有罗盘等角线,或称斜航线(就是与所经过的所有经线形成相同角度的航线,也称恒向航线)在墨卡托投影下都是直线。这使得在航海领域这个投影非常重要。
  注意:经纬线的伸长与纬线的正割成比例变化,随纬度增高极具拉伸,到极点成为无穷大;面积的扩大更为明显,在60度的地方面积要扩大四倍。如下图所示,地理上等半径圆在高纬度面积明显扩大。
  墨卡托投影是按等角条件修改透视圆筒投影而得到的投影,等角(也称为保形) 是指当地图上任何一点的各方向具有相同的比例,称为局部保形,透视圆筒投影如图1所示。从墨卡托投影图上可以看出,经线间隔的经度如果相等,则经线是等距平行的直线, 纬线也是平行的直线,而且经纬线是相互垂直的。墨卡托投影对透视圆筒投影改造点:要使圆筒投影称为等角的性质,必须使由赤道向两极经线逐渐伸长的倍数与经线上各点相应的纬度扩大的倍数相同。
透视圆筒投影
 
 
墨卡托投影方程式
  墨卡托投影以整个世界范围,赤道作为标准纬线,本初子午线作为中央经线,两者交点为坐标原点,向东向北为正,向西向南为负。南北极在地图的正下、上方,而东西方向处于地图的正右、左。由于墨卡托投影在两极附近是趋于无限值,因此它并没完整展现了整个世界,地图上最高纬度是85.05度(通过纬度取值范围ys反解计算可得到纬度值为85.05112877980659)。为了简化计算,我们采用球形映射,而不是椭球体形状。
  公式推导具体见文献: 墨卡托投影与大圆投影的构成及其在_省略_定航线_计算航程与航向方面的应用_程光举。
利用等角条件m=n来讨论具体公式,具体分为三步:
1、根据m=n得到地球表面投影到平面上的微积线段的关系式。
2、把地球视为球体:
设地球表面A点经纬坐标为(λ,Φ),对应的投影坐标为(x,y),基准纬线设置为赤道,则R为地球半径;墨卡托投影方程式为:
或 3、把地球视为旋转椭球体
墨卡托投影正反解公式:
公式推导具体见文献: 墨卡托投影与大圆投影的构成及其在_省略_定航线_计算航程与航向方面的应用_程光举。
程序实现
 https://github.com/wylloong/-GeographyCoordinateTransform/blob/master/Mercator  源代码
 或   http://download.csdn.net/detail/wylloong/9813502 
参考文献
 http://download.csdn.net/detail/wylloong/9813502 (两篇原理文献及原代码)
  作为一个地理开发的局外人,在文献基础和自己的理解上实现,仅略知皮毛,疏漏在所难免,承蒙诸君不吝告知,将不胜感激!

墨卡托投影坐标系(Mercator Projection)原理及实现C代码的更多相关文章

  1. [转]墨卡托投影坐标系(Mercator Projection)原理及实现C代码

    墨卡托投影是一种“等角正切圆柱投影”,荷兰地图学家墨卡托(Mercator)在1569年拟定:假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体 ...

  2. Java NIO原理 图文分析及代码实现

    Java NIO原理图文分析及代码实现 前言:  最近在分析hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请 ...

  3. 编程原理—如何用javascript代码解决一些问题

    关于编程,我最喜欢的就是解决问题.我不相信有谁天生具有解决问题的能力.这是一种通过反复锻炼而建立并维持的能力.像任何练习一样,有一套指导方针可以帮助你更有效地提高解决问题的能力.我将介绍5个最重要的软 ...

  4. C#实现墨卡托投影坐标系经纬度与米制单位之间的互转

    using System; using GeoJSON.Net.Geometry; namespace GISWebService.Common { /// <summary> /// 墨 ...

  5. JavaScript模板引擎原理,几行代码的事儿

    一.前言 什么是模板引擎,说的简单点,就是一个字符串中有几个变量待定.比如: var tpl = 'Hei, my name is <%name%>, and I\'m <%age% ...

  6. 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换(JS版代码)

    /** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09).国测局坐标(火星坐标,GCJ02).和WGS84坐标系之间的转换 */ //定义一些常量 ...

  7. [JavaEE]Java NIO原理图文分析及代码实现

    转http://weixiaolu.iteye.com/blog/1479656 目录: 一.java NIO 和阻塞I/O的区别      1. 阻塞I/O通信模型      2. java NIO ...

  8. Java NIO原理图文分析及代码实现

    原文: http://weixiaolu.iteye.com/blog/1479656 目录: 一.java NIO 和阻塞I/O的区别      1. 阻塞I/O通信模型      2. java ...

  9. java动态代理实现与原理详细分析(代码层面解释了AOP的实现)

    关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式    代理模式是常用的java设计模式, ...

随机推荐

  1. 201521123029《Java程序设计》第四周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:1. 多态性,多态性是相同的形态,不同的行为(定义),其中父类类型变量可以引用子类对象. ...

  2. 控制结构(7) 程序计数器(PC)

    // 上一篇:最近最少使用(LRU) // 下一篇:线性化(linearization) 程序的每一行都是一个状态,对应的行指令.同步的情况下同一个pc一直自增,异步的时候,分裂出一个新的子pc,独立 ...

  3. Java SpringMVC小白的成长(一)

    如果你是一个小白,请跟着我走,我会让你少走弯路,如果你是大牛,那么多谢大牛可以给我提提建议. 说实话,来公司这么久,一直在做的是维护与修改bug.(我的语言是php,来公司才开始接触java). 要毕 ...

  4. weblogic服务器上类或者方法找不到的解决办法

    下面以eclipse-birt(报表)为例,介绍这种问题出现的原因以及解决之道: 分析比较好的见:http://developer.actuate.com/community/forum/index. ...

  5. 源码安装H2O Http 服务端程序到Ubuntu服务器

    首先安装全家桶 apt install -y build-essential zlib1g-dev libpcre3 libpcre3-dev unzip cmake libncurses5-dev ...

  6. 中位数的和_KEY

    中位数的和 (number.pas/c/cpp) [题目描述] flower 有 N-1 个朋友,他们要一起玩一个游戏:首先确定三个非负整数 a,b,c,然后每个人依次在纸上写一个数,设第 i 个人写 ...

  7. 云计算之openstack ocata 项目搭建详细方法

    之前写过一篇<openstack mitaka 配置详解>然而最近使用发现阿里不再提供m版本的源,所以最近又开始学习ocata版本,并进行总结,写下如下文档 OpenStack ocata ...

  8. 动易CMS-搜索结果页显示自定义字段

    最终的页面: 步骤: 1.搜索标签代码 <input id="keyword" type="text" class="text" on ...

  9. iOS9.3越狱

    转载:http://bbs.feng.com/read-htm-tid-10680439.html   首先是Windows英文版越狱的的教程 下载 Cydia Impactor 工具(用来安装越狱A ...

  10. React——组件的生命周期函数

    每一个组件都有一些生命周期函数. 当组件实例被创建并且会插入到DOM中,下面这些函数会被调用 constructor componentWillMount render componentDidMou ...