using ArcGIS.Core.Data; using ArcGIS.Core.Geometry; using OliviaAddInPro.Helper; using OliviaAddInPro.Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OliviaAddInPro.Services { public class LimpiezaServ { private Limpieza limp; public string ErrStr=""; public LimpiezaServ(Limpieza _limp) { limp = _limp; } /** * Prepara la geometría para exportar */ public Geometry GetGeomAmbitsExport() { Geometry geomAux = null; FeatureClass fc = HelperGdb.GetFtClass(limp.CapaElems); QueryFilter filtro = new QueryFilter { WhereClause = limp.ConsultaAmbs }; if(fc==null) { ErrStr = "No se ha podido abrir la clase " + limp.CapaElems; return null; } //comprueba que haya elementos que cumplen la consulta int nElem = HelperGdb.GetNumElems(fc, limp.ConsultaAmbs).Result; if(nElem<=0) { ErrStr = "No existen ámbitos que cumplan las condiciones dadas " + limp.ConsultaAmbs; return null; } //Primero hace la geometría de los ámbitos que cumplen la consulta geomAux = HelperGdb.GetGeomUnica(fc, filtro); if(geomAux==null || geomAux.IsEmpty) { ErrStr = "No se ha podido generar geometría de los ámbitos" + limp.ConsultaAmbs; return null; } //Hace la intersección de dicha geometría con las zonas if (limp.GeomZon != null) { geomAux = HelperGdb.IntersectGeom(geomAux, limp.GeomZon); if(geomAux==null) { ErrStr = "Error al intersecar con las zonas."; return null; } } //Hace la intersección de la geometría con los niveles if (limp.GeomNiv != null) { geomAux = HelperGdb.IntersectGeom(geomAux, limp.GeomNiv); if (geomAux == null) { ErrStr = "Error al intersecar con los niveles."; return null; } } //le quita las restricciones if (limp.GeomRestr != null) { geomAux = HelperGdb.QuitaGeom(geomAux, limp.GeomRestr); if (geomAux == null) { ErrStr = "Error al intersecar con las restricciones."; return null; } } return geomAux; } } }