출처: Geospatial Analysis and Resource Center (http://onspatial.com/) 입니다.
ArcObjects Geomtery 관련 인터페이스 중 Geometry를 핸들링하는 가장 중요한중요한 인터페이스가 무엇일까? 선택하라면 아마도 ITopologicalOperator, IRelationalOperator, IProximityOperator일 것이다.
ITopologicalOperator 인터페이스는 기존 Geometry간의간의 위상관계를 바탕으로 새로운 Geometry를 생성하기 위한 멤버 접근을 제공한다.
▣ Remarks
- GeometryBags은 Buffer, Clip,Clip, Simplify만 지원한다.
- High-level Geometry(point, multipoint, polyline, polygon)에만 적용되어야 한다.한다.
- ITopologicalOperator를 사용할사용할 때 Spatial reference를 설정해 주는 것이 성능면에서 효율적이다. 특히 circular arcs, bezier curves,curves, elliptical arcs의 경우에는 더욱 그렇다.
- 9.3 버전 이후에서 ITopologicalOperator5 인터페이스로인터페이스로 대체 및 최신 버전 사용 권장
▣ CoClasses that implement ITopologicalOperator
- GeometryBag, MultiPatch, Multipoint, Point, Polygon, Polyline
- esriDefenseSolutions: GeoEllipse,GeoEllipse, GeoPolygon, GeoPolyline
▣ Members
○ Boundary
[C#]
public IGeometry Boundary {get;}{get;}
Boundary는 GeometryGeometry 의 exterior의 한 부분으로 원본 Geometry의 차원보다 한 차원 낮다.
즉,즉, Polygon의 Boundary는 Polygon의 Ring을 구성하는 Polyline, Polyline의 Boundary는 Polyline을 구성하는 각 Path의 끝점들로 구성된 Multipoint, Multipoint의 Boundary는 Empty이다.
○ Buffer
[C#]
public IGeometry Buffer (double distance);distance);
버퍼 거리는 shape과 같은 단위로 버퍼에 적용된다.
Polygon에서 음수값의 거리는 내부 버퍼를버퍼를 수행하며 Polyline에서는 적용되지적용되지 않는다.
01.
02.IPoint basePoint = new ESRI.ArcGIS.Geometry.PointClass();
03.basePoint.PutCoords(0, 0);
04.
05.
06.ITopologicalOperator topoOpt = (ITopologicalOperator)basePoint;
07.IPolygon bufferPolygon = (IPolygon)topoOpt.Buffer(100.0);
08.IArea baseArea = (IArea)bufferPolygon;
09.System.Diagnostics.Debug.WriteLine(baseArea.Area);
10.
11.
12.topoOpt = (ITopologicalOperator)bufferPolygon;
13.IPolyline boundaryLine = (IPolyline)topoOpt.Boundary;
14.System.Diagnostics.Debug.WriteLine(boundaryLine.Length);
○ ConstructUnion
[C#]
public void ConstructUnion (IEnumGeometry geometries);
ConstructUnion은 동일한 차원의차원의 Geometry를 담고 있는있는 GeometryBag과 같은 IEnumGeometry에 대해 일괄적인 Union을 수행한다.
다수의 Geometry를 대상으로 Union을 수행할 경우 각각의각각의 Geometry를 반복적으로 Union하는Union하는 방법보다 더 효율적이다.
Union에 대한 예제는 추후에 다룰 것이다.
○ ConvexHull
[C#]
public IGeometry ConvexHull ();();
이 Geometry의의 ConvexHull을 반환한다. ConvexHull은 Geometry를 둘러싸는 최외곽 경계 Polygon이며, Point의 경우 Point 그 자체를 반환한다.
○ Cut
[C#]
public void CutCut (IPolyline cutter, ref IGeometry leftGeom, ref IGeometry rightGeom);
Splits은 cutting polyline을 이용하여 이 Geometry를 왼쪽, 오른쪽 파트로 잘라낸다. 그림에서와 같이 잘라내는 Polyline의 방향 확인에 주의해야 한다.
○ Clip, ClipDense, QueryClippedDense, QueryClipped
[C#]
public void Clip (IEnvelope clipperEnvelope);
public void ClipDense (IEnvelope clipperEnvelope, double denseDistance);
public void QueryClippedDense (IEnvelope clipperEnvelope, double denseDistance, IGeometryIGeometry clippedGeometry);
public void QueryClipped (IEnvelope clipperEnvelope, IGeometryIGeometry clippedGeometry);
ClipClip 메쏘드는 Feature의 Geometry를를 Envelope으로 클립하며, Envelope을 반환하지는 않는다.
QueryClipped은 Envelope을Envelope을 이용하여 클립한 Geometry를를 반환하며 Geometry 유형은유형은 원본과 동일하다.
○ IsKnownSimple, IsKnownSimple, SimplifySimplify
[C#]
public bool IsKnownSimple {get;}
public bool IsSimple {get;}
public void Simplify ();
이 Geometry의 위상적 일관성을 체크하거나 설정하기 위한 멤버들로 IsKnownSimple, IsSimple, Simplify에 대해서는 이 사이트의 다음 문서를문서를 참고한다: Simplifying a geomtery
○ Difference
[C#][C#]
public IGeometry Difference (IGeometry other);
이 Geometry와 대상 GeometryGeometry 간의 차집합 Geometry를 반환한다.
○ Intersect
[C#]
public IGeometry Intersect (IGeometry other, esriGeometryDimension resultDimension);
이이 Geometry와 대상 Geometry간에 set-theoretic intersection에 의한 교집합(AND) GeometryGeometry 를 반환한다. resultDimension 파라미터값을 이용하여 다른 차원의 결과를결과를 생성할 수 있다.
ArcGIS 9.2 버전버전 이후부터는 Intersect 메쏘드를 호출하기 전에 Disjoint 테스트 수행 후 필요시 호출하는호출하는 것이 성능면에서 유리하다.
○ SymmetricDifference
[C#]
public IGeometry SymmetricDifference ( IGeometry other);
이 Geometry와 대상 Geometry간의 대칭적 차집합(XOR) Geometry를 반환한다.반환한다.
즉, 두 GeometryGeometry (G1, G2)의 Union(G1, G2) - Intersection(G1, G2) 또는 Union(Difference(G1, G2), Difference(G2, G1))의 관계가 성립한다.
○ Union
[C#]
public IGeometry Union (IGeometry other);
이 Geometry와와 대상 Geometry간에 set-theoretic intersection에 의한 합집합(합집합( OR) Geometry를 반환한다
※
원문 출처: http://resources.esri.com/help/9.3/ArcGISEngine/ArcObjects/esrigeometry/itopologicaloperator