AE开发实例代码总结

发布时间 : 星期二 文章AE开发实例代码总结更新完毕开始阅读

流,管线等等.该对象在ArcGIS Engine中的模型图如下:

这并不意味着用户必须按照这种层次去构造polyline,实际上Point集合直接构成Polyline,组成Polyline的这些路径既可以是连续的,也可以是不连续的。

Polyline是有序path组成的集合,可以拥有M、Z和ID属性值,Polyline对象的IPointCollection接口包含了所有的节点信息,IGeometryCollection接口可以获取polyline的paths,ISegmentCollection接口可以获取 polyline的segments。

一个Polyline对象必须满足以下准则:

1.组成Polyline对象的所有Path对象必须是有效的。

2.组成Polyline对象的所有Path对象不能重合,相交或自相交。 3.组成Polyline对象的多个Path对象可以连接与某一点,也可以分离。 4.Path对象的长度不能为0.

IPolyline是Polyline类的主要接口,IPolyline的Reshape方法可以使用一个Path对象为一个Polyline对象整形,IPolyline的SimplifyNetwork方法用于简化网络。

Polyline对象可以使用IGeometryCollection接口添加Path对象的方法来创建,使用该接口需注意以下情况: 1.每一个Path对象必须是有效的,或使用IPath::Simplify方法后有效。

2.由于Polyline是Path对象的有序集合,所以添加Path对象时必须注意顺序和方向。

3.为了保证Polyline是有效的,可以创建完Polyline对象后使用ITopologicalOperator接口的Simplify方法。

下面代码片段演示了一个Polyline的构成:

private object pMissing = Type.Missing; public IGeometry GetPolylineGeometry() {

const double PathCount = 3; const double PathVertexCount = 3;

IGeometryCollection pGeometryCollection = new PolylineClass(); for (int i = 0; i < PathCount; i++) {

IPointCollection pPointCollection = new PathClass();

for (int j = 0; j < PathVertexCount; j++) {

pPointCollection.AddPoint(GetPoint(), ref pMissing, ref pMissing); }

pGeometryCollection.AddGeometry(pPointCollection as IGeometry, ref pMissing, ref pMissing); }

return pGeometryCollection as IGeometry; }

private IPoint GetPoint() {

const double Min = -10; const double Max = 10;

Random random = new Random();

double x = Min + (Max - Min) * random.NextDouble(); double y = Min + (Max - Min) * random.NextDouble(); return ConstructPoint(x, y); }

Segment,Path,Ring和Polyline的区别

在这四者当中Segment是最小的单位具体的构成路线可以分为两个条: Segment-Path-Ring(封闭的Path) Segment-Path-Polyline

我们可以这样说Segment是Path,只不过是这个Path由一个Segment组成,Ring也是一种Path,只不过是一个起点和终点重合的Path,至于Polyline那就很明显了,他们的区别可以从下图看出:

Polygon对象

Polylgon对象是由一个或多个Ring对象的有序集合,它可以是由单个Ring 对象构成,也可以使用多个Ring组成。Polygon通常用来代表有面积的多边形矢量对象,如行政区,建筑物等。Polygon的组成结构可以看下图:

从这个图上可以看出 Polygon是由Rings构成,而Ring又是又Segment构成,但是这并不意味着用户必须按照这种层次去构造Polygon,实际上用Point的集合可以构成Polygon.

///

/// 通过点构造面 ///

///

public IPolygon CreatePolygonByPoints(IPointCollection pPointCollection) {

IGeometryBridge2 pGeometryBridge2 = new GeometryEnvironmentClass(); IPointCollection4 pPolygon = new PolygonClass();

WKSPoint[] pWKSPoint = new WKSPoint[pPointCollection.PointCount]; for (int i = 0; i < pPointCollection.PointCount; i++) {

pWKSPoint[i].X = pPointCollection.get_Point(i).X; pWKSPoint[i].Y = pPointCollection.get_Point(i).Y; }

pGeometryBridge2.SetWKSPoints(pPolygon, ref pWKSPoint); IPolygon pPoly= pPolygon as IPolygon; pPoly.close(); return pPoly; }

组成Polygon的是Ring,其中Ring可以分为Outer Ring(外环)和Inner Ring(内环)之分。外环和内环都是有方向的,它们的区别是外环的方向是顺时针的,内环的方向是逆时针。

Polygon对象实现了一个接口IArea,而该接口用来对Poylgon的中心,重心,以及面积进行访问,下面片段用来获取Polygoe的面积: IArea pArea = pPolygon as IArea; Double S= pArea. Area

IGeometryCollection接口

通过IGeometryCollection创建一个Polygon对象的代码片段如下:

private IPolygon ConstructorPolygon(List pRingList) { try {

IGeometryCollection pGCollection = new PolygonClass(); object o = Type.Missing;

for (int i = 0; i < pRingList.Count; i++) {

//通过IGeometryCollection接口的AddGeometry方法向Polygon对象中添加Ring子对象 pGCollection.AddGeometry(pRingList[i], ref o, ref o); }

//QI至ITopologicalOperator

ITopologicalOperator pTopological = pGCollection as ITopologicalOperator; //执行Simplify操作 pTopological.Simplify();

IPolygon pPolygon = pGCollection as IPolygon; //返回Polygon对象 return pPolygon; }

联系合同范文客服:xxxxx#qq.com(#替换为@)