From a0164e6bb4efed8aa1b44674611b5b7fd58eef1a Mon Sep 17 00:00:00 2001 From: Elena Date: Sun, 29 May 2022 15:40:14 +0200 Subject: [PATCH] =?UTF-8?q?Sigo=20sin=20avanzar=20demasiado=20en=20importa?= =?UTF-8?q?ci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Helper/HelperGdb.cs | 160 +++++++++++++++++++++++++++++++++------ Services/EjecServ.cs | 46 ++++++----- Services/FinProcServ.cs | 4 +- Services/LimpiezaServ.cs | 4 + Services/RecogidaServ.cs | 3 + 5 files changed, 173 insertions(+), 44 deletions(-) diff --git a/Helper/HelperGdb.cs b/Helper/HelperGdb.cs index be5cf65..53d0b38 100644 --- a/Helper/HelperGdb.cs +++ b/Helper/HelperGdb.cs @@ -23,6 +23,7 @@ using System.Diagnostics; using OliviaAddInPro.View; using OliviaAddInPro.Model.contract; using ArcGIS.Core.Data.DDL; +using ArcGIS.Core.CIM; namespace OliviaAddInPro.Helper { @@ -113,6 +114,34 @@ namespace OliviaAddInPro.Helper return geomsal; } + /** + * Devuelve el sistema de coordenadas de una capa + */ + public static ArcGIS.Core.Geometry.SpatialReference GetSpatRef(string ftclassName) + { + FeatureClass fc = GetFtClassFromShp(ftclassName).Result; + if (fc == null) + return null; + ArcGIS.Core.Geometry.SpatialReference spatref = null; + var task = ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() => + { + try + { + spatref = fc.GetDefinition().GetSpatialReference(); + } + catch + { + } + finally + { + fc.Dispose(); + } + }); + task.Wait(); + + return spatref; + } + /** * Devuelve el sistema de coordenadas de una capa */ @@ -1491,9 +1520,8 @@ namespace OliviaAddInPro.Helper try { var lyr = MapView.Active.Map.FindLayers(nombCapa).FirstOrDefault() as FeatureLayer; - if (lyr == null) - return false; - MapView.Active.Map.RemoveLayer(lyr); + if (lyr!= null) + MapView.Active.Map.RemoveLayer(lyr); return true; } catch (Exception ex) @@ -1509,15 +1537,16 @@ namespace OliviaAddInPro.Helper { try { - var lyrs = MapView.Active.Map.Layers; - foreach (FeatureLayer fl in lyrs) + ReadOnlyObservableCollection lyrs= MapView.Active.Map.Layers; + while(lyrs.Any()) { + var fl = lyrs.FirstOrDefault(); if (fl != null) MapView.Active.Map.RemoveLayer(fl); } return true; } - catch (Exception ex) + catch (Exception) { return false; } @@ -1563,8 +1592,8 @@ namespace OliviaAddInPro.Helper { try { - FeatureClass ftclss = gdb.OpenDataset(datasetName); - ftclss.Dispose(); + FeatureDataset ftdst = gdb.OpenDataset(datasetName); + ftdst.Dispose(); return true; } catch @@ -1574,6 +1603,28 @@ namespace OliviaAddInPro.Helper })); } + /** + * Comprueba si el dataset dado tiene la referencia espacial dada + * Devuelve 0 si es la misma, 2 si no es la misma, 1 si ha dado error + */ + public static Task CheckSpatRefDataset(Geodatabase gdb, string datasetName, ArcGIS.Core.Geometry.SpatialReference spatref) + { + return ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run((Func)(() => + { + try + { + FeatureDatasetDefinition featureDatasetDefinition = gdb.GetDefinition(datasetName); + if(featureDatasetDefinition.GetSpatialReference().Equals(spatref)) + return 0; + return 2; + } + catch (Exception ex) + { + return 1; + } + })); + } + /** * Crea un FeatureDataset con el nombre dado y la spatialrefernece dada en la gdb dada * Devuelve 0 si no hay que crear nada o si lo ha creado bien, 2 si existe el dataset pero con otra referencia espacial, 1 si da error @@ -1594,21 +1645,30 @@ namespace OliviaAddInPro.Helper return res; } //comprueba si extiste ya el dataset - if (CheckDataset(gdb, datasetName).Result) + var task1 = CheckDataset(gdb, datasetName); + task1.Wait(); + if (task1.Result) { - //comprueba si tiene la misma referencia espacial - featureDatasetDefinition = gdb.GetDefinition(datasetName); - if (featureDatasetDefinition.GetSpatialReference().Equals(spatref)) + //comprueba si tiene la misma referencia espacial + var r = CheckSpatRefDataset(gdb, datasetName, spatref).Result; + if (r==0) { res.Value = 0; //no hay nada que crear, existe y coincide la spatial ref return res; } - else + else if(r==2) { //crea un nuevo dataset y avisa datasetName = datasetName + "_1"; datasetNameOut = datasetName; } + else + { + //ha dado error al comprobar + res.Value = 1; + res.Error.Add("Errores al crear el Dataset " + datasetName); + return res; + } } //no existe, lo crea var task = ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run((Func>)(() => @@ -1674,16 +1734,45 @@ namespace OliviaAddInPro.Helper { var res = new Respuesta { Value = false }; string[] args = { nom_shp, Gdb_dataset, namefc }; - // execute the tool - FeatureClass fc = GetFtClassFromShp(nom_shp).Result; - if (fc == null) - return res; + // execute the tool try { - ArcGIS.Core.Geometry.SpatialReference spatref = GetSpatRef(fc); + ArcGIS.Core.Geometry.SpatialReference spatref = GetSpatRef(nom_shp); var environments = Geoprocessing.MakeEnvironmentArray(outputCoordinateSystem: spatref); - IGPResult gpResult = Geoprocessing.ExecuteToolAsync("FeatureClassToFeatureClass_conversion", args, environments).Result; + CancelableProgressorSource cps = new CancelableProgressorSource(); + IGPResult gpResult = Geoprocessing.ExecuteToolAsync("FeatureClassToFeatureClass_conversion", Geoprocessing.MakeValueArray(args), environments,cps.CancellationTokenSource.Token, + (event_name, o) => // implement delegate and handle events + { + switch (event_name) + { + case "OnValidate": // stop execute if any warnings + //if ((o as IGPMessage[]).Any(it => it.Type == GPMessageType.Warning)) + //_cts.Cancel(); + break; + + case "OnProgressMessage": + { + string msg = string.Format("{0}: {1}", new object[] { event_name, (string)o }); + Debug.WriteLine(msg); ; + } + break; + + case "OnProgressPos": + { + string msg2 = string.Format("{0}: {1} %", new object[] { event_name, (int)o }); + Debug.WriteLine(msg2); + var av = (int)o; + if ((int)o < 0) + { + //System.Windows.MessageBox.Show(msg2); + //cps.CancellationTokenSource.Cancel(); + + } + break; + } + } + }).Result; if (gpResult.IsCanceled) { return res; @@ -1708,10 +1797,6 @@ namespace OliviaAddInPro.Helper res.Error.Add("Error: " + ex.Message); return res; } - finally - { - Free(fc); - } } /** @@ -1815,10 +1900,39 @@ namespace OliviaAddInPro.Helper Layer layer = LayerFactory.Instance.CreateLayer(ftclass_uri, mapView.Map, indexNumber, ftclassname); var selectedLayer = mapView.GetSelectedLayers()[0] as FeatureLayer; //Do something with selected layer + SetSimpleRendererPoint(selectedLayer); + selectedLayer.SetVisibility(visible); }); } return true; } + /* + * Crea el renderer para la capa, dado un campo en el que fijarse y una simbología + */ + internal static void SetSimpleRendererPoint(FeatureLayer featureLayer) + { + CIMSimpleRenderer renderer=null; + QueuedTask.Run(() => + { + try + { + //Create a circle marker + var pointSymbol = SymbolFactory.Instance.ConstructPointSymbol(ColorFactory.Instance.RedRGB, 8, SimpleMarkerStyle.Circle); + + //Get the layer's current renderer + renderer = featureLayer.GetRenderer() as CIMSimpleRenderer; + + //Update the symbol of the current simple renderer + renderer.Symbol = pointSymbol.MakeSymbolReference(); + } + catch(Exception ex) + { + + } + //Update the feature layer renderer + featureLayer.SetRenderer(renderer); + }); + } } } diff --git a/Services/EjecServ.cs b/Services/EjecServ.cs index 25cf76e..573a690 100644 --- a/Services/EjecServ.cs +++ b/Services/EjecServ.cs @@ -383,7 +383,7 @@ namespace OliviaAddInPro.Services return res; ////////////////////////////////////////////////// //abre las capas, pintando los sectores - HelperGdb.CloseAllLayers(); + return res; } @@ -433,7 +433,7 @@ namespace OliviaAddInPro.Services string err_spatref = "Atención, no coincide la proyección de las FeatureClass del Dataset ya creado con la del FeatureClass a importar"; if (resp.Value == 1) { - res.Error.Add("Error al crear el Dataset para importar" + tratamiento); + res.Error.Add("Error al crear el Dataset para importar " + tratamiento); return res; } else if (resp.Value == 2) @@ -499,39 +499,39 @@ namespace OliviaAddInPro.Services NIMPORT = 0; if (modo == 0) //sectoriza { - NIMPORT = 2; + NIMPORT = 1; noms_shp = new string[NIMPORT]; noms_gdb = new string[NIMPORT]; noms_shp[0] = shapefile; noms_gdb[0] = ambitos; - noms_shp[1] = shapefile + NAME_AUX; - noms_gdb[1] = ambitos + NAME_SECT; + /*noms_shp[1] = shapefile + NAME_AUX; + noms_gdb[1] = ambitos + NAME_SECT;*/ } else if (modo == 1) //planifica { if (reco_o_limp_con_instala) - NIMPORT = 6; - else NIMPORT = 5; + else + NIMPORT = 4; if (reco_tramos) NIMPORT++; noms_shp = new string[NIMPORT]; noms_gdb = new string[NIMPORT]; noms_shp[0] = shapefile; noms_gdb[0] = ambitos; - noms_shp[1] = shapefile + NAME_AUX; - noms_gdb[1] = ambitos + NAME_SECT; - noms_shp[2] = shapefile + NAME_CONTROL; - noms_gdb[2] = ambitos + NAME_CONTROL_OUT; - noms_shp[3] = shapefile + NAME_RUTA; - noms_gdb[3] = ambitos + NAME_RUTA_OUT; - noms_shp[4] = shapefile + NAME_RUTA_AUX; - noms_gdb[4] = ambitos + NAME_RUTA_OUT + NAME_AUX; - ii = 5; + /*noms_shp[1] = shapefile + NAME_AUX; + noms_gdb[1] = ambitos + NAME_SECT;*/ + noms_shp[1] = shapefile + NAME_CONTROL; + noms_gdb[1] = ambitos + NAME_CONTROL_OUT; + noms_shp[2] = shapefile + NAME_RUTA; + noms_gdb[2] = ambitos + NAME_RUTA_OUT; + noms_shp[3] = shapefile + NAME_RUTA_AUX; + noms_gdb[3] = ambitos + NAME_RUTA_OUT + NAME_AUX; + ii = 4; if (reco_o_limp_con_instala) { - noms_shp[5] = shapefile + NAME_INSTAL; - noms_gdb[5] = ambitos + NAME_INSTAL_OUT; + noms_shp[4] = shapefile + NAME_INSTAL; + noms_gdb[4] = ambitos + NAME_INSTAL_OUT; ii++; } if (reco_tramos) @@ -620,5 +620,15 @@ namespace OliviaAddInPro.Services return res; } + /** + * Cierra del mapa las capas de trabajo después de la exportación + */ + public void CierraCapas() + { + string capa_principal = System.IO.Path.GetFileNameWithoutExtension(OliviaGlob.Paths.PathData); + string capa_principal_nw = System.IO.Path.GetFileNameWithoutExtension(OliviaGlob.Paths.PathNW); + HelperGdb.CloseLayer(capa_principal); + HelperGdb.CloseLayer(capa_principal_nw); + } } } diff --git a/Services/FinProcServ.cs b/Services/FinProcServ.cs index 6ab1450..9d76ae9 100644 --- a/Services/FinProcServ.cs +++ b/Services/FinProcServ.cs @@ -157,9 +157,7 @@ namespace OliviaAddInPro.Services //borra los archivos que le toca borrar BorraFiles(); }); - task.Wait(); - //borra los archivos que le toca borrar - //BorraFiles(); + task.Wait(); } /** diff --git a/Services/LimpiezaServ.cs b/Services/LimpiezaServ.cs index deaf0a1..966e1c4 100644 --- a/Services/LimpiezaServ.cs +++ b/Services/LimpiezaServ.cs @@ -55,6 +55,10 @@ namespace OliviaAddInPro.Services res.Error.Add(msg); return res; } + + //cierra las capas que se han abierto durante la exportación + CierraCapas(); + res.Value = true; return res; diff --git a/Services/RecogidaServ.cs b/Services/RecogidaServ.cs index 3cefd19..0789b86 100644 --- a/Services/RecogidaServ.cs +++ b/Services/RecogidaServ.cs @@ -93,6 +93,9 @@ namespace OliviaAddInPro.Services return res; } + //cierra las capas que se han abierto durante la exportación + CierraCapas(); + return res; }