給你兩個經緯度,計算他們之間的距離

2021-09-07 01:27:11 字數 4158 閱讀 9460

原文:

給你兩個經緯度,計算他們之間的距離

這些經緯線是怎樣定出來的呢?地球是在不停地繞地軸旋轉(地軸是一根通過地球南北兩極和地球中心的

假想線),在地球中腰畫乙個與地軸垂直的大圓圈,使圈上的每一點都和南北兩極的距離相等,這個圓圈

就叫作「赤道」。在赤道的南北兩邊,畫出許多和赤道平行的圓圈,就是「緯圈」;構成這些圓圈的線段,

叫做緯線。我們把赤道定為緯度零度,向南向北各為90度,在赤道以南的叫南緯,在赤道以北的叫北緯。

北極就是北緯90度,南極就是南緯90度。緯度的高低也標誌著氣候的冷熱,如赤道和低緯度地地區無冬,

兩極和高緯度地區無夏,中緯度地區四季分明。

其次,從北極點到南極點,可以畫出許多南北方向的與地球赤道垂直的大圓圈,這叫作「經圈」;構成這

些圓圈的線段,就叫經線。公元1884平面座標圖年,國際上規定以通過英國倫敦近郊的格林尼治天文台的

經線作為計算經度的起點,即經度零度零分零秒,也稱「本初子午線」。在它東面的為東經,共180度;

在它西面的為西經,共180度。因為地球是圓的,所以東經180度和西經180度的經線是同一條經線。各國

公定180度經線為「國際日期變更線」。為了避免同一地區使用兩個不同的日期,國際日期變線在遇陸地時

略有偏離。

每一經度和緯度還可以再細分為60分,每一分再分為60秒以及秒的小數。利用經緯線,我們就可以確定

地球上每乙個地方的具體位置,並且把它在地圖或地球儀上表示出來。例如問北京的經緯度是多少?我們

很容易從地圖上查出來是東經116度24分,北緯39度54分。在大海中航行的船隻,只要把所在地的經度測

出來,就可以確定船在海洋中的位置和前進方向。 緯度共有90度。赤道為0度,向兩極排列,圈子越小,

度數越大。

橫線是緯度,豎線是經度。

當然可以計算,四元二次方程。

經度和緯度都是一種角度。經度是個兩面角,是兩個經線平面的夾角。因所有經線都是一樣長,為了度量

經度選取乙個起點面,經2023年國際會議協商,決定以通過英國倫敦近郊、泰晤士河南岸的格林尼治皇家

天文台(舊址)的一台主要子午儀十字絲的那條經線為起始經線,稱為本初子午線。本初子午線平面是起

點麵,終點面是本地經線平面。某一點的經度,就是該點所在的經線平面與本初子午線平面間的夾角。在

赤道上度量,自本初子午線平面作為起點面,分別往東往西度量,往東量值稱為東經度,往西量值稱為西

經度。由此可見,一地的經度是該地對於本初子午線的方向和角距離。本初子午線是0°經度,東經度的最

大值為180°,西經度的最大值為180°,東、西經180°經線是同一根經線,因此不分東經或西經,而統稱

180°經線。

緯度是個線面角。起點面是赤道平面,線是本地的地面法線。所謂法線,即垂直於參考扁球體表面的線。

某地的緯度就是該地的法線與赤道平面之間的夾角。緯度在本地經線上度量,由赤道向南、北度量,向北

量值稱為北緯度,向南量值稱為南緯度。由此可見,一地的緯度是該地對於赤道的方向和角距離。赤道是

0°緯線,北緯度的最大值為90°,即北極點;南緯度的最大值為90°,即南極點。

經緯度互換

度(ddd):e 108.90593度    n 34.21630度

如何將度(ddd):: 108.90593度換算成度分秒(dms)東經e 108度54分22.2秒?轉換方法是將108.90593整數字不變取108(度),用0.90593*60=54.3558,取整數字54(分),0.3558*60=21.348再取整數字21(秒),故轉化為108度54分21秒.

同樣將度分秒(dms):東經e 108度54分22.2秒 換算成度(ddd)的方法如下:108度54分22.2秒=108+(54/60)+(22.2/3600)=108.90616度

因為計算時小數字保留的原因,導致正反計算存在一定誤差,但誤差影響不是很大。1秒的誤差就是幾公尺的樣子。gps車友可以用上述方法換算成自己需要的單位座標。

經緯度換算成公尺

緯度分為60分,每一分再分為60秒以及秒的小數。

緯度線投射在圖上看似水平的平行線,但實際上是不同半徑的圓。有相同特定緯度的所有位置都在同乙個緯線上。

赤道的緯度為0°,將行星平分為南半球和北半球。

緯度是指某點與地球球心的連線和地球赤道面所成的線面角,其數值在0至90度之間。位於赤道以北的點的緯度叫北緯,記為n,位於赤道以南的點的緯度稱南緯,記為s。

緯度數值在0至30度之間的地區稱為低緯地區,緯度數值在30至60度之間的地區稱為中緯地區,緯度數值在60至90度之間的地區稱為高緯地區。

赤道、南回歸線、北回歸線、南極圈和北極圈是特殊的緯線。

緯度1秒的長度

地球的子午線總長度大約40008km。平均:

緯度1度 = 大約111km

緯度1分 = 大約1.85km

緯度1秒 = 大約30.9m

根據地球上任意兩點的經緯度計算兩點間的距離

地球是乙個近乎標準的橢球體,它的赤道半徑為6378.140千公尺,極半徑為 6356.755千公尺,平均半徑6371.004千公尺。如果我們假設地球是乙個完美的球體,那麼它的半徑就是地球的平均半徑,記為r。如果以0度經線為基 準,那麼根據地球表面任意兩點的經緯度就可以計算出這兩點間的地表距離(這裡忽略地球表面地形對計算帶來的誤差,僅僅是理論上的估算值)。設第一點a的經 緯度為(lona, lata),第二點b的經緯度為(lonb, latb),按照0度經線的基準,東經取經度的正值(longitude),西經取經度負值(-longitude),北緯取90-緯度值(90- latitude),南緯取90+緯度值(90+latitude),則經過上述處理過後的兩點被計為(mlona, mlata)和(mlonb, mlatb)。那麼根據三角推導,可以得到計算兩點距離的如下公式:

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

如果僅對經度作正負的處理,而不對緯度作90-latitude(假設都是北半球,南半球只有澳洲具有應用意義)的處理,那麼公式將是:

c = sin(lata)*sin(latb) + cos(lata)*cos(latb)*cos(mlona-mlonb)

distance = r*arccos(c)*pi/180

以上通過簡單的三角變換就可以推出。

如果三角函式的輸入和輸出都採用弧度值,那麼公式還可以寫作:

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

/**

* 計算兩個經緯度之間的距離

* @author*

*/public

class

calulatetwolanlon

/***

* @param

lat1 第乙個緯度

* @param

lng1第乙個經度

* @param

lat2第二個緯度

* @param

lng2第二個經度

* @return

兩個經緯度的距離

*/public

static

double getdistance(double lat1,double lng1,double lat2,double

lng2)

public

static

void

main(string args)

}

給你兩個經緯度,計算他們之間的距離

這些經緯線是怎樣定出來的呢?地球是在不停地繞地軸旋轉 地軸是一根通過地球南北兩極和地球中心的 假想線 在地球中腰畫乙個與地軸垂直的大圓圈,使圈上的每一點都和南北兩極的距離相等,這個圓圈 就叫作 赤道 在赤道的南北兩邊,畫出許多和赤道平行的圓圈,就是 緯圈 構成這些圓圈的線段,叫做緯線。我們把赤道定為...

JAVA計算兩個經緯度之間的距離

1 只不過是封裝好的乙個計算方法,計算的方式也就是上學時就學過的定理,老規矩直接貼 主要是方便實用,計算結果單位 公尺 public class maputils 計算兩個經緯度之間的距離 param lat1 param lng1 param lat2 param lng2 return publ...

計算兩個經緯度之間的距離 python演算法

earth redius 6378.137 defrad d return d pi 180.0 defgetdistance lat1,lng1,lat2,lng2 radlat1 rad lat1 radlat2 rad lat2 a radlat1 radlat2 b rad lng1 rad...