コード例 #1
0
 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);
 }
コード例 #2
0
        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());
        }