private void InitMilePosCls() { milePosClsStart_0 = new MilePosClass((long)(startMile * 1000), indexStaClsList_0, CommonClass.listDIC[0].iChannelNumber, CommonClass.listDIC[0].sKmInc); milePosClsEnd_0 = new MilePosClass((long)(endMile * 1000), indexStaClsList_0, CommonClass.listDIC[0].iChannelNumber, CommonClass.listDIC[0].sKmInc); milePosClsStart_1 = new MilePosClass((long)(startMile * 1000), indexStaClsList_1, CommonClass.listDIC[1].iChannelNumber, CommonClass.listDIC[1].sKmInc); milePosClsEnd_1 = new MilePosClass((long)(endMile * 1000), indexStaClsList_1, CommonClass.listDIC[1].iChannelNumber, CommonClass.listDIC[1].sKmInc); }
private double[] GetMileWithIdf(List <IndexStaClass> listIC, MilePosClass startCls, MilePosClass endCls, int tds) { List <double> retVal = new List <double>(); Boolean isKmInc = false;//false代表减里程 int i = 0; if (double.Parse(listIC[0].lStartMeter) < double.Parse(listIC[listIC.Count - 1].LEndMeter)) { isKmInc = true;//增里程 } for (i = 0; i < listIC.Count; i++) { if (startCls.GetPos() >= listIC[i].lStartPoint && startCls.GetPos() <= listIC[i].lEndPoint) { long jvli = Math.Abs(startCls.mile - (long)(double.Parse(listIC[i].LEndMeter) * 1000)); int iCount = (int)(jvli / (float.Parse(listIC[i].lContainsMeter) * 1000 / listIC[i].lContainsPoint)); long lCurPos = startCls.GetPos() - listIC[i].lStartPoint; int iIndex = 0; if (listIC[i].sType.Contains("长链")) { int iKM = 0; double dCDLMeter = float.Parse(listIC[i].lContainsMeter) * 1000; if (isKmInc == false) { iKM = (int)float.Parse(listIC[i].LEndMeter); } else { iKM = (int)float.Parse(listIC[i].lStartMeter); } for (iIndex = 0; iIndex < iCount && (startCls.GetPos() + iIndex * tds * 2) < listIC[i].lEndPoint; iIndex++) { float f = (1 + iIndex) * ((float.Parse(listIC[i].lContainsMeter) * 1000 / listIC[i].lContainsPoint)); WaveMeter wm = new WaveMeter(); if (isKmInc == false) { wm.Km = iKM; wm.Meter = (float)(dCDLMeter - f); retVal.Add(wm.Km + wm.Meter / 1000f); } else { wm.Km = iKM; wm.Meter = f; retVal.Add(wm.Km + wm.Meter / 1000f); } wm.lPosition = (startCls.GetPos() + (iIndex * tds * 2)); } } else { double dMeter = float.Parse(listIC[i].lStartMeter) * 1000; for (iIndex = 0; iIndex < iCount && (startCls.GetPos() + iIndex * tds * 2) < listIC[i].lEndPoint; iIndex++) { float f = (1 + iIndex) * ((float.Parse(listIC[i].lContainsMeter) * 1000 / listIC[i].lContainsPoint)); WaveMeter wm = new WaveMeter(); if (isKmInc == false) { wm.Km = (int)((dMeter - f) / 1000); wm.Meter = (float)((dMeter - f) % 1000); retVal.Add(wm.Km + wm.Meter / 1000f); } else { wm.Km = (int)((dMeter + f) / 1000); wm.Meter = (float)((dMeter + f) % 1000); retVal.Add(wm.Km + wm.Meter / 1000f); } wm.lPosition = (startCls.GetPos() + (iIndex * tds * 2)); } } break; } } for (++i; i < listIC.Count; i++) { if (endCls.GetPos() >= listIC[i].lStartPoint && endCls.GetPos() <= listIC[i].lEndPoint) { long jvli = Math.Abs(endCls.mile - (long)(double.Parse(listIC[i].lStartMeter) * 1000)); int iCount = (int)(jvli / (float.Parse(listIC[i].lContainsMeter) * 1000 / listIC[i].lContainsPoint)); long lCurPos = listIC[i].lStartPoint; int iIndex = 0; if (listIC[i].sType.Contains("长链")) { int iKM = 0; double dCDLMeter = float.Parse(listIC[i].lContainsMeter) * 1000; if (isKmInc == false) { iKM = (int)float.Parse(listIC[i].LEndMeter); } else { iKM = (int)float.Parse(listIC[i].lStartMeter); } for (iIndex = 0; iIndex < iCount && (listIC[i].lStartPoint + iIndex * tds * 2) < endCls.GetPos(); iIndex++) { float f = (1 + iIndex) * ((float.Parse(listIC[i].lContainsMeter) * 1000 / listIC[i].lContainsPoint)); WaveMeter wm = new WaveMeter(); if (isKmInc == false) { wm.Km = iKM; wm.Meter = (float)(dCDLMeter - f); retVal.Add(wm.Km + wm.Meter / 1000f); } else { wm.Km = iKM; wm.Meter = f; retVal.Add(wm.Km + wm.Meter / 1000f); } wm.lPosition = (listIC[i].lStartPoint + (iIndex * tds * 2)); } } else { double dMeter = float.Parse(listIC[i].lStartMeter) * 1000; for (iIndex = 0; iIndex < iCount && (listIC[i].lStartPoint + iIndex * tds * 2) < endCls.GetPos(); iIndex++) { float f = (1 + iIndex) * ((float.Parse(listIC[i].lContainsMeter) * 1000 / listIC[i].lContainsPoint)); WaveMeter wm = new WaveMeter(); if (isKmInc == false) { wm.Km = (int)((dMeter - f) / 1000); wm.Meter = (float)((dMeter - f) % 1000); retVal.Add(wm.Km + wm.Meter / 1000f); } else { wm.Km = (int)((dMeter + f) / 1000); wm.Meter = (float)((dMeter + f) % 1000); retVal.Add(wm.Km + wm.Meter / 1000f); } wm.lPosition = (startCls.GetPos() + (iIndex * tds * 2)); } } break; } int iCount_m = (int)(listIC[i].lContainsPoint); long lCurPos_m = listIC[i].lStartPoint; int iIndex_m = 0; if (listIC[i].sType.Contains("长链")) { int iKM = 0; double dCDLMeter = float.Parse(listIC[i].lContainsMeter) * 1000; if (isKmInc == false) { iKM = (int)float.Parse(listIC[i].LEndMeter); } else { iKM = (int)float.Parse(listIC[i].lStartMeter); } for (iIndex_m = 0; iIndex_m < iCount_m && (listIC[i].lStartPoint + iIndex_m * tds * 2) < listIC[i].lEndPoint; iIndex_m++) { float f = (1 + iIndex_m) * ((float.Parse(listIC[i].lContainsMeter) * 1000 / listIC[i].lContainsPoint)); WaveMeter wm = new WaveMeter(); if (isKmInc == false) { wm.Km = iKM; wm.Meter = (float)(dCDLMeter - f); retVal.Add(wm.Km + wm.Meter / 1000f); } else { wm.Km = iKM; wm.Meter = f; retVal.Add(wm.Km + wm.Meter / 1000f); } wm.lPosition = (listIC[i].lStartPoint + (iIndex_m * tds * 2)); } } else { double dMeter = float.Parse(listIC[i].lStartMeter) * 1000; for (iIndex_m = 0; iIndex_m < iCount_m && (listIC[i].lStartPoint + iIndex_m * tds * 2) < listIC[i].lEndPoint; iIndex_m++) { float f = (1 + iIndex_m) * ((float.Parse(listIC[i].lContainsMeter) * 1000 / listIC[i].lContainsPoint)); WaveMeter wm = new WaveMeter(); if (isKmInc == false) { wm.Km = (int)((dMeter - f) / 1000); wm.Meter = (float)((dMeter - f) % 1000); retVal.Add(wm.Km + wm.Meter / 1000f); } else { wm.Km = (int)((dMeter + f) / 1000); wm.Meter = (float)((dMeter + f) % 1000); retVal.Add(wm.Km + wm.Meter / 1000f); } wm.lPosition = (startCls.GetPos() + (iIndex_m * tds * 2)); } } } return(retVal.ToArray()); }