这几天,因为项目需要,认真地学习了一遍地图投影,最终完成了WGS84坐标系经纬度与Web Mercator Projection(麦卡托投影)行列号的互转。转换代码只有区区几行,但是探索的过程却非常曲折。相信如果不是生活所迫,恐怕没有程序员喜欢研究地图投影这个艰深晦涩、极度耗费脑细胞的题目。在查找资料的过程中,我有一些有趣的发现,也有一些关于东西方文化差异的思考,现录于此,与各位看官分享。
事实上,这篇文章的题目叫做“WGS84坐标系经纬度与Web麦卡托投影行列号互转”也许更贴切一些。将本文当成科普读物的看官请直接忽略代码段,效果更佳。
def lonlat2ij_mercator(lon, lat, img_size=65535):
'''WGS84坐标系经纬度转Web麦卡托投影行列号'''
img_size -= 1
i = int(img_size*(0.5 + lon/360))
j = int(img_size*(0.5 - np.log(np.tan(np.deg2rad((90+lat)/2)))/(2*np.pi)))
return i, j
def ij_mercator2lonlat(i, j, img_size=65535):
'''Web麦卡托投影行列号转WGS84坐标系经纬度'''
img_size -= 1
lon = 360.0*i/img_size - 180.0
lat = np.rad2deg(np.arctan(np.exp(np.pi-2*np.pi*j/img_size)))*2 - 90
return lon, lat
在科技发达的今天,我们知道,地球的平均赤道半径为6378.38公里,极半径为6356.89公里。测量还发现,北极地区约高出18.9米,南极地区则低下24~30米。看起来,地球形状像一只梨子:它的赤道部分鼓起,是它的“梨身”;北极有点放尖,像个“梨蒂”;南极有点凹进去,像个“梨脐”。因此,地球被叫做“梨形地球”。确切地说,地球是个三轴椭球体。
关于地球的长相,科学家们也曾经存有争议。英国物理学家牛顿提出,地球由于绕轴自转,因而不可能是正球体,而只能是一个两极压缩、赤道隆起、像橘子一样的扁球体,并得出了万有引力定律 。但牛顿的理论遭到了反对,当时巴黎天文台第一任台长卡西尼父子,就提出了反对意见,他们认为,地球长得更像一个西瓜。
有人的地方就有江湖,有江湖自然就有争论,没啥奇怪的。令人称奇的是,这事儿居然惊动了当时的法国国王路易十四,他派出两个远征队,去实测子午线的弧度。结果就不用说了,肯定是牛顿胜出。但是,我在想,假如这事儿发生在中国,国人会不会觉得讨论地球是圆的扁的纯粹是吃饱了撑的没事找事?我们的皇帝又会怎么做呢?
查了一下资料,发现路易十四那个年代,中国的当朝皇帝是康熙,二人都是历史上著名的君主,有很多相似之处,并且他们之间还有一段关于地图的故事。
项目 | 路易十四 | 康熙大帝 |
---|---|---|
生卒年代 | 公元1638-1715 | 公元1654-1722 |
执政年代 | 公元1643-1715 | 公元1661-1722 |
在位时长 | 72年 | 61年 |
路易十四统治时期的法国,处于向资本主义转轨的历史大变革前夜。而此时的中国,还是一个自然经济占统治地位的且及其强大的封建国家,非常重视农业,实行的是重农抑商的政策。
已经在北美、印度开拓海外殖民地的法国,迫切需要绘制新的航海图和地图。其实,绘制新的航海图、地图仅仅是最直接的诱因,导致法国对绘制航海图、舆地工作投入如此大精力,则是路易十四所实行的重商主义政策的结果。
1666年,法国建立皇家科学院。法国科学院第一任院长就是路易十四的宠臣、大名鼎鼎的柯尔贝尔,这位重商主义的坚定执行者对发展科学和了解东方文化具有浓厚兴趣。与此同时,法国天文台台长卡西尼在路易十四授意下,主持了工程巨大的“欧洲测量计划”,画出一版相当精确的欧洲地图。但卡西尼仍不满足,他建议路易十四派人到世界各地去实地测量,精确绘制世界地图。好大喜功的太阳王路易十四急于拓展法国的对外影响,增进远东贸易,于是不久,一个赴中国耶稣会士的六人名单产生了,白晋名列其中。在派驻中国前,他和同行的教友被路易十四授予“国王数学家”称号。
1688年,白晋一行人到达北京,旋即得到康熙赏识。能留在皇帝身边的传教士,大都擅长科学,而白晋是惟一被康熙皇帝评价为“稍知中国书义”的“文理全才”。正因如此,1693年,当康熙皇帝决定派使臣回欧洲招募更多传教士服务于朝廷时,这一使命便顺理成章地落在了白晋身上。
为了获得路易十四的支持,以顺利完成康熙皇帝的使命,白晋写了一份报告,详细介绍了康熙本人和有关中国社会生活的种种细节。他以赞美的语言描述了中国的历史、地理和风俗人情,将康熙皇帝比喻成可以和路易十四相媲美的另一个“太阳王”。此报告后来以《中国皇帝的历史画像》为名公开出版,中文书名是《康熙皇帝》。当时正值欧洲“中国热”走向鼎盛时期,白晋的著作把法国人对中国由来已久的好奇推向了仰慕和向往的高度。
此外,白晋长期与德国科学家莱布尼茨保持通信,当莱布尼茨将他的“二进制”构想告诉白晋时,白晋认为他所依据的正是中国《易经》中的“阴阳八卦”原理,两人的讨论最终促成了这一科学发现的理论化。
白晋的出使取得了成功,17世纪东西方世界两位最具影响力的统治者就这样被联系在了一起,而这两位具有雄才大略的君主碰撞出的火花也非同凡响,那就是著名的《皇舆全览图》。
康熙在平定三藩之乱时,作战地图多模糊不清,带来许多不便。耶稣会士张诚在参加《尼布楚条约》谈判时,认为中国对东北地区地理状况不清,给国防和外交造成困难,遂建议康熙组织一次全国性的测量。虽然路易十四和康熙出于不同的目的,但了解中国的疆域全貌成为两位皇帝共同的渴望,于是历史出现了令人兴奋的一幕:路易十四的传教士们和康熙皇帝的官员们为绘制中国地图进行了十余年精诚合作。如此浩大的工程在东西方历史上还是第一次。
随白晋来华的耶稣会士雷孝思在完成康熙皇帝的使命后,将此图送回法国,辗转交到路易十四手中。法国王室地理学家根据此图做成《中国新图》,在欧洲出版。至此,欧洲人对中国地理概貌有了比较正确、完整的了解。然而,这张地图在中西两地却有着截然不同的命运:1840年,当英国人拿着《中国新图》顺利打开清帝国的大门时,《皇舆全览图》却被深锁于宫廷之中,无人问津。
天圆地方说,在中国有着悠久的历史,一直占有主导地位,直到今天我们还可以看到这种认识的影响。天圆地方所描述的就是盖天论,大约产生于两千多年前的周朝。我能找到的中国最早的关于地球是球形的说法,是汉代张衡(公元78-139)在《浑天仪注》中所描述的“浑天如鸡子,天体圆如弹丸,地如鸡中黄,孤居于内,天大而地小。天表里有水,天之包地,犹壳之裹黄。天地各乘气而立,载水而浮。”把宇宙视为鸡蛋,地球就像鸡蛋黄,真有点“治大国如烹小鲜”的味道!
张衡大概是我们古代最有名的科学家了,无论天文、地理、历法、数学,都有很高的学术成就。对于张衡,我们最熟悉的莫过于浑天仪和地动仪了。浑天仪可看作是宇宙模型,地动仪就有点奇怪了,据说现在的小学课本已经删除了关于地动仪的课文。
那么,同时期的西方,对于地球形状的认识出于什么水平呢?真是不查不知道,一查吓一跳,西方人早在张衡之前400年,就已经推测出地球是圆的,甚至已经计算出了地球的半径!
古希腊哲学家亚里士多德(前384-前322)第一次科学地论证了地球是球体,他在《天体篇》里从三个角度加以论证:
以当时的条件,亚里士多德论证地球是圆的所用的三个例子,很严谨也非常完备,这是哲学家思想的结晶,是开阔的视野缜密的思维才能达到的高度,按说技术含量也不算太高,但别的民族就没有这么早慧。
埃拉托色尼(前275一前193)生于希腊在非洲北部的殖民地昔勒尼(今利比亚),被西方地理学家推崇为“地理学之父”。
在埃拉托色尼之前,也曾有不少人试图进行测量估算,如攸多克索等。但是,他们大多缺乏理论基础,计算结果很不精确。埃拉托色尼天才地将天文学与测地学结合起来,第一个提出设想在夏至日那天,分别在两地同时观察太阳的位置,并根据地物阴影的长度之差异,加以研究分析,从而总结出计算地球圆周的科学方法。这种方法比自攸多克索以来习惯采用的单纯依靠天文学观测来推算的方法要完善和精确得多,因为单纯天文学方法受仪器精度和天文折射率的影响,往往会产生较大的误差。埃拉托色尼选择同一子午线上的两地西恩纳(Syene,今天的阿斯旺)和亚历山大里亚,在夏至日那天进行太阳位置观察的比较。在西恩纳附近,尼罗河的一个河心岛洲上,有一口深井,夏至日那天太阳光可直射井底。这一现象闻名已久,吸引着许多旅行家前来观赏奇景。它表明太阳在夏至日正好位于天顶。与此同时,他在亚历山大里亚选择了一个很高的方尖塔作参照,并测量了夏至日那天塔的阴影长度,这样他就可以量出直立的方尖塔和太阳光射线之间的角度。获得了这些数据之后,他运用了泰勒斯的数学定律,即一条射线穿过两条平行线时,它们的对角相等。埃拉托色尼通过观测得到了这一角度为7°12′,即相当于圆周角360°的1/50。由此表明,这一角度对应的弧长,即从西恩纳到亚历山大里亚的距离,应相当于地球周长的1/50。下一步埃拉托色尼借助于皇家测量员的测地资料,测量得到这两个城市的距离是5000希腊里。一旦得到这个结果,地球周长只要乘以50即可,结果为25万希腊里。为了符合传统的圆周为60等分制,埃拉托色尼将这一数值提高到252 000希腊里,以便可被60除尽。埃及的希腊里约为157.5米,可换算为现代的公制,地球圆周长约为39375公里,经埃拉托色尼修订后为39360公里,与地球实际周长引人注目地相近。由此可见,埃拉托色尼巧妙地将天文学与测地学结合起来,精确地测量出地球周长的精确数值。这一测量结果出现在2 000多年前,的确是了不起的,是载入地理学史册的重大成果。
根据上面的描述,不难画出埃拉托色尼测量地球周长的几何方法。
地球坐标系有两种几何表达方式,即地球直角坐标系和地球大地坐标系。
北京54,西安80,WGS84是常见的地球大地坐标系,他们之间不仅仅是采用了不同的参考椭球模型,也体现了各自体系建立时的功用性和历史背景。
项目 | 北京54 | 西安80 | WGS84 |
---|---|---|---|
长轴 | 6378245m | 6378140m | 6378137.000m |
短轴 | 6356863m | 6356755m | 6356752.314m |
扁率 | 1/298.2997381 | 1/298.25722101 | 1/298.257223563 |
第1偏心率 | / | / | 0.081819790992 |
第2偏心率 | / | / | 0.082095040121 |
北京54用的是前苏联的参数,它是面向苏联的,所以它在前苏联区域这个曲面尽量逼近,而其它国家地区偏多少它不管。它以苏联的普尔科沃为中心,离那越远,误差就越大。
西安80是面向中国的,所以它在中国区域这个曲面尽量逼近,而其它国家地区偏多少它不管。而且这个逼近是以西安附近的大地原点为中心的,也就是说,在西安大地原点处,模型和真实地表参考海平面重合,误差为0,而离大地原点越远的地方,误差越大。所谓的大地原点就是这么来的,它是人为去定的,而不是必须在那里,它要尽量放在中国的中间,使得总的误差尽量小而分布均匀。然后,我国在自已境内进行的建筑,测绘,勘探什么的所绘制的图,都以这个大地原点为基准,去建立各种用途的地表坐标系,就能统一起来了。
WGS84是面向全球的,所以它尽量逼近整个地球表面,优点是范围大,缺点是局部不够精确。GPS用的是WGS84,所以我们手机看到的是WGS84坐标系的经纬度。
地图,除了画在纸上的,就是显示在手机、显示器等各种终端上的,总之都是平面的。那么,问题来了,地球表面是曲面,而且经纬度与长度距离并不是简单的比例关系,怎样将曲面对应到平面上?答案就是——投影。大致上,投影可以分为圆柱投影(Cylindrical Projection)、圆锥投影(Conical Projection)和方位角投影(Azimuthal Projection)等三大类。
麦卡托投影是圆柱投影的一种,是由地理学家麦卡托于16世纪发明的。和所有其它的圆柱投影一样,麦卡托投影的世界地图中,地球纬线是左右方向平行的,长度一样,覆盖整个地图的画幅;而经线是上下方向平行,垂直于纬线。下图非常直观地说明了圆柱投影的原理。
麦卡托投影的基准线是赤道。而横向麦卡托投影(Transverse Mercator Projection)的基准线则是一对形成大圆的经线(完全相对的两条经线)。
圆锥投影多数情况下是给像中国和美国这些中纬度的国家使用的。它的原理和圆柱投影很类似。但是,圆柱投影一般是用一张矩形的纸来卷成一个圆柱形,进行投影。而圆锥投影一般是采用扇形的纸张。它也可以选用1条基准线(相切)或2条基准线(相割)。它的原理如下图:
兰伯特投影(Lambert Conformal Projection)是常用圆锥投影,选用两条基准线,制作过程中保证了地图上有效范围内的任意两点之间的相对方向的准确性。但是距离基准线越远,形状和面积的变化就越大。前面说过,圆锥投影对中纬度地区的国家比较适用。中国的很多地图就是采用的兰伯特等角投影。其中,每个省份的分省地图,选择的两条基准线都不一样,这样才能做到在保证角度的同时,形变量最小。
方位角投影有时也叫做平面投影(Planar Projection)一般用于高纬度、两极的地图或导航地图,它们也有不少种类,原理如下:
最著名的一个方位角投影的地图,估计就是联合国的旗帜上那个了。联合国旗帜上的地图的投影是方位角投影中的一种,叫做球极平面投影(Stereographic Projection)。