//private List<TtPoint> origPoints;
        //private DataAccessLayer _db;
        //Dictionary<string, TtMetaData> metas;
        public SegmentFactory(DataAccessLayer dal)
        {
            Dictionary<string, TtMetaData> meta = dal.GetMetaData().ToDictionary(m => m.CN, m => m);
            polys = dal.GetPolygons().ToDictionary(p => p.CN, p => p);

            List<TtPoint> tmpWayPoints = new List<TtPoint>();
            Dictionary<string, TtPoint> tmpPoints = new Dictionary<string, TtPoint>();

            foreach (TtPoint p in dal.GetPoints())
            {
                if (p.op == OpType.WayPoint)
                {
                    p.CalculatePoint();
                    p.AdjustPoint();
                    tmpWayPoints.Add(p);
                }
                else
                {
                    tmpPoints.Add(p.CN, p);

                    if (p.IsTravType())
                    {
                        ((SideShotPoint)p).Declination = meta[p.MetaDefCN].magDec;
                    }
                }
            }

            if (tmpWayPoints.Count > 0)
            {
                dal.SavePoints(tmpWayPoints, tmpWayPoints);
            }

            QuondamPoint qp;
            foreach (TtPoint p in tmpPoints.Values)
            {
                if (p.op == OpType.Quondam)
                {
                    qp = p as QuondamPoint;
                    qp.ParentPoint = tmpPoints[qp.ParentCN];
                }
            }

            points = tmpPoints.Values.ToList();
        }
예제 #2
0
        public bool WritePoints(DataAccessLayer DAL)
        {
            List<TtPoint> points = DAL.GetPoints();

            if (points != null && points.Count > 0)
            {
                List<string> Columns = new List<string>();
                List<List<string>> data = new List<List<string>>();
                Dictionary<string, TtMetaData> meta = DAL.GetMetaData().ToDictionary(m => m.CN, m => m);

                #region Columns
                Columns.Add("Point ID");    //0
                Columns.Add("CN");
                Columns.Add("Operation");
                Columns.Add("Index");
                Columns.Add("Poly Name");
                Columns.Add("DateTime");
                Columns.Add("Metadata");
                Columns.Add("OnBnd");
                Columns.Add("AdjX");
                Columns.Add("AdjY");
                Columns.Add("AdjZ");
                Columns.Add("UnAdjX");
                Columns.Add("UnAdjY");
                Columns.Add("UnAdjZ");
                Columns.Add("X");
                Columns.Add("Y");
                Columns.Add("Z");
                Columns.Add("RMSEr");
                Columns.Add("Man Acc");
                Columns.Add("Fwd Az");
                Columns.Add("Back Az");
                Columns.Add("Slope Dist");
                Columns.Add("Horiz Dist");
                Columns.Add("Slope Dist Type");
                Columns.Add("Slope Angle");
                Columns.Add("Slope Angle Type");
                Columns.Add("Parent Name");
                Columns.Add("Parent CN");
                Columns.Add("Comment");
                Columns.Add("Poly CN");
                Columns.Add("Group Name");
                Columns.Add("Group CN");
                Columns.Add("Linked CNs");
                #endregion

                TtMetaData tmpMeta;

                #region Add Data
                try
                {
                    foreach (TtPoint p in points)
                    {
                        List<string> pl = new List<string>();

                        tmpMeta = meta[p.MetaDefCN];

                        pl.Add(p.PID.ToString());   //0
                        pl.Add(p.CN);
                        pl.Add(p.op.ToString());
                        pl.Add(p.Index.ToString());
                        pl.Add(p.PolyName.Scrub());
                        pl.Add(p.Time.ToString("MM/dd/yyyy hh:mm:ss tt"));

                        try
                        {
                            pl.Add(tmpMeta.Name);
                        }
                        catch
                        {
                            pl.Add(p.MetaDefCN);
                        }

                        pl.Add(p.OnBnd.ToString());
                        pl.Add(p.AdjX.ToString());
                        pl.Add(p.AdjY.ToString());
                        pl.Add(p.AdjZ.ToString());
                        pl.Add(p.UnAdjX.ToString());
                        pl.Add(p.UnAdjY.ToString());
                        pl.Add(p.UnAdjZ.ToString());

                        if (p.IsGpsType())
                        {
                            pl.Add(p.UnAdjX.ToString());
                            pl.Add(p.UnAdjY.ToString());
                            pl.Add(p.UnAdjZ.ToString());
                            pl.Add(((GpsPoint)p).RMSEr.ToString());
                            pl.Add(((GpsPoint)p).ManualAccuracy.ToString());
                        }
                        else
                        {
                            for (int i = 0; i < 5; i++) { pl.Add(""); }
                        }

                        if (p.IsTravType())
                        {
                            SideShotPoint sp = (SideShotPoint)p;

                            pl.Add(sp.ForwardAz.ToString());
                            pl.Add(sp.BackwardAz.ToString());

                            pl.Add(TtUtils.ConvertDistance(sp.SlopeDistance, tmpMeta.uomDistance, UomDistance.Meters).ToString());
                            pl.Add(TtUtils.ConvertDistance(sp.HorizontalDistance, tmpMeta.uomDistance, UomDistance.Meters).ToString());
                            pl.Add(tmpMeta.uomDistance.ToString());

                            pl.Add(TtUtils.ConvertAngle(sp.SlopeAngle, tmpMeta.uomSlope, UomSlope.Degrees).ToString());
                            pl.Add(tmpMeta.uomSlope.ToString());
                        }
                        else
                        {
                            for (int i = 0; i < 7; i++) { pl.Add(""); }
                        }

                        if (p.op == OpType.Quondam)
                        {
                            pl.Add(((QuondamPoint)p).ParentPID.ToString());
                            pl.Add(((QuondamPoint)p).ParentCN);
                        }
                        else
                        {
                            pl.Add(""); pl.Add("");
                        }

                        pl.Add(p.Comment.Scrub());
                        pl.Add(p.PolyCN);
                        pl.Add(p.GroupName.Scrub());
                        pl.Add(p.GroupCN);

                        StringBuilder sb = new StringBuilder();
                        foreach (string link in p.LinkedPoints)
                        {
                            sb.Append(link + "_");
                        }

                        pl.Add(sb.ToString());

                        data.Add(pl);
                    }
                #endregion

                    if (!WriteCsvFile("Points", Columns, data))
                        return false;

                    data.Clear();
                    Columns.Clear();

                    #region Columns
                    Columns.Add("Group Name");  //0
                    Columns.Add("CN");
                    Columns.Add("Description");
                    Columns.Add("Manual Accuracy");
                    Columns.Add("Group Type");
                    //Columns.Add("Number Of Points");    //5
                    /*
                    Columns.Add("Num Of GpsType Points");
                    Columns.Add("Num Of Gps Points");
                    Columns.Add("Num Of Traverse Points");
                    Columns.Add("Num Of Take5 Points");
                    Columns.Add("Num Of Walk Points");      //10
                    Columns.Add("Num Of SideShot Points");
                    Columns.Add("Num Of Qnd Points");
                    Columns.Add("Num Of Way Points");
                    Columns.Add("Num Of Points OnBnd");
                    Columns.Add("Num Of Points OffBnd");//15
                    */
                    #endregion

                    foreach (TtGroup g in DAL.GetGroups())
                    {
                        List<string> gl = new List<string>();

                        gl.Add(g.Name.Scrub());         //0
                        gl.Add(g.CN);
                        gl.Add(g.Description.Scrub());
                        gl.Add(g.ManualAccuracy.ToString());
                        gl.Add(g.GroupType.ToString());
                        //gl.Add(g.NumberOfPoints.ToString());   //5
                        /*
                        gl.Add(g.NumOfGpsTypePoints.ToString());
                        gl.Add(g.NumOfGpsPoints.ToString());
                        gl.Add(g.NumOfTraversePoints.ToString());
                        gl.Add(g.NumOfTake5Points.ToString());
                        gl.Add(g.NumOfWalkPoints.ToString());  //10
                        gl.Add(g.NumOfSideShotPoints.ToString());
                        gl.Add(g.NumOfQndPoints.ToString());
                        gl.Add(g.NumOfWayPoints.ToString());
                        gl.Add(g.NumOfPointsOnBnd.ToString());
                        gl.Add(g.NumOfPointsOffBnd.ToString());//15
                        */

                        data.Add(gl);
                    }

                    return WriteCsvFile("Groups", Columns, data);

                }
                catch (Exception ex)
                {
                    TtUtils.WriteError(ex.Message, "DataOutput:WritePoints", ex.StackTrace);
                    throw ex;
                }
            }

            return false;
        }