Merge remote-tracking branch 'origin/Elena/reco' into develop

# Conflicts:
#	Model/Limpieza.cs
#	Services/EjecServ.cs
ConfiguracionSimplificada
Gerardo 2022-02-09 00:31:05 +01:00
commit 14321508ad
15 changed files with 173 additions and 121 deletions

View File

@ -25,10 +25,8 @@ namespace OliviaAddInPro
{
protected override void OnClick()
{
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
OliviaGlob.progrDialog= new ProgressDialog(
"Procesando", "Canceled", 100, false);
if (OliviaGlob.TipoEjec == TiposEjecucion.Ninguno)
{
///Comprueba que existe la red navegable configurada

View File

@ -25,8 +25,6 @@ namespace OliviaAddInPro
{
protected override void OnClick()
{
OliviaGlob.progrDialog = new ProgressDialog(
"Procesando", "Canceled", 100, false);
if (OliviaGlob.TipoEjec==TiposEjecucion.Ninguno)
{
///Comprueba que existe la red navegable configurada

View File

@ -779,7 +779,7 @@ namespace OliviaAddInPro.Helper
return res;
}
public static bool ExportShp2(string pathLayerIn, SpatialQueryFilter filter, string nameShp, string outpath, CancelableProgressorSource cps)
public static bool ExportShp2(string pathLayerIn, SpatialQueryFilter filter, string nameShp, string outpath, CancelableProgressorSource cps, int incmax=100)
{
if (!System.IO.Directory.Exists(outpath))
System.IO.Directory.CreateDirectory(outpath);
@ -796,7 +796,7 @@ namespace OliviaAddInPro.Helper
return false;
}
List<long> ids = new List<long>();
cps.Status = "Aplicando filtro espacial a exportación";
//Añade a la lista los ids que cumplen el filtro espacial
using (RowCursor cursor = fc.Search(filter))
{
@ -818,10 +818,10 @@ namespace OliviaAddInPro.Helper
string whereClause = GetWhereClauseFromIds(ids);
///////////////////////////////////////////////////////////
///Exporta
cps.Status = "Exportando datos";
///Exporta
string[] args = { pathLayerIn, outpath, nameShp, whereClause };
// execute the tool
uint valini = cps.Value;
IGPResult gpResult = Geoprocessing.ExecuteToolAsync("FeatureClassToFeatureClass_conversion", args,
null, cps.CancellationTokenSource.Token,
@ -837,10 +837,7 @@ namespace OliviaAddInPro.Helper
case "OnProgressMessage":
{
string msg = string.Format("{0}: {1}", new object[] { event_name, (string)o });
Debug.WriteLine(msg);
;
//System.Windows.MessageBox.Show(msg);
//_cts.Cancel();
Debug.WriteLine(msg); ;
}
break;
@ -848,11 +845,11 @@ namespace OliviaAddInPro.Helper
{
string msg2 = string.Format("{0}: {1} %", new object[] { event_name, (int)o });
Debug.WriteLine(msg2);
var av = (int)0;
var av = (int)o;
if (av > 0)
{
cps.Value = (uint)(80 * av * 0.2);
}
cps.Value += (uint)((float)av/100*Math.Min(incmax, cps.Max-valini));
}
// if ((int)o < 0)
//System.Windows.MessageBox.Show(msg2);
//_cts.Cancel();
@ -860,8 +857,22 @@ namespace OliviaAddInPro.Helper
}
}
}).Result;
cps.Status = "Finalizando exportacion";
if (gpResult.IsCanceled)
{
cps.CancellationTokenSource.Cancel();
return false;
}
if(gpResult.IsFailed)
{
string msg;
if (gpResult.ErrorMessages != null)
msg = gpResult.ErrorMessages.First().Text;
else
msg = "Errores en la exportación";
OutStr = "Error: " + msg;
return false;
}
return true;
}
catch (Exception ex)
@ -946,7 +957,6 @@ namespace OliviaAddInPro.Helper
*/
cps.Status = "Guardando geometria a shp";
//var progSrc = new CancelableProgressorSource();
string[] args = { pathLayerIn, outpath };
// execute the tool
IGPResult gpResult = Geoprocessing.ExecuteToolAsync("FeatureClassToShapefile_conversion", args,

View File

@ -8,6 +8,7 @@ using ArcGIS.Desktop.Internal.Framework.Controls;
using ArcGIS.Desktop.Framework.Dialogs;
using System.Windows;
using System.IO;
using ArcGIS.Desktop.Framework.Threading.Tasks;
namespace OliviaAddInPro.Helper
{
@ -79,5 +80,28 @@ namespace OliviaAddInPro.Helper
}
}
}
public class MyCancelableProgressorSource
{
public CancelableProgressorSource _ProgrSrc;
public MyCancelableProgressorSource(ProgressDialog prodlg)
{
_ProgrSrc = new CancelableProgressorSource(prodlg);
_ProgrSrc.Max = 100;
}
public void Init(string stat)
{
_ProgrSrc.Value = 0;
_ProgrSrc.Status = stat;
}
public void IncMessage(uint inc, string mes)
{
if ((_ProgrSrc.Value + inc) < _ProgrSrc.Max)
_ProgrSrc.Value += inc;
_ProgrSrc.Message = mes;
}
}
}

View File

@ -51,14 +51,15 @@ namespace OliviaAddInPro.Model
public Limpieza()
{
Serv = new LimpiezaServ(this);
LanzaSrv = new LanzaLimpSrv();
LanzaSrv = new LanzaLimpSrv();
ProceSrv = new ProcesoEjecServ();
ProgrSrc = new MyCancelableProgressorSource(OliviaGlob.progrDialog);
}
public TareaRes Ejecuta(ModosEjec modo, CancelableProgressorSource cps)
public TareaRes Ejecuta(ModosEjec modo)
{
TareaRes res = null;
res = Serv.Ejecuta(modo, cps);
res = Serv.Ejecuta(modo);
if (!res.Errores)
{
var res1=LanzaSrv.ejec(this, modo, TipoTtoStr);
@ -68,7 +69,7 @@ namespace OliviaAddInPro.Model
ProceSrv.Puerto = conf.Puerto;
ProceSrv.Ip = conf.Ip;
res1 = ProceSrv.start(LanzaSrv.str_cfg, cps);
res1 = ProceSrv.start(LanzaSrv.str_cfg, ProgrSrc._ProgrSrc);
}
if (res1.HasError)
@ -80,16 +81,13 @@ namespace OliviaAddInPro.Model
}
return res;
}
public async void EjecutaAsync(ModosEjec modo, CancelableProgressorSource cps, Action<TareaRes> ffin)
public async void EjecutaAsync(ModosEjec modo, Action<TareaRes> ffin)
{
await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>
{
cps.Status = "Procesando";
cps.Value = 0;
var res = Ejecuta(modo, cps);
{
var res = Ejecuta(modo);
ffin(res);
return res;
});
}

View File

@ -75,9 +75,9 @@ namespace OliviaAddInPro.Model
public static string ftclass_ejes; //<Nombre de la capa de ejes de carretera
public static string ftclass_muni; //<Nombre de la capa de municipios de TOMTOM
};
private static TiposEjecucion tipoEjec = TiposEjecucion.Ninguno;
public static Limpieza limp = new Limpieza();
private static Recogida reco = new Recogida();
private static TiposEjecucion tipoEjec;
public static Limpieza limp;
private static Recogida reco;
#region Properties
public static TiposEjecucion TipoEjec
@ -102,9 +102,11 @@ namespace OliviaAddInPro.Model
public static void Inicia()
{
tipoEjec = TiposEjecucion.Ninguno;
IniDefault();
LimpiezaDef.iniciaLimpDef();
RecogidaDef.iniciaRecoDef();
progrDialog = new ProgressDialog("Procesando", Resource1.String_cancel_progreso, 100, false);
limp = new Limpieza();
reco = new Recogida();
SpatRef = ArcGIS.Core.Geometry.SpatialReferenceBuilder.CreateSpatialReference(GeneralDef.SpatRefDef);

View File

@ -58,11 +58,7 @@ namespace OliviaAddInPro.Model
/**
* grados en º de giro del vehículo
*/
public int GiroVehic { get; set; } = 0;
/**
* Coordenadas de la planta de descarga
*/
public Coordinate2D CoordsPlanta { get; set; } = new Coordinate2D(0, 0);
public int GiroVehic { get; set; } = 0;
/*
*
@ -76,23 +72,22 @@ namespace OliviaAddInPro.Model
public Recogida()
{
Serv = new RecogidaServ(this);
ProgrSrc = new MyCancelableProgressorSource(OliviaGlob.progrDialog);
}
public TareaRes Ejecuta(ModosEjec modo, CancelableProgressorSource cps)
public TareaRes Ejecuta(ModosEjec modo)
{
TareaRes res = null;
res = Serv.Ejecuta(modo, cps);
res = Serv.Ejecuta(modo);
return res;
}
public async void EjecutaAsync(ModosEjec modo, CancelableProgressorSource cps, Action<TareaRes> ffin)
public async void EjecutaAsync(ModosEjec modo, Action<TareaRes> ffin)
{
await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>
{
cps.Status = "Procesando";
cps.Value = 0;
var res = Ejecuta(modo, cps);
{
var res = Ejecuta(modo);
ffin(res);
return res;

View File

@ -5,6 +5,7 @@ using System.Text;
using System.Threading.Tasks;
using ArcGIS.Core.Geometry;
using ArcGIS.Desktop.Internal.Layouts.Utilities;
using OliviaAddInPro.Helper;
namespace OliviaAddInPro.Model
{
@ -61,6 +62,10 @@ namespace OliviaAddInPro.Model
* Coordenadas de la instalación
*/
public Coordinate2D CoordsInstal { get; set; } = new Coordinate2D(0, 0);
/**
* Coordenadas de la planta de descarga, solo hace falta para recogida
*/
public Coordinate2D CoordsPlanta { get; set; } = new Coordinate2D(0, 0);
/**
* Buffer para la exportación, en metros
*/
@ -121,5 +126,10 @@ namespace OliviaAddInPro.Model
set { err_str = value;}
}
/**
* Para la ventana de progreso
*/
public MyCancelableProgressorSource ProgrSrc;
}
}

9
Resource1.Designer.cs generated
View File

@ -60,6 +60,15 @@ namespace OliviaAddInPro {
}
}
/// <summary>
/// Busca una cadena traducida similar a Se ha cancelado la operación.
/// </summary>
internal static string String_cancel_progreso {
get {
return ResourceManager.GetString("String_cancel_progreso", resourceCulture);
}
}
/// <summary>
/// Busca una cadena traducida similar a General.
/// </summary>

View File

@ -117,6 +117,9 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="String_cancel_progreso" xml:space="preserve">
<value>Se ha cancelado la operación</value>
</data>
<data name="String_ConfigGeneralView" xml:space="preserve">
<value>General</value>
</data>

View File

@ -37,17 +37,18 @@ namespace OliviaAddInPro.Services
* Modo 0, sectorizar
* Modo 1, planificar
*/
public bool LanzaEjec(ModosEjec modo, CancelableProgressorSource cps, out string ErrStr)
public bool LanzaEjec(ModosEjec modo, out string ErrStr)
{
ErrStr = string.Empty;
try
{
com.ProgrSrc.Init("Exportando datos");
//Comprueba que tiene las columnas necesarias para planificar
if ((modo == ModosEjec.Planifica) && !CompruebaPlanif())
{
ErrStr = "En la capa de ámbitos seleccionada no se encuentran columnas de SECTOR y/o SECUENCIA, necesarias para planificar";
return false;
}
}
//Cuenta las filas que cumplen la consulta
int nelems = HelperGdb.GetNumElems(com.CapaElems, com.ConsultaAmbs);
@ -57,7 +58,7 @@ namespace OliviaAddInPro.Services
return false;
}
cps.Status = "Exportando geometria";
com.ProgrSrc.IncMessage(0, "Exportando geometria");
//Obtiene la geometría que envuelve a los ámbitos
Geometry geom_export = null;
@ -82,23 +83,26 @@ namespace OliviaAddInPro.Services
//se consigue el tiempo en este instante para añadirlo a los nombres de los archivos de salida (shapefiles)
fechaHora = DateTime.Now.ToString("yyyyMMdd_Hmmss");
//Pone nombre al shape en función de los ámbitos, el tratamiento, y los polígonos + timestamp
com.NombreShpExport = prefNameExport + com.NombreShpExp_PrefTto +"_" + fechaHora + extShp;
com.NombreShpExport = prefNameExport + com.NombreShpExp_PrefTto + "_" + fechaHora + extShp;
com.ProgrSrc.IncMessage(10, "Exportando ámbitos de trabajo");
//exporta los datos de entrada
if (!HelperGdb.ExportShp2(com.CapaElems, filtroEspacial, com.NombreShpExport, OliviaGlob.Paths.DirData, cps))
//if (!HelperGdb.ExportShp(com.CapaElems, filtroEspacial, com.NombreShpExport, OliviaGlob.Paths.DirData, cps, out ErrStr))
if (!HelperGdb.ExportShp2(com.CapaElems, filtroEspacial, com.NombreShpExport, OliviaGlob.Paths.DirData, com.ProgrSrc._ProgrSrc, 40))
{
ErrStr = "Error al exportar los ámbitos: "+ HelperGdb.OutStr;
ErrStr = "Error al exportar los ámbitos: " + HelperGdb.OutStr;
return false;
}
if (com.ProgrSrc._ProgrSrc.CancellationTokenSource.IsCancellationRequested)
{
ErrStr = Resource1.String_cancel_progreso;
return false;
}
//Guarda el nombre
OliviaGlob.Paths.PathData = OliviaGlob.Paths.DirData + com.NombreShpExport;
if(cps.CancellationTokenSource.IsCancellationRequested)
{
ErrStr = "Se ha cancelado la operación";
return false;
}
cps.Value = 80;
com.ProgrSrc.IncMessage(50, "Preparando exportación de red navegable");
//hace intersecciones espaciales en caso de ámbitos lineales para quitar los que tienen más parte fuera de la zona que dentro
//REVISAR
/*if (((com.GeomNiv != null) || (com.GeomZon != null)) &&
@ -113,76 +117,80 @@ namespace OliviaAddInPro.Services
///////////////////////////////////////////////////////////////////////////
//comprueba, si hay restricciones de circulación y hay instalación, que la instalación no está en ellas
if (!com.CoordsInstal.IsEmpty && (com.CoordsInstal.X!=0) && (com.GeomRestr != null))
{
if (!com.CoordsInstal.IsEmpty && (com.CoordsInstal.X != 0) && (com.GeomRestr != null))
{
Respuesta<bool> resp = HelperGdb.IsPtoInGeom(com.CoordsInstal, com.GeomRestr);
if (!resp.Value && resp.HasError)
{
ErrStr = "Error al comprobar si la instalación está contenida en el polígono de restricciones: " + resp.Error.ElementAt(0);
return false;
}
else if(resp.Value) //sí está contenido en las restricciones
{
else if (resp.Value) //sí está contenido en las restricciones
{
ErrStr = "Error, la instalación está en la zona restringida a la circulación ";
return false;
}
}
if (cps.CancellationTokenSource.IsCancellationRequested)
{
ErrStr = "Se ha cancelado la operación";
return false;
}
///////////////////////////////////////////////////////////////////////////
//exporta la red navegable (buffer, le quita las restr...)
//se obtiene la geometría a intersecar con la red, que será la que contiene
//a todos los ámbitos y la instalación, ampliada un buffer, mayor si hay
//restricciones de circulación
Geometry geom_aux = HelperGdb.BufferGeom(geom_export, com.BuffExport).Value;
if(geom_aux==null)
geom_export = HelperGdb.BufferGeom(geom_export, com.BuffExport).Value;
if (geom_export == null)
{
ErrStr = "Error al añadir buffer a la geometría";
return false;
}
//quita las restricciones
geom_aux = HelperGdb.QuitaGeom(geom_aux, com.GeomRestr);
if (geom_aux == null)
if (com.GeomRestr != null)
{
ErrStr = "Error al intersecar con las restricciones.";
return false;
}
geom_export = geom_aux;
//////////////////////////////////////////////////////////////
//comprueba si la geometría de exportación contiene a la instalación
if (!com.CoordsInstal.IsEmpty && (com.CoordsInstal.X != 0))
{
Respuesta<bool> resp = HelperGdb.IsPtoInGeom(com.CoordsInstal, geom_export);
if (!resp.Value) //si no lo contiene
geom_export = HelperGdb.QuitaGeom(geom_export, com.GeomRestr);
if (geom_export == null)
{
//ha ido mal
if (resp.HasError)
ErrStr = "Error al intersecar con las restricciones.";
return false;
}
}
//////////////////////////////////////////////////////////////
//comprueba si la geometría de exportación contiene a la instalación y a la planta de descarga
Coordinate2D[] coords = { com.CoordsInstal, com.CoordsPlanta };
for (int i = 0; i < coords.Length; i++)
{
if (!coords[i].IsEmpty && (coords[i].X != 0))
{
Respuesta<bool> resp = HelperGdb.IsPtoInGeom(coords[i], geom_export);
if (!resp.Value) //si no lo contiene
{
ErrStr = "Error al comprobar si la instalación está contenida en el polígono de exportación: " + resp.Error.ElementAt(0);
return false;
}
else
{
//amplía la geom
Respuesta<ArcGIS.Core.Geometry.Geometry> respGeom = HelperGdb.AddPtoInGeom(com.CoordsInstal, geom_export);
if (respGeom.Value == null)
//ha ido mal
if (resp.HasError)
{
//ha ido mal
if (resp.HasError)
ErrStr = resp.Error.ElementAt(0);
else
ErrStr = "Error al incluir punto de instalación en polígono de exportación.";
ErrStr = "Error al comprobar si la instalación está contenida en el polígono de exportación: " + resp.Error.ElementAt(0);
return false;
}
//actualiza la geometría
geom_export = respGeom.Value;
else
{
//amplía la geom
Respuesta<ArcGIS.Core.Geometry.Geometry> respGeom = HelperGdb.AddPtoInGeom(coords[i], geom_export);
if (respGeom.Value == null)
{
//ha ido mal
if (resp.HasError)
ErrStr = resp.Error.ElementAt(0);
else
ErrStr = "Error al incluir punto de instalación en polígono de exportación.";
return false;
}
//actualiza la geometría
geom_export = respGeom.Value;
}
}
}
}
//Hace el filtro con la geometría final
filtroEspacial = HelperGdb.CreateFiler(String.Empty, geom_export);
if (filtroEspacial == null)
@ -191,22 +199,22 @@ namespace OliviaAddInPro.Services
return false;
}
//Prepara naombre de exportación
com.ProgrSrc.IncMessage(60, "Exportando red navegable");
//Prepara nombre de exportación
com.NombreShpExportNw = prefNameExportNw + fechaHora + extShp;
//exporta los datos de entrada
string capaNw =OliviaGlob.Paths.PathGdbNw;
//if (!HelperGdb.ExportShp(capaNw, filtroEspacial, com.NombreShpExportNw, OliviaGlob.Paths.DirData, cps, out ErrStr))
if (!HelperGdb.ExportShp2(capaNw, filtroEspacial, com.NombreShpExportNw, OliviaGlob.Paths.DirData, cps))
string capaNw =System.IO.Path.Combine(OliviaGlob.Paths.PathGdbNw, OliviaGlob.Capas.ftclass_ejes);
if (!HelperGdb.ExportShp2(capaNw, filtroEspacial, com.NombreShpExportNw, OliviaGlob.Paths.DirData, com.ProgrSrc._ProgrSrc,40))
{
ErrStr = "Error al exportar la red navegable: " + HelperGdb.OutStr;
return false;
}
//guarda los nombres del shape
OliviaGlob.Paths.PathNW = OliviaGlob.Paths.DirData + com.NombreShpExportNw;
if (cps.CancellationTokenSource.IsCancellationRequested)
OliviaGlob.Paths.PathNW = OliviaGlob.Paths.DirData + com.NombreShpExportNw;
if (com.ProgrSrc._ProgrSrc.CancellationTokenSource.IsCancellationRequested)
{
ErrStr = "Se ha cancelado la operación";
ErrStr = Resource1.String_cancel_progreso;
return false;
}
}

View File

@ -27,7 +27,7 @@ namespace OliviaAddInPro.Services
* Modo 0, sectorizar
* Modo 1, planificar
*/
public TareaRes Ejecuta(ModosEjec modo, CancelableProgressorSource cps)
public TareaRes Ejecuta(ModosEjec modo)
{
var res = new TareaRes()
{
@ -35,10 +35,10 @@ namespace OliviaAddInPro.Services
data = null,
msg = ""
};
MyCancelableProgressorSource cps = limp.ProgrSrc;
com = (TratamientoComun)limp;
string nombFileAmbs = string.Empty;
cps.Status = "Preparando filtro para la exportacion";
//Prepara consulta
ErrStr = string.Empty;
if (!PreparaConsulta(out nombFileAmbs))
@ -46,15 +46,14 @@ namespace OliviaAddInPro.Services
res.msg= "No se ha seleccionado una consulta válida" + limp.ConsultaAmbs;
res.Errores = true;
return res;
}
cps.Value = 5;
}
//Prepara nombre
limp.NombreShpExp_PrefTto = "T" + limp.TipoTto.ToString("00") + nombFileAmbs + DameStrPoligs();
string msg = "";
//comienza ejecucion
if(!LanzaEjec(ModosEjec.Sectoriza, cps, out msg))
if(!LanzaEjec(modo, out msg))
{
res.Errores = true;
res.msg = msg;

View File

@ -18,6 +18,7 @@ namespace OliviaAddInPro.Services
public RecogidaServ(Recogida _reco)
{
reco = _reco;
RellenaFiltrosReco();
}
/*
@ -60,7 +61,7 @@ namespace OliviaAddInPro.Services
* Modo 0, sectorizar
* Modo 1, planificar
*/
public TareaRes Ejecuta(ModosEjec modo, CancelableProgressorSource cps)
public TareaRes Ejecuta(ModosEjec modo)
{
var res = new TareaRes()
{
@ -71,7 +72,7 @@ namespace OliviaAddInPro.Services
com = (TratamientoComun)reco;
string nombFileAmbs = string.Empty;
cps.Status = "Preparando filtro para la exportacion";
//Prepara consulta
ErrStr = string.Empty;
@ -80,8 +81,7 @@ namespace OliviaAddInPro.Services
res.msg = "No se ha seleccionado una consulta válida" + reco.ConsultaAmbs;
res.Errores = true;
return res;
}
cps.Value = 10;
}
//Prepara nombre
//Pone nombre al shape en función de los ámbitos, el tratamiento, y los polígonos + timestamp
@ -89,7 +89,7 @@ namespace OliviaAddInPro.Services
string msg = "";
//comienza ejecucion
if (!LanzaEjec(ModosEjec.Sectoriza, cps, out msg))
if (!LanzaEjec(modo, out msg))
{
res.Errores = true;
res.msg = msg;

View File

@ -173,8 +173,7 @@ namespace OliviaAddInPro
string err = "";
OliviaGlob.progrDialog.Show();
var progSrc = new CancelableProgressorSource(OliviaGlob.progrDialog);
OliviaGlob.progrDialog.Show();
if (!Lee(out err))
{
@ -183,7 +182,7 @@ namespace OliviaAddInPro
}
Action<TareaRes> ac = finEjecuta;
OliviaGlob.Limp.EjecutaAsync(modo, progSrc, ac);
OliviaGlob.Limp.EjecutaAsync(modo, ac);
}
public void finEjecuta(TareaRes res)
{

View File

@ -224,8 +224,7 @@ namespace OliviaAddInPro
public void Ejecuta(OliviaAddInPro.Services.ModosEjec modo)
{
string err = "";
OliviaGlob.progrDialog.Show();
var progSrc = new CancelableProgressorSource(OliviaGlob.progrDialog);
OliviaGlob.progrDialog.Show();
if (!Lee(out err))
{
HelperGlobal.ponMsg(err);
@ -233,7 +232,7 @@ namespace OliviaAddInPro
}
Action<TareaRes> ac = finEjecuta;
OliviaGlob.Reco.EjecutaAsync(modo, progSrc, ac);
OliviaGlob.Reco.EjecutaAsync(modo, ac);
}
public void finEjecuta(TareaRes res)