摘要: 一般GIS数据有两种空间参考来表示,地理坐标系和投影坐标系,地理坐标系反映的是数据存储的坐标是经纬度,投影坐标系反映的是数据存储为平面直角坐标系。 为什么要定义七参数才可以定义基准面 这个问题首先我们去EPSG官网下载一个ESPG维护的投影数据库,打开数据库找...
一般GIS数据有两种空间参考来表示,地理坐标系和投影坐标系,地理坐标系反映的是数据存储的坐标是经纬度,投影坐标系反映的是数据存储为平面直角坐标系。
为什么要定义七参数才可以定义基准面 这个问题首先我们去EPSG官网下载一个ESPG维护的投影数据库,打开数据库找到椭球体定义的那张表,我们数一下,全世界总共才定义了53中椭球体,amazing是吧?事实上就是这样,地球这么大的地方,每个地方的起伏不一,只有这么几个椭球有如何能准确的描述地貌呢。比如说用卡拉索索夫斯基椭球体描述俄罗斯的某个地方确实误差还比较小,但是要是用来描述其他的一些地方又有可能,误差相当大,这总归是不合适的吧~ 为了解决这个问题总不能每个地方都测绘一个自己的椭球体吧,好吧,那我就用数学方法来变换这个椭球,使之适应于我们的地理区域,怎么变换呢,这个就是纯数学问题,把椭球放大或缩小,或平移,或旋转,总之要适应我们地貌,其实这个就是我们的七参数。七个参数指的是X轴的平移、Y轴的平移、Z轴的平移、X轴的旋转、Y轴的旋转、Z轴的旋转、以及缩放因子R。很明显这里是数学问题,为了就是定位我们的椭球体,总不能使用地理坐标来计算吧,必然是笛卡尔坐标系啦。 那么又如何去将地理坐标转换成空间直角坐标系X、Y、Z表示呢?
这里假设椭球体的定义为:长轴半径为a,短轴半径为b。地球上有一点的经纬度为(L,B),则求X、Y、Z如下:
X = a * cos(B) * sin(L);
Y = b * sin(B) * sin(L);
Z = c * cos(B);
这里的ab是赤道半径,c是极半径,相信学过数学的你,肯定懂c要怎么算了~
七参数如何获取?
在中国七参数是保密的,但也不是绝对无法获取的。 根据我们的数学知识,7个参数的求解必然要列出7个方程。 我们采集3个点,转换个(X,Y,Z)则总共有九个方程,联合求解,自然就有了7个参数的值,这里具体的算法请教百度大神去,原理不懂的可以先看看数学中的椭球这一块知识,另外要看一下矩阵的运算和空间测量平差原理,多出两个方程可以一定程度上消除偶然误差,当然也可以有更多的多余观测值参与计算来提高7参数。
坐标转换究竟如何进行的?
举个例子来说明,假设我有一个北京54下114度中央经线的高斯投影地图数据,要转换到西安80下的114度高斯投影。
第一步,将BJ54下的投影坐标转换到地理坐标,即BJ54下的经纬度。
第二步,把BJ54下的经纬度转换成空间直角坐标系,即BJ54下的X,Y,Z。
第三步,把BJ54下的X,Y,Z转换成Xian80下的X,Y,Z。
第四步,把Xian80下的X,Y,Z转换到Xian80下的经纬度。
上述这种方法是在理想情况下,即有xian80下椭球到bj54下椭球转换7参数。 而大多数情况下,我们有的是WGS84到各种椭球下的转换7参数,这样就有了如下步骤:
第一步,将BJ54下的投影坐标转换到地理坐标,即BJ54下的经纬度。
第二步,把BJ54下的经纬度转换成空间直角坐标系,即BJ54下的X,Y,Z。
第三步,把BJ54下的空间直角坐标系转换为WG84下的X,Y,Z。
第四步,把WGS84下的空间直角坐标系X,Y,Z转换到Xian80下的X,Y,Z。
第五步,把Xian80下的X,Y,Z转换到Xian80下的经纬度。 注意如上第二中方式需要提供两套7参数,WGS84->BJ54,WGS84->Xian80。