/// <returns>单位:米</returns> public static int 测量两点间间距(M经纬度 点1, M经纬度 点2) { if (点1.类型 != 点2.类型) { 点1 = HGPS坐标转换.转原始坐标(点1); 点2 = HGPS坐标转换.转原始坐标(点2); } return((int)(GMapProviders.EmptyProvider.Projection.GetDistance(new GMap.NET.PointLatLng(点1.纬度, 点1.经度), new GMap.NET.PointLatLng(点2.纬度, 点2.经度)) * 1000)); //var latRadians1 = __纬度1 * (Math.PI / 180); //var latRadians2 = __纬度2 * (Math.PI / 180); //var latRadians = latRadians1 - latRadians2; //var lngRadians = __经度1 * (Math.PI / 180) - __经度2 * (Math.PI / 180); //var f = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(latRadians / 2), 2) + Math.Cos(latRadians1) * Math.Cos(latRadians2) * Math.Pow(Math.Sin(lngRadians / 2), 2))); //return f * 6378137; //double dLat1InRad = p1.Lat * (Math.PI / 180); //double dLong1InRad = p1.Lng * (Math.PI / 180); //double dLat2InRad = p2.Lat * (Math.PI / 180); //double dLong2InRad = p2.Lng * (Math.PI / 180); //double dLongitude = dLong2InRad - dLong1InRad; //double dLatitude = dLat2InRad - dLat1InRad; //double a = Math.Pow(Math.Sin(dLatitude / 2), 2) + Math.Cos(dLat1InRad) * Math.Cos(dLat2InRad) * Math.Pow(Math.Sin(dLongitude / 2), 2); //double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a)); //double dDistance = (Axis / 1000.0) * c; //return dDistance; }
/// <param name="半径">单位:米</param> public static bool 判断点在圆形内(M经纬度 点, M经纬度 圆心, int 半径) { if (点.类型 != 圆心.类型) { 点 = HGPS坐标转换.转原始坐标(点); 圆心 = HGPS坐标转换.转原始坐标(圆心); } var __间距 = 测量两点间间距(点, 圆心); return(__间距 <= 半径); }
/// <param name="半径">单位:米</param> public static bool 判断圆重叠(M经纬度 圆心1, int 半径1, M经纬度 圆心2, int 半径2) { if (圆心1.类型 != 圆心2.类型) { 圆心1 = HGPS坐标转换.转原始坐标(圆心1); 圆心2 = HGPS坐标转换.转原始坐标(圆心2); } var __间距 = 测量两点间间距(圆心1, 圆心2); return(__间距 <= (半径1 + 半径2)); }