墨卡托投影是一种“等角正切圆柱投影”,荷兰地图学家墨卡托(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. 201521123006 《Java程序设计》 第2周学习总结

    1. 本周学习总结 本周进一步学习了java,了解了java编程中一些特定的用法,比如:在编译程序时可以使用import来减少输入包名称.本周还学会了使用枚举类(enum Choice{fab,sor ...

  2. Linux如何设置dns

    首先打开dns设置文档 空的dns文档如图所示 键入图片中的文本保存即可设置了自己的dns 保存后推出即可.

  3. 201521123077 《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 多线程 Runnable类 表示任务的类,可以当作参数传入Thread的构造器来运行该任务 Thread类 ...

  4. Java课设(学生信息管理系统)

    1.团队课程设计博客链接 http://www.cnblogs.com/Min21/p/7064093.html 2.个人负责模板或任务说明 设计登陆界面和学生信息界面的设计,学生信息的显示.退出等功 ...

  5. 201521123089 《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-21.1 截图你的提交结果(出现 ...

  6. Lucene第一篇【介绍Lucene、快速入门】

    什么是Lucene?? Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的架构,提供了完整的创建索引 ...

  7. STS安装

    在eclipse中安装spring tool Suite插件需要根据eclipse版本找到对应的spring tool Suite安装包. spring tool Suite 官网地址:http:// ...

  8. OpenStack Ocata 超详细搭建文档

    前言 搭建前必须看我本文档搭建的是分布式O版openstack(controller+ N compute + 1 cinder)的文档.openstack版本为Ocata.搭建的时候,请严格按照文档 ...

  9. java集合系列——List集合之LinkedList介绍(三)

    1. LinkedList的简介 JDK 1.7 LinkedList是基于链表实现的,从源码可以看出是一个双向链表.除了当做链表使用外,它也可以被当作堆栈.队列或双端队列进行操作.不是线程安全的,继 ...

  10. Undefined symbols for architecture arm64: "_OBJC_CLASS_$_WKWebView", referenced from: objc-c

    出现: Undefined symbols for architecture arm64: "_OBJC_CLASS_$_WKWebView", referenced from: ...