經(jīng)過(guò)一段時(shí)間的學(xué)習(xí),綜合了不少資料,我終于搞明白了其中的道理,不敢獨(dú)享,決定寫(xiě)出來(lái)讓大家批判一下,希望對(duì)大家有所幫助,同時(shí)也希望如果各位發(fā)現(xiàn)我的錯(cuò)誤,也及時(shí)通知我。
說(shuō)到轉(zhuǎn)換,我不得不先提幾個(gè)概念:
1. 84坐標(biāo)系――美國(guó)的GPS就用這個(gè)坐標(biāo)系,也就是說(shuō)我們從GPS接收過(guò)來(lái)的地心大地坐標(biāo)就是在這個(gè)坐標(biāo)系下的;
2. 54坐標(biāo)系――中國(guó)常用的坐標(biāo)系,一般來(lái)說(shuō),我們就是要得到該坐標(biāo)系下的平面直角坐標(biāo);
3. 地心大地坐標(biāo)――就是經(jīng)緯度表示的大地位置數(shù)據(jù)(B、L、H);
4. 地心直角坐標(biāo)--是以地心為原點(diǎn),但表示方式采樣直角坐標(biāo)(X、Y、Z);
5. 平面直角坐標(biāo)――不用多解釋了,就是我們平常用來(lái)表示位置的坐標(biāo)(x、y、z);
6. 橢球參數(shù)――地心大地坐標(biāo)轉(zhuǎn)換到地心直角坐標(biāo)需要使用的參數(shù);
7. 七參數(shù)――不同橢球系下的地心直角坐標(biāo)互換所使用到的參數(shù);
8. 投影參數(shù)――同一橢球系下,地心大地坐標(biāo)轉(zhuǎn)換為平面直角坐標(biāo)所使用的參數(shù);
9. 四參數(shù)――同一橢球系下,不同平面坐標(biāo)系之間的轉(zhuǎn)換所使用的參數(shù)。
有了以上概念,只要知道轉(zhuǎn)換過(guò)程就OK了。下面我就不羅嗦了,直接用方向線來(lái)說(shuō)明過(guò)程,其中我以常用的北京54坐標(biāo)系作為目標(biāo)坐標(biāo)系:
從GPS中接收到84坐標(biāo)系下的地心大地坐標(biāo)
↓
使用84坐標(biāo)系的橢球參數(shù)轉(zhuǎn)換為84坐標(biāo)系下的地心直角坐標(biāo)
↓
使用七參數(shù)轉(zhuǎn)換為54坐標(biāo)系下的地心直角坐標(biāo)
↓
使用54坐標(biāo)系的橢球參數(shù)轉(zhuǎn)換為54坐標(biāo)系下的地心大地坐標(biāo)
↓
使用投影參數(shù)轉(zhuǎn)換為54坐標(biāo)系下的平面直角坐標(biāo)
↓
使用四參數(shù)轉(zhuǎn)換為其它區(qū)域坐標(biāo)系下的平面直角坐標(biāo)
上一章已經(jīng)簡(jiǎn)單說(shuō)明了各坐標(biāo)系的基本概念和相互的轉(zhuǎn)換關(guān)系(其實(shí)也不叫學(xué)習(xí)筆記了,所有轉(zhuǎn)換都做完了,只是一直在忙,沒(méi)有時(shí)間一次寫(xiě)完,只能有時(shí)間就寫(xiě)一章,一點(diǎn)一點(diǎn)來(lái),實(shí)在愧對(duì)關(guān)注的朋友)。
這一章就說(shuō)一下84坐標(biāo)系下的地心大地坐標(biāo)如何使用84坐標(biāo)系的橢球參數(shù)轉(zhuǎn)換為84坐標(biāo)系下的地心直角坐標(biāo)(好拗口……)。
先來(lái)看看84坐標(biāo)系的橢球參數(shù):
橢圓長(zhǎng)半徑A:6378137.000000
橢圓短半徑B:6356752.314245179497
根據(jù)橢圓長(zhǎng)短半徑,我們很容易就能算出橢圓第一偏心率e1,計(jì)算公式如下:
e1 = sqrt(A×A-B×B)/ A;
注意這里sqrt是開(kāi)方的意思。
OK,上面我們通過(guò)一個(gè)簡(jiǎn)單的公式就計(jì)算出了橢圓的第一偏心率e1,下面,我們就利用這個(gè)參數(shù)把地心大地坐標(biāo)轉(zhuǎn)換為地心直角坐標(biāo)。
已知:B、L、H地心大地坐標(biāo)
求:X、Y、Z地心直角坐標(biāo)
計(jì)算步驟:
1.參數(shù)N:N=A/sqrt(1-e1×e1×sin(B)×sin(B));
2.X:X=(N+H)×cos(B)×cos(L);
3.Y:Y=(N+H)×cos(B)×sin(L);
4.Z:Z=(N×(1-e1×e1)+H)×sin(B);
好了,就是這么簡(jiǎn)單,BLH方式表示的大地坐標(biāo)一下就轉(zhuǎn)換為XYZ表示的直角坐標(biāo)了。不過(guò)大家要注意的是,就是BL這兩個(gè)數(shù)值是角度值,在C編程中,cos和sin函數(shù)要用弧度值,這個(gè)角度轉(zhuǎn)換問(wèn)題要注意。
上次說(shuō)到在84坐標(biāo)系下如何利用84坐標(biāo)系的橢球參數(shù)把地心大地坐標(biāo)轉(zhuǎn)換為地心直角坐標(biāo)。有了84坐標(biāo)系下的地心直角坐標(biāo)就可以考慮如何得到54坐標(biāo)系下的地心直角坐標(biāo)了(不一定是54坐標(biāo)系,不過(guò)為了描述方便,我選了54坐標(biāo)系而已)。
所以這次就講解一下如何把84坐標(biāo)系下的地心直角坐標(biāo)轉(zhuǎn)換成54坐標(biāo)系下的地心直角坐標(biāo)。
轉(zhuǎn)換的方法有很多,但常用的是七參數(shù)法,這個(gè)方法還有一個(gè)外文翻譯過(guò)來(lái)的名稱,但我現(xiàn)在忘記了,也懶得追查,反正是一種空間轉(zhuǎn)換方法,顧名思義,需要七個(gè)參數(shù)才能進(jìn)行轉(zhuǎn)換,七個(gè)參數(shù)分別是:
△X △Y △Z——三個(gè)坐標(biāo)方向的平移參數(shù);
αβγ——三個(gè)方向的旋轉(zhuǎn)角參數(shù)
k——尺度參數(shù)
這七個(gè)參數(shù)不是固定的,而是不同的地區(qū)有不同數(shù)值,知道的當(dāng)然可以直接填寫(xiě),不知道的一般就會(huì)找?guī)讉(gè)已知地方坐標(biāo)的位置獲取GPS采集的坐標(biāo)再反算這七個(gè)參數(shù),如何反算以后我再寫(xiě)。
閑話少說(shuō),有了七參數(shù)后,把84坐標(biāo)系下的地心直角坐標(biāo)轉(zhuǎn)換成54坐標(biāo)系下的地心直角坐標(biāo)的計(jì)算方式是:
已知:84坐標(biāo)系下的地心直角坐標(biāo)x,y,z
求:54坐標(biāo)系下的地心直角坐標(biāo)X、Y、Z
X = △X + k*x – β*z + γ*y + x
Y = △Y + k*y + α*z – γ*x + y
Z = △Z + k*z – α*y + β*x + z
公式是推導(dǎo)的,倒沒(méi)有什么特別,主要是里面的計(jì)算單位不要弄錯(cuò),角度就肯定是弧度的,你別用了角度之類(lèi)的單位,而那個(gè)k的尺度參數(shù)單位是ppm,一般坐標(biāo)都是m為單位,所以k還有除以1000000才能參與計(jì)算。