刘佰琼,周 卫,戴相喜
(1.南京师范大学教育部虚拟地理环境重点实验室,江苏南京210046;2.南京市测绘勘察研究院有限公司,江苏南京210005)
基于ArcGIS Engine的矢栅基础地理数据空间转换方法研究
刘佰琼1,周 卫1,戴相喜2
(1.南京师范大学教育部虚拟地理环境重点实验室,江苏南京210046;2.南京市测绘勘察研究院有限公司,江苏南京210005)
随着2000国家大地坐标系的正式启用,实现基础地理数据不同坐标系间的空间转换具有重要意义和实用价值。基于Esri二次开发组件ArcGIS Engine所提供的空间转换和影像配准接口,讨论ArcGIS平台坐标转换和投影变换方法,采用C#语言设计开发空间转换系统,并进行转换误差分析,验证该转换方法的实用性和可靠性。
空间转换;投影变换;ArcGIS Engine
经国务院批准,我国自2008年7月1日起,正式启用2000国家大地坐标系(简称CGCS2000)[1-2]。然而我国现有的测绘成果大多是基于1954北京坐标系、1980西安坐标系或地方独立坐标系获得的,因此在今后相当长的时期内,面临着大量的基础地理数据空间转换问题。
目前许多学者都对空间转换模型进行了研究,探讨了公共点的选取原则和模型适用范围[3-4]。本文针对GIS中矢量数据和栅格数据的结构特点,讨论了ArcGIS软件平台坐标系统和地理参考投影变换的相关接口,并以实例介绍了在 Visual Studio 2005集成开发环境下使用Esri二次开发组件Arc-GIS Engine实现矢栅基础地理数据空间转换的关键技术方法。
1.转换模型
二维的平面坐标转换模型有多项式逼近、正形转换、相似变换、仿射变换等,其中相似变换四参数模型具有较高的严密性,适用于区域范围小、转换区域在两个坐标系中的几何相似程度好的情况[5-6],本文采用平面四参数模型进行矢量数据空间转换。
2.转换方法与流程
矢量数据是基础地理数据最主要的数据类型,能准确表示地理空间实体的位置、长度、面积等特性。由于矢量数据的所有空间几何实体都是由坐标点(串)构成的,所以逐点进行空间转换是最严密的转换方式。但是逐点转换需要对所有图形要素重新生成,要求读取并保存不同数据类型的符号,并且必须保证转换前后符号的一致性,增大了系统开销,计算量大,运行效率低。为了在提高转换效率的同时保证转换成果的可靠性,本文采用逐要素转换的方法,对矢量数据的每个图元要素依次进行转换。矢量数据的空间转换流程如图1所示,其中包括数据输入、数据处理和数据输出3大模块。
图1 矢量数据空间转换流程图
3.转换功能的实现
在二次开发组件 ArcGIS Engine中,提供了ITransform2D接口实现图形要素的平移、旋转和缩放,还提供了强大的坐标转换方法(transform)。ITransformation接口则提供了多种转换方法,包括莫洛金斯基转换(Abridged Molodensky transformation)、二次多项式转换(Affine transformation)等。矢量数据空间转换的主要代码与说明如下:
(1)根据控制点坐标拟合四参数
输入已知的n组控制点坐标,根据这些控制点坐标采用最小二乘拟合的方法计算转换参数。
IPoint[]fromPts=new PointClass[count];
IPoint[]toPts=new PointClass[count];
∥定义并初始化点数组,其中count为控制点个数
IAffineTransformation2D3GEN pAffineTrans=new Affine-Transformation2DClass();
∥定义并实例化相似变换接口对象
pAffineTrans. DefineConformalFromControlPoints (ref fromPts,ref toPts);
∥计算转换参数,其中Dx、Dy为坐标平移量,Dxscale、Dyscale为缩放尺度,Drotate为旋转角度
Dx=pAffineTrans.XTranslation;
Dy=pAffineTrans.YTranslation;
Dxscale=pAffineTrans.XScale;
Dyscale=pAffineTrans.YScale;
Drotate=pAffineTrans.Rotation;
(2)图元要素的空间转换
ArcGIS中的图元要素分为点、线、面、注记4种类型,其中点要素由坐标点对构成,线要素由一系列坐标串构成,面要素则由一系列首尾相连的坐标串构成。点、线、面3类要素都是一般的图形要素类,只需对其进行平移、旋转、缩放就可实现空间转换。
IFeatureCursor pFeaCur=pFeaCls.Update(null,false);
IFeature pFeature=pFeaCur.NextFeature();
IPoint pPoint=new PointClass();∥坐标基点
pPoint.X=Dx;pPoint.Y=Dy;
ITransform2D pTransform2D=pFeature.Shape;
∥要素按照四参数进行平移、旋转和缩放
pTransform2D.Move(Dx,Dy);
pTransform2D.Rotate(pPoint,Drotate);
pTransform2D.Scale(pPoint,Dxscale,Dyscale);
pFeature.Shape=pTransform2D as IGeometry;
∥将转换后的要素更新保存
pFeatureCursor.UpdateFeature(pFeature);
注记要素包含文字的空间位置、字体等注记信息,要求空间转换之后保持字体朝向不变,因此可采用中心点位平移的方法进行注记的空间转换。即首先计算出注记中心点经四参数模型转换后的坐标;再根据其转换前后的坐标值计算出坐标偏移量;最后将注记的文字和图形均按照中心点偏移量进行空间转换。
1.转换方法与流程
一般而言,要将栅格数据的空间信息转换到其他坐标系中,可通过几何校正来实现[7]。但是几何校正需要人工选取同名控制点,转换效率比较低。本文探讨了在已知两个坐标系之间转换参数的情况下,自动实现栅格数据空间转换的方法。
栅格数据空间转换流程如图2所示,首先获得栅格数据的四至坐标,并将其作为空间转换的控制点。然后通过已知的转换参数计算出其在目标坐标系下的新坐标,再在此基础上对栅格像元进行重采样,实现空间转换。该方法无需人工选取控制点,根据转换参数就可以方便地实现栅格数据不同坐标系之间的空间转换,提高了栅格数据空间转换的自动化程度,尤其适用于批量转换。
图2 栅格数据坐标转换流程图
2.转换功能的实现
栅格数据空间转换可通过IRaster GeometryProc接口实现,该接口提供了栅格数据的剪切(clip)、翻转(filp)、合并(merge)、映像(mirror)及镶嵌(mosaic)等操作。通过转换参数对栅格数据进行空间转换可以使用该接口的Wrap方法,该方法会略微改变影像图的色彩值。栅格数据空间转换的主要代码与说明如下:
1)获取栅格数据源坐标系的四至坐标
IEnvelope pEnv=pRasterLayer.AreaOfInterest;
∥根据最小外接矩形获得栅格数据四至坐标,并将其存入fromPtsCol点数组,作为源控制点坐标
IPointCollection fromPtsCol=new MultipointClass();
IPoint frPt1=new PointClass();
frPt1.X=pEnv.XMin;frPt1.Y=pEnv.YMin;
fromPtsCol.AddPoint(frPt1,ref obj,ref obj);
……
2)计算栅格数据目标坐标系的四至坐标
∥将四至坐标根据四参数进行坐标转换,并将转换结果存入toPtsCol点数组,作为目标控制点坐标
IClone pClone=frPt1 as IClone;
IPoint toPt1=pClone.Clone();
ITransform2D pTrans2D=toPt1 as ITransform2D;
pTrans2D.Move(Dx,Dy);
pTrans2D.Rotate(pPoint,Drotate);
pTrans2D.Scale(pPoint,Dxscale,Dyscale);
toPtsCol.AddPoint(toPt1,ref obj,ref obj);
……
3)根据控制点坐标进行栅格数据重采样
∥通过IGeoReference接口或IRasterGeometryProc接口进行栅格数据空间转换
IGeoReference pGR=pRasterLayer as IGeoReference;
pGR.Warp(fromPtsCol,toPtsCol,0);
pGR.Register();
值得注意的是,在栅格数据的空间转换过程中,由于对数据进行了重采样,空间转换后的相邻两幅栅格数据边缘会存在缝隙,无法做到无缝拼接。一种可行的解决方法是在转换前将栅格数据划分为具有一定重叠带的相邻图幅,转换后再将这些图幅拼接在一起,以消除缝隙对栅格数据的影响。
1.投影变换方法
在已知矢栅数据空间转换前后坐标系参数的情况下,可以使用投影变换方法实现基础地理数据的空间转换。ArcGIS软件平台的坐标系统主要有地理坐标系统(geographic coordinate system)和投影坐标系统(projected coordinate system)。其中,地理坐标系统定义了大地椭球体和大地基准面参数,如椭球体长半径、短半径、偏心率等;投影坐标系统则定义了投影参数,如东伪偏移(false easting)、北伪偏移(false northing)、中央经线(central meridian)等。
矢栅数据的投影变换流程如图3所示,对于矢量数据来说,仍然采用逐要素的变换方式,使用IGeometry接口的Project方法依次更新每个图元要素实体,实现不同空间参照系之间的相互转换;对于栅格数据,则可以根据IRaster GeometryPro接口的ProjectFast方法实现投影变换,并采用ISaveAs接口将栅格存储为Image、Tiff、Grid等数据格式。
2.投影变换功能实现
在进行投影变换之前,需要确定转换前后的空间参考信息,定义地理坐标系统和投影坐标系统的相关参数,其主要代码与说明如下:
1)设置空间参考信息
∥定义投影方式为高斯克吕格投影
IProjection pProj=pFact.CreateProjection((int)esriSR_
ProjectionType.esriSRProjection_GaussKruger);
∥定义投影单位、中央经线、东伪偏移、北纬偏移、比例系数、原点纬度等投影参数
IParameter[]pParm=new IParameter[5];
pParm[0]=pFact.CreateParameter((int)esriSRParameterType.esriSRParameter_FalseEasting);
……
2)实现投影变换
∥若为矢量数据,则依次对每个图形要素进行重投影处理,并更新图形实体
IGeometry pGeo=pFeature.Shape as IGeometry;
pGeo.SpatialReference=pSpatialRefFrom;
pGeo.Project((ISpatialReference)pSpatialRefTo);
∥若为栅格数据,则对整个栅格对象赋予投影信息,并进行重采样
IRasterGeometryProc pRasterGeometryPropc=new Raster-GeometryProcClass();
pRasLayer.SpatialReference=pSpatialRefFrom;
IRaster pRaster=pRasLayer.Raster;
pRasterGeometryPropc.ProjectFast(pSpatialRefTo,0,ref Missing,pRaster);
图3 投影变换方法流程图
笔者基于二次开发组件ArcGIS Engine,采用C#语言设计开发了矢栅基础地理数据空间转换系统,界面如图4所示。对同一区域的矢量和栅格数据采用同一套转换参数进行空间转换,将转换结果叠加显示,如图5所示,矢栅数据转换后具有较好的一致性。
为验证转换精度,选取4幅1∶1 000地形图从地方独立坐标系转换到2000国家大地坐标系,将转换后的图形数据与实际数据进行对比,抽样选取25个同名点进行误差分析,图6为转换后随机采样点的坐标分量残差,表1为误差统计表。由表1可知,X坐标的中误差为±7 mm,平均值为0 mm;Y坐标的中误差为±6 mm,平均值为±3 mm。
图4 系统主界面
图5 空间转换后矢量与栅格图层叠加
图6 空间转换随机采样点的坐标分量残差
表1 空间转换误差统计表 mm
随着2000国家大地坐标系的正式启用,实现不同坐标系之间的空间转换具有重要意义。本文根据我国多种坐标系统共存的现实,研究了一种通过坐标转换参数实现基础地理数据空间转换的实用方法,该方法的特点是使用一套转换参数即可完成矢量数据和栅格数据的同步转换。
另外,本文还介绍了在已知转换前后空间参考信息的情况下,通过投影变换实现矢栅数据空间转换的关键技术。笔者根据本文所述方法开发了矢栅基础地理数据空间转换系统,该系统能快速高效地完成不同坐标系间的空间变换,减少了人工干预,大大提高了转换效率和自动化水平,转换精度较高。
[1] 立实.2000国家大地坐标系7月1日启用[N].中国测绘报,2008-07-01.
[2] 陈俊勇,杨元喜,王敏,等.2000国家大地控制网的构建和它的技术进步[J].测绘学报,2007,36(1):1-8.
[3] 党亚民,成英燕,孙毅,等.图件更新北京54和西安80坐标系转换方法研究[J].测绘科学,2006,31(3): 20-22.
[4] 成英燕,程鹏飞,顾旦生,等.三维4参数模型实现地图到CGCS2000的转换[J].武汉大学学报:信息科学版,2010,35(6):747-751.
[5] 郭金运.地图数据几何纠正时仿射变换与相似变换的对比分析[J].测绘通报,2001(4):23-27.
[6] 韩雪培,廖帮固.海岸带数据集成中的空间坐标转换方法研究[J].武汉大学学报:信息科学版,2004,29(10):933-936.
[7] 王强,束炯,张晓沪.一种遥感图像的坐标转换方法[J].测绘科学,2006,31(4):137-139.
Research on Space Conversion Method for Foundation Geographical Data Based on ArcGIS Engine
LIU Baiqiong,ZHOU Wei,DAI Xiangxi
0494-0911(2011)12-0054-04
P208
B
2010-11-23
刘佰琼(1986—),女,四川泸州人,博士生,主要研究方向为基础地理信息系统。