坐標轉換一直是空間數據處理里面一個非常重要的內容,特別是目前我國已經全面啟用了CGCS2000坐標系統,以往那些54和80的坐標,未來都要統一轉換到2000上面,所以很多數據處理的單位和同學,都非常關心坐標轉換的問題。
蝦神曾經聽說地理所的一個大牛有過這樣的論點——GIS大部分東西,都能在計算機專業里面找到影子,只有空間參考和投影是屬於GIS自己所特有的東西。所以這個東西從來就是非地理專業與地理專業在學習和使用GIS中的一個分水嶺(話說蝦神作為一個純粹的計算機專業出身的碼農,當年學的時候也很痛苦……地圖學原理看了好多遍,才明白了個大概)。
ArcGIS作為世界上應用最廣的GIS軟件,在投影轉換方面的技術已經非常成熟了,但是因為中國特有的國情,導致很多國內特有的東西,他不具備——比如沒有內置各種坐標系轉換到CGCS2000的轉換參數(一些國際特別是北美通用的轉換參數,是內置的了),當然,還有國內特有的標准圖幅號這種東西……
下面我們來看看,如何進行轉換。
首先,轉換的原理就不在這里掉書袋了,網絡上很多,貼一張圖意思一下:
實際上兩個不同坐標系之間的轉換,就是平移、旋轉和比例尺度的的變化。
那么轉換的方法,通常在大范圍下,都是通過布爾沙沃爾夫七參數來進行轉換的,數學原理(此處省略一萬字和若干數學公式)……
理論研究的同學請去查閱《地圖學原理》一書相關章節,下面進入工程實踐操作:
ArcGIS里面,對於同橢球體下面的轉換,是不需要任何參數的,比如我用WGS84(wkid:4326)轉WGS84 Web Mercator(wkid: 3857),是不需要任何參數的:
但是要是換一個橢球體的話,比如換成cgcs2000,那么就需要定義地理轉換參數了,如下:
當然,在新版本(10.4之后)的ArcGIS中,如果你不設定轉換參數,也可以強轉,只是轉完之后,不保證精確度而已,而在比較老的版本里面,不設置轉換參數,就直接不允許執行的。
所以,在轉換的時候,定義轉換參數是非常重要的,下面我們來看看怎么計算並且設定轉換參數。
首先貼出公式,數學恐懼症的同學略過:
實際上就是一個七元方程組……好吧,算我沒說,我們直接用軟件來算。
要計算七元方程式組,就最少需要3個點來進行解算,限於寫代碼很痛苦,所以我們目前直接采用網上最流行的工具COORD GM來進行計算(有關心算法的,以后有機會再給大家討論)。
這個神奇的軟件如下:(PS:我很喜歡作者設置的這個圖標)。
執行流程如下:
首先,准備三組坐標……准備的方法就大家各顯身手了,比如用差分GPS去測量……,下面給出的三組模擬坐標,肯定是假的,僅供測試。
其中一組是WGS84的經緯度,一組是CGCS2000 3度分帶 117E的投影坐標,我們就用這兩組坐標來看看如何反算七參數。
首先,用ARCGIS的同學,要先明確一個問題,就是ArcGIS里面的XY坐標,與傳統測量里面的XY坐標,是正好相反的,如下所示:
為什么會這樣?因為傳統測繪領域(包括OGC標准的GeoJSON里面,都是定義緯度在前,經度在后,原因是緯度的英文單詞是latitude,簡寫為LAT;而經度是longitude,簡寫為LON……字母排序,你懂的)
明確這個問題之后,進入COORD GM操作時間:
步驟一:在COORD GM中設定要CGCS2000的橢球體參數:
CGCS2000橢球體的參數是公開的,在ArcGIS里面就有,這里只要需要輸入長半軸和扁率就可以了
然后開始計算七參數了:
選定好各種參數,注意輸入順序
三組坐標輸入完成之后,點擊計算,得到結果:
這個就是計算出來的七參數,但是目前在ArcGIS里面還不能直接用,因為ArcGIS里面的單位與COORD里面是不一樣的:
其中,ArcGIS里面的選擇角度的單位是秒,而COORD里面是弧度;而ArcGIS里面的縮放比例尺用的是標准單位,而COORD里面用的百萬分之,所以要進行如下轉換:
后面那藍色的就是可以在直接ArcGIS里面使用的參數了,下面把這些參數設置到ArcGIS中去:
Toolbox里面的投影轉換找到創建地理變化:
按照如下信息,輸入參數:
點擊OK,完成創建
創建完成之后,在你的電腦的如下位置,會生成一個轉換的配置文件:
C:用戶你的用戶名(比如Admin)AppDataRoamingEsriDesktop10.x(ArcGIS的版本)ArcToolboxCustomTransformations
比如我的機器上面,就在這個地方,配置文件的名稱就是你設置的轉換方法的名稱:
下面就可以進行投影轉換了:
然后你設置了數據和輸入輸出坐標系之后,系統會自動找到你設置的地理變換方法:
下面點擊OK,完成坐標轉換:
下面給出我這里的三組測試坐標系,大家可以用來練習一下:
No.1:
40.420897457099997,116.536157668000001
4476368.246360000222921,460634.908516999974381
No.2:
39.954091684500000,116.018334870999993,
4424893.136629999615252,416114.988767999981064
No.3:
39.834201677400003,116.712166401999994,
4411159.581939999945462,475361.417197000002488
輸出結果:
DX=-0.016777
DY=0.033226
DZ=0.031063
WX=-0.0000000034
WY=0.0000000069
WZ=0.0000000064
K=-0.000000007618
ArcGIS參數
XT = -0.016777
YT = 0.033226
ZT = 0.031063
XR = -0.07015968
YR = 0.14238288
ZR = 0.13206528
SD = -0.007618
計算結果如上,如果計算結果一致,就表示你的操作步驟正確了,當然,輸入的數值精度小數位不同,結果也會出現細微偏差,這個可以忽略。