平面坐标计算代码
/// 平面坐标系,通过三角函数求终点坐标 /// startPoint(x,y): 起点 /// angle: 角度 /// distance: 距离 /// <returns>终点坐标</returns> function calNewPointByAngle2(startPoint, angle, distance) { var endPoint = {}; // 角度转弧度 var radian = (angle * Math.PI) / 180; // 计算新坐标(对于无限接近0的数字,此处没有优化) endPoint.x = startPoint.x + distance * Math.sin(radian); endPoint.y = startPoint.y + distance * Math.cos(radian); return endPoint; }
注意:
1. 计算坐标时,对于无限接近0的小数没有进行优化,可根据实际转换为0
2. 球面坐标计算时,不同维度球面周长不同,计算x偏移量时,需要根据所在维度进行转换
球面坐标计算代码
/// 球面坐标系,通过三角函数求终点坐标 /// startPoint(lng,lat,alt): 起点 /// angle: 角度 /// distance: 距离 /// <returns>终点坐标</returns> function calNewPointByAngle3(startPoint, angle, distance) { var rate = Math.cos(startPoint.lat * Math.PI / 180); // 指定维度球面长度和赤道长度的比率 var lat_meter = 111111; // 1维度 ≈ 111,111米 var r = angle * Math.PI / 180.0; var x = Math.sin(r) * distance; var y = Math.cos(r) * distance; x = x / lat_meter / rate; // x偏移量需要根据所在维度进行计算 y = y / lat_meter; return { x: startPoint.lng + x, y: startPoint.lat + y, z: startPoint.alt }; }
注意:
1. 计算坐标时,对于无限接近0的小数没有进行优化,可根据实际转换为0
2. 球面坐标计算时,不同维度球面周长不同,计算x偏移量时,需要根据所在维度进行转换