30 lines
1.0 KiB
C#
30 lines
1.0 KiB
C#
|
|
namespace LY.App.Common
|
|||
|
|
{
|
|||
|
|
public static class GisHelper
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 计算两点之间的距离
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="lat1"></param>
|
|||
|
|
/// <param name="lon1"></param>
|
|||
|
|
/// <param name="lat2"></param>
|
|||
|
|
/// <param name="lon2"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static double HaversineDistance(double lat1, double lon1, double lat2, double lon2)
|
|||
|
|
{
|
|||
|
|
const double R = 6371000.0; // 地球半径(单位:米)
|
|||
|
|
|
|||
|
|
double dLat = ToRadians(lat2 - lat1);
|
|||
|
|
double dLon = ToRadians(lon2 - lon1);
|
|||
|
|
|
|||
|
|
double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
|
|||
|
|
Math.Cos(ToRadians(lat1)) * Math.Cos(ToRadians(lat2)) *
|
|||
|
|
Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
|
|||
|
|
|
|||
|
|
double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
|
|||
|
|
return R * c;
|
|||
|
|
}
|
|||
|
|
static double ToRadians(double degrees) => degrees * Math.PI / 180.0;
|
|||
|
|
}
|
|||
|
|
}
|