使用GPS坐标的距离计算在c中给出了错误的值

时间:2016-04-29 08:04:08

标签: c gps distance

我在我的应用程序中使用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.12168.12或{{1}的值之后,它正确地为某个Km加上距离像这些值。

为什么它会得到一些未知值?可能是什么问题?

有时相同的代码正常工作,有时错误。计算距离公式有什么不对吗?

0 个答案:

没有答案