Cambios y correcciones, sí, sigo con la exportación

ConfiguracionSimplificada
Elena 2022-02-08 21:43:31 +01:00
parent 492475fbdd
commit 84f012ad6c
10 changed files with 116 additions and 168 deletions

View File

@ -549,36 +549,21 @@ namespace OliviaAddInPro.Helper
* Forma la envolvente convexa, el mínimo polígono, * Forma la envolvente convexa, el mínimo polígono,
* que contiene los ámbitos para exportar, a partir de ahí la red navegable ampliando a un buffer * que contiene los ámbitos para exportar, a partir de ahí la red navegable ampliando a un buffer
*/ */
public static Task<ArcGIS.Core.Geometry.Geometry> GetGeomConvexHull(FeatureClass fclss, ArcGIS.Core.Data.QueryFilter filter, CancelableProgressorSource cps=null) public static Task<ArcGIS.Core.Geometry.Geometry> GetGeomConvexHull(FeatureClass fclss, ArcGIS.Core.Data.QueryFilter filter)
{ {
ArcGIS.Core.Geometry.Geometry geomIni = null; ArcGIS.Core.Geometry.Geometry geomIni = null;
return ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run((Func<ArcGIS.Core.Geometry.Geometry>)(() => return ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run((Func<ArcGIS.Core.Geometry.Geometry>)(() =>
{ {
geomIni = GetGeomUnique(fclss, filter, cps); geomIni = GetGeomUnique(fclss, filter);
return geomIni; return geomIni;
/*if (geomIni != null)
{
ArcGIS.Core.Geometry.Geometry geomSal = null;
try
{
geomSal = GeometryEngine.Instance.ConvexHull(geomIni);
return geomSal;
}
catch
{
return null;
}
}
else
return null;*/
})); }));
} }
/* /*
* A partir de una capa recorre todos los elementos que cumplen el filtro y los une en una única geometría * A partir de una capa recorre todos los elementos que cumplen el filtro y los une en una única geometría
*/ */
public static ArcGIS.Core.Geometry.Geometry GetGeomUnique(FeatureClass fclss, ArcGIS.Core.Data.QueryFilter filtro, CancelableProgressorSource cps) public static ArcGIS.Core.Geometry.Geometry GetGeomUnique(FeatureClass fclss, ArcGIS.Core.Data.QueryFilter filtro)
{ {
ArcGIS.Core.Geometry.Geometry geomsal = null; ArcGIS.Core.Geometry.Geometry geomsal = null;
ReiniciaOutStr(); ReiniciaOutStr();
@ -586,7 +571,6 @@ namespace OliviaAddInPro.Helper
try try
{ {
var geom = new List<ArcGIS.Core.Geometry.Geometry>(); var geom = new List<ArcGIS.Core.Geometry.Geometry>();
//geomSal = GeometryEngine.Instance.Union(f);
using (RowCursor rowCursor = fclss.Search(filtro)) using (RowCursor rowCursor = fclss.Search(filtro))
{ {
@ -595,9 +579,7 @@ namespace OliviaAddInPro.Helper
using (Row row = rowCursor.Current) using (Row row = rowCursor.Current)
{ {
if (row is Feature ft) if (row is Feature ft)
geom.Add(ft.GetShape()); geom.Add(ft.GetShape());
//geomsal = UneGeom(geomsal, ft.GetShape());
} }
} }
geomsal= GeometryEngine.Instance.Union(geom); geomsal= GeometryEngine.Instance.Union(geom);
@ -638,7 +620,7 @@ namespace OliviaAddInPro.Helper
{ {
where = $"{fieldName} = {Quote(f)}{selFieldVals[i]}{Quote(f)}"; where = $"{fieldName} = {Quote(f)}{selFieldVals[i]}{Quote(f)}";
filtro = new ArcGIS.Core.Data.QueryFilter { WhereClause = where }; filtro = new ArcGIS.Core.Data.QueryFilter { WhereClause = where };
geomAux = GetGeomUnique(fclss, filtro, null); geomAux = GetGeomUnique(fclss, filtro);
if(geomAux == null) if(geomAux == null)
{ {
ok = false; ok = false;
@ -1072,39 +1054,46 @@ namespace OliviaAddInPro.Helper
public static Respuesta<ArcGIS.Core.Geometry.Geometry> AddPtoInGeom(Coordinate2D pto, ArcGIS.Core.Geometry.Geometry geom) public static Respuesta<ArcGIS.Core.Geometry.Geometry> AddPtoInGeom(Coordinate2D pto, ArcGIS.Core.Geometry.Geometry geom)
{ {
Respuesta<ArcGIS.Core.Geometry.Geometry> resp = new Respuesta<ArcGIS.Core.Geometry.Geometry>(); Respuesta<ArcGIS.Core.Geometry.Geometry> resp = new Respuesta<ArcGIS.Core.Geometry.Geometry>();
double buffer = 100;//m de distancia desde la instalación double buffer = 0;//m de distancia desde la instalación
bool repite = true;
ArcGIS.Core.Geometry.Geometry geom_pto, geom_sal;
try try
{ {
ArcGIS.Core.Geometry.Geometry geom_pto = GeometryEngine.Instance.Buffer(pto.ToMapPoint(), buffer); do
if(geom_pto==null || geom_pto.IsEmpty)
{ {
resp.Value = null; buffer += 100;
resp.Error.Add("Error al bufferear punto para incluirlo en polígono"); geom_pto = GeometryEngine.Instance.Buffer(pto.ToMapPoint(), buffer);
return resp; if(geom_pto==null || geom_pto.IsEmpty)
{
resp.Value = null;
resp.Error.Add("Error al bufferear punto para incluirlo en polígono");
return resp;
}
//hace la convex hull, por si no fueran conexas las zonas
repite= GeometryEngine.Instance.Disjoint(geom_pto, geom);
/*if (geom_aux == null || geom_aux.IsEmpty)
{
ArcGIS.Core.Geometry.Envelope env1 = geom_sal.Extent;
ArcGIS.Core.Geometry.Envelope env2 = geom_pto.Extent;
ArcGIS.Core.Geometry.Envelope env3 = env1.Union(env2);
geom_sal = (ArcGIS.Core.Geometry.Geometry) env3;
//geom_sal = GeometryEngine.Instance.Envelope(geom_sal);
if (geom_sal == null || geom_sal.IsEmpty)
{
resp.Value = null;
resp.Error.Add("Error al hacer envolvente en unir punto al polígono");
return resp;
}
}*/
} }
ArcGIS.Core.Geometry.Geometry geom_sal = GeometryEngine.Instance.Union(geom_pto, geom); while (repite);
geom_sal = GeometryEngine.Instance.Union(geom_pto, geom);
if (geom_sal == null || geom_sal.IsEmpty) if (geom_sal == null || geom_sal.IsEmpty)
{ {
resp.Value = null; resp.Value = null;
resp.Error.Add("Error al unir punto a polígono"); resp.Error.Add("Error al unir punto a polígono");
return resp; return resp;
} }
//hace la convez hull, por si no fueran conexas las zonas
ArcGIS.Core.Geometry.Geometry geom_aux= GeometryEngine.Instance.Intersection(geom_pto, geom);
if (geom_aux == null || geom_aux.IsEmpty)
{
ArcGIS.Core.Geometry.Envelope env1 = geom_sal.Extent;
ArcGIS.Core.Geometry.Envelope env2 = geom_pto.Extent;
ArcGIS.Core.Geometry.Envelope env3 = env1.Union(env2);
geom_sal = (ArcGIS.Core.Geometry.Geometry) env3;
//geom_sal = GeometryEngine.Instance.Envelope(geom_sal);
if (geom_sal == null || geom_sal.IsEmpty)
{
resp.Value = null;
resp.Error.Add("Error al hacer envolvente en unir punto al polígono");
return resp;
}
}
resp.Value = geom_sal; resp.Value = geom_sal;
return resp; return resp;
} }

View File

@ -52,10 +52,7 @@ namespace OliviaAddInPro.Model
public TareaRes Ejecuta(ModosEjec modo, CancelableProgressorSource cps) public TareaRes Ejecuta(ModosEjec modo, CancelableProgressorSource cps)
{ {
TareaRes res = null; TareaRes res = null;
if (modo == ModosEjec.Sectoriza) res = Serv.Ejecuta(modo, cps);
res = Serv.Sectoriza(cps);
else if (modo == ModosEjec.Planifica)
res = Serv.Planifica(cps);
return res; return res;
} }
public async void EjecutaAsync(ModosEjec modo, CancelableProgressorSource cps, Action<TareaRes> ffin) public async void EjecutaAsync(ModosEjec modo, CancelableProgressorSource cps, Action<TareaRes> ffin)

View File

@ -82,12 +82,9 @@ namespace OliviaAddInPro.Model
public TareaRes Ejecuta(ModosEjec modo, CancelableProgressorSource cps) public TareaRes Ejecuta(ModosEjec modo, CancelableProgressorSource cps)
{ {
TareaRes res = null; TareaRes res = null;
if (modo == ModosEjec.Sectoriza) res = Serv.Ejecuta(modo, cps);
res = Serv.Sectoriza(cps);
else if (modo == ModosEjec.Planifica)
res = Serv.Planifica(cps);
return res; return res;
} }
public async void EjecutaAsync(ModosEjec modo, CancelableProgressorSource cps, Action<TareaRes> ffin) public async void EjecutaAsync(ModosEjec modo, CancelableProgressorSource cps, Action<TareaRes> ffin)
{ {

View File

@ -40,6 +40,13 @@ namespace OliviaAddInPro.Services
ErrStr = string.Empty; ErrStr = string.Empty;
try try
{ {
//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 //Cuenta las filas que cumplen la consulta
int nelems = HelperGdb.GetNumElems(com.CapaElems, com.ConsultaAmbs); int nelems = HelperGdb.GetNumElems(com.CapaElems, com.ConsultaAmbs);
if (nelems <= 0) if (nelems <= 0)
@ -52,7 +59,7 @@ namespace OliviaAddInPro.Services
//Obtiene la geometría que envuelve a los ámbitos //Obtiene la geometría que envuelve a los ámbitos
Geometry geom_export = null; Geometry geom_export = null;
geom_export = GetGeomAmbitsExport(cps); geom_export = GetGeomAmbitsExport();
if (geom_export == null || geom_export.IsEmpty) if (geom_export == null || geom_export.IsEmpty)
{ {
ErrStr = "No se ha podido generar geometría de los ámbitos" + com.ConsultaAmbs + ErrStr; ErrStr = "No se ha podido generar geometría de los ámbitos" + com.ConsultaAmbs + ErrStr;
@ -212,7 +219,7 @@ namespace OliviaAddInPro.Services
/** /**
* Prepara la geometría para exportar los ámbitos * Prepara la geometría para exportar los ámbitos
*/ */
public Geometry GetGeomAmbitsExport(CancelableProgressorSource cps) public Geometry GetGeomAmbitsExport()
{ {
Geometry geomAux = null; Geometry geomAux = null;
Geometry geomAmbits = null; Geometry geomAmbits = null;
@ -247,14 +254,13 @@ namespace OliviaAddInPro.Services
ErrStr = "Al emplear ejes de calle como ámbitos es necesario indicar polígono de exportación"; ErrStr = "Al emplear ejes de calle como ámbitos es necesario indicar polígono de exportación";
return null; return null;
} }
cps.Value = 30;
//prepara el filtro con consulta y espacial //prepara el filtro con consulta y espacial
SpatialQueryFilter filtro = HelperGdb.CreateFiler(com.ConsultaAmbs, geomAux); SpatialQueryFilter filtro = HelperGdb.CreateFiler(com.ConsultaAmbs, geomAux);
if (geomAux == null) if (geomAux == null)
{ {
//Ahora hace la geometría de los ámbitos que cumplen la consulta, si no hay ya geometría //Ahora hace la geometría de los ámbitos que cumplen la consulta, si no hay ya geometría
geomAmbits = HelperGdb.GetGeomConvexHull(fc, filtro, cps).Result; geomAmbits = HelperGdb.GetGeomConvexHull(fc, filtro).Result;
if (geomAmbits == null || geomAmbits.IsEmpty) if (geomAmbits == null || geomAmbits.IsEmpty)
{ {
ErrStr = "No se ha podido generar geometría de los ámbitos" + com.ConsultaAmbs + HelperGdb.OutStr; ErrStr = "No se ha podido generar geometría de los ámbitos" + com.ConsultaAmbs + HelperGdb.OutStr;
@ -262,7 +268,6 @@ namespace OliviaAddInPro.Services
} }
geomAux = geomAmbits; geomAux = geomAmbits;
} }
cps.Value = 60;
//le quita las restricciones //le quita las restricciones
if (com.GeomRestr != null) if (com.GeomRestr != null)
{ {
@ -273,7 +278,6 @@ namespace OliviaAddInPro.Services
return null; return null;
} }
} }
cps.Value = 75;
HelperGdb.Free(fc); HelperGdb.Free(fc);
return geomAux; return geomAux;
} }
@ -333,6 +337,21 @@ namespace OliviaAddInPro.Services
return CompruebaCampos(pathCapa, camps) == 0; return CompruebaCampos(pathCapa, camps) == 0;
} }
/**
* Comprueba lo necesario para ver si hay campos para la planificación
*/
public bool CompruebaPlanif()
{
//si ha importado no hace falta que compruebe, seguro que las tiene
if (OliviaGlob.IsConfig2())
return true;
//no ha importado, comprueba capa
if (ComprCamposPlanif(com.CapaElems))
return true;
return false;
}
/** /**
* Borra los archivos exportados para el proceso * Borra los archivos exportados para el proceso
*/ */

View File

@ -27,7 +27,7 @@ namespace OliviaAddInPro.Services
* Modo 0, sectorizar * Modo 0, sectorizar
* Modo 1, planificar * Modo 1, planificar
*/ */
public TareaRes Sectoriza(CancelableProgressorSource cps) public TareaRes Ejecuta(ModosEjec modo, CancelableProgressorSource cps)
{ {
var res = new TareaRes() var res = new TareaRes()
{ {
@ -74,36 +74,7 @@ namespace OliviaAddInPro.Services
return false; return false;
} }
return true; return true;
} }
public TareaRes Planifica(CancelableProgressorSource cps)
{
TareaRes res = new TareaRes()
{
Errores = false,
msg = "",
data = null
};
//se asegura que tiene todo para planif
//ErrStr = string.Empty;
if (!CompruebaPlanif())
{
res.msg = "En la capa de ámbitos seleccionada no se encuentran columnas de SECTOR y/o SECUENCIA, necesarias para planificar";
res.Errores = true;
return res;
}
//Prepara consulta
string nombFileAmbs = string.Empty;
//Prepara consulta
if (!PreparaConsulta(out nombFileAmbs))
{
res.msg = "No se ha seleccionado una consulta válida" + limp.ConsultaAmbs;
res.Errores = true;
return res;
}
return res;
}
public string DameAmbsConsulta(out string ambs_file) public string DameAmbsConsulta(out string ambs_file)
{ {
@ -134,9 +105,9 @@ namespace OliviaAddInPro.Services
/** /**
* Comprueba lo necesario para ver si hay campos para la planificación * Comprueba lo necesario para ver si hay campos para la planificación
*/ */
public bool CompruebaPlanif() public bool CompruebaPlanif2()
{ {
//NO SE USA AQUÍ, ESTÁ EN EJECSERV
//si ha importado no hace falta que compruebe, seguro que las tiene //si ha importado no hace falta que compruebe, seguro que las tiene
if (OliviaGlob.IsConfig2()) if (OliviaGlob.IsConfig2())
return true; return true;

View File

@ -60,7 +60,7 @@ namespace OliviaAddInPro.Services
* Modo 0, sectorizar * Modo 0, sectorizar
* Modo 1, planificar * Modo 1, planificar
*/ */
public TareaRes Sectoriza(CancelableProgressorSource cps) public TareaRes Ejecuta(ModosEjec modo, CancelableProgressorSource cps)
{ {
var res = new TareaRes() var res = new TareaRes()
{ {
@ -85,7 +85,6 @@ namespace OliviaAddInPro.Services
//Prepara nombre //Prepara nombre
//Pone nombre al shape en función de los ámbitos, el tratamiento, y los polígonos + timestamp //Pone nombre al shape en función de los ámbitos, el tratamiento, y los polígonos + timestamp
//REVISAR PARA RECO
reco.NombreShpExp_PrefTto = nombFileAmbs + DameStrPoligs(); reco.NombreShpExp_PrefTto = nombFileAmbs + DameStrPoligs();
string msg = ""; string msg = "";
@ -111,75 +110,43 @@ namespace OliviaAddInPro.Services
} }
return true; return true;
} }
public TareaRes Planifica(CancelableProgressorSource cps) public string DameAmbsConsulta(out string cap_abrev)
{ {
TareaRes res = new TareaRes() string consulta, orstr, aux;
consulta = null;
cap_abrev = "";
aux = "";
orstr = null;
if (reco.TipoFrac != -1)
{ {
Errores = false, consulta = consulta + orstr + "(" + RecogidaDef.filtro_str[reco.TipoFrac] + ")";
msg = "", cap_abrev = reco.TipoFrac.ToString("00");
data = null cap_abrev = "F" + cap_abrev + "_";
};/* if (consulta == "()")
//se asegura que tiene todo para planif consulta = "";
//ErrStr = string.Empty;
if (!CompruebaPlanif())
{
res.msg = "En la capa de ámbitos seleccionada no se encuentran columnas de SECTOR y/o SECUENCIA, necesarias para planificar";
res.Errores = true;
return res;
} }
//Prepara consulta if (orstr == null)
string nombFileAmbs = string.Empty; orstr = " AND ";
//Prepara consulta if (reco.TipoCarg != -1)
if (!PreparaConsulta(out nombFileAmbs))
{ {
res.msg = "No se ha seleccionado una consulta válida" + reco.ConsultaAmbs; consulta = consulta + orstr + "(" + RecogidaDef.filtro_str[RecogidaDef.tipos_fracc_str.Length + reco.TipoCarg] + ")";
res.Errores = true; aux = reco.TipoCarg.ToString("00");
return res; cap_abrev = cap_abrev + "C" + aux;
}*/ if (consulta == "()")
consulta = "";
return res; }
} if (reco.TipoLate > 0)
public string DameAmbsConsulta(out string ambs_file) {
{ consulta = consulta + orstr + "(" + RecogidaDef.campos_def.cons_lateral + " = '" + RecogidaDef.tipos_lateralidad[reco.TipoLate] + "'" + ")";
string consulta, orstr; if (consulta == "()")
consulta = "";
consulta = string.Empty;
ambs_file = "";
/*orstr = null;
var n = reco.AmbitosSel.Length;
for (int i = 0; i < n; i++)
{
if (limp.AmbitosSel[i])
{
consulta = consulta + orstr + "(" + LimpiezaDef.filtro_str[i] + ")";
ambs_file = ambs_file + i.ToString("00");
if (orstr == null)
orstr = " OR ";
}
} }
ambs_file = "_A" + ambs_file;
if (consulta == "()")
consulta = "";
*/
return consulta; return consulta;
} }
/**
* Comprueba lo necesario para ver si hay campos para la planificación
*/
public bool CompruebaPlanif()
{
//si ha importado no hace falta que compruebe, seguro que las tiene
if (OliviaGlob.IsConfig2())
return true;
//no ha importado, comprueba capa
if (ComprCamposPlanif(reco.CapaElems))
return true;
return false;
}
/** /**
* Rellena el array de filtros en base a la config * Rellena el array de filtros en base a la config
*/ */

View File

@ -28,17 +28,25 @@ namespace OliviaAddInPro
private void button_secto_Click(object sender, RoutedEventArgs e) private void button_secto_Click(object sender, RoutedEventArgs e)
{ {
if (DataContext is PaneLimpiezaViewModel mod) if (DataContext is PaneLimpiezaViewModel modlimp)
{ {
mod.Ejecuta(OliviaAddInPro.Services.ModosEjec.Sectoriza); modlimp.Ejecuta(OliviaAddInPro.Services.ModosEjec.Sectoriza);
}
else if(DataContext is PaneRecogidaViewModel modrec)
{
modrec.Ejecuta(OliviaAddInPro.Services.ModosEjec.Planifica);
} }
} }
private void button_planif_Click(object sender, RoutedEventArgs e) private void button_planif_Click(object sender, RoutedEventArgs e)
{ {
if (DataContext is PaneLimpiezaViewModel mod) if (DataContext is PaneLimpiezaViewModel modlimp)
{ {
mod.Ejecuta(OliviaAddInPro.Services.ModosEjec.Planifica); modlimp.Ejecuta(OliviaAddInPro.Services.ModosEjec.Planifica);
}
else if (DataContext is PaneRecogidaViewModel modrec)
{
modrec.Ejecuta(OliviaAddInPro.Services.ModosEjec.Planifica);
} }
} }

View File

@ -155,7 +155,7 @@ namespace OliviaAddInPro
ArcGIS.Core.Geometry.Geometry geomsal = HelperGdb.OpenGeom(HelperGdb.TiposOpenFileDlg.OpenFtrClassPoint,out texto); ArcGIS.Core.Geometry.Geometry geomsal = HelperGdb.OpenGeom(HelperGdb.TiposOpenFileDlg.OpenFtrClassPoint,out texto);
if ((DataContext is PaneRecogidaSub1ViewModel mod) && geomsal != null && geomsal is MapPoint mp) if ((DataContext is PaneRecogidaSub1ViewModel mod) && geomsal != null)
{ {
if (geomsal is MapPoint map) if (geomsal is MapPoint map)
mod.CoordsPlanta = map.Coordinate2D; mod.CoordsPlanta = map.Coordinate2D;

View File

@ -176,7 +176,6 @@ namespace OliviaAddInPro
OliviaGlob.progrDialog.Show(); OliviaGlob.progrDialog.Show();
var progSrc = new CancelableProgressorSource(OliviaGlob.progrDialog); var progSrc = new CancelableProgressorSource(OliviaGlob.progrDialog);
if (!Lee(out err)) if (!Lee(out err))
{ {
HelperGlobal.ponMsg(err); HelperGlobal.ponMsg(err);

View File

@ -101,9 +101,7 @@ namespace OliviaAddInPro
err_str = "No se ha seleccionado ninguna Capa de Limpieza"; err_str = "No se ha seleccionado ninguna Capa de Limpieza";
return false; return false;
} }
reco.CapaElems = _subPanel1ViewModel.CapaElems; reco.CapaElems = _subPanel1ViewModel.CapaElems;
reco.TipoTto = reco.TipoFrac;
reco.TipoTtoStr= RecogidaDef.tipos_fracc_str[reco.TipoFrac];
//lee la fracción //lee la fracción
reco.TipoFrac = _subPanel1ViewModel.TipoFrac; reco.TipoFrac = _subPanel1ViewModel.TipoFrac;
if (reco.TipoFrac == -1) if (reco.TipoFrac == -1)
@ -112,6 +110,8 @@ namespace OliviaAddInPro
return false; return false;
} }
reco.TipoFracStr = RecogidaDef.tipos_fracc_str[reco.TipoFrac]; reco.TipoFracStr = RecogidaDef.tipos_fracc_str[reco.TipoFrac];
reco.TipoTto = reco.TipoFrac;
reco.TipoTtoStr = RecogidaDef.tipos_fracc_str[reco.TipoFrac];
//lee la densidad del contenedor //lee la densidad del contenedor
//si se ha seleccionado que se recogen los contenedores llenos hay que comprobar que se ha rellenado la densidad de los contenedores //si se ha seleccionado que se recogen los contenedores llenos hay que comprobar que se ha rellenado la densidad de los contenedores
@ -213,6 +213,7 @@ namespace OliviaAddInPro
} }
catch catch
{ {
err_str = "Error al leer ventana de descarga: "+ err_str;
return false; return false;
} }
} }