1. 程式人生 > >空間參考系統與WKT解析

空間參考系統與WKT解析

空間參考系統與WKT解析

1、為什麼要空間參考系統?

空間參考系統,也稱為座標系統。在GIS中為地理資料定位的基準,假設給你一個座標(442281.875,4422651.589)。如果不給你空間參考系統,你可能根本不知道這個點在哪,是在歐洲還是在我們中國。這樣就會給GIS應用帶來困難。因此說沒有空間參考的地理資料都是沒有實際意義的。如果我告訴你他的空間參考系統是WGS84座標系下的UTM50帶的投影座標系,那麼你可能經過一些推算可以知道這是在北京。這裡的推算就是用到了投影座標反算,也就是由投影座標系的平面座標轉換到地理座標的經緯度。好了,現在大概應該知道空間參考系統的重要性了吧。

2、空間參考系統的型別

GIS中,我們經常聽到WGS84、高斯-克呂格。那麼是否真正弄清楚這些名詞的含義了?在這裡說的WGS84是一種基準面,它的參考橢球體是國際大地測量與地球物理聯合會第17屆大會大地測量常數推薦值,其基本引數如下:

長半徑:a=6378137±2m);

地球引力和地球質量的乘積:GM=3986005×108m3s-2±0.6×108m3s-2

正常化二階帶諧係數:C20=-484.16685×10-6±1.3×10-9

地球重力場二階帶球諧係數:J2=108263×10-8

地球自轉角速度:ω=7292115×10-11rads-1±0.150×10-11rads-1

扁率f=0.003352810664

那麼高斯-克呂格又是什麼呢?它是一種地圖投影,在此投影下的座標系一般都是用平面笛卡爾座標表示,座標度量的單位是米、英尺之類的。GIS

相關專業的學生在本科階段,我想老師們都會給你們佈置一個作業:程式設計實現高斯克呂格投影正解與反解計算。

GIS的應用中,普遍應用的空間參考系統有如下幾種:

地心座標系

地心座標系是以地球質心為原點建立的空間直角座標系,以x,y,z表示

或者以橢球體的中心和此質心重合建立的大地座標系,大地座標系一般是用B,L,H表示的

地理座標系

以橢球體為基礎建立的座標系,用經緯度度量座標

投影座標系

在特定橢球體基礎之上經過地圖投影建立的平面座標系。

3、空間參考系統的表示方法

GIS應用中,經常會遇到空間參考系的表示問題,如果不同系統中的同一個空間參考系統使用了不同的程式碼或者名稱的話,就會給不同系統之間的互操作帶來困難。為了統一空間參考系統的表示,openGIS

定義了用WKT,也就是孰知文字來表示空間參考系統。另外歐洲是由勘探組織定義了一套標準,它通常以以下三種形式釋出:

 SQL指令碼:以SQL指令碼的方式釋出,通過指令碼的方式建立EPSG資料集。

31WKT表示方法

現在主要講解WKT表示方法。

WKT主要就是用文字的方法表示空間參考系統,下面這些語句就是定義空間參考系統的字句。

<coordinate system> = <horz cs> | <geocentric cs> | <vert cs> | <compd cs>

| <fitted cs> | <local cs>

<horz cs> = <geographic cs> | <projected cs>

<projected cs> = PROJCS["<name>", <geographic cs>, <projection>,

{<parameter>,}* <linear unit> {,<twin axes>}{,<authority>}]

<projection> = PROJECTION["<name>" {,<authority>}]

<geographic cs> = GEOGCS["<name>", <datum>, <prime meridian>, <angular

unit> {,<twin axes>} {,<authority>}]

<datum> = DATUM["<name>", <spheroid> {,<to wgs84>} {,<authority>}]

<spheroid> = SPHEROID["<name>", <semi-major axis>, <inverse flattening>

{,<authority>}]

<semi-major axis> = <number>

<inverse flattening> = <number>

<prime meridian> = PRIMEM["<name>", <longitude> {,<authority>}]

<longitude> = <number>

<angular unit> = <unit>

<linear unit> = <unit>

<unit> = UNIT["<name>", <conversion factor> {,<authority>}]

<conversion factor> = <number>

<geocentric cs> = GEOCCS["<name>", <datum>, <prime meridian>, <linear unit> {,<axis>,

<axis>, <axis>} {,<authority>}]

<authority> = AUTHORITY["<name>", "<code>"]

<vert cs> = VERT_CS["<name>", <vert datum>, <linear unit>, {<axis>,}

{,<authority>}]

<vert datum> = VERT_DATUM["<name>", <datum type> {,<authority>}]

<datum type> = <number>

<compd cs> = COMPD_CS["<name>", <head cs>, <tail cs> {,<authority>}]

<head cs> = <coordinate system>

<tail cs> = <coordinate system>

<twin axes> = <axis>, <axis>

<axis> = AXIS["<name>", NORTH | SOUTH | EAST | WEST | UP | DOWN | OTHER]

<to wgs84s> = TOWGS84[<seven param>]

<seven param> = <dx>, <dy>, <dz>, <ex>, <ey>, <ez>, <ppm>

<dx> = <number>

<dy> = <number>

<dz> = <number>

<ex> = <number>

<ey> = <number>

<ez> = <number>

<ppm> = <number>

<fitted cs> = FITTED_CS["<name>", <to base>, <base cs>]

<to base> = <math transform>

<base cs> = <coordinate system>

<local cs> = LOCAL_CS["<name>", <local datum>, <unit>, <axis>,

{,<axis>}* {,<authority>}]

<local datum> = LOCAL_DATUM["<name>", <datum type> {,<authority>}]

32 WKT主要關鍵字解析

上面列舉了一些WKT的定義字句,這樣看我們可能不知道是什麼意思。下面就解析WKT中的主要關鍵字。

n  AUTHORITY

這個關鍵字是可選的,表示外部權威的空間參考系統的編碼

n  AXIS

這個關鍵字主要指定空間參考系統的座標軸方向,如果沒有指定,就使用預設的,預設的指定方向如下:

地理座標系統: AXIS[“Lon”,EAST],AXIS[“Lat”,NORTH]

投影座標系統: AXIS[“X”,EAST],AXIS[“Y”,NORTH]

地心座標系統: AXIS[“X”,OTHER],AXIS[“Y”,EAST],AXIS[“Z”,NORTH]

n  COMPD_CS

用於指定一個符合的參考系統,符合參考系統一般由兩個座標系統指定。例如一個3D座標系統可以由一個水平座標系統和一個垂直座標系統複合而成。

n  DATUM

用於指定一個水平基準面。

n  GEOCCS

用於指定一個地心座標系,是一個3D座標系,X軸的正方向是從地球質心指向赤道和本初子午線的交點,Z軸指向北極方向,Y軸正方向是從地球質心到赤道與東經90度經線的交點。

n  GEOGCS

用於指定基於經緯度的座標系統。注意:並不是所有的地理座標系統都用度來表示單位。

n  LOCAL_CS

用於指定一個本地的座標系統。一些座標系統經常用於CAD系統中

n  PARAMETER

投影轉換的引數及其值。

n  PRIMEM

用於指定經度度量的本初子午線。

n  PROJCS

用於指定一個投影座標系。

n  PROJECTION

用於指定從地理座標到投影座標轉換的引數。

n  SPHEROID

定義一個橢球體,橢球體是地球表面的近似。Spheroidellipsoid是同義詞。Spheroid一般用於WKT中;而ellipsoid在任何地方使用,都是橢球體的意思。

n  TOWGS84

用於指示Bursa Wolf變換的七個引數。這七個引數可以近似的從一個基準面到WGS基準面的變換。Bursa Wolf變換隻能用於空間直角座標系之間的變換。

n  UNIT

用於指定測量使用的單位。在地理座標系下使用角度。在垂直座標系下使用線性單位,如米等。

n  VERT_DATUM

用於指定垂直基準面或者高程測量的方法。

n  VERT_CS

用於指定一個垂直座標系統。

33 WKT表示方法舉例

如果使用的是地理座標系,那麼使用GEOGCS關鍵字;如果使用投影座標系那麼要使用PROJCS關鍵字,投影座標系必須是基於一個地理座標系定義的;如果是高程座標系,那麼使用VERT_CS關鍵字。

下面是一個投影座標系的WKT字串,表示的是WGS84座標系下UTM50帶投影下的座標系,是不是很拗口。

PROJCS[

"WGS 84 / UTM zone 50N",

GEOGCS["WGS 84",

DATUM["WGS_1984",SPHEROID["WGS84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],

PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4326"]],

PROJECTION["Transverse_Mercator"],

PARAMETER["latitude_of_origin",0],

PARAMETER["central_meridian",117],

PARAMETER["scale_factor",0.9996],

PARAMETER["false_easting",500000],

PARAMETER["false_northing",0],

UNIT["metre",1,AUTHORITY["EPSG","9001"]],

AUTHORITY["EPSG","32650"]]

從上面的字串中我們可以看出一些引數的意思。表示的是一個投影座標系統,基於的地理座標系統是WGS84,基準面是WGS_1984,橢球體是WGS84座標系所依賴的橢球體,6378137表示的長半軸,298.257223563是扁率的倒數,起始經線是本初子午線,地理座標系使用單位是度,0.0174532925199433代表一度所代表多少弧度。

PROJECTION["Transverse_Mercator"]表示是投影方法通用墨卡託投影,

"latitude_of_origin",0表示緯度的起點是0度,也就是赤道,

"central_meridian",117表示投影帶的中央經線是東經117度,

"scale_factor",0.9996表示中央經線的長度比是0.9996,因為UTM投影是通用橫軸等角割圓柱投影,

"false_easting",500000表示座標縱軸向西移動500km

"false_northing",0表示橫軸沒有平移。

以下是一個地理座標系統的WKT字串,它表示的就是WGS84座標系。

GEOGCS

["WGS 84",

DATUM["WGS_1984",

SPHEROID["WGS84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],

PRIMEM["Greenwich",0],

UNIT["degree",0.0174532925199433],

AUTHORITY["EPSG","4326"]

]

4、後記

空間座標系統的WKT表示作為GIS業界互操作的一個規範確實起到了很大的作用。各大GIS廠商以及開源GIS軟體類庫也都是用WKT作為空間參考系統表示的規範,這樣對GIS行業的發展起到了推動作用,也在一定程度上推進了空間資料共享。如果本文中有什麼不對的地方,歡迎批評指正,我們共同探討。