插值计算两个经纬度之间点,平滑移动Marker,两个地理坐标之间生成更多采样点
场景:平滑称动Marker,两个地理坐标之间生成更多采样点
来源:https://github.com/ewoken/Leaflet.MovingMarker/blob/master/MovingMarker.js
/*** 插值计算两个经纬度之间点;** @param p1 起点* @param p2 终点;* @param duration 总时长* @param t 当前时间;* @returns*/
function interpolatePosition(p1, p2, duration, t) {var k = t / duration;k = k > 0 ? k : 0;k = k > 1 ? 1 : k;let lat = p1.lat + k * (p2.lat - p1.lat);let lng = p1.lng + k * (p2.lng - p1.lng);return [lng, lat];
}function getAllPoint() {const p1 = {lat: 39.887487, // 31.929613,lng: 116.362209, // 118.632093,};const p2 = {lat:39.878002, //31.930489,lng: 116.422897, // 118.633174,};// 生成10个点const totalTime = 10;let ret = [];for (let i = 0; i < totalTime ; i++) {const newPoint = interpolatePosition(p1, p2, totalTime, i);ret.push(newPoint);}console.log("ret: ", ret);
}getAllPoint();
结果:
ret: [[ 116.362209, 39.887487 ],[ 116.36827779999999, 39.8865385 ],[ 116.3743466, 39.88559 ],[ 116.3804154, 39.8846415 ],[ 116.3864842, 39.883693 ],[ 116.39255299999999, 39.8827445 ],[ 116.3986218, 39.881796 ],[ 116.40469060000001, 39.8808475 ],[ 116.4107594, 39.879899 ],[ 116.4168282, 39.8789505 ]
]
验证结果:
相关:https://blog.csdn.net/enternalstar/article/details/131085237