欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏SuperMap应用与开发SO开发 → 正文
线目标跟踪
07-10-26 10:01:54 作者:未知 出处:超图

功能简介:

    示范SuperMap Objects 中的跟踪功能:跟踪多段线,每两段线之间有一定的时间停顿


操作说明:在地图窗口中选择要跟踪的线段,点击"跟踪"按钮,即可开始跟踪。

数据来源:..\Data\World目录下的World.sdb和World.sdd两个文件

    所用SuperMap Objects 组件、对象的主要属性和方法:

控 件 及 对 象 属  性 方  法
SuperWorkspace   OpenDatasource
SuperMap  TrackingLayer  
soRecordset IsEOF GetGeometry
soGeoLine Length  ResampleEquidistantly,GetPartAt

功能实现:

跟踪过程:

   通过SuperMap的Selection得到所选线段,并把所选线段分成20段(可以根据需要改变),拆分线段用soGeoLine的方法ResampleEquidistantly(...).再取出点用SuperMap的TrackingLayer显示出来.

Private Sub btnStartTrcak_Click()
    Set objRecordset = SuperMap1.Selection.ToRecordset(True) '把选择对象转换为记录集
    If objRecordset Is Nothing Then Exit Sub                 '没有对象被选中
    objRecordset.MoveFirst                                   '定位到第一个记录
    Do Until objRecordset.IsEOF
        Set objGeoLine = objRecordset.GetGeometry()          '获取记录的线几何对象
        dLen = objGeoLine.Length                             '获取线的长度
        Set objGeoLineNew = objGeoLine.ResampleEquidistantly(dLen / 20) '把目标线重新分成20段
        Set TrackRedLinePoints = Nothing                     '清空点实例集合
        Set TrackRedLinePoints = objGeoLineNew.GetPartAt(1)  '获取分段后的线段的点的集合
        nCurPoint = 1
        Timer1.Enabled = True                                '进行跟踪
    

        Timer1.Enabled = True                                '可以进行跟踪了
        dTimes = Timer()
        dTimes = dTimes + 2.5                               
'每两段之间间隔2.5秒
'每段结束后的暂停
        Do
            If Timer1.Enabled = False Then
                Do Until Timer() > dTimes
                Loop
                Exit Do
            End If
           DoEvents
        Loop
        objRecordset.MoveNext
    Loop

End sub

  • 跟踪示意图

Timer事件:用来产生动态的效果。
Private Sub Timer1_Timer()
    If TrackRedLinePoints.Count + 1 > nCurPoint Then
                                                                '定义实例的风格类型
        style.PenColor = 255
        style.SymbolSize = 96
        style.SymbolStyle = 1
      '在SuperMap1的TrackingLayer上实现实例的沿线跟踪
        SuperMap1.TrackingLayer.ClearEvents                    '清除所有实例
        SuperMap1.TrackingLayer.AddEvent pnt, style, "plane"   '增加当前实例
        SuperMap1.TrackingLayer.Refresh                        '刷新
        Dim x As Double, y As Double
        x = TrackRedLinePoints.Item(nCurPoint).x               '获取新的点实例的X坐标
        y = TrackRedLinePoints.Item(nCurPoint).y               '获取新的点实例的Y坐标
        SuperMap1.TrackingLayer.Event("plane").MoveTo x, y     '移动点实例
        SuperMap1.TrackingLayer.Refresh                            '刷新
        nCurPoint = nCurPoint + 1                  '下一个点
    Else 

        Timer1.enable=false

    End If
End Sub

(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号