如何将距离从度数转换为米?

时间:2010-11-05 00:06:39

标签: transform openlayers proj4js haversine map-projections

我正在使用OpenLayers和一个普通的墨卡托地图,我试图通过在latlong中找到一个点网格来对边界框进行采样。 bbox用latlon表示,例如

48.1388,-15.3616,55.2057,-3.9359

我可以用(例如x:2.5,y:2.4)定义距离,然后从那里计算出点数。 但是我想用(例如50000)来表达这个距离,以便将它与用户心态联系起来(人们了解米,而不是度数)。 我怎样才能转换这个距离?我知道如何重新投射一个点,但不是距离。

感谢任何提示! Mulone

3 个答案:

答案 0 :(得分:14)

使用haversine formula获取两个lat / long点之间的距离。这假设地球是一个球体(在大多数情况下,“足够好”)。

它的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 :(得分:7)

不允许略微非球形的地球,

从北到南的一分钟纬度= 1海里英里= 6075英尺 所以一度= 60分钟= 60 * 6075英尺 一米多有3.28英尺 一度= 60 * 6075 / 3.28米= 111,128米

或者,一分钟的纬度= 1,852米 所以一度= 60 * 1852米= 111,120米

我不确定哪个更准确......

对于一度经度,做同样的事情,但乘以余弦(纬度)乘以,因为当你向北移动时经度线变得更近。

答案 2 :(得分:0)

度和米之间的转换在地球表面变化。

假设球形地球,纬度=距离* 360 /(2 * PI * 6400000)

请注意,经度会因纬度而异:

度经度=距离* 360 * /(2 * PI * cos(纬度))

以上是地球表面,不使用墨卡托投影。如果您希望使用投影线性距离,则需要使用墨卡托投影。