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