首页 > 其他 > 详细

ITopologicalOperator接口调用

时间:2020-01-08 14:29:35      阅读:95      评论:0      收藏:0      [点我收藏+]

 ITopologicalOperator 接口

1. Provides additional information on non-simple geometries.【拓扑操作】

  Members

  Description
技术分享图片 Boundary
返回值:IGeometry
这个几何体的边界。多边形的边界是多段线。多段线的边界是多点。点或多点的边界是空点或多点。
技术分享图片 Buffer
(double distance)
返回值:IGeometry
构造一个多边形,该多边形是距离此几何体小于或等于指定距离的点的轨迹。
通过给定距离,得到操作图形的缓冲区,返回得到缓冲区几何图形!
技术分享图片 Clip
(IEnvelope clipperEnvelope)
Constructs the intersection of this geometry and the specified envelope.
返回矩形部分的要素,直接作用在要素上面!
技术分享图片 ClipDense Constructs the intersection of this geometry and the specified envelope; densifies lines in output contributed by the clipping envelope.
技术分享图片 ClipEx Constructs the intersection of this geometry and the specified envelope.
技术分享图片 ClipToDomain Clips the geometry to the domain of the spatial reference. Useful for ensuring that buffers can be fit within the spatial domain of the feature class to which they are being added.
技术分享图片 ConstructUnion Defines this geometry to be the union of the inputs. More efficient for unioning multiple geometries than calling Union repeatedly.
技术分享图片 ConvexHull Constructs the convex hull of this geometry.
技术分享图片 Cut Splits this geometry into a part left of the cutting polyline, and a part right of it.
技术分享图片 Cut2 Divides a geometry into multiple parts
技术分享图片 Difference Constructs the geometry containing points from this geometry but not the other geometry.
技术分享图片 GeoNormalizeEx Shifts longitudes, if need be, into a continuous range of 360 degrees.
技术分享图片 Intersect Constructs the geometry that is the set-theoretic intersection of the input geometries. Use different resultDimension values to generate results of different dimensions.
技术分享图片 IntersectMultidimension Constructs the set-theoretic intersection of the inputs. The results are returned in a geometry bag with one element per result dimension.
技术分享图片 IsKnownSimple Indicates whether this geometry is known (or assumed) to be topologically correct.
技术分享图片 IsKnownSimple Indicates whether this geometry is known (or assumed) to be topologically correct.
技术分享图片 IsSimple Indicates whether this geometry is known (or assumed) to be topologically correct, after explicitly determining this if the geometry is not already known (or assumed) to be simple.
技术分享图片 IsSimpleEx Determines why a geometry is not simple. Currently only implemented for polygons.
技术分享图片 QueryClipped Redefines clippedGeometry to be the intersection of this geometry and the clipping envelope.
技术分享图片 QueryClippedDense Redefines clippedGeometry to be the intersection of this geometry and the clipping envelope; densifies lines in the output contributed by the clipping envelope.
技术分享图片 Simplify Makes this geometry topologically correct.
技术分享图片 SymmetricDifference Constructs the geometry that contains points from either but not both input geometries.
技术分享图片 Union Constructs the geometry that is the set-theoretic union of the input geometries.

  CoClasses that implement ITopologicalOperator

CoClasses and ClassesDescription
GeoEllipse (esriDefenseSolutions) Its a spheroidal ellipse.
GeometryBag An ordered collection of objects that support the IGeometry interface.
GeoPolygon (esriDefenseSolutions) Its a spheroidal polygon.
GeoPolyline (esriDefenseSolutions) This is a spheroidal polyline.
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;
IGraphicsContainer pGraphicsContainer;
IFeature pFeature;
IGeometry pGeometry;
IEnvelope pEnvClip;
IPolyline pLineCut;
IPolygon pFirstPolygon;
技术分享图片

//鼠标点击事件!~

技术分享图片
private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
{
    axMapControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair;
    if (isClip) //此时要拉Clip框
    {
        pEnvClip = axMapControl1.TrackRectangle();
        isClip = false;
    }
    else if (isCut)
    {
        pLineCut = axMapControl1.TrackLine() as IPolyline;
        isCut = false;
    }
    else if (isFirstIn)
    {
        pMap = axMapControl1.Map;
        pActiveView = pMap as IActiveView;
        pEnv = axMapControl1.TrackRectangle();

        pSelectionEnv = new SelectionEnvironment();
        pSelectionEnv.DefaultColor = GetColor(0, 255, 0);
        pMap.SelectByShape(pEnv, pSelectionEnv, false);
        pActiveView.Refresh();
        pEnumFeature = axMapControl1.Map.FeatureSelection as IEnumFeature;
    }
    else
    {
        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 = axMapControl1.Map.FeatureSelection as IEnumFeature;
    }
}
技术分享图片

//RGB颜色!~

技术分享图片
private IRgbColor GetColor(int r, int g, int b)
{
    IRgbColor pColor = new RgbColor();
    pColor.Red = r;
    pColor.Green = g;
    pColor.Blue = b;
    return pColor;
}
技术分享图片

 

※ | ※ → Buffer:

技术分享图片

技术分享图片
private void button1_Click(object sender, EventArgs e)
{
    while (true)
    {
        pGraphicsContainer = pMap as IGraphicsContainer;    //定义容器
        pFeature = pEnumFeature.Next();     //遍历要素
        if (pFeature == null)            //若不存在要素,则推出循环
            break;
        pGeometry = pFeature.Shape;     //获取要素的Geometry
        ITopologicalOperator pTopoOperator = pGeometry as ITopologicalOperator; //QI到拓扑操作
        IGeometry pBufferGeo = pTopoOperator.Buffer(2);     //缓冲区分析

        IElement pElement = new PolygonElement();
        pElement.Geometry = pBufferGeo;     //获取得到的缓冲区

        pGraphicsContainer.AddElement(pElement, 0); //显示缓冲区
        pActiveView.Refresh();
    }
}
技术分享图片

 

※ | ※ → Boundary:

技术分享图片

技术分享图片
private void button2_Click(object sender, EventArgs e)
{
    while (true)
    {
        pGraphicsContainer = pMap as IGraphicsContainer;    //定义容器
        pFeature = pEnumFeature.Next();     //遍历要素
        if (pFeature == null)            //若不存在要素,则推出循环
            break;
        pGeometry = pFeature.Shape;     //获取要素的Geometry
        ITopologicalOperator pTopoOperator = pGeometry as ITopologicalOperator; //QI到拓扑操作
        IGeometry pBoundary = pTopoOperator.Boundary;  //获取边界

        ILineElement pLineEle = new LineElementClass();
        ISimpleLineSymbol pSLS = new SimpleLineSymbol();
        IRgbColor pColor = GetColor(0, 255, 0);
        pSLS.Color = pColor;
        pSLS.Width = 5;
        pLineEle.Symbol = pSLS;

        IElement pElement = pLineEle as IElement;
        pElement.Geometry = pBoundary;

        pGraphicsContainer.AddElement(pElement, 0); //显示边界
        pActiveView.Refresh();
    }
}
技术分享图片

 

※ | ※ → Clip:

技术分享图片

技术分享图片
bool isClip = false;
private void button3_Click(object sender, EventArgs e)
{
    isClip = true;
}

private void button4_Click(object sender, EventArgs e)
{
    while (true)
    {
        pGraphicsContainer = pMap as IGraphicsContainer;    //定义容器
        pFeature = pEnumFeature.Next();     //遍历要素
        if (pFeature == null)            //若不存在要素,则推出循环
            break;
        pGeometry = pFeature.Shape;     //获取要素的Geometry
        ITopologicalOperator pTopoOperator = pGeometry as ITopologicalOperator; //QI到拓扑操作
        pTopoOperator.Clip(pEnvClip);

        IElement pElement = new PolygonElement();
        pElement.Geometry = pGeometry;     //获取得到的缓冲区

        pGraphicsContainer.AddElement(pElement, 0); //显示缓冲区
        pActiveView.Refresh();
    }
}
技术分享图片

 

※ | ※ → ConvexHull:

技术分享图片

技术分享图片
private void button5_Click(object sender, EventArgs e)
{
    while (true)
    {
        pGraphicsContainer = pMap as IGraphicsContainer;    //定义容器
        pFeature = pEnumFeature.Next();     //遍历要素
        if (pFeature == null)            //若不存在要素,则推出循环
            break;
        pGeometry = pFeature.Shape;     //获取要素的Geometry
        ITopologicalOperator pTopoOperator = pGeometry as ITopologicalOperator; //QI到拓扑操作
        IGeometry pBufferGeo = pTopoOperator.ConvexHull();

        IElement pElement = new PolygonElement();
        pElement.Geometry = pBufferGeo;     //获取得到的缓冲区

        pGraphicsContainer.AddElement(pElement, 0); //显示缓冲区
        pActiveView.Refresh();
    }
}
技术分享图片

 

※ | ※ → Cut:

技术分享图片

技术分享图片
bool isCut = false;

private void button6_Click(object sender, EventArgs e)
{
    isCut = true;
}

private void button7_Click(object sender, EventArgs e)
{
    while (true)
    {
        pGraphicsContainer = pMap as IGraphicsContainer;    //定义容器
        pFeature = pEnumFeature.Next();     //遍历要素
        if (pFeature == null)            //若不存在要素,则推出循环
            break;
        pGeometry = pFeature.Shape;     //获取要素的Geometry
        ITopologicalOperator pTopoOperator = pGeometry as ITopologicalOperator; //QI到拓扑操作ry
        IGeometry pGeoRight = new PolygonClass();
        IGeometry pGeoLeft = new PolygonClass();
        pTopoOperator.Cut(pLineCut, out pGeoLeft, out pGeoRight);

        IElement pElement = new PolygonElement();

        IFillShapeElement pFillEle = pElement as IFillShapeElement;
        ISimpleFillSymbol pSFS = new SimpleFillSymbol();
        pSFS.Color = GetColor(255, 255, 0);
        pFillEle.Symbol = pSFS;

        pElement.Geometry = pGeoLeft;     //获取得到的缓冲区
        pGraphicsContainer.AddElement(pElement, 0); //显示缓冲区

        pSFS = new SimpleFillSymbol();
        pSFS.Color = GetColor(255, 0, 255);
        pFillEle.Symbol = pSFS;

        pElement = new PolygonElement();
        pElement.Geometry = pGeoRight;     //获取得到的缓冲区
        pGraphicsContainer.AddElement(pElement, 0); //显示缓冲区

        pActiveView.Refresh();
    }
}
技术分享图片

 

※ | ※ → Union:

技术分享图片

技术分享图片
private void button8_Click(object sender, EventArgs e)
{
    IGeometry pUnionGeo = new PolygonClass();
    pGraphicsContainer = pMap as IGraphicsContainer;    //定义容器

    while (true)
    {
        pFeature = pEnumFeature.Next();     //遍历要素
        if (pFeature == null)            //若不存在要素,则推出循环
            break;
        pGeometry = pFeature.Shape;     //获取要素的Geometry
        ITopologicalOperator pTopoOperator = pUnionGeo as ITopologicalOperator; //QI到拓扑操作ry
        pUnionGeo = pTopoOperator.Union(pGeometry);
    }

    IElement pElement = new PolygonElement();

    IFillShapeElement pFillEle = pElement as IFillShapeElement;
    ISimpleFillSymbol pSFS = new SimpleFillSymbol();
    pSFS.Color = GetColor(255, 255, 0);
    pFillEle.Symbol = pSFS;

    pElement.Geometry = pUnionGeo;     //获取得到的缓冲区
    pGraphicsContainer.AddElement(pElement, 0); //显示缓冲区

    pActiveView.Refresh();
}
技术分享图片

 

※ | ※ → Intersect:

技术分享图片

技术分享图片
bool isFirstIn = false;

private void button10_Click(object sender, EventArgs e)
{
    isFirstIn = true;
}

private void button11_Click(object sender, EventArgs e)
{
    isFirstIn = false;
    pFirstPolygon = new PolygonClass();
    while (true)
    {
        pFeature = pEnumFeature.Next();
        if (pFeature == null)
            break;
        pGeometry = pFeature.Shape;
        ITopologicalOperator pTopoOperator = pFirstPolygon as ITopologicalOperator;
        pFirstPolygon = pTopoOperator.Union(pGeometry) as IPolygon;
    }
}
private void button12_Click(object sender, EventArgs e) { IGeometry pIntersectGeo = new PolygonClass(); IGeometry pSecondPolygon = new PolygonClass(); pGraphicsContainer = pMap as IGraphicsContainer; while (true) { pFeature = pEnumFeature.Next(); if (pFeature == null) break; pGeometry = pFeature.Shape; ITopologicalOperator pTopoOperator = pSecondPolygon as ITopologicalOperator; pSecondPolygon = pTopoOperator.Union(pGeometry) as IPolygon; } ITopologicalOperator pTopo = pSecondPolygon as ITopologicalOperator; pIntersectGeo = pTopo.Intersect(pFirstPolygon, esriGeometryDimension.esriGeometry2Dimension) as  IPolygon; IElement pElement = new PolygonElementClass(); pElement.Geometry = pIntersectGeo; pGraphicsContainer.AddElement(pElement, 0); IFeatureLayer pFeatureLayer = pMap.get_Layer(0) as IFeatureLayer; pFeatureLayer.Visible = false; pFeatureLayer = pMap.get_Layer(1) as IFeatureLayer; pFeatureLayer.Visible = false; pActiveView.Refresh(); }
技术分享图片

 

※ | ※ → Difference:(需要前面两部分)

技术分享图片

技术分享图片
private void button13_Click(object sender, EventArgs e)
{
    IGeometry pIntersectGeo = new PolygonClass();
    IGeometry pSecondPolygon = new PolygonClass();
    pGraphicsContainer = pMap as IGraphicsContainer;

    while (true)
    {
        pFeature = pEnumFeature.Next();
        if (pFeature == null)
            break;
        pGeometry = pFeature.Shape;
        ITopologicalOperator pTopoOperator = pSecondPolygon as ITopologicalOperator;
        pSecondPolygon = pTopoOperator.Union(pGeometry) as IPolygon;
    }

    ITopologicalOperator pTopo = pSecondPolygon as ITopologicalOperator;
    pIntersectGeo = pTopo.Difference(pFirstPolygon) as IPolygon;
    IElement pElement = new PolygonElementClass();
    pElement.Geometry = pIntersectGeo;
    pGraphicsContainer.AddElement(pElement, 0);
    IFeatureLayer pFeatureLayer = pMap.get_Layer(0) as IFeatureLayer;
    pFeatureLayer.Visible = false;
    pFeatureLayer = pMap.get_Layer(1) as IFeatureLayer;
    pFeatureLayer.Visible = false;
    pActiveView.Refresh();
}
技术分享图片

 

---------------------------------------------------------------------------------------------------------

            ╔════════╗
╠════╣    第A2个    ╠══════════════════════════════════════════════════╣
            ╚════════╝

●·● IRelationalOperator 接口

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 ClassesDescription
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图层数据!");
    }
}
转自https://www.cnblogs.com/alex-bn-lee/archive/2012/06/17/2552557.html

ITopologicalOperator接口调用

原文:https://www.cnblogs.com/wgj-blog/p/12165860.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!