|
|
|
|

ArcGIS计算曲线上任意点到端点的距离

网上找到了一段代码,利用它可以求曲线上任意点到端点的距离,应该可以满足求曲线上任意两点沿曲线的距离的要求,具体做法如下:1、在ARCMAP中加载点图层和对应的线图层,注意只能加载这两个图层,且点图层必须在线图层之上,为了便于大家更清楚地看清起点...

作者:lwf902来源:lwf902|2009年12月21日
网上找到了一段代码,利用它可以求曲线上任意点到端点的距离,应该可以满足求曲线上任意两点沿曲线的距离的要求,具体做法如下:
1、在ARCMAP中加载点图层和对应的线图层,注意只能加载这两个图层,且点图层必须在线图层之上,为了便于大家更清楚地看清起点,我把符号改为指向末端的方向箭头
  
2、在点图层属性表中新加到端点的字段如aa,类型为double,如下
  
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
'
见下图
   
这里要特别注意的是第二行的容差的设置一定要得当,不能过于大,也不能太小。太大的话,就可能算成了点到另一条曲线端点的距离,太小的话不能判断点在曲线上。所以要多次尝试,取最佳值。
算出来的表格结果如下:
  
以上表表示的是曲线上的每个点到各自曲线起点的距离
可以看看这个图,可能会更加清楚
  
大家可以看上图,越到曲线末端(箭头方向)值越大。
要是要使结果更精确些,在选点时要设好snapping值,使点最好能落在线上。

上一篇:应用ArcGIS实现土地适宜性评价

下一篇:ArcGIS教程大全