Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C GPS坐标测距_C_Math_Gps - Fatal编程技术网

C GPS坐标测距

C GPS坐标测距,c,math,gps,C,Math,Gps,如何使用GPS坐标计算两个地点之间的距离? (由于地球的球形,毕达哥拉斯定理还不够)你必须使用哈弗公式: 哈弗森公式: R=地球半径(平均半径=6371km) Δlat=lat2− lat1 Δlong=long2− long1 a=sin²(Δlat/2)+cos(lat1).cos(lat2).sin²(Δlong/2) c=2.2(√A.√(1−a) ) d=R.c 其中d是距离(您的解),所有角度必须以弧度为单位 查找haversine库,在C中: #include <math.h

如何使用GPS坐标计算两个地点之间的距离?


(由于地球的球形,毕达哥拉斯定理还不够)

你必须使用哈弗公式: 哈弗森公式:

R=地球半径(平均半径=6371km)

Δlat=lat2− lat1

Δlong=long2− long1

a=sin²(Δlat/2)+cos(lat1).cos(lat2).sin²(Δlong/2)

c=2.2(√A.√(1−a) )

d=R.c

其中d是距离(您的解),所有角度必须以弧度为单位

查找haversine库,在C中:

#include <math.h>
#include "haversine.h"

#define d2r (M_PI / 180.0)

//calculate haversine distance for linear distance
double haversine_km(double lat1, double long1, double lat2, double long2)
{
    double dlong = (long2 - long1) * d2r;
    double dlat = (lat2 - lat1) * d2r;
    double a = pow(sin(dlat/2.0), 2) + cos(lat1*d2r) * cos(lat2*d2r) * pow(sin(dlong/2.0), 2);
    double c = 2 * atan2(sqrt(a), sqrt(1-a));
    double d = 6367 * c;

    return d;
}

double haversine_mi(double lat1, double long1, double lat2, double long2)
{
    double dlong = (long2 - long1) * d2r;
    double dlat = (lat2 - lat1) * d2r;
    double a = pow(sin(dlat/2.0), 2) + cos(lat1*d2r) * cos(lat2*d2r) * pow(sin(dlong/2.0), 2);
    double c = 2 * atan2(sqrt(a), sqrt(1-a));
    double d = 3956 * c; 

    return d;
}
#包括
#包括“haversine.h”
#定义d2r(M_PI/180.0)
//计算线性距离的哈弗森距离
双哈弗赛因公里(双拉特1、双长1、双拉特2、双长2)
{
双dlong=(long2-long1)*d2r;
双dlat=(lat2-lat1)*d2r;
双a=功率(sin(dlat/2.0),2)+cos(lat1*d2r)*cos(lat2*d2r)*功率(sin(dlong/2.0),2);
双c=2*atan2(sqrt(a),sqrt(1-a));
双d=6367*c;
返回d;
}
双哈弗森(双板条1,双长1,双板条2,双长2)
{
双dlong=(long2-long1)*d2r;
双dlat=(lat2-lat1)*d2r;
双a=功率(sin(dlat/2.0),2)+cos(lat1*d2r)*cos(lat2*d2r)*功率(sin(dlong/2.0),2);
双c=2*atan2(sqrt(a),sqrt(1-a));
双d=3956*c;
返回d;
}

注意:这只会给你一个非常粗略的估计。地球不是一个完美的球体(这就是为什么存在)和计算不考虑高度。重复的你可能会使用这个算法在嵌入式环境中,但没有什么问题,将它链接到嵌入式计算。问题重新标记。