javascript - 为什么当我加长这条线时,它的方向会改变?

标签 javascript math maps leaflet

我正在尝试在给定 WGS84 坐标中的位置、长度和方向 Angular (以度为单位)的 Leaflet map 上绘制一条线。

这是我的 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

我的计算方法有问题吗?用 float ?我该如何解决这个问题?

最佳答案

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

不过,我猜你之前犯了一个更根本的错误。如果 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 上搜索并询问(如果搜索没有结果) ,这还可以更好地排版公式。

关于javascript - 为什么当我加长这条线时,它的方向会改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24749467/

相关文章:

javascript - Leaflet.js 和 JSON 数据 : optimization and performance

javascript - jQuery 就像独立的 ajax 库

javascript - 函数根据 setinterval 循环但具有不同的参数

javascript - 旋转时使用拖动 handle 调整 div 大小

python - 创建字节范围(用于请求部分数据)

javascript - 删除 d3 map 中的阿拉斯加和夏威夷

Javascript 问题已解决,不明白问题出在哪里

Javascript - 理解 Object.create 和 Object.call(this)

javascript - 如何使用正弦和余弦进行碰撞检测?

c++ - 具有 2 个值的 STL 映射