OliviaAddInPro/Services/LimpiezaServ.cs

89 lines
2.7 KiB
C#

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