C언어나 C++에서 사용할 수 있는 함수입니다. 두 지점의 위경도 값을 정해서 함수에 대입하면 Meter로 값을 반환합니다. km로 값을 받고 싶으면 dDistance*=1000; 부분 주석치면 됩니다.
double GetDistance( tagPT pt1, tagPT pt2 )
{
int radius = 6371;
double dLat = rad( (pt2.y-pt1.y) );
double dLon = rad( (pt2.x-pt1.x) );
pt1.y = rad( pt1.y );
pt2.y = rad( pt2.y );
double a = sin(dLat⁄2) * sin(dLat⁄2) + sin(dLon⁄2) * sin(dLon⁄2) * cos(pt1.y) * cos(pt2.y);
double c = 2 * atan2f(sqrtf(a), sqrtf(1-a));
double dDistance = radius * c;
dDistance*=1000;
return dDistance;
}
아래는 예제 입니다.
#include <stdio.h>
#include <math.h>
#define rad(x) x*3.14159⁄180.0
struct tagPT
{
double x;
double y;
double z;
};
double GetDistance( tagPT pt1, tagPT pt2 );
int main()
{
tagPT pt1;
tagPT pt2;
//한밭수목원 거리
pt1.y = 36.364808;
pt1.x = 127.379525;
pt2.y = 36.364772;
pt2.x = 127.390275;
double dDis = GetDistance( pt1, pt2 );
return 0;
}
double GetDistance( tagPT pt1, tagPT pt2 )
{
int radius = 6371;
double dLat = rad( (pt2.y-pt1.y) );
double dLon = rad( (pt2.x-pt1.x) );
pt1.y = rad( pt1.y );
pt2.y = rad( pt2.y );
double a = sin(dLat⁄2) * sin(dLat⁄2) + sin(dLon⁄2) * sin(dLon⁄2) * cos(pt1.y) * cos(pt2.y);
double c = 2 * atan2f(sqrtf(a), sqrtf(1-a));
double dDistance = radius * c;
dDistance*=1000;
return dDistance;
}