墨卡托投影介绍

一、墨卡托投影

墨卡托投影,又称正轴等角圆柱投影,由荷兰地图学家墨卡托(G.Mercator)于1569年创拟。假设地球被套在一个圆柱中,赤道与圆柱相切,然后在地球中心放一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,就形成以一幅墨卡托投影的世界地图(如下图)。因其等角特性,广泛应用与航空、航海中。

墨卡托投影,是正轴等角圆柱投影,圆柱投影的一种,为地图投影方法中影响最大的投影。假设地球被围在一中空的圆柱里,其基准纬线(赤道)与圆柱相切,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱面上,再把圆柱面展开,这就是一幅选定基准纬线上的“墨卡托投影”绘制出的地图。其中,按等角条件将经纬网投影到圆柱面上,将圆柱面展为平面后,得平面经纬线网。

imgimg

从墨卡托投影图上可以看出,经线间隔的经度如果相等,则经线是等距平行的直线,纬线也是平行的直线,而且经纬线是相互垂直的。

墨卡托投影有一个特别的特性:所有罗盘等角线,或称斜航线(就是与所经过的所有经线形成相同角度的航线,也称恒向航线)在墨卡托投影下都是直线。这使得在航海领域这个投影非常重要。

墨卡托投影对透视圆筒投影改造点:要使圆筒投影称为等角的性质,必须使由赤道向两极经线逐渐伸长的倍数与经线上各点相应的纬度扩大的倍数相同。

img

从上图中可以看出,X轴的刻度是等距的,Y轴方向越靠近两极变形越大。假设墨卡托投影的坐标系原点为(0,λ0) ,表示X轴为赤道,Y轴则在经度为λ0处垂直于赤道。 墨卡托投影公式即为:

img

其中, λ为经度, φ为纬度。左侧为正算,右侧为逆运算。

即有经纬度( φ,λ)对应的墨卡托平面坐标即为(xR,yR)。很明显,y方向的距离只有在赤道附近才是接近实际距离的。

地球赤道的圆周长为2πR(R为赤道半径),而各纬线圈周长为2πRcosΦ (Φ 表示对应的纬度),因此,墨卡托投影地图上纬线长与地球上实际纬线长的比值为:

img

既然各纬度的纬线扩大sec Φ (正割)倍,为了保持等角,各纬线通过处的经线也要相应的扩大sec Φ 倍。

这时,经线方向上的长度比才能与纬线方向上的长度比相等。

注意:投影地图上经纬线的伸长与纬度的正割成比例变化,随纬度增高极具拉伸,到极点成为无穷大;面积的扩大更为明显,在 60^{\circ} 的地方面积要扩大四倍(因为 \sec 60^{\circ} = 2,面积比是长度比的两倍,所以是四倍)。如下图所示,地理上等半径圆在高纬度面积明显扩大。

img

二、Web墨卡托投影

Web墨卡托投影(英文名为Web mercator 或 Spherical mercator)坐标系,广泛应用与Google Map、Bing Map等地图投影中。它以整个世界范围,赤道作为标准纬线,本初子午线作为中央经线,两者交点为坐标原点,向东向北为正,向西向南为负。

X轴:赤道半径取值为6378137米,则赤道周长为2PIr ,以坐标原点为中心,东西南北各方向为其值一半,即 PI*r= 20037508.3427892,因此X轴的取值范围:[-20037508.3427892,20037508.3427892]。

Y轴:由墨卡托投影的公式可知,当纬度φ接近两极,即90°时,y值趋向于无穷。为了使用方便,就把Y轴的取值范围也限定在[-20037508.3427892,20037508.3427892]之间,形成一个正方形。

因此在投影坐标系(米)下的范围是:最小(-20037508.3427892, -20037508.3427892 )到最大 (20037508.3427892, 20037508.3427892)。经过反算,可得到纬度85.05112877980659。因此纬度取值范围是[-85.05112877980659,85.05112877980659]。

Web Mercator 坐标系使用的投影方法不是严格意义的墨卡托投影,而是一个被 EPSG(European Petroleum Survey Group)称为伪墨卡托的投影方法,这个伪墨卡托投影方法的大名是 Popular Visualization Pseudo Mercator,PVPM。 看起来就觉得这个投影方法不是很严谨的样子。

因为这个坐标系统是 Google Map 最先使用的,或者更确切地说,是Google 最先发明的。在投影过程中,将表示地球的参考椭球体近似的作为正球体处理(正球体半径 R = 椭球体半长轴 a)。这也是为什么在 ArcGIS 中我们经常看到这个坐标系叫 WGS 1984 Web Mercator (Auxiliary Sphere)。Auxiliary Sphere 就是在告知你,这个坐标在投影过程中,将椭球体近似为正球体做投影变换,虽然基准面是WGS 1984 椭球面。

这里写图片描述

在很长一时间是内,并没有被EPSG的投影数据库所接纳。EPSG认为他不能算作科学意义上的投影,所以只是给了一个EPSG:900913 的标号(SRID),这个标号游离在EPSG常规标号范围之外。也有人说,这个900913是google自己定的编号。900913 由于得不到官方的认证ID,Google为Web Mercator 任性地制定了这个ID,自娱自乐,也祝大家玩的开心……下面可不是我编的。

i think 900913 is great. 9-g 0-o 0-o 9-g 1-l 3-e get it? 900913 is equal to google. THAT’S AMAZING ! =-)

EPSG:3785 这是 EPSG 在 2008 年5月给 Web Mercator 设立的WKID,但是这个坐标系的基准面是正圆球,不是WGS 1984。 存在了一段时间后被弃用。

EPSG:3857 后来,Web Mercator 在 Web 地图领域被广泛使用,这个坐标系就名声大噪。尽管这个坐标系由于精度问题一度不被GIS专业人士接受,但最终 EPSG 还是给了 WKID:3857。EPSG为 Web Wercator 最终设立的WKID,也就是现在我们常用的Web 地图的坐标系,并且给定官方命名 “WGS 84 / Pseudo-Mercator“。

ESRI:102113 Esri内部使用ID,与 EPSG:3785 相应。已被弃用。

ESRI:102100 Esri内部使用ID,与 EPSG:3857 相应。

因此,细心地话,会发现在 ArcGIS Server 的REST 服务页面中,Web Mercator 的空间参考会记做: 102100(3857)

为什么这么受欢迎的坐标系还会受到GIS大咖的诟病?

拒绝给这个坐标系分配 坐标系ID 的原话是这样的:

“ The projected coordinate reference system originally lacked an official spatial reference identifier (SRID), and the Geodesy subcommittee of the OGP’s Geomatics committee (also known as EPSG) refused to provide it with one, declaring “We have reviewed the coordinate reference system used by Microsoft, Google, etc. and believe that it is technically flawed. We will not devalue the EPSG dataset by including such inappropriate geodesy and cartography.” ”

这不是EPSG 冷酷无情无理取闹,从技术角度看是有原因的。简而言之,主要原因在于基准面被篡改后,本来是等角投影的Mercator坐标变换算法,不再等角了,而是近似等角,也就是出现角度变形。这种变形势必影响了坐标的精度,如下是某位GIS专家给出的概要说明(闪亮的最后一条):

这里写图片描述

如果你想进一步关心细节,想知道这位专家对 Web Mercator 的 dark side 的深入见解,点[这里](http://hydrometronics.com/downloads/Web Mercator - Non-Conformal, Non-Mercator (notes).pdf)看看。

三、网络地图投影参数

Spherical Mercator (或称为 Web Mercator)的 Main parameters:

Datum:WGS84
Map projection:Spherical Mercator
Ellipsoid:WGS84
EPSG Code:EPSG: 4326(for coordinates in latitude/longitude)
EPSG Code:EPSG: 900913(for coordinates in metres)

正因为采用了相同的地图投影才使得不同地图服务商的瓦片地图能够很好的叠加,尽管切片规则和算法不尽相同,但最终拼接的结果始终是一致的。

在 EPSG 官网上找到的3857坐标的具体参数介绍,供参考:

这里写图片描述

参考:

墨卡托投影

Mercator Projection

在ArcGIS中设置Web墨卡托投影的方法

墨卡托投影, 18.11

GIS——各大地图厂商为什么偏爱web墨卡托投影

web 墨卡托投影

参考:https://zhuanlan.zhihu.com/p/98951492

转载:https://www.cnblogs.com/arxive/p/7472104.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GIS算法:可视化工具JTS TestBuilder

java、python、js都有可以引用的第三方包,实现GIS的空间算法。 java是jts,python是shapely,js是turf。 其中jts值得首先拥有,因为jts提供了一个界面工具JTS TestBuilder,可以在上面绘制图形,验证各种算法…

wkt区域围栏

API文档 http://shengshifeiyang.gitee.io/geotools-learning/ /** * 判断以x,y为坐标的点point(x,y)是否在geometry表示的Polygon中 * param x * param y * param geometry wkt格式 POLYGON((0 0, 10 0, 10 10, 0 10,0 0)) * return */ public static boolean withinGeo(doub…

oracle关联字段和序列,oracle(9) 序列和约束

序列 SEQUENCE也是数据库对象之一,作用:根据指定的规则生成一些列数字。序列通常是为某张表的主键提供值使用。主键:通常每张表都会有主键字段,该字段的值要求非空且唯一,使用该字段来确定表中的每一条记录。CREATE SE…

lambda表达式处理异常_lambda表达式内出现异常无法throw抛出

lambda体中有受检异常,为什么不能在lambda表达式外层try catch,只能在lambda里面try catch xxx.getUpdateList().forEach((map) ->{xxxVO vo new xxxVO();BeanUtils.populate(vo,map); // populate方法往外抛了异常list.add(vo);});因为lambda表达式本身没有处理异常的机制…

lambda处理异常四种方式

最近对接第三方呼叫系统,第三方SDK的所有方法里都有异常抛出,因为用到了lambda,所以异常处理还是很必要的。 本文主要用到了四种解决方案: 直接代码块处理自定义函数式接口,warp静态方法通过Either 类型包装通过Pair…

linux 历史命令快捷键,Linux历史命令及bash快捷键

本文环境 Centos71.历史命令1.1 在使用linux中熟练的使用历史命令,能给我很多便捷,下面我来总结一些常用的一些历史命令。a) 执行上一条命令,这个很重要 ,执行上一条命令有四种方法,如下:[rootCentOS-7-64data]#[rootCentOS-7-64 …

linux的shell命令 a,linux shell命令大全(都是随堂笔记)

1. Tftp服务器(上传下载文件)注意:上传和下载文件时不能用目录表示 。因此,需要先cd到当前目录。注意目录权限:chmod 0777目录文件 8进制表示:Chmod的文件、目录的权限U自己 g 所属组 o其它 可加减步骤:安装服务器&…

异常 —— throws

1.1 异常概念 1.2 异常体系 java.lang.Throwable:类是 Java 语言中所有错误或异常的超类。 Exception:编译期异常,进行编译(写代码)java程序出现的问题 RuntimeException:运行期异常,java程序运行过程中出现的问题 异常就相当于程序得了一个小毛病(感冒,发烧),把异常处理掉,程序…

制作 小 linux 教程,【NanoPi NEO Plus2开发板试用体验】编译uboot和linux制作最小根文件系统制作刷机包---详细教程...

二、Linux命令基础1、查找文件查找a.c的文件 find -name "a.c"在当前目录搜索a字样的文件 grep "a" *-nR2、解压解压tar.gz文件 tar zxvf xxxxx.tar.gz解压tar.xz文件 先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xx…

执行throw后 后面代码还会执行吗?

1.当我们对throw的对象进行try catch之后 public void re(int i) {if (i > 5){this.i i;}else {try {throw new Exception("数据非法!");} catch (Exception e) {e.printStackTrace();}System.out.println("123");}结果显示:12…

linux怎么查看sklearn版本,Sklearn——Sklearn的介绍与安装

文章目录1.Sklearn简介2.Sklean安装2.1.pip安装2.2.conda安装1.Sklearn简介Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一.Sklearn 包含了很多种机器学习的方式:Classification 分类Regression 回归Clustering 非监督分类Dimensionality reduction…

一些防止 Java 代码被反编译的方法

由于Java字节码的抽象级别较高,因此它们较容易被反编译。本节介绍了几种常用的方法,用于保护Java字节码不被反编译。通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已,因为这些方法都有自己的使用环…

linux 离线安装中文,linux离线安装及配置redis-Go语言中文社区

本文以centos7系统为例,介绍离线安装redis步骤一、环境准备检查服务器上是否存在gcc-c的环境,使用命令:rpm -qa | grep gcc-c如果没有该环境,则需要安装该环境,离线安装步骤为:1、获取相关rpm包&#xff0c…

Java学习记录 AWT绘图篇

绘制图形 Canvas画布类 Class Canvas java.lang.Object java.awt.Component java.awt.Canvas 用来 绘制图形 或 捕获用户输入的事件。绘制图形需要绘图方法实现绘制图形 方法说明paint(Graphics g)绘图repaint(Graphics g)重新绘图(刷新 Graphics绘图类 Class Gra…

linux pmap 内存泄露,一个驱动导致的内存泄漏问题的分析过程(meminfo-pmap-slabtop-alloc_calls)...

关键词:sqllite、meminfo、slabinfo、alloc_calls、nand、SUnreclaim等等。下面记录一个由于驱动导致的内存泄漏问题分析过程。首先介绍问题背景,在一款嵌入式设备上,新使用sqllite库进行数据库操作,在操作数据(大量读写操作)一段…

Java基础--awt详解以及简单应用

GUI 图形用户界面 CLI 命令行用户接口 Java为GUI提供的对象存在java.Awt和Javax.Swing两个包中. Java当中如何完成图形化界面的制作呢? AWT:abstract Window ToolKit.需要调用本地系统实现功能.属于重量级控件.依赖于平台.跨平台性不是特别好. Javax.Swing:在AWT基础上.建立一…

Java图形化界面设计之容器(JFrame)详解

Java图形化界面设计之容器(JFrame)详解 Java图形化界面设计——容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们…

10个最受欢迎的JavaScript图表库

目前网上有很多用于绘制图表图形的免费JavaScript插件和图表库,技术学派在这里给大家推荐10个比较强大的绘制图表图形的JavaScript图表库。其中一些插件需要主流浏览器的支持,而另外一些经过整合后,也能在不同的平台和老版本的浏览器上工作。…

sudo 命令_su、sudo、sudo su、sudo -i的用法和区别

sudo 命令 1、sudo 简介 sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是…

c语言不能在函数中求数组大小,C语言中数组长度不能用变量定义吗?

翻翻过去那场雪1、C语言中不支持。C中支持变长数组(你可以自行度娘变长数组和alloca函数),但是因为其实在栈上分配,不被推荐使用。做为解决方案,你可以使用C式的malloc函数或者C式的new函数来在堆上动态分配内存,这样长度是完全可…