『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

空间拓扑分析

空间拓扑分析
下面以一个例子显示了如何进行拓扑分析操作,主要用到了ITopologicalOperator接口,例子先查找适合条件的多边形要素,然后建立这个要素的两个缓冲区Buffer1和Buffer2,再利用Difference对两个缓冲区进行差运算,得到最后的多边形。

       下面以一个例子显示了如何进行拓扑分析操作,主要用到了ITopologicalOperator接口,例子先查找适合条件的多边形要素,然后建立这个要素的两个缓冲区Buffer1Buffer2,再利用Difference对两个缓冲区进行差运算,得到最后的多边形。

       注意的是:要进行拓扑操作,几何图形必须是拓扑简单的。如果几何图形在上一次简单检查后没有改变过,则通过IsKnownSimple属性返回真。而IsSimple方法会真正去进行几何的简单性检查,前者会有更高的效率,尤其在循环当中。Simplfy方法可以修改几何图形,确保其符合该类几何的所有的简单的规则。

       另外,用来进行空间操作的几何图形必须具有相同的坐标系统,IGeometry::Project可以用来在准备进行空间操作前将几何的坐标系进行转换。

        Dim pFeatLyr As IFeatureLayer

        pFeatLyr = New FeatureLayer

        Dim pMap As IMap

        pMap = AxMapControl1.Map

       下面查找图层名字为STATES的图层索引号

        Dim i As Integer

        For i = 0 To pMap.LayerCount - 1

            If pMap.Layer(i).Name = "STATES" Then

                pFeatLyr = pMap.Layer(i)

                Exit For

            End If

        Next

        Dim pFeatClass As IFeatureClass

        pFeatClass = pFeatLyr.FeatureClass

       下面查找FID1的要素

        Dim pQueryFilter As IQueryFilter

        pQueryFilter = New QueryFilter

        pQueryFilter.WhereClause = "FID=1"

        Dim pFeatCursor As IFeatureCursor

        pFeatCursor = pFeatClass.Search(pQueryFilter, True)

        Dim pFeat As IFeature

        pFeat = pFeatCursor.NextFeature

        Dim pGeometry As IGeometry

        pGeometry = pFeat.Shape

       下面进行缓冲区分析

        Dim pTopo As ITopologicalOperator

        pTopo = pGeometry

       建立缓冲区的距离

        Dim pDist1 As Double

        Dim pDist2 As Double

        pDist1 = ConvertPixelToMapUnits(pMap, 10)

        pDist2 = ConvertPixelToMapUnits(pMap, 30)

       缓冲区分析

        Dim pBuffer1 As IGeometry

        pBuffer1 = pTopo.Buffer(pDist1)

        Dim pBuffer2 As IGeometry

        pBuffer2 = pTopo.Buffer(pDist2)

       两个缓冲区差运算得到最终的多边形pResultGeometry

        Dim pResultGeometry As IGeometry

        pTopo = pBuffer2

        pResultGeometry = pTopo.Difference(pBuffer1)

       下面在地图中显示出来

        Dim pPolygonEle As IFillShapeElement

        pPolygonEle = New PolygonElement

        Dim pEle As IElement

        pEle = pPolygonEle

        pEle.Geometry = pResultGeometry

        Dim pColor As IRgbColor

        pColor = New RgbColor

        pColor.Red = 110

        pColor.Green = 120

        pColor.Blue = 210

        Dim pFillSym As ISimpleFillSymbol

        pFillSym = New SimpleFillSymbol

        pFillSym.Color = pColor

        pPolygonEle.Symbol = pFillSym

        Dim pGraph As IGraphicsContainer

        pGraph = pMap

        pGraph.AddElement(pPolygonEle, 0)

        Dim pActiveView As IActiveView

        pActiveView = pMap

        pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, Nothing, Nothing)

      京ICP备2025132830号-1 京公网安备 号