坐标转换那些事儿

在GIS中,最基础(basic)、最关键(essential)的部分应该就是坐标系(coordinate)了,或者说空间参考(spatial reference)。只有明确了空间参考,才能正确地确定地物的空间位置、度量地物之间的空间关系,以及发挥GIS融合多源数据的功能,等等。显然,空间参考是GIS的一个根本问题。

在实际工作中,当你准备用GIS来完成一项任务时,如果你手头上数据的空间参考是正确一致的,至少基准面(datum)是正确并一致的。那么恭喜你,你基本上可以跳过坐标转换这一道坎了,可以直接使用GIS软件进行数据处理与分析了。如果空间参考是不一致的,甚至是没有空间参考的数据,那该怎么办呢?显然是要定义一个空间参考,甚至还要进行坐标转换,在一致的坐标系下才能进行后续的工作。还有,矢量、栅格数据在进行坐标转换时的原理与操作又是一致的吗?

前面废话了比较多,其实我就是想谈一谈坐标转换的问题。很基础,也不会完全正确,但应该有点用处。

矢量数据坐标转换

先来看一张矢量数据坐标转换的流程图:

(矢量数据坐标转换流程图 v0.1)

这个是我自己定义的,有点诚惶诚恐。如果接触过坐标转换,或者对GIS中的空间参考概念了解的话,我想这张图应该表达的比较清楚了。当然还有几点需要特别说明下:

(1)空间参考“已有”、“已知”的区别。“已有”说明数据是有坐标文件的,比如Shapefile数据有prj文件,而且“已有”当然“已知”了。但是“已知”并不一定“已有”,比如一份Shapefile数据知道是WGS84空间参考,但是没有prj文件,这样的情况需要重新给数据定义(define)空间参考。

(2)PCS与GCS,PCS是Projected Coordinate System的缩写,GCS是Geographic Coordinate System的缩写。PCS定义在一个GCS之上(Web Mercator比较特别,可以参考这里),GCS定义在一个Datum(大地基准面)之上,Datum又是Ellipsoid(地球椭球体)经过椭球定位、定向之后的产物,Ellipsoid就是通过长短半轴去描绘地球形态的光滑椭球体了。

(3)“N参数拟合”的说明。当有一份数据并不知道其空间参考时,这时就需要根据坐标数据的大小、范围等因素去推测原始坐标系,找到准确的同名控制点,再根据经验选择一个合适的物理模型,例如:仿射变换六参数,N阶多项式变换。之后进行模型参数求解,最后就是计算坐标了。特别是小范围城市级别的坐标转换,一般使用仿射变换就能满足普通需求了。这整个流程,我概括为“N参数拟合”。另外,这有点类似于ArcGIS中Spatial Adjustment工具条做的事情。

(4)“基准面不一致”的说明。当基准面不一致时,才要真正考虑到坐标转换(convertion),因为在基准面一致时,任何PCS1到PCS2都是有解析式的,坐标系之间只存在变换(transformation)的关系。基准面不一致时,一般通N个参数来确定两个基准面之间的关系,这也就是转换的物理模型。比如三参数转换、Molodenski转换、Helmert转换以及Molodenski-Badekas转换等等。这些转换大多是基于地心空间直角坐标的,也就是XYZ。

戴勤奋老师翻译了Coordinate Conversions and Transformations including Formulas中的“Formulas for Coordinate Operations other than Map Projections”章节,中文名为“坐标系转换公式”,里面介绍了许多坐标转换模型的方方面面,是很好的学习资料。

另外还参考了《现有测绘成果转换到2000国家大地坐标系技术指南》、杨启和教授的《地图投影变换原理与方法》以及别的各种小论文。

顺带说点八卦:

杨启和教授是吴忠性教授的学生,吴忠性教授是王家耀院士、高俊院士、孟立秋以及祝国瑞等等知名教授的导师,也是吴邦国委员长的父亲。吴忠性教授被称为“测绘将军”,应该是现代中国地图学界的宗师级人物之一了。

杨启和教授的这本书曾被John SnyderWaldo Tobler翻译为Map Projection Transformation: Principles and Applications,至今在Amazon上还有销售,胡毓钜教授曾专门撰文谈到过这部书的出版意义。值得强调一下的是,John Snyder生前是USGS的首席地图投影专家,他将在USGS的工作成果整理为了一本书,Map Projections: A Working Manual,另外他也是Space oblique Mercator投影的发明者。Waldo Tobler就更不用多解释了,地理学第一定律的提出者,UCSB的教授。

栅格数据坐标转换

栅格数据与矢量数据的定义不同,空间参考定义也是不同的,因而坐标转换当然也不会相同了。一般来说,栅格数据的坐标转换往往是一步到位。对小范围的数据,选好控制点和坐标转换模型,直接拟合;大范围数据,先分成几块,分别拟合,最后合并。这样做的原因,个人认为可能是栅格数据坐标转换涉及重采样的问题,重采样本身就有误差,若是像矢量数据一样有按严格的空间参考定义去进行一步步转换,那期间要涉及多次重采样,最终的结果可能会面目全非。另外,还可以参考ArcGIS中的Georefrencing工具的原理和使用。

仿射变换

在所有坐标转换模型中,仿射变换是最简单,也是最常用的。

所以,使用仿射变换,只需使用3对同名控制点,解出A~B六个参数,即能得到坐标转换公式(模型)。如果超过3对控制点,就要通过最小二乘来解算,这些使用Matlab来计算还是很方便的。

仿射变换的原理,通过几何关系可以很清楚的看出:

(仿射变换几何原理,via 戴勤奋)

由上图可知公式:

杭州公交数据转换

今年4月份的时候,调用过杭州公交数据。但当时因为一些别的原因,没有用心去做,也就没有对数据进行纠偏了。

从文献来看,杭州本地基准是在北京54的基础上经过偏移的,平面坐标当然是高斯克吕格投影。而Web上的地图服务一般都是Web Mercator投影(天地图除外),基准是WGS84。

我要做即是将hzbus.cn上数据转换到arcgisonline.cn上。转换模型选择仿射变换,如果效果不好,可以再换。以地理坐标(经纬度)数据为基础,因为原始数据就是经纬度的,而且WGS84与Web Mercator的正反算也很容易。

这样,我只需要找出3对同名控制点就可以计算了。因为原始数据是公交车站的点位坐标,而这个车站的位置与实际中的位置并不一致(地图做得太烂),而且目标地图上并没有公交车站的点位标识。因而,只能使用靠近道路交叉口的公交车站,再去目标地图上找相同的交叉口,最后确定附近大概是公交车站的位置。这样来选择控制点,确实有些不友好,但也没办法呀。

找到同名控制点的坐标,通过Matlab解算参数,最后计算坐标。最终结果可以接受,至少车站都分布在道路两侧。考虑到原始数据的质量,这样的结果已经挺不容易啦。

(hzbus上的公交车站位置)

(arcgisonline上的公交车站位置)

 

学了这么久的GIS,坐标系也是一开始就开始接触的。简单来说,“坐标虐我千百遍,我待坐标如初恋”。

分享到:
  1. Pingback: 有史以来最牛逼的制图学家 | GeoVisual

  2. 有新的:国际油气生产者协会测量和定位指导书 –坐标转换与变换公式 戴勤奋 译 2009年5月最新修订版分为2部分: 第1 部分 地图投影及其坐标转换公式第2 部分 非地图投影坐标运算公式.

  3. 看完那个坐标转换流程图,有一种迷糊灌顶的感觉。感觉从前支离破碎的知识,终于整到一块儿了,哈哈。顺便问个,投影坐标系到地理坐标系之间,那个反算是啥意思?