using System; namespace 电子展板.Utility.Other { public class CalcUtils { /// /// 计算两个坐标的距离 /// /// 经度1 /// 纬度1 /// 经度2 /// 纬度2 /// public static double getDistance(double long1, double lat1, double long2, double lat2) { double a, b, R; R = 6371393; // 地球半径 lat1 = lat1 * Math.PI / 180.0; lat2 = lat2 * Math.PI / 180.0; a = lat1 - lat2; b = (long1 - long2) * Math.PI / 180.0; double d; double sa2, sb2; sa2 = Math.Sin(a / 2.0); sb2 = Math.Sin(b / 2.0); d = 2 * R * Math.Asin(Math.Sqrt(sa2 * sa2 + Math.Cos(lat1) * Math.Cos(lat2) * sb2 * sb2)); return d; } public static double algorithm(double longitude1, double latitude1, double longitude2, double latitude2) { double Lat1 = rad(latitude1); // 纬度 double Lat2 = rad(latitude2); double a = Lat1 - Lat2;//两点纬度之差 double b = rad(longitude1) - rad(longitude2); //经度之差 double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(Lat1) * Math.Cos(Lat2) * Math.Pow(Math.Sin(b / 2), 2)));//计算两点距离的公式 s = s * 6378137.0;//弧长乘地球半径(半径为米) s = Math.Round(s * 10000d) / 10000d;//精确距离的数值 return s; } private static double rad(double d) { return d * Math.PI / 180.00; //角度转换成弧度 } public static double getVectorAngle(double x1, double y1, double x2, double y2) { return Math.Acos((x1 * x2 + y1 * y2) / (Math.Sqrt(x1 * x1 + y1 * y1) * Math.Sqrt(x2 * x2 + y2 * y2))) * 180.0 / Math.PI; } } }