MapX历史轨迹回放[开发源代码]:

Option Explicit

Dim xDown As Double
Dim yDown As Double
Dim HisBeginFlag As Boolean
Dim Lyr As MapXLib.Layer
Dim LayerInfo As New MapXLib.LayerInfo
Dim Flds As New MapXLib.Fields
Dim Icount As Integer
Dim Angle() As Double
Dim RecordTime() As Date
Dim StopFlag As Boolean
Dim TempPnt As New Point
Dim DisTemp As Double
Dim DisSum As Double

Private Sub Form_Load()
Dim strsql As String
Dim i As Integer
Dim ResShowVehicle As ADODB.Recordset

'On Error Resume Next
    
    Set ResShowVehicle = New ADODB.Recordset
    strsql = "select * from mapinfo where mapname='" & cSelectMapName & "'"
    If CreateRecordSetbySQL_Tempdb(ResShowVehicle, strsql) Then
        If Not (ResShowVehicle.BOF And ResShowVehicle.EOF) Then
            fZoom = ResShowVehicle.Fields("zoom" 
            fCenterX = ResShowVehicle.Fields("fcenterx" 
            fCenterY = ResShowVehicle.Fields("fcentery" 
        End If
    End If
    
    Set ResShowVehicle = Nothing
    
    txtVehicle.Text = FrmHistory.cboVehicle.Text
    txtMap.Text = FrmHistory.cboMap.Text
    txtStart.Text = FrmHistory.txtYear(0) + "-" + FrmHistory.txtMonth(0) + "-" + FrmHistory.txtDay(0) + " " + FrmHistory.txtHour(0) + ":" + FrmHistory.txtMinute(0) + ":00"
    txtEnd.Text = FrmHistory.txtYear(1) + "-" + FrmHistory.txtMonth(1) + "-" + FrmHistory.txtDay(1) + " " + FrmHistory.txtHour(1) + ":" + FrmHistory.txtMinute(1) + ":00"

HistoryMap.CreateCustomTool CreateCJTool, miToolTypePoly, miCrossCursor
    
    '设置默认工具
    HistoryMap.CurrentTool = miArrowTool
    
    HistoryMap.MapUnit = miUnitMeter
    
    HistoryMap.Geoset = IIf(Right(cSelectMapPath, 1) = "\", cSelectMapPath, cSelectMapPath & "\" + cSelectMapName
    HistoryMap.Zoom = fZoom
    HistoryMap.CenterX = fCenterX
    HistoryMap.CenterY = fCenterY
    
    TxtDataTime.Text = CStr(Year(Date)) + "年" + CStr(Month(Date)) + "月" + CStr(Day(Date)) + "日" + " " + CStr(Hour(Time)) + "时" + CStr(Minute(Time)) + "分" + CStr(Second(Time)) + "秒"
     
    StopFlag = False
    Toolbar1.Buttons(10).Enabled = False
    Toolbar1.Buttons(11).Enabled = False
    TimerShowMap.Interval = Slider.Value * 50
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    '清除临时图层
Dim i As Integer

For i = 1 To HistoryMap.Layers.Count
        If HistoryMap.Layers.Item(i).Name = "TempLayer" Then
            HistoryMap.Layers.Remove i
            i = HistoryMap.Layers.Count + 1
        End If
    Next i
    Set Lyr = Nothing
    Set Flds = Nothing
    Set LayerInfo = Nothing 
End Sub

Private Sub Form_Resize()

If Me.WindowState = 1 Then Exit Sub
    HistoryMap.Height = Me.ScaleHeight - 300 - frFrame.Height
    HistoryMap.Width = Me.ScaleWidth
    HistoryMap.Left = Me.ScaleLeft
    frFrame.Width = Me.ScaleWidth
    StatusBar.Panels(1).Width = 350
    StatusBar.Panels(2).Width = (Me.ScaleWidth - 400) / 10 * 4
    StatusBar.Panels(3).Width = (Me.ScaleWidth - 400) / 10 * 3.5
    StatusBar.Panels(4).Width = (Me.ScaleWidth - 400) / 10 * 2.5
    Picture1.Top = Me.ScaleHeight - 330
    Picture1.Left = Me.ScaleLeft + 100
End Sub

Private Sub HistoryMap_DblClick()
    If HistoryMap.CurrentTool = CreateCJTool Then
        HistoryMap.CurrentTool = miArrowTool 
        MsgBox "距离:" & CStr(DisSum) & " 米", vbOKOnly + vbInformation, "测距结果"
        StatusBar.Panels(3).Text = ""
        HisBeginFlag = False
    End If
End Sub

Private Sub HistoryMap_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    '测距
    If HistoryMap.CurrentTool = CreateCJTool And Button = vbLeftButton Then
        HistoryMap.MapUnit = miUnitMeter
        HistoryMap.ConvertCoord x, y, xDown, yDown, miScreenToMap
        HisBeginFlag = True
        DisTemp = DisSum 'distemp变量记录历史长度
    End If 
End Sub

Private Sub HistoryMap_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim xx As Double, yy As Double
Dim MapCoordX As Double, MapCoordY As Double

HistoryMap.ConvertCoord x, y, MapCoordX, MapCoordY, miScreenToMap
    If HistoryMap.CurrentTool = CreateCJTool And HisBeginFlag = True Then
        DisSum = DisTemp + HistoryMap.Distance(xDown, yDown, MapCoordX, MapCoordY)
        StatusBar.Panels(3).Text = "距离:" & CStr(DisSum) & "米"
    End If
    HistoryMap.ConvertCoord x, y, xx, yy, miScreenToMap
    StatusBar.Panels(2).Text = "经度: " & CStr(Round(xx, 4)) & "    " & "纬度: " & CStr(Round(yy, 4))
End Sub

Private Sub Slider_Click() dedecms.com 
    If Slider.Value <> 0 Then
        Slider.ToolTipText = "回放速度:" & Slider.Value * 10 & "倍"
        TimerShowMap.Interval = Slider.Value * 10
    End If
End Sub

Private Sub TimerTime_Timer()
    TxtDataTime.Text = CStr(Year(Date)) + "年" + CStr(Month(Date)) + "月" + CStr(Day(Date)) + "日" + " " + CStr(Hour(Time)) + "时" + CStr(Minute(Time)) + "分" + CStr(Second(Time)) + "秒"
End Sub

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Dim i As Integer

Select Case Button.Key
        Case "fullmap"
            HistoryMap.Bounds = HistoryMap.Layers.Bounds copyright dedecms 
        Case "zoomin"
            HistoryMap.CurrentTool = miZoomInTool
        Case "zoomout"
            HistoryMap.CurrentTool = miZoomOutTool
        Case "pan"
            HistoryMap.CurrentTool = miPanTool
        Case "cj"
            HistoryMap.CurrentTool = CreateCJTool
            DisSum = 0
        Case "default"
            HistoryMap.CurrentTool = miArrowTool 内容来自dedecms 
        Case "start"
            If StopFlag Then
                TimerShowMap.Enabled = True
                Toolbar1.Buttons(10).Enabled = True
                Toolbar1.Buttons(11).Enabled = True
                Toolbar1.Buttons(9).Enabled = False
            Else
                Call BackPutHistoryLocus
            End If
        Case "pause" 
            TimerShowMap.Enabled = False
            Toolbar1.Buttons(9).Enabled = True
            Toolbar1.Buttons(10).Enabled = False
            StopFlag = Not StopFlag
        Case "stop"
            TimerShowMap.Enabled = False
            Toolbar1.Buttons(10).Enabled = False
            Toolbar1.Buttons(11).Enabled = False
            Toolbar1.Buttons(9).Enabled = True
        Case "clear" 
            TimerShowMap.Enabled = False
            '清除临时图层
            For i = 1 To HistoryMap.Layers.Count
                If HistoryMap.Layers.Item(i).Name = "TempLayer" Then
                    HistoryMap.Layers.Remove i
                    i = HistoryMap.Layers.Count + 1
                End If
            Next i
            Set Lyr = Nothing 
            Set Flds = Nothing
            Set LayerInfo = Nothing
        Case "exit"
            Unload Me
    End Select
End Sub

Private Sub BackPutHistoryLocus() '回放历史轨迹
Dim ExistFlag As Boolean
Dim i As Integer
Dim TempLyr As MapXLib.Layer

On Error GoTo aa:

'判断临时图层是否存在
    ExistFlag = False '不存在
    For i = 1 To HistoryMap.Layers.Count
        If HistoryMap.Layers.Item(i).Name = "TempLayer" Then
            ExistFlag = True '存在
            i = HistoryMap.Layers.Count + 1 
        End If
    Next i
    
    If Not ExistFlag Then '不存在,新建临时图层
        '创建临时图层
        Flds.AddStringField "ID", 12
         
        LayerInfo.Type = miLayerInfoTypeTemp
        LayerInfo.AddParameter "NAME", "TempLayer"
        LayerInfo.AddParameter "Fields", Flds
        
        Set Lyr = HistoryMap.Layers.Add(LayerInfo, 1)

Else
        For i = 1 To HistoryMap.Layers.Count
            If HistoryMap.Layers.Item(i).Name = "TempLayer" Then 
                HistoryMap.Layers.Remove i
                i = HistoryMap.Layers.Count + 1
            End If
        Next i
        Set Lyr = Nothing
        Set LayerInfo = Nothing
        '创建临时图层
        
        Flds.AddStringField "ID", 12
         
        LayerInfo.Type = miLayerInfoTypeTemp
        LayerInfo.AddParameter "NAME", "TempLayer" 
        LayerInfo.AddParameter "Fields", Flds
        
        Set Lyr = HistoryMap.Layers.Add(LayerInfo, 1)
    End If

ReDim Angle(Res.RecordCount - 1)
    ReDim RecordTime(Res.RecordCount - 1)
    
    Res.MoveFirst
    
    For i = 0 To Res.RecordCount - 1
        Hispnt.Set Res.Fields("Longitude" , Res.Fields("Latitude" 
        Hispnts.Add Hispnt
        Angle(i) = Res.Fields("angle" 
        RecordTime(i) = Res.Fields("time" 
        Res.MoveNext 
    Next i
        Icount = 0
        TempPnt.Set Hispnts.Item(1).x, Hispnts.Item(1).y
        TimerShowMap.Enabled = True
        'TimerShowMap.Interval = 100
        Toolbar1.Buttons(10).Enabled = True
        Toolbar1.Buttons(11).Enabled = True
        Toolbar1.Buttons(9).Enabled = False
    Exit Sub
aa:
    MsgBox "历史记录回放错误,请检测.", vbOKOnly + vbExclamation, "历史记录回放..."
    Exit Sub
End Sub

Private Sub TimerShowMap_Timer()
Dim NewStyle As New MapXLib.Style
Dim ftr As New Feature
Dim fnt As New StdFont

On Error GoTo aa:

Icount = Icount + 1
    If Hispnts.Count = Icount Then
        TimerShowMap.Enabled = False
        TimerShowMap.Interval = 0
        StopFlag = Not StopFlag
        MsgBox "历史轨迹回放完毕!"
        Exit Sub
    End If
    With fnt
        .Name = "gisdisplay"
        .Bold = False
    End With
    
    With NewStyle
        .SymbolType = miSymbolTypeTrueTypeFont
        .SymbolFont = fnt
        .SymbolFontShadow = True 
        .SymbolCharacter = 34
        .SymbolFont.Size = 12
        .SymbolFontColor = gisBlue    '蓝色
    End With

StatusBar.Panels(3).Text = "第 " & CStr(Icount) & " 条  " & CStr(Round(Hispnts.Item(Icount).x, 4)) & "::::" & CStr(Round(Hispnts.Item(Icount).y, 4)) & "   方位角: " & CStr(Angle(Icount)) & " 度"
    txtRecordTime.Text = RecordTime(Icount - 1)
    If Icount <> 1 And TempPnt.x = Hispnts.Item(Icount).x And TempPnt.y = Hispnts.Item(Icount).y Then
        TempPnt.Set Hispnts.Item(Icount).x, Hispnts.Item(Icount).y
        Exit Sub
    End If 
    ftr.Attach HistoryMap
    ftr.Type = miFeatureTypeSymbol
    ftr.Style = NewStyle
    ftr.Offset Hispnts.Item(Icount).x, Hispnts.Item(Icount).y
    HistoryMap.Layers("TempLayer" .AddFeature ftr
    
    TempPnt.Set Hispnts.Item(Icount).x, Hispnts.Item(Icount).y
    
    If Hispnts.Item(Icount).x > HistoryMap.Bounds.XMax Then
        HistoryMap.CenterX = Hispnts.Item(Icount).x
        HistoryMap.CenterY = Hispnts.Item(Icount).y
    End If
    If Hispnts.Item(Icount).x < HistoryMap.Bounds.XMin Then
        HistoryMap.CenterX = Hispnts.Item(Icount).x
        HistoryMap.CenterY = Hispnts.Item(Icount).y 
    End If
    If Hispnts.Item(Icount).y > HistoryMap.Bounds.YMax Then
        HistoryMap.CenterX = Hispnts.Item(Icount).x
        HistoryMap.CenterY = Hispnts.Item(Icount).y
    End If
    If Hispnts.Item(Icount).y < HistoryMap.Bounds.YMin Then
        HistoryMap.CenterX = Hispnts.Item(Icount).x
        HistoryMap.CenterY = Hispnts.Item(Icount).y
    End If
    Exit Sub
aa:
    TimerShowMap.Enabled = False
    TimerShowMap.Interval = 0
    StopFlag = Not StopFlag
    MsgBox "历史轨迹回放完毕!"
    Exit Sub
End Sub

转载于:https://www.cnblogs.com/kldzp/archive/2012/08/31/2664832.html

MapX历史轨迹回放[开发源代码]:相关推荐

  1. 工厂人员定位系统源码,支持智能考勤、工时统计、行为检测、历史轨迹回放、人员管理、电子围栏功能

    系统概述: 工厂人员定位系统,采用UWB定位技术,通过在厂区内部署一定数量的定位基站,以及为人员.车辆.物资佩戴标签卡的形式,实时获取人员精确位置,精度高达10cm. 工厂人员定位系统可实现物资/车辆 ...

  2. 小程序 历史轨迹回放 地图播放历史轨迹

    先看效果图 html <map id='map' :latitude="addressInfo.latitude" :longitude="addressInfo. ...

  3. js室内地图开发_如何使用JS来开发室内三维地图的轨迹回放功能

    在制作完成室内三维地图的功能后,最经常有的需求就是如何做人员的轨迹回放,一般流程都是从数据库中查询轨迹坐标后,经过后台查询接口返回给前端,接下来的事情都交给JS来完成. 如果想做好一个性能好的轨迹回放 ...

  4. HOLUX M1200-E 蓝牙GPS轨迹记录器的历史轨迹数据读取

    HOLUX M1200-E 蓝牙GPS轨迹记录器的历史轨迹数据读取 图片太烂上传了   原Word文件下载地址 点击打开链接http://download.csdn.net/download/cp45 ...

  5. 百度地图轨迹回放,自定义路书,边走边画线

    转自:https://www.cnblogs.com/syj2016/p/5685294.html 百度地图轨迹回放,自定义路书,边走边画线 在原有的百度路书的基础上,做了修改,使其能实现边走边画线的 ...

  6. Android实现高德地图轨迹回放

    Android实现高德地图轨迹回放 写在前面 准备 官方文档解读 创建应用: 地图api引入: 权限添加 效果展示 过程实现 地图初始化 定位 显示标记点 点平滑移动 添加呼吸点 写在结尾 写在前面 ...

  7. 高德地图轨迹回放功能

    一.介绍        在项目过程中,需要对自己设备产品输出的定位信息进行验证.通过路跑测试获取到了一组经纬度数据.这时需要验证这组数据是否是实际路跑测试的轨迹,就用到了高德地图的轨迹回放功能.下面将 ...

  8. 使用百度地图实现车辆轨迹回放

    最近在做的项目有个车辆轨迹回放需求,查资料看到可以使用百度地图的路书功能实现,百度路书功能如下. 点击开始按钮,小车会在地图上移动还原历史轨迹. 具体需求就是通过调用后台接口获取到指定车辆的指定时间段 ...

  9. 运动APP视频轨迹回放分享实现

    喜欢户外运动的朋友一般都应该使用过运动APP(keep, 咕咚,悦跑圈,国外的Strava等)的一项功能,就是运动轨迹视频分享,分享到朋友圈或是运动群的圈子里.笔者本身平常也是喜欢户外跑.骑行.爬山等 ...

最新文章

  1. 查询/新建/修改本地用户和组
  2. 魔教《3字魔经》为何优于其它武功秘籍?
  3. 数据库时间内接受的是lang类型的时间 分为三种字段 第一种只存日期 第二种存日期+时间 第三种时间戳...
  4. Asp.Net分页控件
  5. 在VC中如何找到崩溃的源头(二)
  6. Node js redis
  7. ERP的配置管理实践
  8. [Redis6]NoSQL数据库简介_特点
  9. 如何制作可以在 MaxCompute 上使用的 crcmod 1
  10. 高效安全存储之选 佰维A3系列240G固态硬盘试用手记
  11. ios 调用webservice 辅助类
  12. Python基础---循环、条件判断
  13. android状态栏半透明灰色,快速解决Android7.0下沉浸式状态栏变灰的问题
  14. 通过ip如何免费反查域名?
  15. 改变文本颜色和字体大小的脚本
  16. Windows10中,如何改变鼠标光标(指针)的大小和颜色?
  17. 【NLP】神经网络语言模型(NNLM)
  18. 文件管理之文件和文件系统
  19. DBMS_AW_EXP: not AW$
  20. 晨风机器人安卓版_晨风qq机器人

热门文章

  1. 又真香了!到底是怎样的软件测试面试文档,拿到这么多大厂offer
  2. 开源中国大佬是怎么用Selenium做自动化web测试的
  3. Endnote在word中每次启动都要加载,或者无法加载的解决办法
  4. pd怎么转成mysql_powerdesigner中实现PDM到MYSQl数据库的转换《转》
  5. linux系统查看服务进程,Linux服务器系统详细查看进程启动时间
  6. A Concise and Provably Informative Multi-Scale Signature Based on Heat Diffusion
  7. Java判断某年是不是闰年
  8. python 函数图解_Python函数说明(一)
  9. CRNN+CTCLoss中文手写汉字识别
  10. 大数据工程师技能图谱