/// <summary> /// 计算小矩形的中心点 /// </summary> /// <param name="regionRN">小矩形区域</param> /// <returns></returns> public static PointForRN GetCenterPoint(RegionForRN regionRN) { PointForRN point = new PointForRN(); //GeoXYPoint geoPoint = new GeoXYPoint(); //point.GeoXYPoint = geoPoint; point.GeoXYPoint.X = (regionRN.PolygonRegion.Left + regionRN.PolygonRegion.Right) / 2; point.GeoXYPoint.Y = (regionRN.PolygonRegion.Top + regionRN.PolygonRegion.Bottom) / 2; //to be added return point; }
/// <summary> /// 计算RegionList的重心 /// </summary> /// <param name="regionList"></param> /// <returns></returns> public static PointForRN CalcRegionsBary(List<RegionForRN> regionList) { double x = 0; double y = 0; double weight = 0; PointForRN bary = new PointForRN(); foreach (RegionForRN region in regionList) { region.PointList = CalcWeight(region.PointList); foreach (PointForRN pt in region.PointList) { weight += pt.Weight ; x = pt.GeoXYPoint.X * pt.Weight + x; y = pt.GeoXYPoint.Y * pt.Weight + y; } } if (weight != 0) { GeoXYPoint point = new GeoXYPoint(); point.X = x / weight; point.Y = y / weight; double tempDis = double.MaxValue; foreach (RegionForRN rg in regionList) { foreach (PointForRN pt in rg.PointList) { double distance = CalcDistance(point, pt.GeoXYPoint); if (tempDis > distance) { bary = pt; tempDis = distance; } } } } return bary; }
/// <summary> /// 合并距离近的点 /// </summary> /// <param name="point1"></param> /// <param name="point2"></param> /// <returns></returns> public static PointForRN CalculateBaryForPoints(PointForRN point1, PointForRN point2) { PointForRN point = new PointForRN(); point.GeoXYPoint.X = (point1.GeoXYPoint.X * point1.Rsrp + point2.GeoXYPoint.X * point2.Rsrp) / (point1.Rsrp + point2.Rsrp); point.GeoXYPoint.Y = (point1.GeoXYPoint.Y * point1.Rsrp + point2.GeoXYPoint.Y * point2.Rsrp) / (point1.Rsrp + point2.Rsrp); return point; }