C++ —— (两个经纬度计算距离、方位角)、(经纬度A+距离+方位,计算目标经纬度)、(多个经纬度计算面积)

顺看

编码不易,觉得文章好,请给作者点赞关注、一键三连。谢谢!

     

* 计算两经纬度之间的距离、方位角
* 已知A经纬度、根据距离、方位,计算目标经纬度

     
     测试了三组数据,并与在线工具测试后对比效果:
C++ —— (两个经纬度计算距离、方位角)、(经纬度A+距离+方位,计算目标经纬度)、(多个经纬度计算面积)_第1张图片
     方位角,距离,海拔在线计算器 (侵删)

     
     
具体理论这里不做介绍,大家可以看如下代码再去理解公式:

#include 

// PI
#define M_PI		3.14159265358979323846

// 地球半径
const double EARTH_RADIUS = 6371000;

// 大地坐标系资料WGS-84,长半径 6378137
const double WGS84_L_RADIUS = 6378137;

// 大地坐标系资料WGS-84,短半径 6356752.3142 */
const double WGS84_S_RADIUS = 6356752.3142;

// 扁率
const double M_F = 1 / 298.2572236;

// 角度转弧度
double A2R(double d) {
    return d * M_PI / 180.0; }

// 弧度转角度
double R2A(double d) {
    return d / M_PI * 180.0; }

// 1、计算两个经纬度之间的距离(m)
double GetDistanceCpp(double lat1, double lng1, double lat2, double lng2)
{
   
    double radLat1 = A2R(lat1);
    double radLat2 = A2R(lat2);
    double a = radLat1 - radLat2;
    double b = A2R(lng1) - A2R(lng2);
    double s = 2 * asin(sqrt(pow(sin(a/2),2) +cos(radLat1)*cos(radLat2)*pow(sin(b/2),2)));
    s = s * EARTH_RADIUS;
    return s;
}

// 2、计算两个经纬度之间的方位角(偏北角)(°)
double GetYaw(double lat1, double lon1, double lat2, double lon2)
{
   
	double result = 0.0;

    int ilat1 = (int) (0.50 + lat1 * 360000.0);
    int ilat2 = (int) 

你可能感兴趣的:(C++,c++,算法,开发语言)