2010-11-05 93 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