示例#1
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);
        }
示例#2
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);
        }