我在我的应用程序中使用PIC24f和GPS模块L80。从gps模块成功,我可以获得纬度和经度。
#include<stdio.h>
#include<string.h>
#include<math.h>
float Distance=0;
void distancebygps(float lat1, float lon1, float lat2, float lon2)
{
double dlon=0,dlat=0,a=0,c=0,dist=0;
dlon = (lon2 - lon1) * (M_PI / 180.0);
dlat = (lat2 - lat1) * (M_PI / 180.0);
a = pow(sin(dlat/2.0), 2) + cos(lat1*(M_PI / 180.0)) * cos(lat2*(M_PI /180.0)) * pow(sin(dlon/2.0), 2);
c = 2 * atan2(sqrt(a), sqrt(1-a));
dist = 6367 * c;
Distance = (float) (Distance + dist);
printf("%.2f",Distance);
}
void Getgpsvalue()
{
// code to get latitude and longitude
// getting latitude and longitude
distancebygps(Latitude1,Longitude1,Latitude2,Longitude2);
}
int main()
{
while(1)
{
Getgpsvalue();
Delayms(10000);
}
}
这是我计算纬度和经度距离的代码。当我传递一个值时,例如(12.9229, 80.1275, 13.0102, 80.2157)
,它给出的正确距离为13.614012 Km
。
当我在无限循环中运行时,它从L80 gps模块中获取值,在它给出12454.12
或168.12
或{{1}的值之后,它正确地为某个Km加上距离像这些值。
为什么它会得到一些未知值?可能是什么问题?
有时相同的代码正常工作,有时错误。计算距离公式有什么不对吗?