1. Provides access to members that determine if a certain spatial relationship exists between two geometries.
Members
Description | ||
---|---|---|
Contains | Indicates if this geometry contains the other geometry. 前者是否包含后者! | |
Crosses | Indicates if the two geometries intersect in a geometry of lesser dimension. | |
Disjoint | Indicates if the two geometries share no points in common. Negate this result to compute the Intersect relation. | |
Equals | Indicates if the two geometries are of the same type and define the same set of points in the plane. | |
Overlaps | Indicates if the intersection of the two geometries has the same dimension as one of the input geometries. 前者和后者是否有重叠!不包括包含关系! | |
Relation | Indicates if the defined relationship exists. | |
Touches | Indicates if the boundaries of the geometries intersect. | |
Within | Indicates if this geometry is contained (is within) another geometry. 前者是否在后者内部! |
CoClasses that implement IRelationalOperator
CoClasses and Classes | Description |
---|---|
Envelope | A rectangle with sides parallel to a coordinate system defining the extent of another geometry; optionally has min and max measure, height and ID attributes. |
GeometryBag | An ordered collection of objects that support the IGeometry interface. |
MultiPatch | A collection of surface patches. |
Multipoint | An ordered collection of points; optionally has measure, height and ID attributes. |
Point | A two dimensional point, optionally with measure, height, and ID attributes. |
Polygon | A collection of rings ordered by their containment relationship; optionally has measure, height and ID attributes. |
Polyline | An ordered collection of paths; optionally has measure, height and ID attributes. |
※ | ※ → 公共代码部分:
IMap pMap;
IActiveView pActiveView;
IEnvelope pEnv;
ISelectionEnvironment pSelectionEnv;
IEnumFeature pEnumFeature;
IFeature pFeature;
IGeometry pGeometry;
IGeometry pBasicGeo;
private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) { axMapControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair; pMap = axMapControl1.Map; pActiveView = pMap as IActiveView; pEnv = axMapControl1.TrackRectangle(); pSelectionEnv = new SelectionEnvironment(); pSelectionEnv.DefaultColor = GetColor(255, 0, 0); pMap.SelectByShape(pEnv, pSelectionEnv, false); pActiveView.Refresh(); pEnumFeature = pMap.FeatureSelection as IEnumFeature; }
private IRgbColor GetColor(int r, int g, int b) { IRgbColor pColor = new RgbColor(); pColor.Red = r; pColor.Green = g; pColor.Blue = b; return pColor; }
private IGeometry GetBasicGeometry() { IFeatureLayer pFeatureLayer = axMapControl1.Map.get_Layer(1) as IFeatureLayer; IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass; IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false); IFeature pF = pFeatureCursor.NextFeature(); IGeometry pUnionGeo = new PolygonClass(); pUnionGeo = pF.Shape; while(pF != null) { ITopologicalOperator pUnionTopo = pUnionGeo as ITopologicalOperator; pUnionGeo = pUnionTopo.Union(pF.Shape); pF = pFeatureCursor.NextFeature(); } return pUnionGeo; }
private void Form1_Load(object sender, EventArgs e) { (axMapControl1.get_Layer(1) as IFeatureLayer).Selectable = false; }
※ | ※ → Contains:
private void button5_Click(object sender, EventArgs e) { pBasicGeo = GetBasicGeometry(); pGeometry = new PolygonClass(); while (true) { pFeature = pEnumFeature.Next(); if (pFeature == null) break; ITopologicalOperator pTopo = pGeometry as ITopologicalOperator; pGeometry = pTopo.Union(pFeature.Shape); } IRelationalOperator pRO = pBasicGeo as IRelationalOperator; bool IsContains = pRO.Contains(pGeometry); if (IsContains) { MessageBox.Show("Basic图层数据 包含 选中数据!"); } else { MessageBox.Show("Basic图层数据 不包含 选中数据!"); } }
※ | ※ → Overlaps:
private void button2_Click(object sender, EventArgs e) { pBasicGeo = GetBasicGeometry(); pGeometry = new PolygonClass(); while (true) { pFeature = pEnumFeature.Next(); if (pFeature == null) break; ITopologicalOperator pTopo = pGeometry as ITopologicalOperator; pGeometry = pTopo.Union(pFeature.Shape); } IRelationalOperator pRO = pGeometry as IRelationalOperator; bool IsContains = pRO.Overlaps(pBasicGeo); if (IsContains) { MessageBox.Show("选中数据 重叠 Basic图层数据!"); } else { MessageBox.Show("选中数据 不重叠 Basic图层数据!"); } }