有没有办法从一点到另一点计算轴承?

时间:2016-03-19 00:00:10

标签: javascript mapbox mapbox-gl-js

这是我手动操作的方法......

我有这三个坐标:

urldecode()

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

$search = urldecode($_POST["name"]);

我可以手动设置方位,以便下一个坐标(不完全,但对于此示例足够接近)直接前进:

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

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

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

然后我可以再次手动设置轴承,将第三个坐标直接放在前面:

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

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

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

有没有办法每次自动计算轴承值,以便每个map.easeTo({ bearing:130, pitch:60, zoom:19 }); 总是直接前进?

我找到了this question,它用Java来涵盖这个想法。基于那里的代码,我想出了以下代码,它来自 close ,但与它的垂直角度更多,而不是直接对齐下一个点。

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

1 个答案:

答案 0 :(得分:0)

我发现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文件中。