为什么这条线的方向在我变长时会发生变化?

时间:2014-07-15 03:37:48

标签: javascript math maps leaflet

我正在尝试在Leaflet地图上绘制一条线,给定WGS84坐标中的位置,长度和方向角度。

这是我的JavaScript代码:

var map = L.map('map').setView([49.41611,2.06806], 15);

L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png').addTo(map);

var lat = 49.41611;
var lng = 2.06806;
var deg = 220;

var len = 0.3;
deg = (deg / 360) * (Math.PI * 2);
L.polyline([
    [lat, lng],
    [lat + len * Math.cos(deg), lng + len * Math.sin(deg)]
]).addTo(map);

问题在于,当我将“len”变量更改为其他内容时,该行的可见方向会发生变化。

使用“len = 0.3”:screenshot

使用“len = 100”:screenshot

我的计算方法有问题吗?有浮点吗?我该如何解决?

1 个答案:

答案 0 :(得分:1)

这种方向改变的最可能原因是地球是圆的。

我猜你之前有一个更基本的错误。如果dir表示线的方向,则不能简单地将其转换为纬度和经度。这是因为它们形成的网格在小尺度上几乎是矩形,但在赤道上只是正方形。经络之间的距离是平行线之间距离的cos(lat)倍。所以对于小距离你可以做到

L.polyline([
    [lat, lng],
    [lat + len * Math.cos(deg) * Math.cos(lat), lng + len * Math.sin(deg)]
]).addTo(map);

尤其应该确保即使在高纬度地区,45°线确实会以45°结束。

以上只是小尺度的近似值。对于较长的线,地球的曲率意味着网格的纵横比沿着任何线的路径变化。在这种情况下,我建议转换为3d笛卡尔坐标,找到该系统中目标点的坐标,然后转换回来。不过,在这种情况下,数学将涉及更多。您最好在the Math SE上搜索并询问(如果搜索没有任何内容),这样也可以更好地排版公式。