Ejemplo n.º 1
0
 public CMoveablePointForLineSegment(CMapDatabase database, CGPSLine line, CGPSLineSegment segment)
     : base(database, segment.PointDestination)
 {
     m_segment = segment;
     m_line    = line;
     m_listeItems.AddRange(line.FindMapItems(database));
 }
Ejemplo n.º 2
0
 //--------------------------------------------------------------
 public override IEnumerable <IMapItem> Delete(CMapDatabase database)
 {
     if (m_line != null)
     {
         return(m_line.DetailLigne.DeleteStartPoint(database));
     }
     return(new IMapItem[0]);
 }
Ejemplo n.º 3
0
 public CMoveablePointForGPSPoint(CMapDatabase database, CGPSPoint pt)
     : base(database, new SLatLong(pt.Latitude, pt.Longitude))
 {
     m_gpsPoint = pt;
     foreach (IMapItem item in pt.FindMapItems(database))
     {
         m_mapItem = item;
     }
 }
Ejemplo n.º 4
0
        public CMoveablePointForLineStart(CMapDatabase database, CGPSLine line)
            : base(database, line.DetailLigne.PointDepart)
        {
            m_line = line;
            IEnumerable <IMapItem> items = line.FindMapItems(database);

            if (items.Count() > 0)
            {
                m_mapItem = items.ElementAt(0);
            }
        }
Ejemplo n.º 5
0
        //---------------------------------------------------------------------------
        public IEnumerable <IMapItem> FindMapItems(CMapDatabase database)
        {
            CMapItemPoint mapItem = database.FindItemFromTag(this) as CMapItemPoint;

            if (mapItem != null)
            {
                return new IMapItem[] { mapItem }
            }
            ;
            return(new IMapItem[0]);
        }
Ejemplo n.º 6
0
        //-----------------------------------------------------------------
        public IEnumerable <CMoveablePoint> GetMoveablePoints(CMapDatabase database)
        {
            List <CMoveablePoint> lstPoints = new List <CMoveablePoint>();
            CGPSLineTrace         trace     = DetailLigne;

            lstPoints.Add(new CMoveablePointForLineStart(database, this));
            foreach (CGPSLineSegment segment in trace.Segments)
            {
                lstPoints.Add(new CMoveablePointForLineSegment(database, this, segment));
            }
            return(lstPoints.AsReadOnly());
        }
Ejemplo n.º 7
0
        //--------------------------------------------------------------------
        public IEnumerable <CMapLayer> GenereItems(CMapDatabase database)
        {
            List <CMapLayer> lstLayers = new List <CMapLayer>();
            CMapLayer        layer     = database.GetLayer(IdUniversel, true);

            layer.ClearItems();
            lstLayers.Add(layer);
            foreach (IElementDeGPSCarte element in ElementsDeCarte)
            {
                element.CreateMapItems(layer);
            }

            return(lstLayers);
        }
Ejemplo n.º 8
0
        //---------------------------------------------------------------------------
        public IEnumerable <IMapItem> FindMapItems(CMapDatabase database)
        {
            CGPSLineTrace   trace    = DetailLigne;
            List <IMapItem> lstPaths = new List <IMapItem>();

            foreach (CGPSLineSegment segment in trace.Segments)
            {
                CMapItemPath path = database.FindItemFromTag(segment) as CMapItemPath;
                if (path != null)
                {
                    lstPaths.Add(path);
                }
            }
            return(lstPaths.AsReadOnly());
        }
Ejemplo n.º 9
0
     //---------------------------------------------------------
     public IEnumerable <IMapItem> DeleteSegment(CMapDatabase database, CGPSLineSegment segment)
     {
         if (segment != null && m_listeSegments.Count() > 1)
         {
             IMapItem item = database.FindItemFromTag(segment);
             m_listeSegments.Remove(segment);
             if (item != null)
             {
                 return new IMapItem[] { item }
             }
             ;
         }
         return(new IMapItem[0]);
     }
 }
Ejemplo n.º 10
0
 //------------------------------------
 public void SetMapDatabase(CMapDatabase database)
 {
     m_gMap.SuspendDrawing();
     ClearDatabaseObjects();
     foreach (CMapLayer layer in database.Layers)
     {
         if (layer.IsVisible)
         {
             foreach (IMapItem item in layer.Items)
             {
                 AddMapItem(item);
             }
         }
     }
     m_gMap.ResumeDrawing();
 }
Ejemplo n.º 11
0
 //---------------------------------------------------------
 public IEnumerable <IMapItem> DeleteStartPoint(CMapDatabase database)
 {
     if (m_listeSegments.Count() > 1)
     {
         //Trouve l'item correspondant au segment 0
         CGPSLineSegment segment = m_listeSegments.ElementAt(0);
         IMapItem        item    = database.FindItemFromTag(segment);
         PointDepart = segment.PointDestination;
         m_listeSegments.RemoveAt(0);
         if (item != null)
         {
             return new IMapItem[] { item }
         }
         ;
     }
     return(new IMapItem[0]);
 }
Ejemplo n.º 12
0
        //---------------------------------------------------------------------------
        public IEnumerable <IMapItem> UpdateMapItems(CMapDatabase database, List <IMapItem> itemsToDelete)
        {
            CMapItemPoint mapItem = database.FindItemFromTag(this) as CMapItemPoint;

            if (mapItem != null)
            {
                CMapLayer layer = mapItem.Layer;

                //Vérifie le type du mapItem
                if (TypePoint != null && TypePoint.Image != null)
                {
                    if (!(mapItem is CMapItemImage))
                    {
                        itemsToDelete.Add(mapItem);
                        mapItem.Layer.RemoveItem(mapItem);
                        layer.Database.AddImage(TypePoint.IdUniversel, TypePoint.Image);
                        mapItem = new CMapItemImage(layer, Latitude, Longitude, TypePoint.IdUniversel);
                    }
                    ((CMapItemImage)mapItem).ImageId = TypePoint.IdUniversel;
                }
                else
                {
                    if (!(mapItem is CMapItemSimple))
                    {
                        itemsToDelete.Add(mapItem);
                        mapItem.Layer.RemoveItem(mapItem);
                        mapItem = new CMapItemSimple(layer, Latitude, Longitude, MarkerType);
                    }
                    ((CMapItemSimple)mapItem).SimpleMarkerType = MarkerType == EMapMarkerType.none?EMapMarkerType.blue_dot:MarkerType;
                }

                mapItem.Tag              = this;
                mapItem.Latitude         = Latitude;
                mapItem.Longitude        = Longitude;
                mapItem.ToolTip          = Libelle;
                mapItem.PermanentToolTip = PermanentToolTip;
                return(new IMapItem[] { mapItem });
            }
            return(new IMapItem[0]);
        }
Ejemplo n.º 13
0
        //---------------------------------------------------------------------------
        public IEnumerable <IMapItem> UpdateMapItems(CMapDatabase database, List <IMapItem> itemsToDelete)
        {
            CGPSLineTrace   trace     = DetailLigne;
            SLatLong        lastPoint = trace.PointDepart;
            List <IMapItem> lstPaths  = new List <IMapItem>();

            foreach (CGPSLineSegment segment in trace.Segments)
            {
                CMapItemPath path = database.FindItemFromTag(segment) as CMapItemPath;
                if (path != null)
                {
                    path.Points    = new SLatLong[] { lastPoint, segment.PointDestination };
                    path.LineColor = segment.Couleur;
                    path.LineWidth = segment.Width;
                    path.Tag       = segment;
                    path.ToolTip   = segment.Libelle;
                    lstPaths.Add(path);
                    lastPoint = segment.PointDestination;
                }
            }
            return(lstPaths.AsReadOnly());
        }
Ejemplo n.º 14
0
        //-------------------------------------------------
        public CResultAErreur FillMapDatabase(
            object objetSource,
            CMapDatabase database,
            CContexteDonnee ctxDonnee)
        {
            CResultAErreur result = CResultAErreur.True;

            if (objetSource != null)
            {
                AssureVariablesSysteme();
                SetValeurChamp(c_strIdVariableObjetSource, objetSource);
            }
            foreach (IMapItemGenerator generateur in ItemsGenerators)
            {
                result = generateur.GenereItems(database, ctxDonnee);
                if (!result)
                {
                    return(result);
                }
            }
            return(result);
        }
Ejemplo n.º 15
0
 //---------------------------------------------------------------------------
 public IEnumerable <CMoveablePoint> GetMoveablePoints(CMapDatabase database)
 {
     return(new CMoveablePoint[] { new CMoveablePointForGPSPoint(database, this) });
 }
Ejemplo n.º 16
0
        //-------------------------------------------------------------
        public CResultAErreur GenereItems(CMapDatabase database, CContexteDonnee ctxDonnee)
        {
            CResultAErreur result = CResultAErreur.True;

            //Calcule les éléments à générer
            if (Filtre == null || Filtre.TypeElements == null)
            {
                return(result);
            }
            if (FormuleLatitude1 == null || FormuleLongitude1 == null || FormuleLatitude2 == null || FormuleLatitude2 == null)
            {
                return(result);
            }
            result = Filtre.GetFiltreData();
            if (!result)
            {
                return(result);
            }
            CFiltreData         filtre    = result.Data as CFiltreData;
            CListeObjetsDonnees lstObjets = new CListeObjetsDonnees(ctxDonnee, Filtre.TypeElements);

            lstObjets.Filtre      = filtre;
            lstObjets.ModeSansTri = true;

            CMapLayer layer = null;

            if (lstObjets.Count > 0)
            {
                layer = database.GetLayer(Generator.LayerId, true);
            }
            else
            {
                return(result);
            }

            Dictionary <int, double> dicValeursLatitude  = new Dictionary <int, double>();
            Dictionary <int, double> dicValeursLongitude = new Dictionary <int, double>();

            foreach (object obj in lstObjets)
            {
                DateTime dt = DateTime.Now;
                m_currentGeneratedItem = obj;
                CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(obj);
                double?fLat1  = null;
                double?fLong1 = null;
                double?fLat2  = null;
                double?fLong2 = null;
                result = FormuleLatitude1.Eval(ctxEval);
                if (result)
                {
                    try
                    {
                        fLat1 = Convert.ToDouble(result.Data);
                    }
                    catch { }
                }
                if (fLat1 != null)
                {
                    result = FormuleLongitude1.Eval(ctxEval);
                    if (result)
                    {
                        try
                        {
                            fLong1 = Convert.ToDouble(result.Data);
                        }
                        catch { }
                    }
                }
                if (fLat1 != null && fLong1 != null)
                {
                    result = FormuleLatitude2.Eval(ctxEval);
                    if (result)
                    {
                        try
                        {
                            fLat2 = Convert.ToDouble(result.Data);
                        }
                        catch { }
                    }
                }
                if (fLat1 != null && fLong1 != null && fLat2 != null)
                {
                    result = FormuleLongitude2.Eval(ctxEval);
                    if (result)
                    {
                        try
                        {
                            fLong2 = Convert.ToDouble(result.Data);
                        }
                        catch { }
                    }
                }

                TimeSpan sp = DateTime.Now - dt;
                if (obj is CObjetDonnee)
                {
                    //Console.WriteLine("Coord "+((CObjetDonnee)obj).DescriptionElement + " : " + sp.TotalMilliseconds);
                }
                if (fLat1 != null && fLat2 != null && fLong1 != null && fLong2 != null)
                {
                    foreach (CMapLineDessin mapLineDessin in LinesDessin)
                    {
                        if (mapLineDessin.GenereItem(
                                obj,
                                fLat1.Value,
                                fLong1.Value,
                                fLat2.Value,
                                fLong2.Value,
                                layer))
                        {
                            break;
                        }
                    }
                }
                sp = DateTime.Now - dt;
                if (obj is CObjetDonnee)
                {
                    //Console.WriteLine(((CObjetDonnee)obj).DescriptionElement + " : " + sp.TotalMilliseconds);
                }
            }

            return(result);
        }
Ejemplo n.º 17
0
        //---------------------------------------------
        public CResultAErreur GenereItems(CMapDatabase database, CContexteDonnee ctxDonnee)
        {
            CResultAErreur result = CResultAErreur.True;
            //Calcule les éléments à générer
            DataTable table     = Query.GetTable(NomTableSource, m_listeSources);
            double?   fLastLat  = null;
            double?   fLastLong = null;
            CMapLayer layer     = database.GetLayer(Generator.LayerId, true);

            if (table != null)
            {
                DataColumn colLat  = null;
                DataColumn colLong = null;
                DataColumn colLib  = null;
                DataColumn colElt  = null;
                foreach (DataColumn col in table.Columns)
                {
                    if (col.ColumnName == ChampCleElement)
                    {
                        colElt = col;
                    }
                    if (col.ColumnName == ChampLatitude)
                    {
                        colLat = col;
                    }
                    if (col.ColumnName == ChampLibelle)
                    {
                        colLib = col;
                    }
                    if (col.ColumnName == ChampLongitude)
                    {
                        colLong = col;
                    }
                }
                if (colLong == null || colLat == null)
                {
                    result.EmpileErreur(I.T("Can not find columns @1 and @2 in data source|20024",
                                            ChampLongitude,
                                            ChampLatitude));
                }
                Dictionary <object, List <DataRow> > dicRowsParElement = new Dictionary <object, List <DataRow> >();
                if (colElt != null)
                {
                    object         lastElt = null;
                    List <DataRow> lstRows = null;
                    foreach (DataRow row in table.Rows)
                    {
                        object v = row[colElt];
                        if (v != lastElt || lstRows == null)
                        {
                            lastElt = v;
                            if (!dicRowsParElement.TryGetValue(v, out lstRows))
                            {
                                lstRows = new List <DataRow>();
                                dicRowsParElement[v] = lstRows;
                            }
                        }
                        lstRows.Add(row);
                    }
                }
                else
                {
                    List <DataRow> lstRows = new List <DataRow>();
                    foreach (DataRow row in table.Rows)
                    {
                        lstRows.Add(row);
                    }
                    dicRowsParElement[DBNull.Value] = lstRows;
                }

                foreach (KeyValuePair <object, List <DataRow> > kv in dicRowsParElement)
                {
                    List <DataRow>  lstRows   = kv.Value;
                    List <SLatLong> lstPoints = new List <SLatLong>();
                    int             nNb       = kv.Value.Count;
                    int             nIndex    = 0;
                    foreach (DataRow row in kv.Value)
                    {
                        try
                        {
                            double fLat     = Convert.ToDouble(row[colLat]);
                            double fLong    = Convert.ToDouble(row[colLong]);
                            string strLabel = colLib != null ?row[colLib] as string:null;
                            if (strLabel == null || strLabel.Length == 0)
                            {
                                strLabel = "";
                            }
                            bool bPrendre = true;
                            if (strLabel == "" && fLastLong != null && fLastLat != null && MetresEntrePoints > 0)
                            {
                                //contrôle la distance
                                double fDist = GetGpsDist(fLastLong.Value, fLong, fLastLat.Value, fLat);
                                bPrendre = fDist >= MetresEntrePoints;
                            }
                            if (nIndex == nNb - 1)
                            {
                                bPrendre = true;
                            }
                            if (bPrendre)
                            {
                                fLastLat  = fLat;
                                fLastLong = fLong;
                                SLatLong pt = new SLatLong(fLat, fLong);
                                lstPoints.Add(pt);
                            }
                            if (strLabel != null && strLabel.Trim().Length > 0)
                            {
                                CMapItemSimple item = new CMapItemSimple(layer, fLat, fLong, EMapMarkerType.blue_dot);
                                item.ToolTip = strLabel;
                                layer.AddItem(item);
                            }
                        }
                        catch { }
                    }
                    CMapItemPath path = new CMapItemPath(layer);
                    path.Points = lstPoints.ToArray();
                    layer.AddItem(path);
                }
            }
            return(result);
        }
Ejemplo n.º 18
0
        //-------------------------------------------------------------
        public CResultAErreur GenereItems(CMapDatabase database, CContexteDonnee ctxDonnee)
        {
            CResultAErreur result = CResultAErreur.True;

            //Calcule les éléments à générer
            if (Filtre == null || Filtre.TypeElements == null)
            {
                return(result);
            }
            if (FormuleLatitude == null || FormuleLongitude == null)
            {
                return(result);
            }
            result = Filtre.GetFiltreData();
            if (!result)
            {
                return(result);
            }
            CFiltreData         filtre    = result.Data as CFiltreData;
            CListeObjetsDonnees lstObjets = new CListeObjetsDonnees(ctxDonnee, Filtre.TypeElements);

            lstObjets.Filtre      = filtre;
            lstObjets.ModeSansTri = true;

            CMapLayer layer = null;

            if (lstObjets.Count > 0)
            {
                layer = database.GetLayer(Generator.LayerId, true);
            }
            else
            {
                return(result);
            }

            int?nIdChampLatitude  = null;
            int?nIdChampLongitude = null;
            Dictionary <int, double> dicValeursLatitude  = new Dictionary <int, double>();
            Dictionary <int, double> dicValeursLongitude = new Dictionary <int, double>();

            if (typeof(IObjetDonneeAChamps).IsAssignableFrom(lstObjets.TypeObjets))
            {
                nIdChampLatitude  = GetIdChampOptimFromFormule(FormuleLatitude);
                nIdChampLongitude = GetIdChampOptimFromFormule(FormuleLongitude);
                List <int> lst = new List <int>();
                if (nIdChampLatitude != null)
                {
                    lst.Add(nIdChampLatitude.Value);
                }
                if (nIdChampLongitude != null)
                {
                    lst.Add(nIdChampLongitude.Value);
                }
                if (lst.Count > 0)
                {
                    CUtilElementAChamps.ReadChampsCustom(lstObjets, lst.ToArray());
                }
                DataTable table = ctxDonnee.Tables[((IObjetDonneeAChamps)lstObjets[0]).GetNomTableRelationToChamps()];
                if (table != null && (nIdChampLatitude != null || nIdChampLatitude != null))
                {
                    string strCle    = ((CObjetDonneeAIdNumerique)lstObjets[0]).GetChampId();
                    string strFiltre = "";
                    if (nIdChampLatitude != null)
                    {
                        strFiltre = CChampCustom.c_champId + "=" + nIdChampLatitude.Value;
                    }
                    if (nIdChampLongitude != null)
                    {
                        if (strFiltre.Length > 0)
                        {
                            strFiltre += " or ";
                        }
                        strFiltre += CChampCustom.c_champId + "=" + nIdChampLongitude.Value;
                    }
                    DataRow[] rows = table.Select(strFiltre);
                    foreach (DataRow row in table.Rows)
                    {
                        if ((int)row[CChampCustom.c_champId] == nIdChampLatitude)
                        {
                            dicValeursLatitude[(int)row[strCle]] = (double)row[CRelationElementAChamp_ChampCustom.c_champValeurDouble];
                        }
                        else if ((int)row[CChampCustom.c_champId] == nIdChampLongitude)
                        {
                            dicValeursLongitude[(int)row[strCle]] = (double)row[CRelationElementAChamp_ChampCustom.c_champValeurDouble];
                        }
                    }
                }
            }
            else
            {
                nIdChampLatitude  = null;
                nIdChampLongitude = null;
            }


            foreach (object obj in lstObjets)
            {
                DateTime dt = DateTime.Now;
                m_currentGeneratedItem = obj;
                CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(obj);
                double?fLat  = null;
                double?fLong = null;
                if (nIdChampLatitude != null)
                {
                    double fTmp = 0;
                    if (dicValeursLatitude.TryGetValue(((CObjetDonneeAIdNumerique)obj).Id, out fTmp))
                    {
                        fLat = fTmp;
                    }
                }
                else
                {
                    result = FormuleLatitude.Eval(ctxEval);
                    if (result)
                    {
                        try
                        {
                            fLat = Convert.ToDouble(result.Data);
                        }
                        catch { }
                    }
                }
                if (fLat != null)
                {
                    if (nIdChampLongitude != null)
                    {
                        double fTmp = 0;
                        if (dicValeursLongitude.TryGetValue(((CObjetDonneeAIdNumerique)obj).Id, out fTmp))
                        {
                            fLong = fTmp;
                        }
                    }
                    else
                    {
                        result = FormuleLongitude.Eval(ctxEval);
                        if (result)
                        {
                            try
                            {
                                fLong = Convert.ToDouble(result.Data);
                            }
                            catch { }
                        }
                    }
                }
                TimeSpan sp = DateTime.Now - dt;
                if (obj is CObjetDonnee)
                {
                    //Console.WriteLine("Coord "+((CObjetDonnee)obj).DescriptionElement + " : " + sp.TotalMilliseconds);
                }
                if (fLong != null && fLat != null)
                {
                    foreach (CMapItemDessin mapItemDessin in ItemsDessin)
                    {
                        if (mapItemDessin.GenereItem(
                                obj,
                                fLat.Value,
                                fLong.Value,
                                layer))
                        {
                            break;
                        }
                    }
                }
                sp = DateTime.Now - dt;
                if (obj is CObjetDonnee)
                {
                    //Console.WriteLine(((CObjetDonnee)obj).DescriptionElement + " : " + sp.TotalMilliseconds);
                }
            }

            return(result);
        }
Ejemplo n.º 19
0
 //------------------------------------------------------------------------
 private void CreateDatabase()
 {
     m_mapDatabase = new CMapDatabase();
     m_mapDatabase.AddImage(c_strLayerMoveOnMap, Resource.PointToMoveOnMap);
 }
Ejemplo n.º 20
0
 //-------------------------------------------------
 public CMoveablePoint(CMapDatabase database)
 {
     m_database = database;
 }
Ejemplo n.º 21
0
 //-------------------------------------------------
 public CMoveablePoint(CMapDatabase database, SLatLong latLong)
     : this(database)
 {
     m_point = latLong;
 }
Ejemplo n.º 22
0
 //-------------------------------------------------
 public virtual IEnumerable <IMapItem> Delete(CMapDatabase database)
 {
     return(new IMapItem[0]);
 }