Beispiel #1
0
        public void initHeightCurve(string pdPath = @"C:\GISData\Common\pd.xlsx")
        {
            DataTable dt1;
            string    code;
            double    mileage;
            //double dis;
            int count;
            int i = 0;

            dt1       = ExcelWrapper.LoadDataTableFromExcel(pdPath, @"select mileage, altitude, radius from [sheet1$] order by id");
            count     = dt1.Rows.Count;
            dkmileage = new string[count];
            m         = new double[count];
            h         = new double[count];
            r         = new double[count];
            i1        = new double[count];
            i2        = new double[count];
            sm        = new double[count];
            em        = new double[count];

            //CSubPath path = new CSubPath(CRailwayLineList.gMileage, "DK", 299000, "右改DK", 17600, 10);
            //path.outputPathInfo();
            foreach (DataRow dr in dt1.Rows)
            {
                dkmileage[i] = dr["mileage"].ToString();
                CRailwayLineList.parseDKCode(dkmileage[i], out code, out mileage);
                m[i] = getPathMileageByDKCode(code, mileage);
                if (m[i] >= 0)
                {
                    h[i] = Convert.ToDouble(dr["altitude"]);
                    r[i] = Convert.ToDouble(dr["radius"]);
                }
                else
                {
                    Console.WriteLine(dkmileage[i] + "不存在");
                }
                i++;
            }
            for (i = 1; i < m.Length - 1; i++)
            {
                heightCurveParams(i);
            }
            sm[0]            = 0;
            em[0]            = 0;
            sm[m.Length - 1] = em[m.Length - 1] = m[m.Length - 1];
        }
Beispiel #2
0
        public void getHeightList()
        {
            DataTable dt1;
            string    code;
            double    mileage;
            double    dis;
            int       count;
            int       i = 0;

            dt1       = ExcelWrapper.LoadDataTableFromExcel(@"d:\pd.xlsx", @"select mileage, altitude, radius from [sheet1$] order by id");
            count     = dt1.Rows.Count;
            dkmileage = new string[count];
            m         = new double[count];
            h         = new double[count];
            r         = new double[count];
            i1        = new double[count];
            i2        = new double[count];
            sm        = new double[count];
            em        = new double[count];

            //CSubPath path = new CSubPath(CRailwayLineList.gMileage, "DK", 299000, "右改DK", 17600, 10);
            //path.outputPathInfo();
            //foreach (DataRow dr in dt1.Rows)
            //{
            //    dkmileage[i] = dr["mileage"].ToString();
            //    CRailwayLineList.parseDKCode(dkmileage[i], out code, out mileage);
            //    path.getPathMileageByDKCode( code,  mileage,out m[i],out dis);
            //    h[i] = Convert.ToDouble(dr["altitude"]);
            //    r[i] = Convert.ToDouble(dr["radius"]);
            //    i++;

            //}
            for (i = 1; i < m.Length - 1; i++)
            {
                mainParams(i);
            }
            int j = 1;
            //for (i = 0; i < path.mm.Length; i++)
            //{
            //    if (path.mm[i] < sm[j])
            //    {
            //    }
            //}
        }
Beispiel #3
0
        public static MGraph gMileageConnection; // 用于计算里程

        /// <summary>
        /// 由数据库或远程服务器读入三维中线的数据
        /// </summary>
        /// <param name="fileName"></param>
        public static void CreateLinelistFromExcel(string dbPath)
        {
            double[] m, x, y, z;
            double   fromMeter, toMeter;
            //double fromX, toX, fromY, toY;
            int    chainIndex;
            int    chainType;
            string dkcode, dkcode2;
            //bool isRight = false;
            //bool isDouble = true;
            int count;

            DataTable dt1, dt2, dt3;

            //本地sqlite数据库读取里程数据
            //#if DEBUG
            //            Helper.LogHelper.WriteLog("SQlite Database" + dbPath);
            //#endif

            dt1 = ExcelWrapper.LoadDataTableFromExcel(dbPath, @"select chainIndex, fromMeter, toMeter,DKCode,DKCode2,chainType from [ChainInfo$] order by chainIndex");
            dt2 = ExcelWrapper.LoadDataTableFromExcel(dbPath, @"select fromChain, toChain from [ExtraConnection$] ");
            List <OneConnection> connectionList = new List <OneConnection>();

            foreach (DataRow dr in dt2.Rows)
            {
                OneConnection aCon = new OneConnection();
                aCon.fromIndex = Convert.ToInt32(dr["fromChain"]);
                aCon.toIndex   = Convert.ToInt32(dr["toChain"]);
                //aCon.isRealConnect = Convert.ToInt32(dr["isConnect"])==0 ? true:false;
                //aCon.mileageOffset = Convert.ToDouble(dr["mileageOffset"]);
                connectionList.Add(aCon);
            }
            //int index = 0;

            foreach (DataRow dr in dt1.Rows)
            {
                chainIndex = Convert.ToInt32(dr["chainIndex"]);
                fromMeter  = Convert.ToDouble(dr["fromMeter"]);
                toMeter    = Convert.ToDouble(dr["toMeter"]);
                dkcode     = (string)dr["DKCode"];
                dkcode2    = dr["DKCode2"].ToString();
                chainType  = Convert.ToInt32(dr["chainType"]);
                //  isReverse = Convert.ToBoolean(dr["IsReverse"]);
                string strOrder  = (fromMeter < toMeter) ? "" : " desc ";
                string tableName = "sheet" + chainIndex;
                dt3   = ExcelWrapper.LoadDataTableFromExcel(dbPath, @"select Mileage, Longitude,Latitude,Altitude from [" + tableName + "$] order by mileage " + strOrder);
                count = dt3.Rows.Count;
                if (count < 2)
                {
                    continue;
                }

                m = new double[count];
                x = new double[count];
                y = new double[count];
                z = new double[count];
                //xMars = new double[count];
                //yMars = new double[count];
                int j = 0;
                foreach (DataRow dr2 in dt3.Rows)
                {
                    m[j] = Math.Abs(Convert.ToDouble(dr2["Mileage"]) - fromMeter);
                    x[j] = Convert.ToDouble(dr2["Longitude"]);
                    y[j] = Convert.ToDouble(dr2["Latitude"]);
                    z[j] = Convert.ToDouble(dr2["Altitude"]);
                    j++;
                    //xMars[j] = Convert.ToDouble(dr2["LongitudeMars"]);
                    //yMars[j] = Convert.ToDouble(dr2["LatitudeMars"]);
                }
                mLineList.Add(new CRailwayLine(chainIndex, dkcode, dkcode2, fromMeter, toMeter, chainType, count, m, x, y, z));
            }


            gRealConnection    = new MGraph();
            gMileageConnection = new MGraph();

            ShortestPathFloyd.initPathGraph(mLineList, gRealConnection, null);
            ShortestPathFloyd.initPathGraph(mLineList, gMileageConnection, connectionList);
        }