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

Mul*_*one 14 transform openlayers haversine map-projections proj4js

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

48.1388,-15.3616,55.2057,-3.9359
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的任何提示!Mulone

小智 15

使用hasrsine公式得到两点lat/long之间的距离.这假设地球是一个球体(在大多数情况下,"足够好").

它的Javascript实现(从这里无耻地被盗)看起来像这样:

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;
Run Code Online (Sandbox Code Playgroud)


Cha*_*ana 7

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

北纬一分钟纬度= 1航海里程= 6075英尺所以一度= 60分钟= 60*6075英尺一米有3.28英尺所以一度= 60*6075/3.28米= 111,128米

或者,一分钟纬度= 1,852米因此一度= 60*1852米= 111,120米

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

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