javascript - 有没有一种方法可以计算从一点到另一点的方位 Angular ?

标签 javascript mapbox mapbox-gl-js

这就是我手动完成的方法...

我有这三个坐标:

var coordinateOne   = [-72.642883, 42.201343];
var coordinateTwo   = [-72.639532, 42.200784];
var coordinateThree = [-72.637823, 42.199687];

我有这张 map ,它以第一个坐标为中心:

var map = new mapboxgl.Map({
  container: 'map',
  style: 'mapbox://styles/mapbox/streets-v8',
  center: coordinateOne,
  zoom: 19
});

我可以手动设置方位 Angular ,以便下一个坐标(不完全准确,但对于本例来说足够接近)直接向前:

map.easeTo({ bearing:109, pitch:60, zoom:19 });

然后我可以直接飞到第二个坐标:

map.flyTo({ center:coordinateTwo, zoom: 19 });

然后我可以再次手动设置方位 Angular ,将第三个坐标放在正前方:

map.easeTo({ bearing:130, pitch:60, zoom:19 });

然后我可以直接飞到第三个坐标:

map.flyTo({ center:coordinateThree, zoom: 19 });

有没有一种方法可以自动计算每次的方位值,以便每个 flyTo 始终直线前进?


我找到了this question ,它在 Java 中涵盖了这个想法。根据那里的代码,我想出了以下代码,它接近,但与它有更多的垂直 Angular ,而不是直接向前对齐下一个点。

function bearing(lat1, lon1, lat2, lon2) {
  var longDiff = lon2 - lon1;
  var y        = Math.sin(longDiff) * Math.cos(lat2);
  var x        = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(longDiff);

  return ( toDegrees( Math.atan2( y, x ) ) + 360 ) % 360;
}

function toDegrees (angle) {
  return angle * (180 / Math.PI);
}

最佳答案

我发现TurfJS包括 bearing测量,所以我正在使用它。

我将这个函数放在一起来返回两点之间的方位:

function bearingBetween(coordinate1, coordinate2) {
  var point1 = {
    "type": "Feature",
    "geometry": {
      "type": "Point",
      "coordinates": [coordinate1[0], coordinate1[1]]
    }
  };
  var point2 = {
    "type": "Feature",
    "geometry": {
      "type": "Point",
      "coordinates": [coordinate2[0], coordinate2[1]]
    }
  };
  return turf.bearing(point1, point2);
}

我在我的 easeTo 行中使用它:

map.easeTo({ bearing: bearingBetween(coordinateOne, coordinateTwo), pitch: 60, zoom: 19 });

TurfJS 用于计算此值的代码位于其 packages/turf-bearing/index.js 中文件。

关于javascript - 有没有一种方法可以计算从一点到另一点的方位 Angular ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36096188/

相关文章:

reactjs - react Mapbox 层未显示

vue.js - MapBox (mapbox-gl-vue) 只在容器宽度的 50% 上渲染 map

javascript - 将参数传递给函数导出 Node

javascript - Ruby on Rails 调用 javascript 函数

JavaScript - 这个高阶函数的含义

javascript - 在新布局/css 中集成 Mapbox 时出现的问题

javascript - 如何在 Mapbox Gl Js 中的圆圈内添加文本

ios - 使用 MapBox iOS SDK 和 colorize-alpha 的热图

javascript - mapbox gl js单击层上的事件

javascript - Angular promise 队列并显示加载数据