您的位置:首页 > 其它

已知两点的经度、纬度,计算两点的距离

2010-07-29 10:36 671 查看
const double EARTH_RADIUS = 6378137;//地球半径
/// <summary>
/// 计算由经纬度给出两点的距离
/// </summary>
/// <param name="Lat1">点一纬度</param>
/// <param name="Lon1">点一经度</param>
/// <param name="Lat2">点二纬度</param>
/// <param name="Lon2">点二经度</param>
/// <returns>两点之间以海里为单位的距离</returns>
public static double ComputeD(double Lat1, double Lon1, double Lat2, double Lon2)
{
if (Lat1 < -90 || Lat1 > 90)
{
MessageBox.Show("纬度值输入错误!", "操作提示",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return -9999;
}
if (Lon1 < -180 || Lon1 > 180)
{
MessageBox.Show("经度值输入错误!", "操作提示",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return -9999;
}
if (Lat2 < -90 || Lat2 > 90)
{
MessageBox.Show("纬度值输入错误!", "操作提示",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return -9999;
}
if (Lon2 < -180 || Lon2 > 180)
{
MessageBox.Show("经度值输入错误!", "操作提示",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return -9999;
}
double radLat1 = rad(Lat1);
double radLat2 = rad(Lat2);
double a = radLat1 - radLat2;
double b = rad(Lon1) - rad(Lon2);
double Dis  = 2 * Math.Asin(Math.Sqrt(Math.Sin(a / 2) * Math.Sin(a / 2) +
Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Sin(b / 2) * Math.Sin(b / 2)));
Dis = Dis  * EARTH_RADIUS;
return Dis ;//米
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: