談?wù)剰慕?jīng)緯度坐標(biāo)到歐式距離的轉(zhuǎn)化【matlab實(shí)現(xiàn)】
根據(jù)地球上任意兩點(diǎn)的經(jīng)緯度計(jì)算兩點(diǎn)間的距離
地球是一個(gè)近乎標(biāo)準(zhǔn)的橢球體,它的赤道半徑為6378.140千米,極半徑為 6356.755千米,平均半徑6371.004千米。如果我們假設(shè)地球是一個(gè)完美的球體,那么它的半徑就是地球的平均半徑,記為R。如果以0度經(jīng)線為基 準(zhǔn),那么根據(jù)地球表面任意兩點(diǎn)的經(jīng)緯度就可以計(jì)算出這兩點(diǎn)間的地表距離(這里忽略地球表面地形對(duì)計(jì)算帶來的誤差,僅僅是理論上的估算值)。設(shè)第一點(diǎn)A的經(jīng) 緯度為(LonA, LatA),第二點(diǎn)B的經(jīng)緯度為(LonB, LatB),按照0度經(jīng)線的基準(zhǔn),東經(jīng)取經(jīng)度的正值(Longitude),西經(jīng)取經(jīng)度負(fù)值(-Longitude),北緯取90-緯度值(90- Latitude),南緯取90+緯度值(90+Latitude),則經(jīng)過上述處理過后的兩點(diǎn)被計(jì)為(MLonA, MLatA)和(MLonB, MLatB)。那么根據(jù)三角推導(dǎo),可以得到計(jì)算兩點(diǎn)距離的如下公式:
C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)
Distance = R*Arccos(C)*Pi/180
這里,R和Distance單位是相同,如果是采用6371.004千米作為半徑,那么Distance就是千米為單位,如果要使用其他單位,比如mile,還需要做單位換算,1千米=0.621371192mile
如果僅對(duì)經(jīng)度作正負(fù)的處理,而不對(duì)緯度作90-Latitude(假設(shè)都是北半球,南半球只有澳洲具有應(yīng)用意義)的處理,那么公式將是:
C = sin(LatA)*sin(LatB) + cos(LatA)*cos(LatB)*cos(MLonA-MLonB)
Distance = R*Arccos(C)*Pi/180
以上通過簡(jiǎn)單的三角變換就可以推出。
如果三角函數(shù)的輸入和輸出都采用弧度值,那么公式還可以寫作:
C = sin(LatA*Pi/180)*sin(LatB*Pi/180) + cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180)
Distance = R*Arccos(C)*Pi/180
也就是:
C = sin(LatA/57.2958)*sin(LatB/57.2958) + cos(LatA/57.2958)*cos(LatB/57.2958)*cos((MLonA-MLonB)/57.2958)
Distance = R*Arccos(C) = 6371.004*Arccos(C) kilometer = 0.621371192*6371.004*Arccos(C) mile = 3958.758349716768*Arccos(C) mile
基于此,我用matlab實(shí)現(xiàn)編程:

最后我們不妨再編個(gè)程試試,計(jì)算全國各省會(huì)(含港澳臺(tái))之間的直線距離,
原始數(shù)據(jù)是這樣:

編程如下:

輸出我們的結(jié)果文件,省會(huì)城市歐式距離表,打開后如下,單位:/km

這樣,任務(wù)就完成啦!