基于ArcGIS Engine的地图投影与坐标转换的研究与实现

2012-05-31 11:11李恒民陈永波李娜张照杰
城市勘测 2012年5期
关键词:控制点投影坐标系

李恒民,陈永波,李娜,张照杰

(山东正元地理信息工程有限责任公司,山东济南 250101)

1 引言

空间地理数据库一般都具有空间参考属性,空间参考定义了该数据集的地理坐标系统或投影坐标系统,没有坐标系统的地理数据在生产应用过程中是毫无意义的[1]。由于数据在使用过程中,不同坐标系统的数据无法同时在一个系统中予以加载,数据转换必然涉及坐标系统的统一,需要对现有数据进行坐标系统定义或进行坐标系统及投影转换,针对不同精度要求,对数据进行相应的地图投影和坐标转换在实际应用中显得尤其重要。

2 坐标转换与地图投影的基本概念

2.1 坐标转换的基本概念

坐标系统之间的坐标转换包括:不同参心坐标系之间的转换;参心坐标系与地心坐标系之间的转换;相同坐标系内坐标形式如:直角坐标、高斯平面坐标与大地坐标之间的转换。两个坐标系转换时,如果原点相同,只需要做3次旋转即可完成转换;如果原点不同,则需要对坐标轴进行平移和旋转;如果坐标系的尺度不同,只要增加一个尺度变化因子即可;而大地坐标和高斯投影平面坐标之间的转换,仅需要进行高斯投影正反算,通过设置中央子午线经度和参考椭球、投影面来实现[2]。

常用的坐标转换方法为七参数转换法,即3个平移因子(X平移,Y平移,Z平移),3个旋转因子(X旋转,Y旋转,Z旋转),一个比例因子(也叫尺度变化K),参数的获取为地区测绘部门提供或通过已知点求解[3]。也有的采用三参数、四参数转换法,需要根据转换要求的精度和已知点的数量或已知转换参数的个数确定采用何种转换方式。

2.2 ArcMap中的动态投影

动态投影是ArcMap中一种对Data Frame(工作区)空间参考或对加入ArcMap工作区中数据的投影变换。动态投影是对数据显示形态的改变,未使用坐标转换参数,未修改数据文件存储的实际数据坐标值,要想保存动态投影的设置,需要采用输出时保存框架坐标的方法,精度要求不高时,可以使用动态投影进行坐标转换[4]。

2.3 ArcCatalog中的坐标系统描述

在ArcCatalog中定义数据的坐标系统描述,操作方法为:在数据上鼠标右键→Properties→XY Coordinate System,其中定义坐标系统描述的方法有 New、Modify、Select、Import,对于系统中未预先定义的坐标系,一般采用New、Modify的方式,输入自己设定的坐标投影参数,系统中预定义的坐标系可以采用Select的方式,对于已有相同坐标系统数据的情况,可以直接用Import导入已知坐标系统数据的坐标系,作为此次设置的坐标系统描述。但在这里定义了数据的坐标系统信息后,数据坐标系统信息都对应到与该数据同名而后缀名为.prj的文件当中,数据本身并未发生投影变换,这里改的仅仅是对数据坐标系统信息的一个描述。但这个描述也是非常重要的,对数据的投影变换、量测等操作均需要已知椭球参数及投影方法[4]。

2.4 投影变换

投影变换与动态投影不同,是真正意义上的坐标变换,如果数据没有任何空间参考信息,则ArcCatalog坐标系统描述显示为Unknown,对数据进行投影变换的方法为:利用Define Projection工具,定义坐标系统Coordinate System,(这个坐标系统可以是系统自带,可以是自己定义,也可以是已知数据的坐标系);再利用Feature→Project或 Raster→Project Raster工具来对数据进行投影变换。

不同的坐标投影所基于的椭球体及Datum不同,需要在坐标投影时制定转换参数,我们国家使用的1954年北京坐标系和1980西安坐标系,在变换到其他坐标系统时,需要提供一个Geographic Transformation,即提供转换参数。这种变换方法可以根据已知的转换参数个数选择变换方法,完成对数据的投影变换,数据本身坐标值随着发生变化。

2.5 创建投影变换模板并实现投影变换

在 ArcGIS应用中,通过 ArcToolBox→Data Management Tools→ Projections and Transformations→ Feature→Project或Raster→Project来实现两个矢量数据或影像数据坐标系之间的数据转换。首先选择要转换的文件或数据集,如果文件或数据集已有坐标系统,将自带显示此坐标系,然后选择转换后的坐标系统,并选择地理变换模板(Geographic Transformation)下拉框中自动加载可用的模板。如果没有可选项,需要用户自定义[5]。地理变换模板通过 ArcToolBox→ Data Management Tools→ Projections and Transformations→ Create Custom Geographic Transformation来创建。

3 ArcGIS Engine接口实现矢量数据地图投影与坐标转换

3.1 IGeometry.Project方法

Public void Project(string FeaturePath,int FromXYName,int ToXYName);

该方法对实现IGeoemtry的对象进行投影操作,参数为所要转换的要素路径、转换前坐标空间参考EPSG整数值,如WGS-84坐标对应 4 326,1980西安坐标系3°带120°对应2 385等,也可以在系统中直接采用ESRI坐标求整得到,如设置:

以下代码中实现了对Igeoemtry对象从一个空间参考到另一个空间参考的投影操作:

定义好转换坐标参考后,需要对转换的要素进行读取,首先获取系统打开文件的路径FilePath及文件名FileName.文件打开后,需要设置工作空间,并对空间数据的每个要素进行遍历处理,此处实现对打开的SHP文件进行转换,SDE数据Feature类似。

IGeometry接口的Project方法提供的投影操作实现了最基本的坐标转换功能.实际数据处理过程中,比较明确数据转换前后空间参考信息情况下一般用此方法作坐标转换,不同投影带之间的坐标转换就是一个典型。

3.2 ITransform2D接口方法

ITransform2D接口不仅提供了图形平移,旋转和缩放,还提供了更加强大的坐标转换方法Transform.其定义如下:

在该方法中,参数direction是转换方向,transformation是一个Itransformation接口,而Itransformation接口由很多类实现,这意味着不同的实现类,所包含的坐标转换数学公式是不一样的,这里面包括二次多项式转换(AffineTransformation2D),AbridgedMolodensky转换(AbridgedMolodenskyTransformation)等。

下面代码简单实现了利用已知控制点进行坐标转换的过程:

3.3 矢量数据地图投影与坐标转换实现

作者采用IGeometry.Project方法实现的矢量数据的转换程序界面如图1所示。

点击打开文件,可以选择需要转换的矢量文件,选择好后将放在转换前文件列表中,坐标转换前需要设定原坐标及其投影带、目标坐标及其投影带以及东偏移量,选择好转换前后的坐标系以及投影带之后,点击确定转换就可以实现坐标转换。

图1 矢量数据坐标转换

4 ArcGIS Engine接口实现栅格数据地图投影与坐标转换

4.1 影像坐标转换

利用ArcGIS Engine自带的接口,能够实现简单的影像数据坐标转换,首先需要定义坐标转换空间参考:

下面的代码,针对影像数据.tif和.img格式的数据,实现坐标系统的转换:其中,参数为源坐标系代码和目标坐标系代码,定义如3.1矢量数据投影变换中的坐标代码定义;将栅格数据的存放位置与文件名分布定义为:FilePath和FileName。

4.2 影像纠正

影像数据纠正可以通过IrasterGeometryProc接口实现。该接口提供了影像Clip,Filp,Merge,Mirror以及Mosaic等操作。如果通过控制点的方式对影像进行纠正处理可以通过该接口的wrap方法。该方法声明如下:

参数 sourceControlPoints和 targetControlPoint定义了转换前后坐标系统中的控制点信息,transformType定义了坐标转换方法,ipRaster是需要转换的Raster对象。

以下代码是该接口使用的例子,实现了利用控制点对栅格数据进行重投影的过程:参数rasterDataset为需要转换的数据集,sourcePoints为源坐标系控制点,targetPoints为目标坐标系控制点:

其中,有两种方式保存转换后的栅格数据:改变原栅格数据集或建立新的数据集。需要注意的是当选择不同的转换类型时(参数transformType取值不同时),对控制点的对数也有不同的要求.此外,使用Iraster-GeometryProc.Wrap方法,会略微改变影像图的色彩值,当对一幅影像图前后转换作对比时会发现这种色彩的变化情况。

4.3 影像数据地图投影与坐标转换实现

作者根据上述坐标转换方法实现的影像数据的转换程序界面如图2所示。

图2 影像数据坐标转换

点击打开文件,可以选择需要转换的影像文件,选择好后将放在转换前文件列表中,坐标转换前需要设定源坐标及其投影带、目标坐标及其投影带以及东偏移量,选择好转换前后的坐标系以及投影带之后,点击确定转换就可以实现坐标转换。

5 结语

文中详细阐述了坐标转换和地图投影的基本概念,介绍了坐标转换在ArcGIS中的实现方法,并通过代码列举,给出了利用ArcGIS Engine接口实现坐标转换的实现方法及过程,实现了常见坐标系统之间的转换,但转换过程中,对控制点求参数的应用全部封装,用户无法自主选择参数转换方式,需要在后续的程序中添加这些选项。

[1]王虎文.WGS-84坐标系与任意坐标系坐标转换[J].内蒙古石油化工,2004,5(30):18~19.

[2]孙双磊,翟甡,陈若飞等.基于ArcEngine的林火监测云图坐标转换及配准功能的研发[J].测绘与空间地理信息,2008,31(2):26 ~31.

[3]徐仕琪,张晓帆,周可法等.关于利用七参数法进行WGS-84和BJ-54坐标转换问题的探讨[J].测绘与空间地理信息,2007,30(5):33 ~42.

[4]王解先,王军,陆彩萍.WGS-84与北京54坐标的转换问题[J].大地测量与地球动力学,2003,23(3):70~73.

[5]郭金运,朱明法,徐泮林.地图数据几何纠正时仿射变换与相似变换的对比分析[J].测绘通报,2001(4):23~27.

猜你喜欢
控制点投影坐标系
解变分不等式的一种二次投影算法
基于最大相关熵的簇稀疏仿射投影算法
找投影
找投影
解密坐标系中的平移变换
坐标系背后的故事
NFFD控制点分布对气动外形优化的影响
基于重心坐标系的平面几何证明的探讨
基于风险管理下的项目建设内部控制点思考
相似材料模型中控制点像点坐标定位研究