2012-12-21 96 views
0

我一直在試圖找到Java代碼示例,我可以將度量距離添加到特定座標點。加入2公里的A點的緯度和減2公里,到B點的經度通過添加度量距離獲取新的GPS座標

例如,我想獲得一個新的座標點(B點),即A點西北部

有沒有這樣的功能的示例源代碼?

+0

[This other post](http://stackoverflow.com/questions/5557706/calculating-distance-using-latitude-longitude-coordinates-in- kilometers-with-jav)應該有所幫助。 – assylias

+0

@assylias帖子沒有考慮到經度「距離」取決於緯度。爲此,如果距離足夠短(可能<50公里),我將轉換爲Universal Traverse墨卡託,將其添加到Easting和Northing,然後轉換回您的任何系統。 – SJuan76

+0

謝謝@assylias,但那不是我正在尋找的... – lyk

回答

2

獲得如果你不需要高精度計算一個用減法的新座標和距離都很小,你可以假設地球是大約R =6370公里球半徑。以弧度爲單位的緯度差異僅爲dNorth/R,經度差異爲dEast/R/cos(lat)。

爲了獲得更高的精度,您必須考慮到地球的形狀更像橢球體。

+0

我不需要高精度,因爲我只需要從OSM下載maptiles的新座標,所以看起來你的想法可能適用於我的。 我可以澄清什麼是DNorth和Deast? 那麼我需要做什麼才能在緯度點上增加2公里呢? – lyk

+0

dNorth是在北方向在公里的距離,dEast是在東方向 – Henry

+0

在千米的距離,使澄清: 新緯度=舊緯度+(dNorth/R), 新經度=舊經度+(dEast/R/cos(舊緯度)) ? 對於經度函數是否有劃分的命令? – lyk

0

我這麼認爲,你可以使用大圓算法來做到這一點。

半徑爲R的球體表面上兩個給定點P1 =(lat1,lon1)和P2 =(lat2,lon2)之間的最短距離(測地線)爲大圓距。它可以用下式來計算:

dist = arccos(sin(lat1) · sin(lat2) + cos(lat1) · cos(lat2) · cos(lon1 - lon2)) · R (1) 

例如,在(40.6892°,-74.0444°)=(0.7102弧度,-1.2923弧度)和在艾菲爾鐵塔自由女神像之間的距離(48.8583 °,2.2945°)=(0.8527弧度,0.0400弧度) - 假設地球的數字與半徑6371公里的球形approximationa - 是:

dist = arccos(sin(0.7102) · sin(0.8527) + cos(0.7102) · cos(0.8527) · cos(-1.2923 - 0.0400)) · 6371 km 
    = 5837 km 

我發現,同時探索又如::

例如:

lat1: 34 
lng1: 34 

將在LAT15公里後,新的起點應該是這樣 new_lat1:34 +5公里 new_lng1:34(lng1將保持相同的,因爲我們只在緯度增加)

,這樣你們可以一分爲二的概率步驟::

  1. 使用加法計算座標。

  2. 然後在步驟1中

+0

對不起,我有點困惑你的解決方案。我期望通過將度量距離添加到座標來獲得新的座標點,而不是找出2個點之間的距離。你提到的兩個步驟是如何幫助我獲得的? – lyk

+0

可能是這個鏈接的第一篇文章將有助於你... https://groups.google.com/forum/#!msg/google-maps-js-api-v3/SXBp528Eyt4/cB7fUaZ2GEgJ – Prateek

+0

嗯,好吧,似乎這需要指出,一些操縱方程來計算距離。謝謝! – lyk