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;
}


+ Recent posts