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;
}
}
}