728x90
1. 거리 계산 (GPS 좌표 변환 공식 / 지구의 곡률 적용)
/// <summary>
/// 거리 계산
/// </summary>
/// <param name="lat1"></param>
/// <param name="lng1"></param>
/// <param name="lat2"></param>
/// <param name="lng2"></param>
/// <returns></returns>
public double Distance(double lat1, double lng1, double lat2, double lng2)
{
double theta = 0.0d;
double dist = 0.0d;
theta = lng1 - lng2;
dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1))
* Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta));
dist = Math.Acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515; // statute miles. 단위는 기본 마일.
dist = dist * 1.609344;
return dist;
}
2. 주어진 도 값을 라디언으로 변환
/// <summary>
/// 주어진 도(degree) 값을 라디언으로 변환
/// </summary>
/// <param name="deg"></param>
/// <returns></returns>
private double deg2rad(double deg)
{
if (!double.IsInfinity((double)(deg * (double)180d / Math.PI)))
return (double)(deg * Math.PI / (double)180d);
else
return 0;
}
/// <summary>
/// 주어진 라디언(radian) 값을 도(degree) 값으로 변환
/// </summary>
/// <param name="rad"></param>
/// <returns></returns>
private double rad2deg(double rad)
{
if (!double.IsInfinity((double)(rad * (double)180d / Math.PI)))
return (double)(rad * (double)180d / Math.PI);
else
return 0;
}
3. 좌표 생성 시간을 기준으로 속도(km/h) 계산
/// <summary>
/// 좌표 생성 시간을 기준으로 속도(km/h) 계산
/// </summary>
/// <param name="km"></param>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public static double GetKph(double km, string startDate, string endDate)
{
double velocity = 0.0d;
double totalTime = Utils.DateTimeHelper.GetTimeSpan(startDate, endDate).TotalSeconds;
if (!double.IsInfinity(((km / totalTime) * 3600)))
velocity = ((km / totalTime) * 3600);
return velocity;
}
'.NET C#' 카테고리의 다른 글
티스토리에 c# 코드 옮겨 붙일 수 있는 사이트 (0) | 2023.10.04 |
---|---|
경사도 (0) | 2023.01.16 |
자전거 칼로리 공식 (0) | 2023.01.15 |
c# DateTime (날짜, 시간, 요일 추출) Utils (0) | 2023.01.13 |
C# GPX(GPS Exchange Format) Paser (0) | 2023.01.13 |
코드 블럭 테스트 (c# DB Helper) (0) | 2023.01.12 |
시작일과 종료일 기간 체크 및 날짜 등분 (0) | 2012.05.05 |
댓글