四/七参数计算方法及"傻瓜式"转换流程
坐标转换隶属于"大地测量学"的范畴,而大地测量学呢,又是整个测绘学科中最基础、最重要,但知识的理论性最强的一门学科。
今天呢,测绘营地将尽量用通俗易懂的语言为大家讲解一下坐标系的区别、几种转换方式、中央子午线的确定等等基本科普知识,然后用尽量"傻瓜式"的操作步骤,一步一步教大家如何利用COORD软件进行四参数和七参数的计算,并介绍坐标点的转换流程。
1 坐标系
1.坐标系分类
这里暂且将坐标系分为两种,地理坐标系和投影坐标系。
地理坐标系,也称大地坐标系(球面坐标B、L、H):以参考椭球面为基准面建立起来的坐标系。地面点的位置用大地纬度(B)、大地经度(L)和大地高度(H)表示。
CGCS2000、北京54、西安80、城市独立坐标系均为地理坐标系。
投影坐标系(平面坐标X、Y):从参考椭球体按照某种投影方法(如高斯投影,横轴墨卡托投影)投影得到的,它对应于某个地理坐标系。
此时应注意
测绘里的坐标系和我们中学里学到的平面坐标系xy是相反的!
测绘里北坐标是X,东坐标是Y。
如cad、奥维软件里面对应的坐标,按顺序应该是(东坐标,北坐标)或者可以说成是CAD风格的(X,Y),就是测绘风格的(东坐标,北坐标)。
2.关于坐标系的表述
我们平时所说的控制点N1的北京54坐标为:(2187995.26,321316.58)
其实严格意义的表述应该为:
N1的平面坐标为:(北坐标2187995.26,东坐标321316.58) ,1954年北京坐标系,高斯3度带投影(带号37),中央子午线111度。
加带号37的完整坐标为(北坐标2187995.26,东坐标37321316.58)。
简单来说,大地坐标是经纬度BL,投影坐标是XY。
3.三种坐标系的相对位置关系
测绘营地为大家做了一张北京54、西安80、CGCS2000的相对位置关系图,供大家参考,有时候可以用来辅助判断图纸的坐标系。
4.关于WGS84坐标系
WGS84坐标系是地心坐标系,属于大地坐标系中的一种。
它主要以经纬度和大地高(椭球高)的形式表现。
它一般出现在:
RTK测量手簿的原始数据坐标系
无人机POS定位数据的原始坐标系
由于WGS84坐标系的椭球参数与CGCS2000坐标系的椭球参数极为接近,他们两者的同一经纬度坐标,在相同投影方式下的投影坐标几乎一致,仅有微小差异(毫米级别),在当前测量精度的条件下这种差异是可以忽略的。
因此,可以说WGS84和CGCS2000的坐标是可以等同的,它们的经纬度坐标在不进行参数转换的情况下是一致的。
2 常用的转换方式(针对平面转换)
1.A平面坐标系——B平面坐标系(后面会用到)
此时,A坐标系(转换前)称为源坐标系,B坐标系(转换后)称为目标坐标系。
涉及的常见转换参数:
二参数:
包含X平移,Y平移
四参数:
包含X平移,Y平移,旋转,尺度(缩放)
七参数,最常用的叫布尔莎七参数:
包含X平移,Y平移,Z平移,X旋转,Y旋转,Z旋转,尺度(缩放)
2.相同椭球下,大地坐标系BL——平面坐标系XY(正算)
通过设置椭球参数+投影方式+中央子午线
3.相同椭球下,平面坐标系XY——大地坐标系BL(反算)
同样通过设置椭球参数+投影方式+中央子午线,进行反推
3 如何确定中央子午线及投影带号
1.已知加带号的坐标
如北坐标2187995.26,东坐标37321316.58,则中央子午线的经度=37×3=111度。
2.根据大地坐标经度L
所在地经度范围对应的中央经线请参考下表(来自于奥维官方帮助文档):
4 计算转换参数必要条件
科普——公共点(该点的2个坐标系统的坐标都知道)
二参数:至少1个公共点的两套坐标
四参数:至少2个公共点的两套坐标
七参数,至少3个公共点的两套坐标
5 转换四/七参数计算方法
准备材料:4个公共点,1个检查点
(5个点均为在海南岛上任意选取的假定点)
计算工具:COORD(笑脸软件)
公共点与检查点分布如下:
(注:海南岛的面积约为3.39万平方公里——来自百度百科)
下面以CGCS2000(源坐标)转换至北京54坐标系(目标坐标)为例:
1.四参数计算
计算形式:源坐标XY——目标坐标XY
(1)制作参与计算的数据文件
文件格式为txt或者csv都可以,数据存放顺序为:点号,源坐标X,源坐标Y,目标坐标X,目标坐标Y,
(2)设置——计算四参数——文件导入,选择刚刚做好的数据文件——点击计算
然后我们可以看到计算的四参数结果,及其参数精度(用RMS表示,单位米,越小越好)
点击"导出",可以以txt文本形式导出保存算好的四参数
下面我们点击"确定"——"确定",将该参数用于计算。
(3)转换参数精度检查(进行数据转换也是这个流程)
输入源坐标(2000坐标)——将转换前后的椭球选成一致的——勾选"平面转换",勾选两个"平面坐标"——点击"转换坐标"——将转换后的坐标与已知的54坐标进行比较。
2.七参数计算
计算形式:源坐标BL——目标坐标XY
(1)先将源坐标XY转换成对应椭球的经纬度坐标BL
1、设置投影参数
设置——地图投影——选择"高斯三度带投影",中央子午线输入111:00:00.000000E——确定
2、选择文件格式
点击"文件转换"——格式——选择第二种格式(点号,北方向X,东方向Y,水准高)——确定
3、选择文件进行转换
浏览,选取2000坐标txt文件——转换前勾选"平面坐标",转换后勾选"大地坐标",不勾选任何"坐标转换"方式,前后椭球均为CGCS2000——点击"=>"——确定设置转换关系
此时在《2000坐标-111-北东.TXT》文件下生成了一个《2000坐标-111-北东.txt1》的文件,重命名把"txt1"改成"txt"、"北东"改成"BL"即可。
此时我们就得到了源坐标的经纬度BL。
(2)制作参与计算的数据文件
文件格式为txt或者csv都可以,数据存放顺序为:点号,源坐标B,源坐标L,源坐标H,目标坐标X,目标坐标Y,目标坐标H
其中两个H可以不填或者填0,格子必须占着。
(3)设置换带中央子午线
设置——换带计算——确定——中央子午线输入111——确定——中央子午线输入111——确定
(4)计算七参数
设置——计算七参数——文件导入,导入刚刚做好的数据文件——前一个椭球选择CGCS2000,后一个椭球选择北京54——点击"计算"
然后我们可以看到计算的七参数结果,及其参数精度(用RMS表示,单位为米,越小越好)
点击"导出",可以以txt文本形式导出保存算好的七参数
下面我们点击"确定"——"确定",将该参数用于计算。
(5)转换参数精度检查(进行数据转换也是这个流程)
1、设置中央子午线
设置——换带计算——确定——中央子午线输入111——确定——中央子午线输入111——确定
2、单点转换——输入源坐标(2000坐标)——输入源椭球选择CGCS2000,输出目标椭球选择北京54——勾选"七参数转换",勾选两个"平面坐标"——点击"转换坐标"——将转换后的坐标与已知的54坐标进行比较
6 结语
在文章结尾郑重声明,本文所涉及到的北京54与CGCS2000坐标数据,均为假定坐标,仅为学习测试用,其四参数与七参数计算结果与国家标准的北京54与CGCS2000坐标系转换参数远远不符,无法用于国内任何城市的有效坐标转换。特此说明。
同时强调,根据自然资发〔2020〕95号中《测绘地理信息管理工作国家秘密目录》的规定,2000国家大地坐标系、1954年北京坐标系、1980西安坐标系之间的相互转换参数;国家大地坐标系与相对独立的平面坐标系统之间相互转换精度优于±10厘米的转换参数均属于机密级别,请大家在平时的工作中注意该类参数的保密性!
--------------------------------------
arcpy投影(一)——prj、gtf文件定义、路径及解析(arcmap,arcpro)
一、投影坐标prj文件,转换gtf文件
ArcGIS的prj文件是一个专门用来描述坐标系投影的文件,里面定义了坐标系的名称、长短半轴、基准面、投影参数等一些其他重要的信息。
gtf文件是专门用来描述坐标转换关系的文件,在你自定义转换关系(Create Custom Geographic Tramsformation)后均会在默认路径下生成,该文件中包含了转换关系名称、原始坐标系名称及相应参数、目标坐标系名称及相应参数,以及两个坐标系统转换的方法与参数。
二、文件路径
无论是ArcMap还是Arcpro,这两种文件都是放在C盘用户文件夹在的AppData文件夹中,要注意的是AppData文件夹为隐藏文件夹,如果找不到的话可以勾选文件夹"查看"中的"隐藏的项目"选项。
(一)ArcMAP路径
ArcMap中自定义坐标系和投影关系分别放在Coordinate System和CustomTransformations文件夹中
(1)自定义坐标系
若Coordinate System文件夹不存在,则在第一行路径下进行创建,若存在prj文件直接放入到文件夹中
C:\User\Administrator\AppData\Roaming\Esri\Desktop10.6\ArcMap\
1
C:\User\Administrator\AppData\Roaming\Esri\Desktop10.6\ArcMap\Coordinate System
1
(2)转换关系
同上
C:\User\Administrator\AppData\Roaming\Esri\Desktop10.6\ArcToolbox\
1
C:\User\Administrator\AppData\Roaming\Esri\Desktop10.6\ArcToolbox\CustomTransformations
1
(二)ArcPro路径
(1)自定义坐标系
在pro中进行了测试,新建Coordinate System文件夹等方式都不可以识别到,通过收藏的方式可以进行识别,自己弄的投影可以放到这个路径下,但是经测试目前pro在这个路径下只能识别出来全英文名的prj文件,如果使用Arcpy进行处理时,可以直接通过路径进行指认。
C:\User\Administrator\AppData\Local\ESRI\ArcGISPro\Favorites
1
(2)转换关系
同ArcMap,注意如果要使用Arcpro的Arcpy进行投影关系的变换,一定要检查该路径下是否已经存在对应的转换关系,没有的话要进行生成或从他处拷贝,否则函数会报参数错误,这部分后面的文章中会提到。
C:\User\Administrator\AppData\Roaming\Esri\ArcGISPro\ArcToolbox \
1
C:\User\Administrator\AppData\Roaming\Esri\ArcGISPro\ArcToolbox\CustomTransformations
1
三、文件内容解析
(一)投影坐标系prj文件
PROJCS[
"Ain_el_Abd_UTM_Zone_38N"
,GEOGCS[
"GCS_Ain_el_Abd_1970"
,DATUM["D_Ain_el_Abd_1970"
,SPHEROID["International_1924",6378388.0,297.0]]
,PRIMEM["Greenwich",0.0]
,UNIT["Degree",0.0174532925199433]
]
,PROJECTION["Transverse_Mercator"]
,PARAMETER["False_Easting",500000.0]
,PARAMETER["False_Northing",0.0]
,PARAMETER["Central_Meridian",45.0]
,PARAMETER["Scale_Factor",0.9996]
,PARAMETER["Latitude_Of_Origin",0.0]
,UNIT["Meter",1.0]
,AUTHORITY["EPSG",20438]
这是一个投影坐标系。
PROJCS:代表的是其投影坐标系。
投影名称是:Ain_el_Abd_UTM_Zone_38N
基准面信息:D_Ain_el_Abd_1970
椭球体:SPHEROID["International_1924",6378388.0,297.0]-长半轴和反扁率
单位:UNIT["Degree",0.0174532925199433]
PARAMETER:代表投影重要的参数信息
(二)地理坐标prj文件
GEOGCS[
"GCS_Beijing_1954"
,DATUM[
"D_Beijing_1954"
,SPHEROID["Krasovsky_1940",6378245.0,298.3]
]
,PRIMEM["Greenwich",0.0]
,UNIT["Degree",0.0174532925199433]
,AUTHORITY["EPSG",4214]
这是一个经纬度坐标系。
GEOGCS:代表是其地理坐标系
基准面:D_Beijing_1954
椭球体:Krasovsky_1940
长半轴:6378245.0
反扁率:298.3
中央经线:PRIMEM["Greenwich",0.0] - 格林威治
单位:UNIT["Degree",0.0174532925199433]
(三)变换关系gtf文件
GEOGTRAN["CGS2000_TO_BJ1954", #转换关系名称
GEOGCS["GCS_China_Geodetic_Coordinate_System_2000", #数据原始坐标系名称
DATUM["D_China_2000", #原始坐标系椭球体名称及参数
SPHEROID["CGCS2000",6378137.0,298.257222101]],
PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]
],
GEOGCS["GCS_Beijing_1954", #数据目标坐标系名称
DATUM["D_Beijing_1954", #目标坐标系椭球体名称及参数
SPHEROID["Krasovsky_1940",6378245.0,298.3]],
PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]
],
METHOD["Geocentric_Translation"], #转换方法及参数
PARAMETER["X_Axis_Translation",0.0],
PARAMETER["Y_Axis_Translation",0.0],
PARAMETER["Z_Axis_Translation",0.0]
一、"坐标系、投影和变换"、"地理基准面变换"基本概念
首先介绍两个基本概念,一是"坐标系、投影和变换",二是"地理基准面变换"。"坐标系、投影和变换"是地图学中要学习最基本概念,可以查看书籍和帮助文档。
我们重点介绍一下 "地理基准面变换" ,帮助文档中给出的解释:地理坐标系描述了如何将地球上的位置放置在一个假想的参考球体上。使用角度单位(例如度)来在一个参考球体上分配坐标位置。地理坐标系不止一种,因为在不同的位置,每种坐标系都有不同的选择,即存在最为适合的参考椭球面。这种设计十分必要,原因在于地球实际上是一个凹凸不平的球体。变换是在地图绘制时将图层的地理坐标系转换为与地图的地理坐标系相匹配的计算,可确保全部对齐。数据不会由于变换发生更改。
我们应当准确把握的是:地理基准面变换是在原始坐标系和目标坐标系的地理基准面不同的情况下需要进行的一步操作,也可以理解为当两个坐标系统采用不同的椭球体时,需要给椭球体的变换提供一个可用的函数,从而确保数据可以进行正确的对齐计算。 例如:你将数据从CGS2000转换为CGS2000 3 degree 108E,两个投影均采用同一个地理基准面,因此该转换过程不需要进行基准面变换,而当你将CGS2000的数据变换为WGS84时,则必须进行这个基准面的变换。
二、Spatial Reference object及Transformations参数
介绍完上述的两个基本概念,我们需要进一步的了解在进行投影定义或者坐标转换时都需要用到空间参考对象(Spatial Reference object),以及在进行基准面变换时需要用到转换关系参数(Transformations)。
一、定义投影
(一)基本概念
定义投影的工具在我们的日常操作中多用于给具有未知坐标系(即,在数据集属性中坐标系为"未知")的数据集或要素类指定一个已知坐标系,该工具同样可以对已存在坐标系统信息的数据进行覆盖更新,将具有已知坐标系的数据集输入此工具时,此工具将显示警告信息,但仍将成功执行。
(二)注意事项
①使用该工具可以将数据的坐标信息修改为指定的坐标系统,但当用户无法确定当前数据是否能与指认坐标系信息正确对应时,定义投影的结果存在不确定性,若指认的坐标系统存在错误,则实际的数据投影是存在错误的,在后续操作中可能会出现问题,这是要素考是否是这一环节出现的问题。例如数据的坐标值为经纬度,而用户直接定义投影坐标系,则会出现坐标数值与投影坐标系统范围间的冲突,从而无法达到预期效果,需要注意。
②该工具是直接修改数据的坐标系信息,而不是新建一个要素,因此使用前应考虑好数据备份的问题。
③地理数据库要素数据集中的所有要素类将使用同一个坐标系。对于地理数据库数据集而言,应在其创建时确定坐标系。数据集包含要素类之后,其坐标系将无法更改。
二、投影变换
(一)基本概念
投影变换时将空间数据从一种坐标系投影到另一种坐标系的过程,该过程可以是:①从地理坐标系变换到投影坐标系、②从地理坐标系A变换到地理坐标系B,③从投影坐标系A变换到投影坐标系B。 ②和③均有可能存在两种坐标系统的基准面不同的情况,需要进行基准面的转换,该工具中也提供了基准面转换关系的参数输入,在后面的文章中我们也会进行详细介绍。
(二)注意事项
①该工具的地理变换参数是可选参数。 当不需要地理变换或基准面变换时,参数中不会出现下拉列表,并且参数为空。 当需要变换时,将会基于输入基准面和输出基准面生成一个下拉列表,并会选择一个默认变换。(例如,从 GCS2000 投影到 GCS2000_3_degree_108E 时不需要地理变换,因为输入坐标系和输出坐标系都具有 GCS2000 基准面。 但是,从 GCS2000 投影到 WGS_1984_UTM_Zone_12N 时则需要地理变换,因为输入坐标系使用的是GCS2000 基准面,而输出坐标系使用的是 WGS_1984 基准面。可以使用工具进行测试,输入数据和目标坐标系后,若列表中不自动弹出变换关系,则需要通过Create Custom Geographic Tramsformation工具来进行自定义。
提示:变换是双向的。 例如,如果将数据从 WGS 1984 转换为 NAD 1927,可以选取一个名为 NAD_1927_to_WGS_1984_3 的变换,然后此工具即可正确应用它。)
②空间范围的问题,在定义投影中我们已经讲到每一个投影都是有他对应的坐标范围的,如果输入数据的坐标值与他所带的空间参照信息之间存在冲突,则在运行本工具时常常会报出"Error 999999执行函数出错 invalid extent for output coordinate system"的错误,这是应当考虑输入数据是否存在上述问题。
③关于输出数据,应当指出路径和数据名称,不支持 in_memory 工作空间作为编写输出数据集的位置。
④如果输入的要素类或数据集具有"未知"或未指定的坐标系,可以使用输入坐标系参数指定输入数据集的坐标系。 这样,无需修改输入数据就可以指定数据的坐标系(当输入数据为只读格式时,可能无法修改)。 也可以使用定义投影工具永久性地为该数据集指定一个坐标系。
⑤此工具的输入不能是 Coverage、VPF Coverage、栅格数据集和栅格目录。 使用投影栅格工具可以对栅格数据集进行投影。
上述四点注意事项是在常规使用中需要注意点,除此之外想要继续深入的了解可以查看投影变换官方帮助文档。
(四)地理投影变化的自定义
①椭球体不同带来的问题
假设我们直接使用Project工具将wgs84坐标系变换为CGS2000坐标系,如图1所示,在我输入完几个必填参数后,由于椭球体不同,此时地理转换关系前面就出现了绿点,这个参数变成了必选参数,这是由于wgs84使用的是D_WGS_84椭球体而cgs2000使用的是D_China_2000椭球体
②自定义变换关系及文件生成
在project工具中,地理变换关系参数没有被识别出来,说明该gtf文件不存在,这个时候就需要我们使用自定义工具来进行自定义,工具位置如图4,点击工具后按照图5进行参数设置,(由于我们的目标坐标系是CGS2000,参数尚未开放,因此我这里直接将转换参数设置为0,0,0进行演示,如果需要这个参数可以向有关部门申请或者作为教育科研使用的情况下通过软件进行参数反算,这里不做赘述)。运行工具后我们就可以在对应路径下找到gtf文件(图6),arcpro工具基本一致,无论是map还是pro都会在路径下生产gtf文件。
此时我们再使用project时,即可看到软件自动识别到了我们刚刚自定义的转换关系(图7)