中国地图
GIS探索者
地图网
GIS论坛
网站首页| GIS论坛 |新闻动态 | 技术专栏 | GIS书籍 | 资源下载 | 求职招聘 | 研究生考试 | GIS博客 | GIS空间站
欢迎光临GIS空间站!   网站地图
  专栏导航:| ArcGIS | MapInfo | TopMap | 地理信息 | 遥感 | GPS | 测绘 | WebGIS | LBS | 前沿 | 数据库 | 开发 | 行业应用
  推荐栏目:| AO开发 | 业界动态 | GIS资源 | 招聘信息 | 求职简历 | 共享软件 | 电子书籍 | 研究生考题 | 电子期刊 | GIS论文
您现在的位置: GIS空间站 >> 技术专栏 >> ArcGIS >> AO开发 >> 文章正文

空间拓扑分析

作者:峰哥    文章来源:新浪博客    点击数:    更新时间:2007-10-6
 
下面以一个例子显示了如何进行拓扑分析操作,主要用到了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)

文章录入:3S_Studio    责任编辑:3S_Studio  发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
■■相 关 图 书:
■■相 关 文 章:
没有相关文章
  • 上一篇文章:

  • 下一篇文章:
  •  
    GIS博客精华
    热点文章
    热门资源
     
    关于我们 | 联系我们 | 广告服务 | 友情链接 | 申请链接 | 合作联盟 | 诚聘英才
      GIS空间站(GISSky.Net)版权所有 站长:兔八哥