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;
}
将拿到的两个经纬度进行计算,得出两个坐标系的距离