//这个方法好像没有调用的地方 public float[] CalcPointPathLoss(IPropagationModel prop, IACell carrier, AntConfig ant, GeoXYLine xyLine, float resolution, float rxHeight, out Dictionary<string, object> modelDetail) { if (prop == null) { modelDetail = null; return new float[2]; } AntConfig config = ant; IPropagationModel model = prop; SectionPathLossCalcParam param = new SectionPathLossCalcParam(); param.TxAntennaHeight = config.Height; if (!(AntConfig.IS_ANTENNA_HEIGHT_INCLUDE_BUILDING || !this.GeoDataProvider.IGeoProvider.IsBuildingLoaded)) { param.TxAntennaHeight += this.GeoDataProvider.GisInfo.GetValueByGeoXYPoint(xyLine.Points[0], DemDataType.Building, false); } param.RxAntennaHeight = rxHeight; param.Frequency = carrier.FreqBand.DLFrequency; param.MergeEdgeMaxDis = 80f; param.PropagModel = model; param.CalcResolution = resolution; param.CalcEndRadius = (float) xyLine.GetDistance(); param.X = (float) xyLine.Points[0].X; param.Y = (float) xyLine.Points[0].Y; return this.CalcPointPathLoss(param, xyLine, carrier.FreqBand.ULFrequency, out modelDetail); }
public override float CalculatePointPathLoss(SectionPathLossCalcParam param, GeoXYLine xyLine, out Dictionary<string, object> modelDetail) { base.CalculatePointPathLoss(param, xyLine, out modelDetail); RelayUEPropagationModel propModel = param.PropagModel as RelayUEPropagationModel; float distance= (float)(xyLine.GetDistance() / 1000); float prob=CalcProbability(propModel,distance); return GetPathLoss(propModel, distance, prob); }
private static void FindNearestCell(ref ISimCellBase nearestCell, ref float minDistance, ISimCellBase cellBase, GeoXYLine trancToUser) { float distance = (float)trancToUser.GetDistance(); if (distance < minDistance && distance < GetCalcRadius(cellBase)) { minDistance = distance; nearestCell = cellBase; } }
public override float CalculatePointPathLoss(SectionPathLossCalcParam param, GeoXYLine xyLine, out Dictionary<string, object> modelDetail) { float num = 0f; modelDetail = null; ITURPPropagationModel iTURPModel = param.PropagModel as ITURPPropagationModel; float num2 = (float) Math.Log10((double) param.Frequency); float num3 = (float) Math.Log10(xyLine.GetDistance()); num = ((iTURPModel.K2 + (iTURPModel.K1 * num2)) + (iTURPModel.N * num3)) + this.GetLf(iTURPModel); float num4 = 0f; return (num + (num4 * iTURPModel.KDiffraction)); }
public override float CalculatePointPathLoss(SectionPathLossCalcParam param, GeoXYLine xyLine, out Dictionary<string, object> modelDetail) { float num = 0f; modelDetail = null; KeenanMotleyPropagationModel model = param.PropagModel as KeenanMotleyPropagationModel; float num2 = (float) Math.Log10((double) param.Frequency); float num3 = (float) Math.Log10(xyLine.GetDistance() / 1000); num = ((model.K1 + (model.K2 * num2)) + (model.K3 * num3)) + (model.K4 * model.K5); float num4 = 0f; return (num + (num4 * model.KDiffraction)); }
public short[] GetValueByGeoXYLine(List<GeoXYPoint> pointInGeoXYLine, GeoXYPoint geoXYPointStart, GeoXYPoint geoXYPointEnd, double precision, bool isDivInsert) { GeoXYLine line = new GeoXYLine(geoXYPointStart, geoXYPointEnd); double distance = line.GetDistance(); int num2 = ((int) Math.Ceiling((double) (distance / precision))) + 1; int num3 = (geoXYPointEnd.X > geoXYPointStart.X) ? 1 : -1; int num4 = (geoXYPointEnd.Y > geoXYPointStart.Y) ? 1 : -1; double num5 = distance / ((double) (num2 - 1)); double azimuthofLine = line.GetAzimuthofLine(); List<short> list = new List<short>(); for (int i = 0; i < num2; i++) { double num7 = num5 * i; double num8 = Math.Abs((double) (num7 * Math.Sin(azimuthofLine))); double num9 = Math.Abs((double) (num7 * Math.Cos(azimuthofLine))); double x = geoXYPointStart.X + (num3 * num8); double y = geoXYPointStart.Y + (num4 * num9); list.Add(this.GetValueByGeoXYPoint(x, y, isDivInsert)); GeoXYPoint item = new GeoXYPoint(x, y); pointInGeoXYLine.Add(item); } return list.ToArray(); }
private short[] DemDataTypeCheckByGeoXYLine(GeoXYLine geoXYLine, double precision, DemDataType demDataType, ref bool Flag) { if (this.GetRasterData(demDataType).Count == 0) { Flag = true; int num = 0; num = Convert.ToInt32(Math.Ceiling((double) (geoXYLine.GetDistance() / precision))) + 1; short[] numArray = new short[num]; if (demDataType == DemDataType.Clutter) { for (int i = 0; i < num; i++) { numArray[i] = -1; } } return numArray; } Flag = false; return null; }
/// <summary> /// 计算点到点的路径损耗 /// </summary> /// <param name="param"></param> /// <param name="xyLine"></param> /// <param name="modelDetail"></param> /// <returns></returns> public override float CalculatePointPathLoss(SectionPathLossCalcParam param, GeoXYLine xyLine, out Dictionary<string, object> modelDetail) { base.CalculatePointPathLoss(param, xyLine, out modelDetail); OkumuHataPropagationModel okumuHataPropagationModel = param.PropagModel as OkumuHataPropagationModel; float num2 = (float) Math.Log10((double) param.Frequency); float num3 = (float) Math.Log10((double) param.TxAntennaHeight); float distance = (float) (xyLine.GetDistance() / 1000); float num5 = (float) Math.Log10((double) distance); float num6 = this.AhrCalculate(param.Frequency, new float[] { param.RxAntennaHeight }, 0, okumuHataPropagationModel); float num7 = this.CellSelect(param.Frequency, okumuHataPropagationModel); return ((((((okumuHataPropagationModel.K1 + (okumuHataPropagationModel.K2 * num2)) - (okumuHataPropagationModel.K3 * num3)) + ((okumuHataPropagationModel.K4 - (okumuHataPropagationModel.K5 * num3)) * num5)) + num6) + num7) + (base.CalcDiffLoss(distance, base.m_AltitudeHeights.Length) * okumuHataPropagationModel.KDiffraction)); }