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.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,8 +1520,7 @@ namespace OliviaAddInPro.Helper
try
{
var lyr = MapView.Active.Map.FindLayers(nombCapa).FirstOrDefault() as FeatureLayer;
if (lyr == null)
return false;
if (lyr!= null)
MapView.Active.Map.RemoveLayer(lyr);
return true;
}
@ -1509,15 +1537,16 @@ namespace OliviaAddInPro.Helper
{
try
{
var lyrs = MapView.Active.Map.Layers;
foreach (FeatureLayer fl in lyrs)
ReadOnlyObservableCollection<Layer> 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<FeatureClass>(datasetName);
ftclss.Dispose();
FeatureDataset ftdst = gdb.OpenDataset<FeatureDataset>(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<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
* 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<FeatureDatasetDefinition>(datasetName);
if (featureDatasetDefinition.GetSpatialReference().Equals(spatref))
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<Respuesta<bool>>)(() =>
@ -1675,15 +1735,44 @@ namespace OliviaAddInPro.Helper
var res = new Respuesta<bool> { Value = false };
string[] args = { nom_shp, Gdb_dataset, namefc };
// execute the tool
FeatureClass fc = GetFtClassFromShp(nom_shp).Result;
if (fc == null)
return res;
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);
});
}
}
}

View File

@ -383,7 +383,7 @@ namespace OliviaAddInPro.Services
return res;
//////////////////////////////////////////////////
//abre las capas, pintando los sectores
HelperGdb.CloseAllLayers();
return res;
}
@ -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);
}
}
}

View File

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

View File

@ -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;

View File

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