【发布时间】:2020-05-15 09:25:57
【问题描述】:
我在mapbox上工作,根据我当前的latlong,随机距离226mt和随机度179 degrees,我计算了另一个latlong如下。
function findpos(){
var ptt = new mapboxgl.LngLat(latitude,longitude);
var ptt2 = destinationPoint(179.85, 0.226, ptt);
return ptt2;
}
Number.prototype.toRad = function() {
return this * Math.PI / 180;
}
Number.prototype.toDeg = function() {
return this * 180 / Math.PI;
}
function destinationPoint(brng, dist, pointA) {
dist = dist / 6378.1;
brng = brng.toRad();
var lat1 = pointA.lat.toRad(), lon1 = pointA.lng.toRad();
var lat2 = Math.asin(Math.sin(lat1) * Math.cos(dist) +
Math.cos(lat1) * Math.sin(dist) * Math.cos(brng));
var lon2 = lon1 + Math.atan2(Math.sin(brng) * Math.sin(dist) *
Math.cos(lat1),
Math.cos(dist) - Math.sin(lat1) *
Math.sin(lat2));
if (isNaN(lat2) || isNaN(lon2)) return null;
console.log("des ",lon2,lat2);
return new mapboxgl.LngLat(lat2.toDeg(), lon2.toDeg());
}
到目前为止还可以。但是现在我想找到两个纬度之间的角度或方位,并找到了这个
// Converts from degrees to radians.
function toRadians(degrees) {
return degrees * Math.PI / 180;
};
// Converts from radians to degrees.
function toDegrees(radians) {
return radians * 180 / Math.PI;
}
function bearing(startLat, startLng, destLat, destLng){
startLat = toRadians(startLat);
startLng = toRadians(startLng);
destLat = toRadians(destLat);
destLng = toRadians(destLng);
y = Math.sin(destLng - startLng) * Math.cos(destLat);
x = Math.cos(startLat) * Math.sin(destLat) -
Math.sin(startLat) * Math.cos(destLat) * Math.cos(destLng - startLng);
brng = Math.atan2(y, x);
brng = toDegrees(brng);
return (brng + 360) % 360;
// return brng;
}
它计算一个度数并给出一个结果。但是当我决定通过上面的函数findpos() 放置已经计算的纬度来仔细检查这个函数时,我应该得到179.85 degrees 的答案,但我得到的角度是270 degree。
代码的哪一部分是正确的?我创建了一个工作示例here,并在控制台中记录了这些值。有谁能帮帮我吗?
【问题讨论】:
-
不知道你从哪里得到这些计算;您只需要
const y = destLat - startLat; const x = destLng - startLng;然后return toDegrees(Math.atan2(y, x));,结果:179.32707567621796(我还创建了一支合适的笔:codepen.io/khrismuc/pen/PoPdyOg?editors=0010) -
@ChrisG 原来你是对的。非常感谢。如果您可以将其写为答案,我将接受它作为答案。
-
等等,抱歉,您使用的是球体公式。当我这样做时,我得到了 89 度。然而,对于短距离,简单的公式可以正常工作。
-
@ChrisG 这个公式能正常工作多少距离?对于上述短距离,这在世界任何地方都能正常工作吗?
-
我会说它对于 500 公里以下的距离来说已经足够近了?理想情况下,您也应该靠近赤道;在极点附近,误差会变大,因为经度线与方形网格的偏离越来越远。如果我们在谈论更大的距离,还有方位会不断变化的有趣皱纹,这就是为什么公式只计算初始方位的原因。所以这真的取决于你到底需要这个。
标签: javascript jquery mapbox mapbox-gl-js mapbox-gl