Javascript 为什么这条线的方向变长了?

Javascript 为什么这条线的方向变长了?,javascript,math,maps,leaflet,Javascript,Math,Maps,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; de

我试图在传单地图上画一条线,给出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”:

使用“len=100”:


我的计算方法有问题吗?用浮点?我怎样才能解决这个问题呢?

地球是圆的,这很可能是方向改变的原因

不过,我想你之前犯了一个更根本的错误。如果
dir
表示直线的方向,则不能简单地将其转换为纬度aqnd经度。这是因为它们形成了一个网格,在小范围内几乎是矩形的,但只有在赤道处是正方形的。子午线之间的距离是平行线之间距离的
cos(lat)
倍。因此,对于小距离,您可以这样做

L.polyline([
    [lat, lng],
    [lat + len * Math.cos(deg) * Math.cos(lat), lng + len * Math.sin(deg)]
]).addTo(map);
您尤其应该确保45°线即使在高纬度地区也会以45°结束


不过,以上只是小规模的近似值。对于较长的线,地球的曲率意味着网格的纵横比沿任何线的路径变化。在这种情况下,我建议转换为三维笛卡尔坐标,在该系统中找到目标点的坐标,然后再转换回来。不过,在这种情况下,数学问题要复杂得多。您最好打开“搜索并询问”(如果搜索结果为空),这也允许更好地排版公式。

经线在赤道处的间距与在高纬度处的间距相同,因此除了赤道处,纬度和经度数字不能使用相同的比例因子。你的方程式假设纬度和经度大小相等,这只是赤道的情况。