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