2010-11-05 61 views
12

我用一個普通的mercator地圖使用OpenLayers,我試圖通過在latlong中查找網格點來對邊界框進行採樣。 bbox以latlon表示,例如,如何轉換從度到米的距離?

48.1388,-15.3616,55.2057,-3.9359 

我可以在限定的距離(例如,x:2.5,Y:2.4),並從那裏計算出的點。 但是我想在(例如50000)中表示這個距離,以便將它與用戶心態(人們理解米,而不是度)聯繫起來。 如何轉換此距離?我知道如何重新評估一個觀點,但不是一個距離。

感謝您的任何提示! Mulone緯度

回答

13

使用haversine formula來獲得緯度/長度兩點之間的距離。這假定地球是一個球體(對大多數情況來說,「足夠好」)。

一個Javascript實現它(從here無恥地竊取)看起來是這樣的:

var R = 6371; // km 
var dLat = (lat2-lat1).toRad(); 
var dLon = (lon2-lon1).toRad(); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
     Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c; 
+1

Haversine適用於不同的緯度,但與OP所要求的相反。 OP想要將線性(米)距離映射到緯度和經度。 – winwaed 2010-11-05 00:34:39

5

一分鐘北到南= 1海里=6075英尺 所以一個度= 60分鐘= 60 *6075英尺 有3.28英尺一米那麼 一個度= 60 * 6075/3.28米=111128米

另外,緯度= 1,852米,一分鐘 所以一個度= 60 *1852米=111120米

我不知道哪個更準確?

佛r一度經度,做同樣的事情,但乘以餘弦(緯度),因爲當你向北移動時,經度線越接近越好。

0

度和米之間的轉換在整個地球表面都有所不同。

假設球形地球,緯度=距離×360 /(2 * PI * 6400000)

注意,經度將根據緯度而變化:

經度=距離* 360 * /( 2 * PI * cos(緯度))

以上是針對地球表面,並未使用墨卡託投影。如果您希望使用投影線性距離,則需要使用墨卡託投影。

+0

而在JavaScript中使用不同的地圖投影工作時更一般的情況下,使用開源Proj4js庫。 - 也被OpenLayers使用。 – winwaed 2011-01-01 21:07:35

相關問題