using System;
using System.Collections.Generic;
using System.Text;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.esriSystem;
using System.Runtime.InteropServices;
using KGIS.Framework.AE.GaussCalculate;
namespace Kingo.Plugin.General.Helper
{
///
/// 计算椭球面积入口
///
public class ATEllipseArea
{
//private ISpatialReference pSpatialReference;
public ATEllipseArea() { }
///
/// 获得单个多边形椭球面积
///
/// 多边形
/// 该多边形面积
public static double GetPolygonArea(IPolygon pIPolygon)
{
try
{
// 1、获得投影
String SphName = pIPolygon.SpatialReference.Name.ToString().ToUpper();
// 2、获得椭球
ICoordinate coordinate = CoordinateFactory.CreateCoordinate();
if (SphName.Contains("XIAN_1980") || SphName.Contains("XIAN1980"))
{
coordinate = CoordinateFactory.CreateCoordinate((KGIS.Framework.AE.GaussCalculate.Spheroid)KGIS.Framework.AE.GaussCalculate.Spheroid.SphXian80);
}
else if (SphName.Contains("BEIJING_1954") || SphName.Contains("BEIJING1954"))
{
coordinate = CoordinateFactory.CreateCoordinate((KGIS.Framework.AE.GaussCalculate.Spheroid)KGIS.Framework.AE.GaussCalculate.Spheroid.SphBeijing54);
}
else if (SphName.Contains("WGS_1984") || SphName.Contains("WGS1984"))
{
coordinate = CoordinateFactory.CreateCoordinate((KGIS.Framework.AE.GaussCalculate.Spheroid)KGIS.Framework.AE.GaussCalculate.Spheroid.SphWGS84);
}
else if (SphName.Contains("CGCS_2000") || SphName.Contains("CGCS2000"))
{
coordinate = CoordinateFactory.CreateCoordinate((KGIS.Framework.AE.GaussCalculate.Spheroid)KGIS.Framework.AE.GaussCalculate.Spheroid.SphCGCS2000);
}
else
{
return -1;
}
// 3、计算面积
IGeometry pGeometry = pIPolygon as IGeometry;
double PolygonArea = 0.0;
// 4、保留两位小数
double a = coordinate.CalculateTerranArea(pGeometry);
PolygonArea = Math.Round(a, 2, MidpointRounding.AwayFromZero);
return PolygonArea;
}
catch (Exception ex)
{
throw ex;
}
}
}
}