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

          主站蜘蛛池模板: 桦川县| 从江县| 尼勒克县| 宁晋县| 桃源县| 楚雄市| 内丘县| 沛县| 迭部县| 友谊县| 兴安县| 宣恩县| 益阳市| 壶关县| 原平市| 额济纳旗| 海丰县| 五大连池市| 余江县| 当涂县| 霸州市| 裕民县| 庆云县| 巨野县| 石棉县| 利川市| 延川县| 漠河县| 安吉县| 永春县| 五华县| 水富县| 崇文区| 德安县| 永州市| 靖远县| 泰来县| 福州市| 沿河| 东城区| 泸定县|