Sigo sin avanzar demasiado en importación

Elena/develop
Elena 2022-05-29 15:40:14 +02:00
parent e2ec0d2dc6
commit a0164e6bb4
5 changed files with 173 additions and 44 deletions

View File

@ -23,6 +23,7 @@ using System.Diagnostics;
using OliviaAddInPro.View; using OliviaAddInPro.View;
using OliviaAddInPro.Model.contract; using OliviaAddInPro.Model.contract;
using ArcGIS.Core.Data.DDL; using ArcGIS.Core.Data.DDL;
using ArcGIS.Core.CIM;
namespace OliviaAddInPro.Helper namespace OliviaAddInPro.Helper
{ {
@ -113,6 +114,34 @@ namespace OliviaAddInPro.Helper
return geomsal; 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 * Devuelve el sistema de coordenadas de una capa
*/ */
@ -1491,9 +1520,8 @@ namespace OliviaAddInPro.Helper
try try
{ {
var lyr = MapView.Active.Map.FindLayers(nombCapa).FirstOrDefault() as FeatureLayer; var lyr = MapView.Active.Map.FindLayers(nombCapa).FirstOrDefault() as FeatureLayer;
if (lyr == null) if (lyr!= null)
return false; MapView.Active.Map.RemoveLayer(lyr);
MapView.Active.Map.RemoveLayer(lyr);
return true; return true;
} }
catch (Exception ex) catch (Exception ex)
@ -1509,15 +1537,16 @@ namespace OliviaAddInPro.Helper
{ {
try try
{ {
var lyrs = MapView.Active.Map.Layers; ReadOnlyObservableCollection<Layer> lyrs= MapView.Active.Map.Layers;
foreach (FeatureLayer fl in lyrs) while(lyrs.Any())
{ {
var fl = lyrs.FirstOrDefault();
if (fl != null) if (fl != null)
MapView.Active.Map.RemoveLayer(fl); MapView.Active.Map.RemoveLayer(fl);
} }
return true; return true;
} }
catch (Exception ex) catch (Exception)
{ {
return false; return false;
} }
@ -1563,8 +1592,8 @@ namespace OliviaAddInPro.Helper
{ {
try try
{ {
FeatureClass ftclss = gdb.OpenDataset<FeatureClass>(datasetName); FeatureDataset ftdst = gdb.OpenDataset<FeatureDataset>(datasetName);
ftclss.Dispose(); ftdst.Dispose();
return true; return true;
} }
catch 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<int> CheckSpatRefDataset(Geodatabase gdb, string datasetName, ArcGIS.Core.Geometry.SpatialReference spatref)
{
return ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run((Func<int>)(() =>
{
try
{
FeatureDatasetDefinition featureDatasetDefinition = gdb.GetDefinition<FeatureDatasetDefinition>(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 * 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 * 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; return res;
} }
//comprueba si extiste ya el dataset //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 //comprueba si tiene la misma referencia espacial
featureDatasetDefinition = gdb.GetDefinition<FeatureDatasetDefinition>(datasetName); var r = CheckSpatRefDataset(gdb, datasetName, spatref).Result;
if (featureDatasetDefinition.GetSpatialReference().Equals(spatref)) if (r==0)
{ {
res.Value = 0; //no hay nada que crear, existe y coincide la spatial ref res.Value = 0; //no hay nada que crear, existe y coincide la spatial ref
return res; return res;
} }
else else if(r==2)
{ {
//crea un nuevo dataset y avisa //crea un nuevo dataset y avisa
datasetName = datasetName + "_1"; datasetName = datasetName + "_1";
datasetNameOut = datasetName; 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 //no existe, lo crea
var task = ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run((Func<Respuesta<bool>>)(() => var task = ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run((Func<Respuesta<bool>>)(() =>
@ -1675,15 +1735,44 @@ namespace OliviaAddInPro.Helper
var res = new Respuesta<bool> { Value = false }; var res = new Respuesta<bool> { Value = false };
string[] args = { nom_shp, Gdb_dataset, namefc }; string[] args = { nom_shp, Gdb_dataset, namefc };
// execute the tool // execute the tool
FeatureClass fc = GetFtClassFromShp(nom_shp).Result;
if (fc == null)
return res;
try try
{ {
ArcGIS.Core.Geometry.SpatialReference spatref = GetSpatRef(fc); ArcGIS.Core.Geometry.SpatialReference spatref = GetSpatRef(nom_shp);
var environments = Geoprocessing.MakeEnvironmentArray(outputCoordinateSystem: spatref); 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) if (gpResult.IsCanceled)
{ {
return res; return res;
@ -1708,10 +1797,6 @@ namespace OliviaAddInPro.Helper
res.Error.Add("Error: " + ex.Message); res.Error.Add("Error: " + ex.Message);
return res; return res;
} }
finally
{
Free(fc);
}
} }
/** /**
@ -1815,10 +1900,39 @@ namespace OliviaAddInPro.Helper
Layer layer = LayerFactory.Instance.CreateLayer(ftclass_uri, mapView.Map, indexNumber, ftclassname); Layer layer = LayerFactory.Instance.CreateLayer(ftclass_uri, mapView.Map, indexNumber, ftclassname);
var selectedLayer = mapView.GetSelectedLayers()[0] as FeatureLayer; var selectedLayer = mapView.GetSelectedLayers()[0] as FeatureLayer;
//Do something with selected layer //Do something with selected layer
SetSimpleRendererPoint(selectedLayer);
selectedLayer.SetVisibility(visible); selectedLayer.SetVisibility(visible);
}); });
} }
return true; 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);
});
}
} }
} }

View File

@ -383,7 +383,7 @@ namespace OliviaAddInPro.Services
return res; return res;
////////////////////////////////////////////////// //////////////////////////////////////////////////
//abre las capas, pintando los sectores //abre las capas, pintando los sectores
HelperGdb.CloseAllLayers();
return res; 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"; 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) 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; return res;
} }
else if (resp.Value == 2) else if (resp.Value == 2)
@ -499,39 +499,39 @@ namespace OliviaAddInPro.Services
NIMPORT = 0; NIMPORT = 0;
if (modo == 0) //sectoriza if (modo == 0) //sectoriza
{ {
NIMPORT = 2; NIMPORT = 1;
noms_shp = new string[NIMPORT]; noms_shp = new string[NIMPORT];
noms_gdb = new string[NIMPORT]; noms_gdb = new string[NIMPORT];
noms_shp[0] = shapefile; noms_shp[0] = shapefile;
noms_gdb[0] = ambitos; noms_gdb[0] = ambitos;
noms_shp[1] = shapefile + NAME_AUX; /*noms_shp[1] = shapefile + NAME_AUX;
noms_gdb[1] = ambitos + NAME_SECT; noms_gdb[1] = ambitos + NAME_SECT;*/
} }
else if (modo == 1) //planifica else if (modo == 1) //planifica
{ {
if (reco_o_limp_con_instala) if (reco_o_limp_con_instala)
NIMPORT = 6;
else
NIMPORT = 5; NIMPORT = 5;
else
NIMPORT = 4;
if (reco_tramos) if (reco_tramos)
NIMPORT++; NIMPORT++;
noms_shp = new string[NIMPORT]; noms_shp = new string[NIMPORT];
noms_gdb = new string[NIMPORT]; noms_gdb = new string[NIMPORT];
noms_shp[0] = shapefile; noms_shp[0] = shapefile;
noms_gdb[0] = ambitos; noms_gdb[0] = ambitos;
noms_shp[1] = shapefile + NAME_AUX; /*noms_shp[1] = shapefile + NAME_AUX;
noms_gdb[1] = ambitos + NAME_SECT; noms_gdb[1] = ambitos + NAME_SECT;*/
noms_shp[2] = shapefile + NAME_CONTROL; noms_shp[1] = shapefile + NAME_CONTROL;
noms_gdb[2] = ambitos + NAME_CONTROL_OUT; noms_gdb[1] = ambitos + NAME_CONTROL_OUT;
noms_shp[3] = shapefile + NAME_RUTA; noms_shp[2] = shapefile + NAME_RUTA;
noms_gdb[3] = ambitos + NAME_RUTA_OUT; noms_gdb[2] = ambitos + NAME_RUTA_OUT;
noms_shp[4] = shapefile + NAME_RUTA_AUX; noms_shp[3] = shapefile + NAME_RUTA_AUX;
noms_gdb[4] = ambitos + NAME_RUTA_OUT + NAME_AUX; noms_gdb[3] = ambitos + NAME_RUTA_OUT + NAME_AUX;
ii = 5; ii = 4;
if (reco_o_limp_con_instala) if (reco_o_limp_con_instala)
{ {
noms_shp[5] = shapefile + NAME_INSTAL; noms_shp[4] = shapefile + NAME_INSTAL;
noms_gdb[5] = ambitos + NAME_INSTAL_OUT; noms_gdb[4] = ambitos + NAME_INSTAL_OUT;
ii++; ii++;
} }
if (reco_tramos) if (reco_tramos)
@ -620,5 +620,15 @@ namespace OliviaAddInPro.Services
return res; 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);
}
} }
} }

View File

@ -158,8 +158,6 @@ namespace OliviaAddInPro.Services
BorraFiles(); BorraFiles();
}); });
task.Wait(); task.Wait();
//borra los archivos que le toca borrar
//BorraFiles();
} }
/** /**

View File

@ -55,6 +55,10 @@ namespace OliviaAddInPro.Services
res.Error.Add(msg); res.Error.Add(msg);
return res; return res;
} }
//cierra las capas que se han abierto durante la exportación
CierraCapas();
res.Value = true; res.Value = true;
return res; return res;

View File

@ -93,6 +93,9 @@ namespace OliviaAddInPro.Services
return res; return res;
} }
//cierra las capas que se han abierto durante la exportación
CierraCapas();
return res; return res;
} }