ArcGIS計算曲線上任意點到端點的距離

          Posted on 2009-12-27 21:30 黎民 閱讀(1325) 評論(0)  編輯  收藏 所屬分類: GIS原理

          網上找到了一段代碼,利用它可以求曲線上任意點到端點的距離,應該可以滿足求曲線上任意兩點沿曲線的距離的要求,具體做法如下:
          1、在ARCMAP中加載點圖層和對應的線圖層,注意只能加載這兩個圖層,且點圖層必須在線圖層之上,為了便于大家更清楚地看清起點,我把符號改為指向末端的方向箭頭
              1.jpg
          2、在點圖層屬性表中新加到端點的字段如aa,類型為double,如下
              2.jpg
          3、選中列aa ,在field caculator中輸入以下代碼
          ' ----- You'll need to change this value ----

          Const TOLERANCE As Double 
          = 500

          ' -這個容差的設置一定要注意,要多次嘗試.若屬性表中出現-1,就加大這個值

          Static pMxDoc As IMxDocument

          Static pFtrLyr As IFeatureLayer

          Static pFtrCls As IFeatureClass

          Static pSpFltr As ISpatialFilter

          Static pOutPt As IPoint

          Dim pInPt As IPoint

          Dim pTopOp As ITopologicalOperator

          Dim pFtrCsr As IFeatureCursor

          Dim pFtr As IFeature

          Dim pPline As IPolyline

          Dim dDis As Double

          Dim dDummy As Double

          Dim bDummy As Boolean

              Set pInPt 
          = [Shape]

              Set pTopOp 
          = pInPt

              

              If pMxDoc Is Nothing Then

                  Set pMxDoc 
          = ThisDocument

                  Set pFtrLyr 
          = pMxDoc.FocusMap.Layer(1)

                  Set pFtrCls 
          = pFtrLyr.FeatureClass

                  Set pSpFltr 
          = New SpatialFilter

                  pSpFltr.SpatialRel 
          = esriSpatialRelIntersects

                  Set pOutPt 
          = New Point

              End If

              

              Set pSpFltr.Geometry 
          = pTopOp.Buffer(TOLERANCE)

              Set pFtrCsr 
          = pFtrLyr.Search(pSpFltr, False)

              Set pFtr 
          = pFtrCsr.NextFeature

              If pFtr Is Nothing Then

                  dDis 
          = -1

              Else

                  Set pPline 
          = pFtr.Shape

                  pPline.QueryPointAndDistance esriNoExtension, pInPt, False, pOutPt, dDis, dDummy, bDummy

              End If

              

              Set pFtrCsr 
          = Nothing

          '

          ' Put dDis in the box below the Advanced window

          '



          見下圖
              3.jpg
          這里要特別注意的是第二行的容差的設置一定要得當,不能過于大,也不能太小。太大的話,就可能算成了點到另一條曲線端點的距離,太小的話不能判斷點在曲線上。所以要多次嘗試,取最佳值。
          算出來的表格結果如下:
              4.jpg
          以上表表示的是曲線上的每個點到各自曲線起點的距離
          可以看看這個圖,可能會更加清楚
              5.jpg
          大家可以看上圖,越到曲線末端(箭頭方向)值越大。
          要是要使結果更精確些,在選點時要設好snapping值,使點最好能落在線上。

          posts - 57, comments - 3, trackbacks - 0, articles - 1

          Copyright © 黎民

          主站蜘蛛池模板: 曲周县| 新民市| 章丘市| 宁晋县| 葵青区| 驻马店市| 鄂托克旗| 芜湖市| 米脂县| 白玉县| 丹江口市| 博客| 东光县| 五寨县| 江安县| 衡山县| 德兴市| 武鸣县| 大新县| 元阳县| 桓台县| 乌拉特后旗| 子长县| 孝感市| 永春县| 海林市| 朝阳区| 永登县| 武隆县| 上饶市| 色达县| 双江| 嘉善县| 兴海县| 洛阳市| 沧源| 武城县| 安顺市| 广宗县| 翁牛特旗| 广汉市|