google Mapの座標値から距離を求めるルーチン
#include <math.h>
typedef struct location{
double longitude;
double latitude;
} LOCATION;
#define rad2deg(a) ((a)/M_PI * 180.0)
#define deg2rad(a) ((a)/180.0 * M_PI)
double distance_km(LOCATION* A, LOCATION* B, double *rad_up)
{
double earth_r = 6378.137;
double loRe = deg2rad(B->longitude - A->longitude);
double laRe = deg2rad(B->latitude - A->latitude);
double EWD = cos(deg2rad(A->latitude))*earth_r*loRe;
double NSD = earth_r*laRe;
double distance = sqrt(pow(NSD,2)+pow(EWD,2));
*rad_up = atan2(NSD, EWD);
return distance;
}
LOCATION* new_location(LOCATION* D, double diff_p_x, double diff_p_y)
{
double earth_r = 6378.137;
double loRe = diff_p_x / earth_r / cos(deg2rad(D->latitude));
double laRe = diff_p_y / earth_r;
double diff_lo = rad2deg(loRe);
double diff_la = rad2deg(laRe);
static LOCATION C;
C.longitude = D->longitude + diff_lo;
C.latitude = D->latitude + diff_la;
return &C;
}
double diff_longitude(double diff_p_x, double latitude)
{
double earth_r = 6378.137;
double loRe = diff_p_x / earth_r / cos(deg2rad(latitude));
double diff_lo = rad2deg(loRe);
return diff_lo;
}
double diff_latitude(double diff_p_y)
{
double earth_r = 6378.137;
double laRe = diff_p_y / earth_r;
double diff_la = rad2deg(laRe);
return diff_la;
}