Exemple #1
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());
        }
Exemple #2
0
        /// <summary>
        /// 根据点返回索引文件里对应的里程信息
        /// </summary>
        /// <param name="listIC">索引信息</param>
        /// <param name="lPosition">点的位置</param>
        /// <param name="tds">文件通道书</param>
        /// <param name="sKmInc">增减里程标</param>
        /// <returns>索引里程:单位为米</returns>
        public int PointToMeter(List <IndexStaClass> listIC, long lPosition, int tds, string sKmInc)
        {
            int iMeter = 0;

            //处理里程
            for (int i = 0; i < listIC.Count; i++)
            {
                if (lPosition >= listIC[i].lStartPoint && lPosition < listIC[i].lEndPoint)
                {
                    int  iCount  = 1;
                    long lCurPos = lPosition - listIC[i].lStartPoint;
                    int  iIndex  = 0;
                    if (listIC[i].sType.Contains("长链"))
                    {
                        int    iKM       = 0;
                        double dCDLMeter = float.Parse(listIC[i].lContainsMeter) * 1000;
                        if (sKmInc.Equals("减"))
                        {
                            iKM = (int)float.Parse(listIC[i].LEndMeter);
                        }
                        else
                        {
                            iKM = (int)float.Parse(listIC[i].lStartMeter);
                        }
                        for (iIndex = 0; iIndex < iCount && (lPosition + iIndex * tds * 2) < listIC[i].lEndPoint;)
                        {
                            float     f  = (lCurPos / tds / 2 + iIndex) * ((float.Parse(listIC[i].lContainsMeter) * 1000 / listIC[i].lContainsPoint));
                            WaveMeter wm = new WaveMeter();
                            if (sKmInc.Equals("减"))
                            {
                                wm.Km    = iKM;
                                wm.Meter = (float)(dCDLMeter - f);
                            }
                            else
                            {
                                wm.Km    = iKM;
                                wm.Meter = (float)(dCDLMeter + f);
                            }
                            wm.lPosition = (lPosition + (iIndex * tds * 2));
                            iMeter       = wm.GetMeter(1);
                            return(iMeter);
                        }
                    }
                    else
                    {
                        double dMeter = float.Parse(listIC[i].lStartMeter) * 1000;
                        for (iIndex = 0; iIndex < iCount && (lPosition + iIndex * tds * 2) < listIC[i].lEndPoint;)
                        {
                            float     f  = (lCurPos / tds / 2 + iIndex) * ((float.Parse(listIC[i].lContainsMeter) * 1000 / listIC[i].lContainsPoint));
                            WaveMeter wm = new WaveMeter();
                            if (sKmInc.Equals("减"))
                            {
                                wm.Km    = (int)((dMeter - f) / 1000);
                                wm.Meter = (float)((dMeter - f) % 1000);
                            }
                            else
                            {
                                wm.Km    = (int)((dMeter + f) / 1000);
                                wm.Meter = (float)((dMeter + f) % 1000);
                            }
                            wm.lPosition = (lPosition + (iIndex * tds * 2));
                            iMeter       = wm.GetMeter(1);
                            return(iMeter);
                        }
                    }
                    break;
                }
            }
            return(iMeter);
        }