这是我手动操作的方法......
我有这三个坐标:
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 });
答案 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文件中。