平面坐标计算代码

/// 平面坐标系,通过三角函数求终点坐标
/// 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偏移量时,需要根据所在维度进行转换

 

 

posted on 2021-01-25 16:40  凌落成迷  阅读(129)  评论(0编辑  收藏  举报