C#计算两个经纬度之间的距离
时间: 2024-09-09 20:04:10 浏览: 50
在C#中,你可以使用Haversine公式来计算两个经纬度点之间的大圆距离。Haversine公式考虑了地球的曲率,其基本原理是基于球面三角学。以下是一个简单的函数示例:
```csharp
using System;
using System.Globalization;
using System.Threading.Tasks;
public class DistanceCalculator
{
private const double EarthRadiusKm = 6371; // 地球平均半径,单位公里
public static async Task<double> CalculateDistance(double lat1, double lon1, double lat2, double lon2)
{
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));
double distance = EarthRadiusKm * c;
return distance;
}
private static double ToRadians(double degrees)
{
return degrees * (Math.PI / 180.0);
}
}
// 要使用这个函数,可以这样做:
double lat1 = 39.9042; // 北京的纬度
double lon1 = 116.4074; // 北京的经度
double lat2 = 51.5074; // 伦敦的纬度
double lon2 = -0.1278; // 伦敦的经度
double distanceInKm = await DistanceCalculator.CalculateDistance(lat1, lon1, lat2, lon2);
Console.WriteLine($"北京到伦敦的距离大约是 {distanceInKm} 公里.");
```
阅读全文