在下图中,您可以看到从一个点(黑色圆圈)到它的 3 个相关点 () 绘制了 3 条线。
图像
问题
如何使用两点之间距离的百分比计算沿每条线的点之间的纬度和经度点?
例如,如果我想获得能够沿每条线绘制额外圆圈且相差 20% 的位置?
我现在有什么代码
var data = [
{ "coords" : [ 53.409045, -2.985406 ]},
{ "coords" : [ 53.408747, -2.982862 ]},
{ "coords" : [ 53.407630, -2.984136 ]},
{ "coords" : [ 53.407142, -2.986931 ]}
];
var pointA = new L.LatLng(53.409045, -2.985406);
var pointB;
data.forEach(function(d) {
pointB = new L.LatLng(d.coords[0], d.coords[1]);
L.polyline([pointA, pointB]).addTo(map);
L.circle([d.coords[0], d.coords[1]], 10).addTo(map);
});
上面的代码唯一要做的就是为每个点画一个圆,以及从主圆 (pointA) 到其他圆 (pointB) 的直线
我非常需要知道如何计算点 A 及其相关点之间的多个坐标(按距离百分比)。
我需要确保所有绿色圆圈与中心圆的距离相同
用于测试的 CODEPEN
编辑 - 使用下面的正确答案,我目前所拥有的图像
最佳答案
请参阅此页面了解您的不同方程式。 http://www.movable-type.co.uk/scripts/latlong.html
- 获取从起点到终点的距离和方位。
- 将百分比转换为适用单位的距离。
使用#1 的方位 Angular 、#2 的距离和原点来获得结果位置
function destination(lat, lon, bearing, distance) { var R = 6378.1, lat, lon, latDest, lonDest; // convert to radians lat = lat * (Math.PI / 180); lon = lon * (Math.PI / 180); bearing = bearing * (Math.PI / 180); latDest = Math.asin(Math.sin(lat) * Math.cos(distance / R) + Math.cos(lat) * Math.sin(distance / R) * Math.cos(bearing)); lonDest = lon + Math.atan2(Math.sin(bearing) * Math.sin(distance / R) * Math.cos(lat), Math.cos(distance / R) - Math.sin(lat) * Math.sin(latDest)); return [latDest * (180 / Math.PI), lonDest * (180 / Math.PI)]; }
关于javascript - 按百分比获取两点之间连线上的经纬度点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31640252/