C 프로그래밍 : 두 GPS 좌표간 거리(distance) 구하기

반응형

 

C 프로그래밍 : 두 GPS 좌표간 거리(distance) 구하기

본 글에서는 C 언어를 이용하여 두 GPS 좌표간의 거리를 구하는 방법에 대해 설명한다.

 

GPS 좌표 정보 중 도 단위 위도(latitude) 값과 경도(longitude) 값을 이용하여 두 좌표 사이의 거리(distance)를 계산할 수 있다.

본 방법에서는 거리 계산을 위해 삼각함수가 사용되므로 math 헤더파일을 인클루드해야 한다.

 

두 좌표 간 거리를 구하는 함수는 다음과 같이 구현할 수 있다.

#include <math.h>


/// 계산에 사용되는 파이 값
#define PI 3.14159265358979323846


/**
 * @brief 소수점 도(decimal degree)를 라디언(radian)으로 변환한다.
 * @param[in] deg 변환할 도 값
 * @return 변환된 라디언 값
 */
double ConvertDecimalDegreesToRadians(double deg)
{
  return (deg * PI / 180);
}


/**
 * @brief 라디언(radian)을 소수점 도(decimal degree)로 변환한다.
 * @param[in] rad 변환할 라디언 값
 * @return 변환된 도 값
 */
double ConvertRadiansToDecimalDegrees(double rad)
{
  return (rad * 180 / PI);
}


/**
 * @brief 두 좌표간의 거리(미터단위)를 계산하여 반환한다.
 *
 * @param[in] lat1 좌표1의 위도(도단위)
 * @param[in] lon1 좌표1의 경도(도단위)
 * @param[in] lat2 좌표2의 위도(도단위)
 * @param[in] lon2 좌표2의 경도(도단위)
 * @return 두 좌표간 거리(미터 단위)
 */
double GetDistanceBetweenPoints(double lat1, double lon1, double lat2, double lon2)
{
  double theta, dist;
  if ((lat1 == lat2) && (lon1 == lon2)) {
    return 0;
  }
  else {
    theta = lon1 - lon2;
    dist = sin(ConvertDecimalDegreesToRadians(lat1)) * sin(ConvertDecimalDegreesToRadians(lat2)) +
           cos(ConvertDecimalDegreesToRadians(lat1)) * cos(ConvertDecimalDegreesToRadians(lat2)) *
           cos(ConvertDecimalDegreesToRadians(theta));
    dist = acos(dist);
    dist = ConvertRadiansToDecimalDegrees(dist);
    dist = dist * 60 * 1.1515;
    dist = dist * 1.609344 * 1000;  // 미터 단위로 변환
    return dist;
  }
}

 

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음

댓글

Designed by JB FACTORY