要素动态跟踪的算法

 

这个算法其实很简单,核心原理是在一个timer_tick事件中不断改变一个markerElement的geometry。而我们关注的目标也是这些符合条件的geometry如何得到。

1.polyline上的节点
我们我们要取一条polyline上的节点,这个方法是非常简单的,使用ipointcollection接口对象ppts,我们通过QI一条polyline,可以获取这些点集合。
dim ppts as ipointcollection
ppts=ppolyline
其中的点从ppts.point(i)中取得

2.获取均匀点
如果一条线很长,但是只有一个segment,那么点将很快移动完毕,这样肯定我们也不满意,我们希望能够不管线的长度是多少,一定要让点移动10次,我们就必须找出一条线上等距离的11个点的位置出来,算法如下:

Function MakeMultiPoint(ByVal pGeometry As IGeometry, ByVal nPoints As Integer) As IGeometryCollection
        Dim pGeometryCollection As IGeometryCollection
        If TypeOf pGeometry Is IPolyline Then
            ' return a multipoint containing nPoints equally
            ' distributed on the Polyline
            Dim pConstructGeometryCollection As IConstructGeometryCollection
            pConstructGeometryCollection = New GeometryBag
            pConstructGeometryCollection.ConstructDivideEqual(pGeometry, nPoints - 1, esriConstructDivideEnum.esriDivideIntoPolylines)
            Dim pEnumGeometry As IEnumGeometry
            pEnumGeometry = pConstructGeometryCollection
            pGeometryCollection = New Multipoint
            Dim pPolyline As IPolyline
            pPolyline = pEnumGeometry.Next
            pGeometryCollection.AddGeometry(pPolyline.FromPoint)
            Do While Not pPolyline Is Nothing
                pGeometryCollection.AddGeometry(pPolyline.ToPoint)
                pPolyline = pEnumGeometry.Next
            Loop
        End If
        MakeMultiPoint = pGeometryCollection
        pGeometryCollection = Nothing
    End Function


Trackback: http://tb.donews.net/TrackBack.aspx?PostId=406185

你可能感兴趣的:(算法,timer,function,Integer)