如何在mapbox中寻找两个坐标之间的角度?

问题描述 投票:0回答:1

我在研究mapbox的基础上,根据我现在的。latlong,随机距离为 226mt 和随机程度 179 degrees我又计算了另一条纬线,如下图。

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.

哪个部分的代码是正确的?我已经创建了一个工作示例 此处,并在控制台中记录了数值。有谁能帮我解决一下吗?

javascript jquery mapbox mapbox-gl-js mapbox-gl
1个回答
1
投票

你使用的是 mapboxgl.LngLat() 函数。函数名已经包含了它希望你传递经度和纬度的顺序--> 先经度后纬度。你是先传经纬度再传经度。这肯定会导致一个问题。

你的代码。

function findpos(){
    var ptt = new mapboxgl.LngLat(latitude,longitude);
    var ptt2 = destinationPoint(179.85, 0.226, ptt);

    return ptt2;
}

试试这个

function findpos(){
    var ptt = new mapboxgl.LngLat(longitude,latitude);
    var ptt2 = destinationPoint(179.85, 0.226, ptt);

    return ptt2;
}

你这部分的代码也是如此

return new mapboxgl.LngLat(lat2.toDeg(), lon2.toDeg());

© www.soinside.com 2019 - 2024. All rights reserved.