0
這是我會怎麼做手工......有沒有辦法計算從一點到另一點的方位?
我有這三個座標:
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 });
然後我就可以一直向前飛到第三個座標:
map.flyTo({ center:coordinateThree, zoom: 19 });
有沒有辦法每次自動計算該方位值,這樣e ach flyTo
總是直行嗎?
我發現this question,它涵蓋了Java中的這個想法。根據那裏的代碼,我想出了以下代碼關閉,但有更多的垂直角度,而不是直接對齊下一個點。
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);
}