http://www.gissky.net- GIS空间站

我要投稿 投稿指南 RSS订阅 网站资讯通告:
搜索: 您现在的位置: GIS空间站 >> 技术专栏 >> ArcGIS >> ArcObjects开发 >> 正文

空间拓扑分析

作者:峰哥    文章来源:新浪博客    点击数:    更新时间:2007-10-6
摘要:下面以一个例子显示了如何进行拓扑分析操作,主要用到了ITopologicalOperator接口,例子先查找适合条件的多边形要素,然后建立这个要素的两个缓冲区Buffer1和Buffer2,再利用Difference对两个缓冲区进行差运算,得到最后的多边形。
下面以一个例子显示了如何进行拓扑分析操作,主要用到了ITopologicalOperator接口,例子先查找适合条件的多边形要素,然后建立这个要素的两个缓冲区Buffer1和Buffer2,再利用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

下面查找FID为1的要素

        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)

Tags:AO 空间拓扑 分析  
责任编辑:3S_Studio
相关文章列表
没有相关文章
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 中国地图