GIS中的座標系定義與轉換 (轉)
GIS中的座標系定義與轉換
自 "Mnfo上的GIS開發"一文在世界網上刊登後,有好幾位網友向我詢問座標系定義與轉換方面的問題,問題可歸結為 (1) 地圖在Mapinfo上顯示得很好,但在MapX中卻顯示不出來或顯示得不對;(2) GPS定位得到的WGS84座標怎麼往北京54座標地圖上轉。這些問題也是曾經困惑我的問題,在此我談談我個人的一些認識及,供各位參考,也希望相關方面的專業人士能給予糾正及補充。
1. 橢球體、基準面及地圖投影
GIS中的座標系定義是GIS系統的基礎,正確定義GIS系統的座標系非常重要。GIS中的座標系定義由基準面和地圖投影兩組引數確定,而基準面的定義則由特定橢球體及其對應的轉換引數確定,因此欲正確定義GIS系統座標系,首先必須弄清地球橢球體(Ellipsoid)、大地基準面(Datum)及地圖投影(Projection)三者的基本概念及它們之間的關係。
基準面是利用特定橢球體對特定地區地球表面的逼近,因此每個國家或地區均有各自的基準面,我們通常稱謂的北京54座標系、西安80座標系實際上指的是我國的兩個大地基準面。我國參照前蘇聯從1953年起採用克拉索夫斯基(Krassovsky)橢球體建立了我國的北京54座標系,1978年採用國際大地測量協會推薦的1975地球橢球體建立了我國新的大地座標系--西安80座標系,目前大地測量基本上仍以北京54座標系作為參照,北京54與西安80座標之間的轉換可查閱國家測繪局公佈的對照表。 WGS1984基準面採用WGS84橢球體,它是一地心座標系,即以地心作為橢球體中心,目前GPS測量資料多以WGS1984為基準。
上述3個橢球體引數如下:
橢球體 Mapinfo中代號 年代 長半軸 短半軸 1/扁率
Krassovsky 3 1940 6378245 6356863 298.3
IAG 75 31 1975 6378140 6356755 298.25722101
WGS 84 28 1984 6378137.000 6356752.314 298.257223563
橢球體與基準面之間的關係是一對多的關係,也就是基準面是在橢球體基礎上建立的,但橢球體不能代表基準面,同樣的橢球體能定義不同的基準面,如前蘇聯的Pulkovo 1942、非洲索馬利亞的Afgooye基準面都採用了Krassovsky橢球體,但它們的基準面顯然是不同的。
地圖投影是將地圖從球面轉換到平面的數學變換,如果有人說:該點北京54座標值為X=4231898,Y=21655933,實際上指的是北京54基準面下的投影座標,也就是北京54基準面下的經緯度座標在直角平面座標上的投影結果。
2. GIS中基準面的定義與轉換
雖然現有GIS平臺中都預定義有上百個基準面供選用,但均沒有我們國家的基準面定義。假如精度要求不高,可利用前蘇聯的Pulkovo 1942基準面(Mapinfo中代號為1001)代替北京54座標系;假如精度要求較高,如土地利用、海域使用、城市基建等GIS系統,則需要自定義基準面。
GIS系統中的基準面透過當地基準面向WGS1984的轉換7引數來定義,轉換透過相似變換方法實現,具體演算法可參考科學出版社1999年出版的《城市地理資訊系統標準化指南》第76至86頁。假設Xg、Yg、Zg表示WGS84地心座標系的三座標軸,Xt、Yt、Zt表示當地座標系的三座標軸,那麼自定義基準面的7引數分別為:三個平移引數ΔX、ΔY、ΔZ表示兩座標原點的平移值;三個旋轉引數εx、εy、εz表示當地座標系旋轉至與地心座標系平行時,分別繞Xt、Yt、Zt的旋轉角;最後是比例校正因子,用於調整橢球大小。
MapX中基準面定義方法如下:
Datum.Set(Ellipsoid, ShiftX, ShiftY, ShiftZ, RotateX, RotateY, RotateZ, ScaleAdjust, PrimeMeridian)
其中引數: Ellipsoid為基準面採用的橢球體;
ShiftX, ShiftY, ShiftZ為平移引數;
RotateX, RotateY, RotateZ為旋轉引數;
ScaleAdjust為比例校正因子,以百萬分之一計;
PrimeMeridian為本初子午線經度,在我國取0,表示經度從格林威治起算。
美國國家測繪局(National Imagery and Map Agency)公佈了世界大多數國家的當地基準面至WGS1984基準面的轉換3引數(平移引數),可從 ,其中包括有香港Hong Kong 1963基準面、臺灣 Hu-Tzu-Shan 基準面的轉換3引數,但是沒有中國大陸的引數。
實際工作中一般都根據工作區內已知的北京54座標控制點計算轉換引數,如果工作區內有足夠多的已知北京54與WGS84座標控制點,可直接計算座標轉換的7引數或3引數;當工作區內有3個已知北京54與WGS84座標控制點時,可用下式計算WGS84到北京54座標的轉換引數(A、B、C、D、E、F):x54 = AX84 + BY84 + C,y54 = DX84 + EY84 + F,多餘一點用作檢驗;在只有一個已知控制點的情況下(往往如此),用已知點的北京54與WGS84座標之差作為平移引數,當工作區範圍不大時精度也足夠了。
從Mapinfo中國的URL(">)可下載到包含北京54、西安80座標系定義的Mapinfow.prj,其中定義的北京54基準面引數為:(3,24,-123,-94,-0.02,0.25,0.13,1.1,0),西安80基準面引數為:(31,24,-123,-94,-0.02,0.25,0.13,1.1,0),檔案中沒有註明其引數的來源,我發現它們與Mapinfo參考手冊附錄G"定義自定義基準面"中的一個例子所列引數相同,因此其可靠性值得懷疑,尤其從西安80與北京54採用相同的7引數來看,至少西安80的基準面定義肯定是不對的。因此,當系統精度要求較高時,一定要對所採用的引數進行檢測、驗證,確保座標系定義的正確性。
3. GIS中地圖投影的定義
我國的基本比例尺地形圖(1:5千,1:1萬,1:2.5萬,1:5萬,1:10萬,1:25萬,1:50萬,1:100萬)中,大於等於50萬的均採用高斯-克呂格投影(Gauss-Kruger),又叫橫軸墨卡託投影(Transverse Mercator);小於50萬的地形圖採用正軸等角割園錐投影,又叫蘭勃特投影(Lambert Conformal Conic);海上小於50萬的地形圖多用正軸等角園柱投影,又叫墨卡託投影(Mercator),我國的GIS系統中應該採用與我國基本比例尺地形圖系列一致的地圖投影系統。
在MapX中座標系定義由基準面、投影兩部分引數組成,方法如下:
CoordSys.Set(Type, [Datum], [Units], [OriginLongitude], [OriginLatitude],
[StandardParallelOne], [StandardParallelTwo], [Azimuth], [ScaleFactor],
[FalseEasting], [FalseNorthing], [Range], [Bounds], [Affranorm])
其中引數:Type表示投影型別,Type為1時地圖座標以經緯度表示,它是必選引數,它後面的引數都為可選引數;
Datum為大地基準面,如果採用非地球座標(NonEarth)無需定義該引數;
Units為座標單位,如Units為7表示以米為單位;
OriginLongitude、OriginLatitude分別為原點經度和緯度;
StandardParallelOne、StandardParallelTwo為第一、第二標準緯線;
Azimuth為方位角,斜軸投影需要定義該引數;
ScaleFactor為比例係數;
FalseEasting, FalseNorthing為東偽偏移、北偽偏移值;
Range為地圖可見緯度範圍;
Bounds為地圖座標範圍,是一矩形物件,非地球座標(NonEarth)必須定義該引數;
AffineTransform為座標系變換物件。
相應高斯-克呂格投影、蘭勃特投影、墨卡託投影需要定義的座標系引數序列如下:
高斯-克呂格:投影代號(Type),基準面(Datum),單位(Unit),
中央經度(OriginLongitude),原點緯度(OriginLatitude),
比例係數(ScaleFactor),
東偽偏移(FalseEasting),北緯偏移(FalseNorthing)
蘭勃特: 投影代號(Type),基準面(Datum),單位(Unit),
中央經度(OriginLongitude),原點緯度(OriginLatitude),
標準緯度1(StandardParallelOne),標準緯度2(StandardParallelTwo),
東偽偏移(FalseEasting),北緯偏移(FalseNorthing)
墨卡託: 投影代號(Type),基準面(Datum),單位(Unit),
原點經度(OriginLongitude),原點緯度(OriginLatitude),
標準緯度(StandardParallelOne)
在城市GIS系統中均採用6度或3度分帶的高斯-克呂格投影,因為一般城建座標採用的是6度或3度分帶的高斯-克呂格投影座標。高斯-克呂格投影以6度或3度分帶,每一個分帶構成一個獨立的平面直角座標網,投影帶中央經線投影后的直線為X軸(縱軸,緯度方向),赤道投影后為Y軸(橫軸,經度方向),為了防止經度方向的座標出現負值,規定每帶的中央經線西移500公里,即東偽偏移值為500公里,由於高斯-克呂格投影每一個投影帶的座標都是對本帶座標原點的相對值,所以各帶的座標完全相同,因此規定在橫軸座標前加上帶號,如(4231898,21655933)其中21即為帶號,同樣所定義的東偽偏移值也需要加上帶號,如21帶的東偽偏移值為21500000米。
假如你的工作區位於21帶,即經度在120度至126度範圍,該帶的中央經度為123度,採用Pulkovo 1942基準面,那麼定義6度分帶的高斯-克呂格投影座標系引數為:(8,1001,7,123,0,1,21500000,0)。
那麼當精度要求較高,實測資料為WGS1984座標資料時,欲轉換到北京54基準面的高斯-克呂格投影座標,如何定義座標系引數呢?你可選擇WGS 1984(Mapinfo中代號104)作為基準面,當只有一個已知控制點時(見第2部分),根據平移引數調整東偽偏移、北緯偏移值實現WGS84到北京54的轉換,如:(8,104,7,123,0,1,21500200,-200),也可利用 AffineTransform座標系變換物件,此時的轉換系數(A、B、C、D、E、F)中A、B、D、E為0,只有X、Y方向的平移值C、F ;當有3個已知控制點時,可利用得到的轉換系數(A、B、C、D、E、F)定義 AffineTransform座標系變換物件,實現座標系的轉換,如:(8,104,7,123,0,1,21500000,0,map.AffineTransform),其中AffineTransform定義為AffineTransform.set(7,A、B、C、D、E、F)(7表示單位米);當然有足夠多已知控制點時,直接求定7引數自定義基準面就行了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1004756/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 座標系定義和相互轉換演算法演算法
- 地心地固座標系(ECEF)與站心座標系(ENU)的轉換
- Qt - 座標系及轉換QT
- ArcGIS地圖投影與座標系轉換的方法地圖
- OpenGL ES on iOS --- 座標系統與矩陣轉換iOS矩陣
- Python pytorch 座標系變換與維度轉換PythonPyTorch
- Go版本的各座標系互相轉換的工具Go
- ogre世界座標魚螢幕座標相互轉換
- 【GIS工具】百度poi載入工具之玩轉座標系統!
- iOS中地圖經緯度座標轉換iOS地圖
- C++ opencv的圓轉矩形,極座標轉笛卡爾座標系C++OpenCV
- 利用齊次座標進行二維座標轉換
- GPS座標轉換為BIM
- MathNet Ray3D座標系下轉換3D
- gcoord: 轉換WGS84、GCJ02、BD09座標,轉換百度高德地圖座標系GC地圖
- ROS TF :使用 TF 設定機器人 釋出座標變換 使用座標變換 將感測器資料轉換為機器人座標系下ROS機器人
- 各種座標系互相轉換(WGS84轉換BD-09主要)
- 火星座標和正常座標之間的轉換
- 百度座標轉換API使用API
- 三維座標系旋轉——旋轉矩陣到旋轉角之間的換算矩陣
- 三維空間座標系變換-旋轉矩陣矩陣
- 張正友標定Opencv實現、標定流程以及影像座標轉為世界座標OpenCV
- OpenGL座標系與幾何變換
- iOS開發中常見定位座標轉換iOS
- ArcEngine下投影座標和經緯度座標的相互轉換
- 三維座標系的旋轉矩陣矩陣
- ArcGIS中利用ArcMap將地理座標系轉換成投影座標系(從WKID=4326到WKID=102100)
- iOS地球座標、火星座標和百度座標之間轉換(Swift3.0)iOSSwift
- vue 實現高德座標轉GPS座標Vue
- OpenGL中的座標變換、矩陣變換矩陣
- 工程座標轉換方法C#程式碼實現C#
- Excel轉百度座標系(AngularJS)ExcelAngularJS
- gps wgs4座標與高德gcj02座標互轉GC
- android自定義View——座標系AndroidView
- 設定元素在文件中的座標
- 機器人工具座標系標定原理機器人
- svg06——svg中座標變換與順序的關係SVG
- php變數的型別是如何轉換的?常量如何定義?系統常量是如何定義的?PHP變數型別