private static final double EARTH_RADIUS = 6378137;//赤道半径(单位m)
/// <summary>
/// 计算两点位置的距离,返回两点的距离,单位:米
/// 该公式为GOOGLE提供,误差小于0.2米
/// </summary>
/// <param 第一点经度="lon1">第一点经度</param>
/// <param 第一点纬度="lat1">第一点纬度</param>
/// <param 第二点经度="lon2">第二点经度</param>
/// <param 第二点纬度="lat2">第二点纬度</param>
/// 34.65 33.22 18.99 17.11
/// <returns></returns>
public static string GetDistance(string[] pos1, string[] pos2)
{
if (pos1 == null || pos2 == null || pos1[0] == null || pos2[0] == null)
{
return "位置未知";
}
else
{
double radLat1 = Rad(double.Parse(pos1[0]));
double radLon1 = Rad(double.Parse(pos1[1]));
double radLat2 = Rad(double.Parse(pos2[0]));
double radLon2 = Rad(double.Parse(pos2[1]));
double a = radLat1 - radLat2;
double b = radLon1 - radLon2;
double result = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2))) * EARTH_RADIUS;
if (result > 1000)
{
double resultG = result / 1000;
return Convert.ToDouble(resultG).ToString("0.00") + "公里";
}
else
{
return Convert.ToDouble(result).ToString("0.00") + "米";
}
}
}
/// <summary>
/// 经纬度转化成弧度
/// </summary>
/// <param name="d"></param>
/// <returns></returns>
private static double Rad(double d)
{
return (double)d * Math.PI / 180d;
}
将拿到的两个经纬度进行计算,得出两个坐标系的距离
本文介绍了一种利用经纬度计算两点间精确距离的方法,该方法基于地球半径和三角函数,误差小于0.2米,适用于高精度地理定位需求。通过将经纬度转换为弧度并应用球面三角公式,可以计算出两点之间的直线距离。
1603

被折叠的 条评论
为什么被折叠?



