已知坐标系原点的GPS,求点(x,y)处的GPS坐标

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhango5/article/details/80349707

以GPS点作为二维坐标系的原点,正东方向为x轴正方向,正北方向为y轴正方向,以下提供两种入参条件下的计算方法:

1. 已知点的坐标(x,y),单位米,求点的GPS坐标;

2. 已知点距离原点的距离和两点间向量与y轴的夹角,求点的GPS坐标。

_GPS GpsPlusDistance(const double& lat, const double& lng, const int& x, const int& y)
{
    float fx = (float)x / 1000.0f;    // m 转为 km
    float fy = (float)y / 1000.0f;
    
    // 此时向量与y轴夹角,但这个算法不需要
    double angle = atan2(x, y);
    angle = radian_to_angle(angle);    // 弧度转角度
    
    gps.lng = lng + fx / (111 * cos(lat * M_PI / 180));    //将距离转换成经度的计算公式
    gps.lat = lat + fy / 111;    //将距离转换成纬度的计算公式

    return gps;
}

_GPS GpsPlusDistance(const double& lat, const double& lng, const float& dist, const float& angle)
{
    float fdist = dist / 1000.0;    // m 转为 km

    _GPS gps;

    gps.lng = lng + (fdist * sin(angle* M_PI / 180)) / (111 * cos(lat * M_PI / 180));    //将距离转换成经度的计算公式
    gps.lat = lat + (fdist * cos(angle* M_PI / 180)) / 111;    //将距离转换成纬度的计算公式

    return gps;
}

double radian_to_angle( double rad )
{
    double flag = (rad < 0) ? -1.0 : 1.0;
    if ( rad < 0 )
    {
        rad *= -1.0;
    }
    double result = (rad * 180) / M_PI;
    double degree = int(result);
    return flag * degree;
}

以上使用的坐标、距离单位均为米(m),夹角为角度,不是弧度。



猜你喜欢

转载自blog.csdn.net/zhango5/article/details/80349707
今日推荐