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)
不允许略微非球形的地球,
北纬一分钟纬度= 1航海里程= 6075英尺所以一度= 60分钟= 60*6075英尺一米有3.28英尺所以一度= 60*6075/3.28米= 111,128米
或者,一分钟纬度= 1,852米因此一度= 60*1852米= 111,120米
我不确定哪个更准确......
对于一度经度,做同样的事情,但乘以余弦(纬度),因为当你向北移动时经度线变得更近.