我正在使用OpenLayers和一个普通的墨卡托地图,我试图通过在latlong中找到一个点网格来对边界框进行采样。 bbox用latlon表示,例如
48.1388,-15.3616,55.2057,-3.9359
我可以用度(例如x:2.5,y:2.4)定义距离,然后从那里计算出点数。 但是我想用米(例如50000)来表达这个距离,以便将它与用户心态联系起来(人们了解米,而不是度数)。 我怎样才能转换这个距离?我知道如何重新投射一个点,但不是距离。
感谢任何提示! Mulone
答案 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(纬度))
以上是地球表面,不使用墨卡托投影。如果您希望使用投影线性距离,则需要使用墨卡托投影。