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

以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),夹角为角度,不是弧度。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值