转:坐标转换那些事儿
在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 Snyder和Waldo 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 戴勤奋) 由上图可知公式:
|