天天看點

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

經緯度互換

度(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)

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

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

C = sin(LatA*Pi/180)*sin(LatB*Pi/180) + cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*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

在實際應用當中,一般是通過一個個體的郵政編碼來查找該郵政編碼對應的地區中心的經緯度,然 後再根據這些經緯度來計算彼此的距離,進而估算出某些群體之間的大緻距離範圍(比如酒店旅客的分布範圍-各個旅客的郵政編碼對應的經緯度和酒店的經緯度所 計算的距離範圍-等等),是以,通過郵政編碼查詢經緯度這樣一個資料庫是一個很有用的資源。

附:java代碼: