Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  gps_dist
Language: C/C++
Code:
#include <stdio.h>

#define EATH_RADIUS 6372795
/*Здесь указывается радиус Земли в метрах. Структура GPS_Point должна содержать GPS координаты точки. Текущие координаты берутся из структуры GPS (см. gps.c, gps.h).

Функция gps_convert_to_rad используется для пересчета координат в радианы.

Функция gps_distance вычисляет дистанцию между GPS и GPS_Point в километрах. Если надо в метрах замените
return (atan2(y,x) * EATH_RADIUS)/1000;
на return (atan2(y,x) * EATH_RADIUS);
Функция gps_angle вычисляет курс на точку GPS_Point с текущей точки GPS в градусах.*/
#define EATH_RADIUS 6372795
 
// GPS Poit
typedef struct {
    unsigned long   latitude;       // Долгота
    char            latitude_c;     // Долгота литера
    unsigned long   longitude;      // Широта
    char            longitude_c;    // Широта литера
} tpGPG_Point;
 
tpGPG_Point GPS_Point;
 
//-----------------------------------------
double gps_convert_to_rad (unsigned long int GPS_DATA, char c) {
    double rad;
 
    rad = (double)gps_convert_to_grad(GPS_DATA)* M_PI/1000000/180;
    if ((c=='S') | (c=='W'))
        rad = -1*rad;
    return rad;
}
//-----------------------------------------
 
double gps_distance() {
    double lat1_cos, lat2_cos, lat1_sin, lat2_sin;
    double lat1, long1, lat2, long2;
    double sin_delta_long, cos_delta_long;
    double y, x;
 
    lat1 = gps_convert_to_rad(GPS.latitude, GPS.latitude_c);
    long1 = gps_convert_to_rad(GPS.longitude, GPS.longitude_c);
 
    lat2 = gps_convert_to_rad(GPS_Point.latitude, GPS_Point.latitude_c); // Координаты точки
    long2 = gps_convert_to_rad(GPS_Point.longitude, GPS_Point.longitude_c);
 
    lat1_cos = cos(lat1);
    lat2_cos = cos(lat2);
    lat1_sin = sin(lat1);
    lat2_sin = sin(lat2);
 
    sin_delta_long = sin(long2-long1);
    cos_delta_long = cos(long2-long1);
 
    y=sqrt(pow(lat2_cos*sin_delta_long, 2)+pow(lat1_cos*lat2_sin-lat1_sin*lat2_cos*cos_delta_long,2));
    x=lat1_sin*lat2_sin+lat1_cos*lat2_cos*cos_delta_long;
 
    return (atan2(y,x) * EATH_RADIUS);
}
int main(int argc, char *argv[])
{
}

          
Comments: