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,
* 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;
return ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run((Func<ArcGIS.Core.Geometry.Geometry>)(() =>
{
geomIni = GetGeomUnique(fclss, filter, cps);
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;*/
geomIni = GetGeomUnique(fclss, filter);
return geomIni;
}));
}
/*
* 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;
ReiniciaOutStr();
@ -586,7 +571,6 @@ namespace OliviaAddInPro.Helper
try
{
var geom = new List<ArcGIS.Core.Geometry.Geometry>();
//geomSal = GeometryEngine.Instance.Union(f);
using (RowCursor rowCursor = fclss.Search(filtro))
{
@ -595,9 +579,7 @@ namespace OliviaAddInPro.Helper
using (Row row = rowCursor.Current)
{
if (row is Feature ft)
geom.Add(ft.GetShape());
//geomsal = UneGeom(geomsal, ft.GetShape());
geom.Add(ft.GetShape());
}
}
geomsal= GeometryEngine.Instance.Union(geom);
@ -638,7 +620,7 @@ namespace OliviaAddInPro.Helper
{
where = $"{fieldName} = {Quote(f)}{selFieldVals[i]}{Quote(f)}";
filtro = new ArcGIS.Core.Data.QueryFilter { WhereClause = where };
geomAux = GetGeomUnique(fclss, filtro, null);
geomAux = GetGeomUnique(fclss, filtro);
if(geomAux == null)
{
ok = false;
@ -1072,39 +1054,46 @@ namespace OliviaAddInPro.Helper
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>();
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
{
ArcGIS.Core.Geometry.Geometry geom_pto = GeometryEngine.Instance.Buffer(pto.ToMapPoint(), buffer);
if(geom_pto==null || geom_pto.IsEmpty)
do
{
resp.Value = null;
resp.Error.Add("Error al bufferear punto para incluirlo en polígono");
return resp;
buffer += 100;
geom_pto = GeometryEngine.Instance.Buffer(pto.ToMapPoint(), buffer);
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)
{
resp.Value = null;
resp.Error.Add("Error al unir punto a polígono");
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;
return resp;
}

View File

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

View File

@ -40,6 +40,13 @@ namespace OliviaAddInPro.Services
ErrStr = string.Empty;
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
int nelems = HelperGdb.GetNumElems(com.CapaElems, com.ConsultaAmbs);
if (nelems <= 0)
@ -52,7 +59,7 @@ namespace OliviaAddInPro.Services
//Obtiene la geometría que envuelve a los ámbitos
Geometry geom_export = null;
geom_export = GetGeomAmbitsExport(cps);
geom_export = GetGeomAmbitsExport();
if (geom_export == null || geom_export.IsEmpty)
{
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
*/
public Geometry GetGeomAmbitsExport(CancelableProgressorSource cps)
public Geometry GetGeomAmbitsExport()
{
Geometry geomAux = 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";
return null;
}
cps.Value = 30;
//prepara el filtro con consulta y espacial
SpatialQueryFilter filtro = HelperGdb.CreateFiler(com.ConsultaAmbs, geomAux);
if (geomAux == null)
{
//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)
{
ErrStr = "No se ha podido generar geometría de los ámbitos" + com.ConsultaAmbs + HelperGdb.OutStr;
@ -262,7 +268,6 @@ namespace OliviaAddInPro.Services
}
geomAux = geomAmbits;
}
cps.Value = 60;
//le quita las restricciones
if (com.GeomRestr != null)
{
@ -273,7 +278,6 @@ namespace OliviaAddInPro.Services
return null;
}
}
cps.Value = 75;
HelperGdb.Free(fc);
return geomAux;
}
@ -333,6 +337,21 @@ namespace OliviaAddInPro.Services
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
*/

View File

@ -27,7 +27,7 @@ namespace OliviaAddInPro.Services
* Modo 0, sectorizar
* Modo 1, planificar
*/
public TareaRes Sectoriza(CancelableProgressorSource cps)
public TareaRes Ejecuta(ModosEjec modo, CancelableProgressorSource cps)
{
var res = new TareaRes()
{
@ -74,36 +74,7 @@ namespace OliviaAddInPro.Services
return false;
}
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)
{
@ -134,9 +105,9 @@ namespace OliviaAddInPro.Services
/**
* 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
if (OliviaGlob.IsConfig2())
return true;

View File

@ -60,7 +60,7 @@ namespace OliviaAddInPro.Services
* Modo 0, sectorizar
* Modo 1, planificar
*/
public TareaRes Sectoriza(CancelableProgressorSource cps)
public TareaRes Ejecuta(ModosEjec modo, CancelableProgressorSource cps)
{
var res = new TareaRes()
{
@ -85,7 +85,6 @@ namespace OliviaAddInPro.Services
//Prepara nombre
//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();
string msg = "";
@ -111,75 +110,43 @@ namespace OliviaAddInPro.Services
}
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,
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;
consulta = consulta + orstr + "(" + RecogidaDef.filtro_str[reco.TipoFrac] + ")";
cap_abrev = reco.TipoFrac.ToString("00");
cap_abrev = "F" + cap_abrev + "_";
if (consulta == "()")
consulta = "";
}
//Prepara consulta
string nombFileAmbs = string.Empty;
//Prepara consulta
if (!PreparaConsulta(out nombFileAmbs))
if (orstr == null)
orstr = " AND ";
if (reco.TipoCarg != -1)
{
res.msg = "No se ha seleccionado una consulta válida" + reco.ConsultaAmbs;
res.Errores = true;
return res;
}*/
return res;
}
public string DameAmbsConsulta(out string ambs_file)
{
string consulta, orstr;
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 ";
}
consulta = consulta + orstr + "(" + RecogidaDef.filtro_str[RecogidaDef.tipos_fracc_str.Length + reco.TipoCarg] + ")";
aux = reco.TipoCarg.ToString("00");
cap_abrev = cap_abrev + "C" + aux;
if (consulta == "()")
consulta = "";
}
if (reco.TipoLate > 0)
{
consulta = consulta + orstr + "(" + RecogidaDef.campos_def.cons_lateral + " = '" + RecogidaDef.tipos_lateralidad[reco.TipoLate] + "'" + ")";
if (consulta == "()")
consulta = "";
}
ambs_file = "_A" + ambs_file;
if (consulta == "()")
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
*/

View File

@ -28,17 +28,25 @@ namespace OliviaAddInPro
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)
{
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);
if ((DataContext is PaneRecogidaSub1ViewModel mod) && geomsal != null && geomsal is MapPoint mp)
if ((DataContext is PaneRecogidaSub1ViewModel mod) && geomsal != null)
{
if (geomsal is MapPoint map)
mod.CoordsPlanta = map.Coordinate2D;

View File

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

View File

@ -101,9 +101,7 @@ namespace OliviaAddInPro
err_str = "No se ha seleccionado ninguna Capa de Limpieza";
return false;
}
reco.CapaElems = _subPanel1ViewModel.CapaElems;
reco.TipoTto = reco.TipoFrac;
reco.TipoTtoStr= RecogidaDef.tipos_fracc_str[reco.TipoFrac];
reco.CapaElems = _subPanel1ViewModel.CapaElems;
//lee la fracción
reco.TipoFrac = _subPanel1ViewModel.TipoFrac;
if (reco.TipoFrac == -1)
@ -112,6 +110,8 @@ namespace OliviaAddInPro
return false;
}
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
//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
{
err_str = "Error al leer ventana de descarga: "+ err_str;
return false;
}
}