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 © 黎民

          主站蜘蛛池模板: 原平市| 德化县| 二手房| 福鼎市| 南靖县| 台北市| 灌云县| 宁化县| 台中县| 师宗县| 专栏| 玉田县| 莲花县| 崇仁县| 永兴县| 福鼎市| 龙井市| 偃师市| 西安市| 芒康县| 桓仁| 云安县| 台安县| 积石山| 云龙县| 东平县| 苏尼特左旗| 虎林市| 吴堡县| 平湖市| 洱源县| 绥化市| 兴义市| 鄯善县| 岳阳县| 涪陵区| 沁源县| 张家川| 霍林郭勒市| 岱山县| 贵溪市|