C GPS坐标测距
如何使用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
(由于地球的球形,毕达哥拉斯定理还不够)你必须使用哈弗公式: 哈弗森公式: 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;
}
注意:这只会给你一个非常粗略的估计。地球不是一个完美的球体(这就是为什么存在)和计算不考虑高度。重复的你可能会使用这个算法在嵌入式环境中,但没有什么问题,将它链接到嵌入式计算。问题重新标记。