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

          Posted on 2009-12-27 21:30 黎民 閱讀(1324) 評論(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 © 黎民

          主站蜘蛛池模板: 庆城县| 化州市| 汪清县| 林芝县| 遂平县| 获嘉县| 邢台县| 玉山县| 潞西市| 岗巴县| 金川县| 平泉县| 合江县| 开封县| 祁连县| 湖南省| 沧州市| 莱西市| 朝阳县| 永胜县| 淮北市| 改则县| 太保市| 烟台市| 惠东县| 承德市| 平南县| 马龙县| 唐海县| 游戏| 蚌埠市| 龙山县| 临沂市| 县级市| 麻栗坡县| 安西县| 都匀市| 宝应县| 枣庄市| 延庆县| 宁晋县|