GIS中的坐标系定义与转换
青岛海洋地质研究所 戴勤奋
2002-3-27 14:22:47

-------------------------------------------------------------------
自“Mapinfo上的GIS系统开发”一文在计算机世界网上刊登后,有好几位读者向我询问坐标系定义与转换方面的问题,问题可归结为 (1) 地图在Mapinfo上显示得很好,但在MapX中却显示不出来或显示得不对;(2) GPS定位得到的WGS84坐标怎么往北京54坐标地图上转。这些问题也是曾经困惑我的问题,在此我谈谈我个人的一些认识及经验,供各位读者参考,也希望相关方面的专业人士能给予纠正及补充。
1. 椭球体、基准面及地图投影
GIS中的坐标系定义是GIS系统的基础,正确定义GIS系统的坐标系非常重要。GIS中的坐标系定义由基准面和地图投影两组参数确定,而基准面的定义则由特定椭球体及其对应的转换参数确定,因此欲正确定义GIS系统坐标系,首先必须弄清地球椭球体(Ellipsoid)、大地基准面(Datum)及地图投影(Projection)三者的基本概念及它们之间的关系。
基准面是利用特定椭球体对特定地区地球表面的逼近,因此每个国家或地区均有各自的基准面,我们通常称谓的北京54坐标系、西安80坐标系实际上指的是我国的两个大地基准面。我国参照前苏联从1953年起采用克拉索夫斯基(Krassovsky)椭球体建立了我国的北京54坐标系,1978年采用国际大地测量协会推荐的1975地球椭球体建立了我国新的大地坐标系--西安80坐标系,目前大地测量基本上仍以北京54坐标系作为参照,北京54与西安80坐标之间的转换可查阅国家测绘局公布的对照表。 WGS1984基准面采用WGS84椭球体,它是一地心坐标系,即以地心作为椭球体中心,目前GPS测量数据多以WGS1984为基准。
上述3个椭球体参数如下:

椭球体与基准面之间的关系是一对多的关系,也就是基准面是在椭球体基础上建立的,但椭球体不能代表基准面,同样的椭球体能定义不同的基准面,如前苏联的Pulkovo 1942、非洲索马里的Afgooye基准面都采用了Krassovsky椭球体,但它们的基准面显然是不同的。
地图投影是将地图从球面转换到平面的数学变换,如果有人说:该点北京54坐标值为X=4231898,Y=21655933,实际上指的是北京54基准面下的投影坐标,也就是北京54基准面下的经纬度坐标在直角平面坐标上的投影结果。
2. GIS中基准面的定义与转换
虽然现有GIS平台中都预定义有上百个基准面供用户选用,但均没有我们国家的基准面定义。假如精度要求不高,可利用前苏联的Pulkovo 1942基准面(Mapinfo中代号为1001)代替北京54坐标系;假如精度要求较高,如土地利用、海域使用、城市基建等GIS系统,则需要自定义基准面。
GIS系统中的基准面通过当地基准面向WGS1984的转换7参数来定义,转换通过相似变换方法实现,具体算法可参考科学出版社1999年出版的《城市地理信息系统标准化指南》第76至86页。假设Xg、Yg、Zg表示WGS84地心坐标系的三坐标轴,Xt、Yt、Zt表示当地坐标系的三坐标轴,那么自定义基准面的7参数分别为:三个平移参数ΔX、ΔY、ΔZ表示两坐标原点的平移值;三个旋转参数εx、εy、εz表示当地坐标系旋转至与地心坐标系平行时,分别绕Xt、Yt、Zt的旋转角;最后是比例校正因子,用于调整椭球大小。
MapX中基准面定义方法如下:
Datum.Set(Ellipsoid, ShiftX, ShiftY, ShiftZ, RotateX, RotateY, RotateZ, ScaleAdjust, PrimeMeridian)
其中参数: Ellipsoid为基准面采用的椭球体;
ShiftX, ShiftY, ShiftZ为平移参数;
RotateX, RotateY, RotateZ为旋转参数;
ScaleAdjust为比例校正因子,以百万分之一计;
PrimeMeridian为本初子午线经度,在我国取0,表示经度从格林威治起算。
美国国家测绘局(National Imagery and Mapping Agency)公布了世界大多数国家的当地基准面至WGS1984基准面的转换3参数(平移参数),可从 http://164.214.2.59/GandG/wgs84dt/dtp.html 下载,其中包括有香港Hong Kong 1963基准面、台湾 Hu-Tzu-Shan 基准面的转换3参数,但是没有中国大陆的参数。
实际工作中一般都根据工作区内已知的北京54坐标控制点计算转换参数,如果工作区内有足够多的已知北京54与WGS84坐标控制点,可直接计算坐标转换的7参数或3参数;当工作区内有3个已知北京54与WGS84坐标控制点时,可用下式计算WGS84到北京54坐标的转换参数(A、B、C、D、E、F):x54 = AX84 + BY84 + C,y54 = DX84 + EY84 + F,多余一点用作检验;在只有一个已知控制点的情况下(往往如此),用已知点的北京54与WGS84坐标之差作为平移参数,当工作区范围不大时精度也足够了。
从Mapinfo中国的URL(http://www.mapinfo.com.cn/download)可下载到包含北京54、西安80坐标系定义的Mapinfow.prj文件,其中定义的北京54基准面参数为:(3,24,-123,-94,-0.02,0.25,0.13,1.1,0),西安80基准面参数为:(31,24,-123,-94,-0.02,0.25,0.13,1.1,0),文件中没有注明其参数的来源,我发现它们与Mapinfo参考手册附录G"定义自定义基准面"中的一个例子所列参数相同,因此其可靠性值得怀疑,尤其从西安80与北京54采用相同的7参数来看,至少西安80的基准面定义肯定是不对的。因此,当系统精度要求较高时,一定要对所采用的参数进行检测、验证,确保坐标系定义的正确性。
3. GIS中地图投影的定义
我国的基本比例尺地形图(1:5千,1:1万,1:2.5万,1:5万,1:10万,1:25万,1:50万,1:100万)中,大于等于50万的均采用高斯-克吕格投影(Gauss-Kruger),又叫横轴墨卡托投影(Transverse Mercator);小于50万的地形图采用正轴等角割园锥投影,又叫兰勃特投影(Lambert Conformal Conic);海上小于50万的地形图多用正轴等角园柱投影,又叫墨卡托投影(Mercator),我国的GIS系统中应该采用与我国基本比例尺地形图系列一致的地图投影系统。
在MapX中坐标系定义由基准面、投影两部分参数组成,方法如下:
CoordSys.Set(Type, [Datum], [Units], [OriginLongitude], [OriginLatitude],
[StandardParallelOne], [StandardParallelTwo], [Azimuth], [ScaleFactor],
[FalseEasting], [FalseNorthing], [Range], [Bounds], [AffineTransform])
其中参数:Type表示投影类型,Type为1时地图坐标以经纬度表示,它是必选参数,它后面的参数都为可选参数;
Datum为大地基准面对象,如果采用非地球坐标(NonEarth)无需定义该参数;
Units为坐标单位,如Units为7表示以米为单位;
OriginLongitude、OriginLatitude分别为原点经度和纬度;
StandardParallelOne、StandardParallelTwo为第一、第二标准纬线;
Azimuth为方位角,斜轴投影需要定义该参数;
ScaleFactor为比例系数;
FalseEasting, FalseNorthing为东伪偏移、北伪偏移值;
Range为地图可见纬度范围;
Bounds为地图坐标范围,是一矩形对象,非地球坐标(NonEarth)必须定义该参数;
AffineTransform为坐标系变换对象。
相应高斯-克吕格投影、兰勃特投影、墨卡托投影需要定义的坐标系参数序列如下:
高斯-克吕格:投影代号(Type),基准面(Datum),单位(Unit),
中央经度(OriginLongitude),原点纬度(OriginLatitude),
比例系数(ScaleFactor),
东伪偏移(FalseEasting),北纬偏移(FalseNorthing)
兰勃特: 投影代号(Type),基准面(Datum),单位(Unit),
中央经度(OriginLongitude),原点纬度(OriginLatitude),
标准纬度1(StandardParallelOne),标准纬度2(StandardParallelTwo),
东伪偏移(FalseEasting),北纬偏移(FalseNorthing)
墨卡托: 投影代号(Type),基准面(Datum),单位(Unit),
原点经度(OriginLongitude),原点纬度(OriginLatitude),
标准纬度(StandardParallelOne)
在城市GIS系统中均采用6度或3度分带的高斯-克吕格投影,因为一般城建坐标采用的是6度或3度分带的高斯-克吕格投影坐标。高斯-克吕格投影以6度或3度分带,每一个分带构成一个独立的平面直角坐标网,投影带中央经线投影后的直线为X轴(纵轴,纬度方向),赤道投影后为Y轴(横轴,经度方向),为了防止经度方向的坐标出现负值,规定每带的中央经线西移500公里,即东伪偏移值为500公里,由于高斯-克吕格投影每一个投影带的坐标都是对本带坐标原点的相对值,所以各带的坐标完全相同,因此规定在横轴坐标前加上带号,如(4231898,21655933)其中21即为带号,同样所定义的东伪偏移值也需要加上带号,如21带的东伪偏移值为21500000米。
假如你的工作区位于21带,即经度在120度至126度范围,该带的中央经度为123度,采用Pulkovo 1942基准面,那么定义6度分带的高斯-克吕格投影坐标系参数为:(8,1001,7,123,0,1,21500000,0)。
那么当精度要求较高,实测数据为WGS1984坐标数据时,欲转换到北京54基准面的高斯-克吕格投影坐标,如何定义坐标系参数呢?你可选择WGS 1984(Mapinfo中代号104)作为基准面,当只有一个已知控制点时(见第2部分),根据平移参数调整东伪偏移、北纬偏移值实现WGS84到北京54的转换,如: (8,104,7,123,0,1,21500200,-200),也可利用 AffineTransform坐标系变换对象,此时的转换系数(A、B、C、D、E、F)中A、B、D、E为0,只有X、Y方向的平移值C、F ;当有3个已知控制点时,可利用得到的转换系数(A、B、C、D、E、F)定义 AffineTransform坐标系变换对象,实现坐标系的转换,如:(8,104,7,123,0,1,21500000,0,map.AffineTransform),其中AffineTransform定义为AffineTransform.set(7,A、B、C、D、E、F)(7表示单位米);当然有足够多已知控制点时,直接求定7参数自定义基准面就行了。
(网页编辑:编程浪子)

摘抄地址:http://www.cnblogs.com/jetz/archive/2005/03/28/127058.html

GIS中的坐标系定义与转换的更多相关文章

  1. ArcGIS中的坐标系定义与转换 (转载)

    原文:ArcGIS中的坐标系定义与转换 (转载) 1.基准面概念:  GIS中的坐标系定义由基准面和地图投影两组参数确定,而基准面的定义则由特定椭球体及其对应的转换参数确定,因此欲正确定义GIS系统坐 ...

  2. 聊聊GIS中的坐标系|再版

    本文约6500字,建议阅读时间15分钟. 作者:博客园/B站/知乎/csdn/小专栏 @秋意正寒 版权:转载请告知,并在转载文上附上转载声明与原文链接(https://www.cnblogs.com/ ...

  3. 聊聊GIS中的坐标系|再版 详细定义、计算及高程系统

    本篇讲坐标系统的详细定义,有关坐标系的变换公式,以及简单说说高程坐标系统. 本文约6000字,阅读时间建议45分钟.硬内容比较多,如有疏漏错误请指出,建议有兴趣的朋友进一步阅读. 作者:博客园/B站/ ...

  4. GIS中相交的定义(OGC相交的定义)

    我们常用GIS中的相交,比如在地图漫游的时候,屏幕显示的图形和屏幕这个包络线就是相交的关系.我们常用的GIS工具,拉框查询,这个用到的也是相交. 首先题目开起来很简单(开始的时候我是这样想的),但是做 ...

  5. 聊聊GIS中那些坐标系

    从第一次上地图学的课开始,对GIS最基本的地图坐标系统就很迷.也难怪,我那时候并不是GIS专业的学生,仅仅是一门开卷考试的专业选修课,就没怎么在意. 等我真正接触到了各种空间数据产品,我才知道万里长征 ...

  6. GIS中的坐标系

    原文地址:http://www.cnblogs.com/onsummer/p/7451128.html 从第一次上地图学的课开始,对GIS最基本的地图坐标系统就很迷.也难怪,我那时候并不是GIS专业的 ...

  7. GIS中的坐标系【Esri官方文档部分翻译】

    GCS 地理坐标系(GCS)使用椭圆体表面来定义地球上的位置.地理坐标系有三个部分: 基准面,是地球的椭圆体(椭球体)模型 本初子午线 角度单位 常见基准包括WGS84(用于GPS)和NAD83(用于 ...

  8. 聊聊GIS中的坐标系|再版 识别各种数据的坐标系及代码中的坐标系

    本篇讲讲在GIS桌面软件和实际数据中,以及各路GIS有关API的编程中,如何寻找坐标系信息.惯例: 本文约2000字,建议阅读时间10分钟. 作者:博客园/B站/知乎/csdn/小专栏 @秋意正寒 版 ...

  9. GIS中地图投影的定义

    我国的基本比例尺地形图[1:5千.1:1万.1:2.5万.1:5万.1:10万.1:25万.1:50万.1:100万]中,大于等于50万的均采用高斯-克吕格投影[Gauss-Kruger]:小于50万 ...

随机推荐

  1. php 页面压缩---

    网站优化中,页面压缩是很有效的一种方法,可以明显提升页面访问速度. 页面压缩也有很多的方法,有PHP自带的zlib的gzip压缩,还有清除html页面中不必要的字符,空格,注释,换行符等. 第一种打开 ...

  2. js、php 判断用户终端 、浏览器类型

    js 判断 用户使用终端 function isMobeil() { if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iP ...

  3. P2468 [SDOI2010]粟粟的书架

    传送门 二合一题.... 前面 $50$ 分: 考虑取书显然优先取厚的,所以答案满足单调性 发现 $P_{i,j}$ 不大,所以考虑二分最小厚度 $mid$,把大于等于 $mid$ 的书取走 维护 $ ...

  4. srping 事物管理

    1. 准备工作 1> 添加接口 BookShopDao package com.tx; public interface BookShopDao { //根据书号获取书的单价 public in ...

  5. async中series的实现 javascript构件

    //同步流程 var series=function(arr){ function async(i){ arr[i](function(){ if(1+i<arr.length){ async( ...

  6. django笔记-url

    本文章只是用于学习方面的笔记,方便以后避免重复掉坑. 1.模板template的html文件可以根据url.py文件配置的name查找对应的url 2.在template的html文件里里面的url就 ...

  7. cas aqs lock之间的关系

    CAS 对应cpu的硬件指令, 是最原始的原子操作 cas主要是在AtomicInteger AtomicXXX类中使用, 用于实现线程安全的自增操作 ++. 对应一个unsafe对象, 根据os平台 ...

  8. Docker容器日志查看与清理(亲测有效)

    https://blog.csdn.net/yjk13703623757/article/details/80283729 1. 问题 docker容器日志导致主机磁盘空间满了.docker logs ...

  9. shell 对字符的求长

    一,测试环境 echo "To the world you may be one person but to one person you may be the world" 对于 ...

  10. HDFS基本shell操作

    在客户端输入Hadoop fs,可以查看所有的,hadoop shell # -help [cmd] //显示命令的帮助信息,如: hadoop fs -help ls # -ls(r) <pa ...