欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap FreeTalk
   您现在位于: 首页技术专栏ArcGIS应用与开发AO开发 → 正文
计算矢量线段的走向
08-01-10 00:00:00 作者:gisempire100 出处:GIS帝国论坛
因为工作需要需要计算shp线文件中的每一条线的走向(即线段与正北的夹角),咨询esri支持,得到的答复是:
        ArcGIS Desktop中没有直接的工具可以完成改功能,但可以写一个VBA小程序完成,原理比较简单,如下:
1、获得每条线段的起始点和终止点
2、用IVector3D接口的ConstructDifference 方法输入起始点和终止点构建矢量
3、IVector3D接口的Azimuth方法即可获得方位角。
    我没有用过ao的vba编程,不过按照“ConstructDifference”、“IVector3D”、“Azimuth”为关键字在ao的帮助中找到了些范例,费了两天时间终于还拼凑出来实现了我想要的功能。我的体会是,也许我们对于ao的具体类/方法并不明确,但是可以借助esri所提供的帮助范例组合出我们想要的结果。呵呵。

Public Sub GetAzimuth2()
    Dim pMxDoc As IMxDocument
    Dim pEnumFeature As IEnumFeature
    Dim pFeature As IFeature
    Dim pStartPoint As IPoint
    Dim pEndPoint As IPoint
    Dim LineVector As IVector3D
    Dim LineAzimuth As Double     '存储线段的方位角
    Dim pFields As IFields
    Dim pField As IField
    Dim Item As Long
    
    Dim pFeatcls As IFeatureClass
    Dim pFeatLayer As IFeatureLayer
    Dim pDoc As IMxDocument
    Dim pMap As IMap
    Dim pFeatureClass As IFeatureClass
    Dim pFeatureCursor As IFeatureCursor
    Dim pCurve As ICurve
    
    Set pDoc = ThisDocument
    Set pMap = pDoc.Maps.Item(0)
    Set pFeatLayer = pMap.Layer(0)
    Set pFeatcls = pFeatLayer.FeatureClass
    Set pFeatureClass = pFeatLayer.FeatureClass ' pFeatureLayer.FeatureClass
    Set pFeatureCursor = pFeatureClass.Search(Nothing, False)
    Set pFeature = pFeatureCursor.NextFeature
    Do While Not pFeature Is Nothing
        Set pPointCol = pFeature
        Set pFields = pFeature.Fields

        If (pFields.FindField("走向") <> -1) Then
            Item = pFields.FindField("走向")
            Set pField = pFields.Field(Item)    '获得走向字段
        Else
            MsgBox "没有可以存储计算走向值的字段!"
            Exit Sub
        End If

        
        'MsgBox "字段名:" & pField.Name
        Set pCurve = pFeature.Shape         '获得要素的shape
        Set pStartPoint = pCurve.FromPoint  '将曲线的起点赋予pStartPoint
        Set pEndPoint = pCurve.ToPoint      '将曲线的终点赋予pEndPoint
        Set LineVector = CreateVector3DTwoPoints(pStartPoint, pEndPoint)
        LineAzimuth = LineVector.Azimuth * 180 / 3.14159 'Azimuth为线段的弧度值,将其转化为度表示
        'MsgBox "该线段的走向为" & LineAzimuth
        If LineAzimuth > 360 Then           '走向大于360度,可以用减去360度的值表示
            LineAzimuth = LineAzimuth - 360 '还有大于360度的情况??
        End If
      
        If LineAzimuth >= 180 Then           '走向大于180度,可以用减去180度的值表示
            LineAzimuth = LineAzimuth - 180
        End If
        pFeature.Value(Item) = LineAzimuth
        pFeature.Store
   Set pFeature = pFeatureCursor.NextFeature
   Loop
End Sub

(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  
    无相关新闻

    关于我们友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
     
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.
     

                   滇ICP备05006901号