/// <summary>
/// 计算两个经纬度的距离
/// </summary>
public class DistanceCalculatorHelper
{
// 地球平均半径,单位:公里
private const double EarthRadiusKm = 6371;
public static double CalculateDistance(double startLat, double startLon, double endLat, double endLon)
{
// 将经纬度从十进制度数转换为弧度
double startLatRad = DegreeToRadian(startLat);
double startLonRad = DegreeToRadian(startLon);
double endLatRad = DegreeToRadian(endLat);
double endLonRad = DegreeToRadian(endLon);
// 经纬度差值
double dLat = endLatRad - startLatRad;
double dLon = endLonRad - startLonRad;
// Haversine公式
double a = Math.Pow(Math.Sin(dLat / 2), 2) + Math.Cos(startLatRad) * Math.Cos(endLatRad) * Math.Pow(Math.Sin(dLon / 2), 2);
double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
// 计算两点间的距离
double distance = EarthRadiusKm * c;
return distance;
}
private static double DegreeToRadian(double degree)
{
return degree * (Math.PI / 180);
}
}
使用
DistanceCalculatorHelper.CalculateDistance(startLat, startLon, endLat, endLon);