李恒民,陳永波,李娜,張照杰
(山東正元地理信息工程有限責(zé)任公司,山東濟(jì)南 250101)
空間地理數(shù)據(jù)庫(kù)一般都具有空間參考屬性,空間參考定義了該數(shù)據(jù)集的地理坐標(biāo)系統(tǒng)或投影坐標(biāo)系統(tǒng),沒(méi)有坐標(biāo)系統(tǒng)的地理數(shù)據(jù)在生產(chǎn)應(yīng)用過(guò)程中是毫無(wú)意義的[1]。由于數(shù)據(jù)在使用過(guò)程中,不同坐標(biāo)系統(tǒng)的數(shù)據(jù)無(wú)法同時(shí)在一個(gè)系統(tǒng)中予以加載,數(shù)據(jù)轉(zhuǎn)換必然涉及坐標(biāo)系統(tǒng)的統(tǒng)一,需要對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行坐標(biāo)系統(tǒng)定義或進(jìn)行坐標(biāo)系統(tǒng)及投影轉(zhuǎn)換,針對(duì)不同精度要求,對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的地圖投影和坐標(biāo)轉(zhuǎn)換在實(shí)際應(yīng)用中顯得尤其重要。
坐標(biāo)系統(tǒng)之間的坐標(biāo)轉(zhuǎn)換包括:不同參心坐標(biāo)系之間的轉(zhuǎn)換;參心坐標(biāo)系與地心坐標(biāo)系之間的轉(zhuǎn)換;相同坐標(biāo)系內(nèi)坐標(biāo)形式如:直角坐標(biāo)、高斯平面坐標(biāo)與大地坐標(biāo)之間的轉(zhuǎn)換。兩個(gè)坐標(biāo)系轉(zhuǎn)換時(shí),如果原點(diǎn)相同,只需要做3次旋轉(zhuǎn)即可完成轉(zhuǎn)換;如果原點(diǎn)不同,則需要對(duì)坐標(biāo)軸進(jìn)行平移和旋轉(zhuǎn);如果坐標(biāo)系的尺度不同,只要增加一個(gè)尺度變化因子即可;而大地坐標(biāo)和高斯投影平面坐標(biāo)之間的轉(zhuǎn)換,僅需要進(jìn)行高斯投影正反算,通過(guò)設(shè)置中央子午線經(jīng)度和參考橢球、投影面來(lái)實(shí)現(xiàn)[2]。
常用的坐標(biāo)轉(zhuǎn)換方法為七參數(shù)轉(zhuǎn)換法,即3個(gè)平移因子(X平移,Y平移,Z平移),3個(gè)旋轉(zhuǎn)因子(X旋轉(zhuǎn),Y旋轉(zhuǎn),Z旋轉(zhuǎn)),一個(gè)比例因子(也叫尺度變化K),參數(shù)的獲取為地區(qū)測(cè)繪部門提供或通過(guò)已知點(diǎn)求解[3]。也有的采用三參數(shù)、四參數(shù)轉(zhuǎn)換法,需要根據(jù)轉(zhuǎn)換要求的精度和已知點(diǎn)的數(shù)量或已知轉(zhuǎn)換參數(shù)的個(gè)數(shù)確定采用何種轉(zhuǎn)換方式。
動(dòng)態(tài)投影是ArcMap中一種對(duì)Data Frame(工作區(qū))空間參考或?qū)尤階rcMap工作區(qū)中數(shù)據(jù)的投影變換。動(dòng)態(tài)投影是對(duì)數(shù)據(jù)顯示形態(tài)的改變,未使用坐標(biāo)轉(zhuǎn)換參數(shù),未修改數(shù)據(jù)文件存儲(chǔ)的實(shí)際數(shù)據(jù)坐標(biāo)值,要想保存動(dòng)態(tài)投影的設(shè)置,需要采用輸出時(shí)保存框架坐標(biāo)的方法,精度要求不高時(shí),可以使用動(dòng)態(tài)投影進(jìn)行坐標(biāo)轉(zhuǎn)換[4]。
在ArcCatalog中定義數(shù)據(jù)的坐標(biāo)系統(tǒng)描述,操作方法為:在數(shù)據(jù)上鼠標(biāo)右鍵→Properties→XY Coordinate System,其中定義坐標(biāo)系統(tǒng)描述的方法有 New、Modify、Select、Import,對(duì)于系統(tǒng)中未預(yù)先定義的坐標(biāo)系,一般采用New、Modify的方式,輸入自己設(shè)定的坐標(biāo)投影參數(shù),系統(tǒng)中預(yù)定義的坐標(biāo)系可以采用Select的方式,對(duì)于已有相同坐標(biāo)系統(tǒng)數(shù)據(jù)的情況,可以直接用Import導(dǎo)入已知坐標(biāo)系統(tǒng)數(shù)據(jù)的坐標(biāo)系,作為此次設(shè)置的坐標(biāo)系統(tǒng)描述。但在這里定義了數(shù)據(jù)的坐標(biāo)系統(tǒng)信息后,數(shù)據(jù)坐標(biāo)系統(tǒng)信息都對(duì)應(yīng)到與該數(shù)據(jù)同名而后綴名為.prj的文件當(dāng)中,數(shù)據(jù)本身并未發(fā)生投影變換,這里改的僅僅是對(duì)數(shù)據(jù)坐標(biāo)系統(tǒng)信息的一個(gè)描述。但這個(gè)描述也是非常重要的,對(duì)數(shù)據(jù)的投影變換、量測(cè)等操作均需要已知橢球參數(shù)及投影方法[4]。
投影變換與動(dòng)態(tài)投影不同,是真正意義上的坐標(biāo)變換,如果數(shù)據(jù)沒(méi)有任何空間參考信息,則ArcCatalog坐標(biāo)系統(tǒng)描述顯示為Unknown,對(duì)數(shù)據(jù)進(jìn)行投影變換的方法為:利用Define Projection工具,定義坐標(biāo)系統(tǒng)Coordinate System,(這個(gè)坐標(biāo)系統(tǒng)可以是系統(tǒng)自帶,可以是自己定義,也可以是已知數(shù)據(jù)的坐標(biāo)系);再利用Feature→Project或 Raster→Project Raster工具來(lái)對(duì)數(shù)據(jù)進(jìn)行投影變換。
不同的坐標(biāo)投影所基于的橢球體及Datum不同,需要在坐標(biāo)投影時(shí)制定轉(zhuǎn)換參數(shù),我們國(guó)家使用的1954年北京坐標(biāo)系和1980西安坐標(biāo)系,在變換到其他坐標(biāo)系統(tǒng)時(shí),需要提供一個(gè)Geographic Transformation,即提供轉(zhuǎn)換參數(shù)。這種變換方法可以根據(jù)已知的轉(zhuǎn)換參數(shù)個(gè)數(shù)選擇變換方法,完成對(duì)數(shù)據(jù)的投影變換,數(shù)據(jù)本身坐標(biāo)值隨著發(fā)生變化。
在 ArcGIS應(yīng)用中,通過(guò) ArcToolBox→Data Management Tools→ Projections and Transformations→ Feature→Project或Raster→Project來(lái)實(shí)現(xiàn)兩個(gè)矢量數(shù)據(jù)或影像數(shù)據(jù)坐標(biāo)系之間的數(shù)據(jù)轉(zhuǎn)換。首先選擇要轉(zhuǎn)換的文件或數(shù)據(jù)集,如果文件或數(shù)據(jù)集已有坐標(biāo)系統(tǒng),將自帶顯示此坐標(biāo)系,然后選擇轉(zhuǎn)換后的坐標(biāo)系統(tǒng),并選擇地理變換模板(Geographic Transformation)下拉框中自動(dòng)加載可用的模板。如果沒(méi)有可選項(xiàng),需要用戶自定義[5]。地理變換模板通過(guò) ArcToolBox→ Data Management Tools→ Projections and Transformations→ Create Custom Geographic Transformation來(lái)創(chuàng)建。
Public void Project(string FeaturePath,int FromXYName,int ToXYName);
該方法對(duì)實(shí)現(xiàn)IGeoemtry的對(duì)象進(jìn)行投影操作,參數(shù)為所要轉(zhuǎn)換的要素路徑、轉(zhuǎn)換前坐標(biāo)空間參考EPSG整數(shù)值,如WGS-84坐標(biāo)對(duì)應(yīng) 4 326,1980西安坐標(biāo)系3°帶120°對(duì)應(yīng)2 385等,也可以在系統(tǒng)中直接采用ESRI坐標(biāo)求整得到,如設(shè)置:
以下代碼中實(shí)現(xiàn)了對(duì)Igeoemtry對(duì)象從一個(gè)空間參考到另一個(gè)空間參考的投影操作:
定義好轉(zhuǎn)換坐標(biāo)參考后,需要對(duì)轉(zhuǎn)換的要素進(jìn)行讀取,首先獲取系統(tǒng)打開文件的路徑FilePath及文件名FileName.文件打開后,需要設(shè)置工作空間,并對(duì)空間數(shù)據(jù)的每個(gè)要素進(jìn)行遍歷處理,此處實(shí)現(xiàn)對(duì)打開的SHP文件進(jìn)行轉(zhuǎn)換,SDE數(shù)據(jù)Feature類似。
IGeometry接口的Project方法提供的投影操作實(shí)現(xiàn)了最基本的坐標(biāo)轉(zhuǎn)換功能.實(shí)際數(shù)據(jù)處理過(guò)程中,比較明確數(shù)據(jù)轉(zhuǎn)換前后空間參考信息情況下一般用此方法作坐標(biāo)轉(zhuǎn)換,不同投影帶之間的坐標(biāo)轉(zhuǎn)換就是一個(gè)典型。
ITransform2D接口不僅提供了圖形平移,旋轉(zhuǎn)和縮放,還提供了更加強(qiáng)大的坐標(biāo)轉(zhuǎn)換方法Transform.其定義如下:
在該方法中,參數(shù)direction是轉(zhuǎn)換方向,transformation是一個(gè)Itransformation接口,而Itransformation接口由很多類實(shí)現(xiàn),這意味著不同的實(shí)現(xiàn)類,所包含的坐標(biāo)轉(zhuǎn)換數(shù)學(xué)公式是不一樣的,這里面包括二次多項(xiàng)式轉(zhuǎn)換(AffineTransformation2D),AbridgedMolodensky轉(zhuǎn)換(AbridgedMolodenskyTransformation)等。
下面代碼簡(jiǎn)單實(shí)現(xiàn)了利用已知控制點(diǎn)進(jìn)行坐標(biāo)轉(zhuǎn)換的過(guò)程:
作者采用IGeometry.Project方法實(shí)現(xiàn)的矢量數(shù)據(jù)的轉(zhuǎn)換程序界面如圖1所示。
點(diǎn)擊打開文件,可以選擇需要轉(zhuǎn)換的矢量文件,選擇好后將放在轉(zhuǎn)換前文件列表中,坐標(biāo)轉(zhuǎn)換前需要設(shè)定原坐標(biāo)及其投影帶、目標(biāo)坐標(biāo)及其投影帶以及東偏移量,選擇好轉(zhuǎn)換前后的坐標(biāo)系以及投影帶之后,點(diǎn)擊確定轉(zhuǎn)換就可以實(shí)現(xiàn)坐標(biāo)轉(zhuǎn)換。
圖1 矢量數(shù)據(jù)坐標(biāo)轉(zhuǎn)換
利用ArcGIS Engine自帶的接口,能夠?qū)崿F(xiàn)簡(jiǎn)單的影像數(shù)據(jù)坐標(biāo)轉(zhuǎn)換,首先需要定義坐標(biāo)轉(zhuǎn)換空間參考:
下面的代碼,針對(duì)影像數(shù)據(jù).tif和.img格式的數(shù)據(jù),實(shí)現(xiàn)坐標(biāo)系統(tǒng)的轉(zhuǎn)換:其中,參數(shù)為源坐標(biāo)系代碼和目標(biāo)坐標(biāo)系代碼,定義如3.1矢量數(shù)據(jù)投影變換中的坐標(biāo)代碼定義;將柵格數(shù)據(jù)的存放位置與文件名分布定義為:FilePath和FileName。
影像數(shù)據(jù)糾正可以通過(guò)IrasterGeometryProc接口實(shí)現(xiàn)。該接口提供了影像Clip,F(xiàn)ilp,Merge,Mirror以及Mosaic等操作。如果通過(guò)控制點(diǎn)的方式對(duì)影像進(jìn)行糾正處理可以通過(guò)該接口的wrap方法。該方法聲明如下:
參數(shù) sourceControlPoints和 targetControlPoint定義了轉(zhuǎn)換前后坐標(biāo)系統(tǒng)中的控制點(diǎn)信息,transformType定義了坐標(biāo)轉(zhuǎn)換方法,ipRaster是需要轉(zhuǎn)換的Raster對(duì)象。
以下代碼是該接口使用的例子,實(shí)現(xiàn)了利用控制點(diǎn)對(duì)柵格數(shù)據(jù)進(jìn)行重投影的過(guò)程:參數(shù)rasterDataset為需要轉(zhuǎn)換的數(shù)據(jù)集,sourcePoints為源坐標(biāo)系控制點(diǎn),targetPoints為目標(biāo)坐標(biāo)系控制點(diǎn):
其中,有兩種方式保存轉(zhuǎn)換后的柵格數(shù)據(jù):改變?cè)瓥鸥駭?shù)據(jù)集或建立新的數(shù)據(jù)集。需要注意的是當(dāng)選擇不同的轉(zhuǎn)換類型時(shí)(參數(shù)transformType取值不同時(shí)),對(duì)控制點(diǎn)的對(duì)數(shù)也有不同的要求.此外,使用Iraster-GeometryProc.Wrap方法,會(huì)略微改變影像圖的色彩值,當(dāng)對(duì)一幅影像圖前后轉(zhuǎn)換作對(duì)比時(shí)會(huì)發(fā)現(xiàn)這種色彩的變化情況。
作者根據(jù)上述坐標(biāo)轉(zhuǎn)換方法實(shí)現(xiàn)的影像數(shù)據(jù)的轉(zhuǎn)換程序界面如圖2所示。
圖2 影像數(shù)據(jù)坐標(biāo)轉(zhuǎn)換
點(diǎn)擊打開文件,可以選擇需要轉(zhuǎn)換的影像文件,選擇好后將放在轉(zhuǎn)換前文件列表中,坐標(biāo)轉(zhuǎn)換前需要設(shè)定源坐標(biāo)及其投影帶、目標(biāo)坐標(biāo)及其投影帶以及東偏移量,選擇好轉(zhuǎn)換前后的坐標(biāo)系以及投影帶之后,點(diǎn)擊確定轉(zhuǎn)換就可以實(shí)現(xiàn)坐標(biāo)轉(zhuǎn)換。
文中詳細(xì)闡述了坐標(biāo)轉(zhuǎn)換和地圖投影的基本概念,介紹了坐標(biāo)轉(zhuǎn)換在ArcGIS中的實(shí)現(xiàn)方法,并通過(guò)代碼列舉,給出了利用ArcGIS Engine接口實(shí)現(xiàn)坐標(biāo)轉(zhuǎn)換的實(shí)現(xiàn)方法及過(guò)程,實(shí)現(xiàn)了常見坐標(biāo)系統(tǒng)之間的轉(zhuǎn)換,但轉(zhuǎn)換過(guò)程中,對(duì)控制點(diǎn)求參數(shù)的應(yīng)用全部封裝,用戶無(wú)法自主選擇參數(shù)轉(zhuǎn)換方式,需要在后續(xù)的程序中添加這些選項(xiàng)。
[1]王虎文.WGS-84坐標(biāo)系與任意坐標(biāo)系坐標(biāo)轉(zhuǎn)換[J].內(nèi)蒙古石油化工,2004,5(30):18~19.
[2]孫雙磊,翟甡,陳若飛等.基于ArcEngine的林火監(jiān)測(cè)云圖坐標(biāo)轉(zhuǎn)換及配準(zhǔn)功能的研發(fā)[J].測(cè)繪與空間地理信息,2008,31(2):26 ~31.
[3]徐仕琪,張曉帆,周可法等.關(guān)于利用七參數(shù)法進(jìn)行WGS-84和BJ-54坐標(biāo)轉(zhuǎn)換問(wèn)題的探討[J].測(cè)繪與空間地理信息,2007,30(5):33 ~42.
[4]王解先,王軍,陸彩萍.WGS-84與北京54坐標(biāo)的轉(zhuǎn)換問(wèn)題[J].大地測(cè)量與地球動(dòng)力學(xué),2003,23(3):70~73.
[5]郭金運(yùn),朱明法,徐泮林.地圖數(shù)據(jù)幾何糾正時(shí)仿射變換與相似變換的對(duì)比分析[J].測(cè)繪通報(bào),2001(4):23~27.