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

Posted on 2009-12-27 21:30 黎民 阅读(1254) 评论(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 © 黎民