ArcGIS Engine二次开发——计算shapefile面图层要素的面积
http://blog.csdn.net/giselite/article/details/44750349
全部都应该学会看AE的类图和帮助,尤其是类图,在安装目录下的Diagram目录里,看多了自然就会得心应手。废话不多说了,下面是我写的一段试验代码
,公布一下,希望能帮助那些有需求的童鞋,给他们节省点时间。
using System.Runtime;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.Geometry;
private void Form1_Click(object sender, EventArgs e)
{
IWorkspaceFactory pWSF = null;
double dArea = 0;
try
{
pWSF = new ShapefileWorkspaceFactoryClass();
IFeatureWorkspace pWS = pWSF.OpenFromFile(@"H:\水体淹没面积", 0) as IFeatureWorkspace;
IFeatureClass pFC = pWS.OpenFeatureClass("水体淹没面积专题.shp");
IFeatureCursor pFeatureCur = pFC.Search(null, false);
IFeature pFeature = pFeatureCur.NextFeature();
while (pFeature != null)
{
if (pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon)
{
IArea pArea = pFeature.Shape as IArea;
dArea = dArea + pArea.Area;
}
pFeature = pFeatureCur.NextFeature();
}
Marshal.ReleaseComObject(pFeatureCur);
}
catch (System.Exception ex)
{
}
Marshal.ReleaseComObject(pWSF);
}
========
6.5 IProximityOperator接口
http://www.cnblogs.com/gisoracle/archive/2012/03/28/2420706.html
6.5.1 IProximityOperator接口简介
IProximityOperator接口用于获取两个几何图形的距离,以及给定一个 Point,求另一个几何图形上离离给定点最近的点。IProximityOperator接口的主
要方法有:QueryNearesPoint,ReturnDistance, ReturnNearestPoint
ReturnDistance方法用于返回两个几何对象间的最短距离,QueryNearesPoint方法用于查询获取几何对象上离给定输入点的最近距离的点的引用,
ReturnNearestPoint方法用于创建并返回几何对象上离给定输入点的最近距离的点。
6.5.2 最近点查询功能开发
以下代码片段演示如何使用IProximityOperator接口获取给定点与要查询的几何图形的最近点:
/// 在pGeometry上返回一个离pInputPoint最近的point
///
///
给定的点对象
///
要查询的几何图形
///
the nearest Point
private IPoint NearestPoint(IPoint pInputPoint, IGeometry pGeometry)
{
try
{
IProximityOperator pProximity = (IProximityOperator)pGeometry;
IPoint pNearestPoint = pProximity.ReturnNearestPoint(pInputPoint, esriSegmentExtension.esriNoExtension);
return pNearestPoint;
}
catch(Exception Err)
{
MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return null;
}
}
复制代码
以下代码片段演示如何使用IProximityOperator接口查询给定的两个几何对象的距离:
///
/// 获取两个几何图形的距离
///
///
几何图形A
///
几何图形B
///
两个几何图形的距离
private double GetTwoGeometryDistance(IGeometry pGeometryA, IGeometry pGeometryB)
{
IProximityOperator pProOperator = pGeometryA as IProximityOperator;
if (pGeometryA!=null|| pGeometryB !=null)
{
double distance= pProOperator.ReturnDistance(pGeometryB);
return distance;
}
else
{
return 0;
}
}
========
空间关系(计算两点间距离、计算范围)
http://xitong.iteye.com/blog/1715755
计算两点间距离
1 ///
计算两点间距离
2 ///
3 ///
4 ///
5 ///
6 public static double getDistanceOfTwoPoints(ESRI.ArcGIS.Geometry.IPoint point1, ESRI.ArcGIS.Geometry.IPoint point2)
7 {
8 return Math.Sqrt((point1.X - point2.X) * (point1.X - point2.X) + (point1.Y - point2.Y) * (point1.Y - point2.Y));
9 }
feature平移
1 IGeometry geo=feature.Shape;
2 ((ITransform2D)geo).Move(20,20);
计算范围
得到点集合的n倍Envelope范围
1 ///
得到点集合的n倍Envelope范围
2 ///
3 ///
4 ///
5 ///
6 public static IEnvelope getBigEnvelope(IPointCollection points, double zoomInNumber)
7 {
8 IEnvelope result = new EnvelopeClass();
9
10 double xmax = 0, xmin = 999999999999, ymax = 0, ymin = 999999999999;
11
12 for (int i = 0; i < points.PointCount; i++)
13 {
14 ESRI.ArcGIS.Geometry.IPoint p = points.get_Point(i);
15 if (xmax < p.X) xmax = p.X;
16 if (ymax < p.Y) ymax = p.Y;
17 if (xmin > p.X) xmin = p.X;
18 if (ymin > p.Y) ymin = p.Y;
19 }
20 result.XMax = xmax + xmax - xmin;
21 result.XMin = xmin - xmax + xmin;
22 result.YMax = ymax + ymax - ymin;
23 result.YMin = ymin - ymax + ymin;
24
25 return result;
26 }
========