//------------------------------------------------------------- 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); }
//------------------------------------------------------------- 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); }