如何将距离从学位转变为米?
-
29-09-2019 - |
题
我使用的是带有普通墨托映射的开放式套件,并且正在尝试通过在LATLONG中找到积分网格来对边界框进行采样。 Bbox用拉特隆表示,例如
48.1388,-15.3616,55.2057,-3.9359
我可以定义一个距离 学位 (例如x:2.5,y:2.4)并从那里弄清楚点。但是我想在 仪表 (例如50000)为了将其与用户心态相关联(人们了解仪表,而不是学位)。我该如何转换这个距离?我知道如何重新分辨一个点,但没有距离。
感谢您的任何提示! mulone
解决方案
使用 Haversine公式 要在两个点/长的两个点之间获得距离。假设地球是一个球体(在大多数情况下,“足够好”)。
IT的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;
其他提示
不允许地球略微非球形的形状
一分钟的纬度向北到南= 1海里= 6075英尺,因此一个程度= 60分钟= 60 * 6075英尺,一米有3.28英尺,因此一个度= 60 * 60 * 6075 / 3.28米= 111,128米
另外,一分钟的纬度= 1,852米,因此一个度= 60 * 1852米= 111,120米
我不确定哪个更准确...
对于一个经度的程度,请做同样的事情,但要乘以余弦(纬度),因为经度线在向北移动时越来越近。
度和仪表之间的转化在地球表面各不相同。
假设球形地球,纬度=距离 * 360 /(2 * pi * 6400000)
请注意,经度会根据纬度而有所不同:
程度经度=距离 * 360 * /(2 * pi * cos(latitude))
以上是针对地球表面的,并且不使用默塞托投影。如果您想使用投影线性距离,则需要使用Mercator投影。
不隶属于 StackOverflow