ZHYP
路人甲
路人甲
  • 注册日期2003-12-11
  • 发帖数27
  • QQ
  • 铜币205枚
  • 威望0点
  • 贡献值0点
  • 银元0个
10楼#
发布于:2004-09-09 15:37
<P>请问楼上的:你的这段代码是关于MO的吗?我怎么找不到OnAfterDraw这个事件啊?</P><P>谢谢你的回复</P><P>以下代码:</P><P>Dim pt As MapObjects2.Point
Dim tl As MapObjects2.TrackingLayer
Private Sub sRePlay()
    Dim lngLoop As Long
    Dim bCenter As Boolean
    bCenter = False
    For lngLoop = 1 To lngRecAll - 1
        If bUnload Then Exit Sub
        Seek #ihFile, cTestPLFileHeaderLen + 1 + cTestPLFileRecordLen * (lngLoop)
        Get #ihFile, , wDataWdd
        With wDataWdd
            mNowdblLon = Val(.Lon)
            mNowdblLat = Val(.Lat)
            labInfo = "经度:" + .Lon + "--纬度:" + .Lat
            If mNowdblLon <> 0 And mNowdblLat <> 0 Then
                If Not bCenter Then
                    moMain.CenterAt mNowdblLon, mNowdblLat
                    bCenter = True
                End If
                
                Set pt = New MapObjects2.Point
                pt.x = mNowdblLon
                pt.y = mNowdblLat
                tl.AddEvent pt, 0
            End If
        End With
        DoEvents
    Next
    Close #ihFile
End Sub</P><P>在加载了地图文件(shp类型)后可以正常画出GPS所走的轨迹,但如果没有加载地图,也就是说MO上没任何图层的话,就不能画出轨迹,请问要如何做?</P><P>我用MAPX开发的话,不加载任何地图文件也一样可以画出GPS所走的轨迹,但现在用MO就不知要如何做了</P>
举报 回复(0) 喜欢(0)     评分
wangjunjolly
路人甲
路人甲
  • 注册日期2003-09-11
  • 发帖数356
  • QQ
  • 铜币1040枚
  • 威望0点
  • 贡献值0点
  • 银元0个
11楼#
发布于:2004-09-10 18:35
<P>这也是我正要问的问题。关注。</P><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em07.gif" /><img src="images/post/smile/dvbbs/em08.gif" />
举报 回复(0) 喜欢(0)     评分
seava
路人甲
路人甲
  • 注册日期2004-03-11
  • 发帖数63
  • QQ
  • 铜币182枚
  • 威望0点
  • 贡献值0点
  • 银元0个
12楼#
发布于:2004-09-12 17:01
<DIV class=quote><B>以下是引用<I>ZHYP</I>在2004-9-8 15:39:04的发言:</B>

<P>是在trackinglayer上画,但不知该怎么做。</P>
<P>我用tomappoint函数转换了经纬度,但画的点在MO上要么显示不出来,要么就是都显示在左上角上,不能显示成一条GPS行走的轨迹路线</P>
<P>如果我加载了地图后,不用tomappoint函数就可以直接用经纬度画点并在地图上相应位置上显示</P>
<P>请问这要如何解决?</P>
<P>谢谢各位的答复</P></DIV>
<P>点都显示在左上角会不会是因为你的地图文件没有地理位置配准?</P>
举报 回复(0) 喜欢(0)     评分
ZHYP
路人甲
路人甲
  • 注册日期2003-12-11
  • 发帖数27
  • QQ
  • 铜币205枚
  • 威望0点
  • 贡献值0点
  • 银元0个
13楼#
发布于:2004-09-13 09:33
<P><b><FONT color=#000066>seava</FONT></b></P><P>点都显示在左上角会不会是因为你的地图文件没有地理位置配准?</P><P>我都没加载地图文件,当然是没有地理位置配准之说了。</P><P>我了解到的解决方法是:在没有地图文件时要经过坐标转换处理,但我对坐标转换不知该如何做,需要选择什么样的坐标系进行相互转换?</P>
举报 回复(0) 喜欢(0)     评分
wangjunjolly
路人甲
路人甲
  • 注册日期2003-09-11
  • 发帖数356
  • QQ
  • 铜币1040枚
  • 威望0点
  • 贡献值0点
  • 银元0个
14楼#
发布于:2004-09-13 14:10
<P>支持,希望斑竹和高手能够关注此问题。给予解答。</P><img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em07.gif" /><img src="images/post/smile/dvbbs/em08.gif" />
举报 回复(0) 喜欢(0)     评分
ZHYP
路人甲
路人甲
  • 注册日期2003-12-11
  • 发帖数27
  • QQ
  • 铜币205枚
  • 威望0点
  • 贡献值0点
  • 银元0个
15楼#
发布于:2004-09-14 13:22
<P><b><FONT color=#000066>wangjunjolly</FONT></b></P><P><b><FONT color=#000066>谢谢你的大力支持!</FONT></b></P><P><b><FONT color=#000066>请各位MO高手帮帮忙,指点指点</FONT></b></P>
举报 回复(0) 喜欢(0)     评分
zhangkaicn
路人甲
路人甲
  • 注册日期2004-07-23
  • 发帖数14
  • QQ
  • 铜币144枚
  • 威望0点
  • 贡献值0点
  • 银元0个
16楼#
发布于:2004-09-14 22:30
<P>参考帮助中的信息</P><P>定义 point  和 geoevent</P><P>point = map1.tomappoint(经度 , 纬度)</P><P>map1.tracklayer.addevent(geoevent, symbol)</P><P>geoevent.x = point.x</P><P>geoevent.y = point.y</P><P>然后循环得到 point 的坐标 使用 geoevent 的 moveto 方法</P><P>point = map1.tomappoint(经度 纬度)</P><P>geoevent.moveto(point.x,point.y)</P><P>友情提示  geoevent 有 tag 属性 可以存放字符串 帮助程序的编写</P><P>关键是 mo 还支持搜索该属性呢  :)</P>
举报 回复(0) 喜欢(0)     评分
ZHYP
路人甲
路人甲
  • 注册日期2003-12-11
  • 发帖数27
  • QQ
  • 铜币205枚
  • 威望0点
  • 贡献值0点
  • 银元0个
17楼#
发布于:2004-09-15 09:47
<P><b><FONT color=#000066>zhangkaicn:</FONT></b></P><P><b><FONT color=#000066>我用了你提到的geoEvent和MoveTo,都不行啊。</FONT></b></P><P><b><FONT color=#000066>能不能帮我写个完整点的代码帖出来啊?谢谢!!!!!!</FONT></b></P>
举报 回复(0) 喜欢(0)     评分
ZHYP
路人甲
路人甲
  • 注册日期2003-12-11
  • 发帖数27
  • QQ
  • 铜币205枚
  • 威望0点
  • 贡献值0点
  • 银元0个
18楼#
发布于:2004-09-15 11:45
<P>自己想了一个解决方法:</P>
<P>Dim pt As MapObjects2.Point
Dim tl As MapObjects2.TrackingLayer
Private Sub sRePlay()</P>
<P>    ihFile = FreeFile
    Open App.Path + "\覆盖.wdd" For Binary As #ihFile
    Dim curDbfHead As tDbfHead
    Seek #ihFile, 1
    Get #ihFile, , curDbfHead
    lngRecAll = CLng(curDbfHead.recordno)
    bUnload = False
    
    Dim lngLoop As Long
    Dim bCenter As Boolean
    bCenter = False
    mOlddblLon = 0: mOlddblLat = 0
    If moMain.Layers.Count > 0 Then
        For lngLoop = 0 To moMain.Layers.Count - 1
            If moMain.Layers(lngLoop).Name = "tmpShp" Then
                moMain.Layers.Remove lngLoop
            End If
        Next
    End If
    For lngLoop = 1 To lngRecAll - 1
        If bUnload Then Exit Sub
        Seek #ihFile, cTestPLFileHeaderLen + 1 + cTestPLFileRecordLen * (lngLoop)
        Get #ihFile, , wDataWdd
        With wDataWdd
            mNowdblLon = Val(.Lon)
            mNowdblLat = Val(.Lat)
            labInfo = "经度:" + .Lon + "--纬度:" + .Lat
            If (mNowdblLon <> 0 And mNowdblLat <> 0) And (mNowdblLon <> mOlddblLon Or mNowdblLat <> mOlddblLat) Then
                Set pt = New MapObjects2.Point
                pt.x = mNowdblLon
                pt.y = mNowdblLat
                
                If Not bCenter Then
                    '***根据取得的第一个经纬度生成一个shp文件并加载该文件**</P>
<P>                    '***此时就相当于加载了地图,使得MO有了相应的坐标系**
                    Dim dc As New MapObjects2.DataConnection
                    Dim mlyrNew As New MapObjects2.MapLayer
                    Dim gdsNew As MapObjects2.GeoDataset
                    Dim tdesc As New MapObjects2.TableDesc
                    With tdesc
                        ' define three additional fields
                        .FieldCount = 3
                        'set the field names
                        .FieldName(0) = "Name"
                        .FieldName(1) = "LON"
                        .FieldName(2) = "LAT"
                        ' set the type of field
                        .FieldType(0) = moString
                        .FieldType(1) = moDouble
                        .FieldType(2) = moDouble
                        ' set the length of a character field
                        .FieldLength(0) = 20
                        ' set the number of digits used in the field
                        .FieldPrecision(1) = 12
                        .FieldPrecision(2) = 12
                        ' set the number of digits to the right of the decimal point
                        .FieldScale(1) = 6
                        .FieldScale(2) = 6
                    End With
                    dc.Database = App.Path
                    dc.Connect
                    'Create new empty shapefile
                    Set gdsNew = dc.AddGeoDataset("tmpShp", moShapeTypePoint, tdesc)
                    
                    Set mlyrNew.GeoDataset = gdsNew
                    mlyrNew.Symbol.SymbolType = moPointSymbol
                    mlyrNew.Symbol.Style = moCircleMarker
                    mlyrNew.Symbol.Color = moWhite
                    mlyrNew.Symbol.Outline = False
                    mlyrNew.Symbol.Size = 1
                    
                    Dim recs As MapObjects2.Recordset
                    Set recs = mlyrNew.Records
                    recs.AutoFlush = False
                    '**************************************************************************************
                    recs.AddNew
                    recs.Fields("Name").Value = "GPS"
                    recs.Fields("LON").Value = pt.x
                    recs.Fields("LAT").Value = pt.y
                    recs.Fields("shape").Value = pt
                    recs.Update
                    recs.StopEditing
                    moMain.Layers.Add mlyrNew
                    moMain.Refresh
                    '**************************************************************************************
                    Dim oRect As MapObjects2.Rectangle
                    Set oRect = moMain.Extent
                    oRect.ScaleRectangle (0.1)
                    moMain.Extent = oRect</P>
<P>
                    moMain.CenterAt pt.x, pt.y
                    
                    bCenter = True
                End If
                '*********************************************
                Dim tX As Single, tY As Single
                moMain.FromMapPoint pt, tX, tY
                If (tX > (moMain.Width - 10)) Or (tY > (moMain.Height - 10)) Or tX < 0 Or tY < 0 Then
                    moMain.CenterAt pt.x, pt.y
                End If
                '*********************************************
                tl.AddEvent pt, 0
                
                mOlddblLon = mNowdblLon
                mOlddblLat = mNowdblLat
            End If
        End With
        DoEvents
    Next
    Close #ihFile
End Sub
</P>

[此贴子已经被作者于2004-9-15 14:33:04编辑过]
举报 回复(0) 喜欢(0)     评分
ZHYP
路人甲
路人甲
  • 注册日期2003-12-11
  • 发帖数27
  • QQ
  • 铜币205枚
  • 威望0点
  • 贡献值0点
  • 银元0个
19楼#
发布于:2004-09-15 14:36
谢谢曾经关注过此帖的朋友,关于此帖的问题基本上解决了,如果各位还有更好的解决方法,请多多指教
举报 回复(0) 喜欢(0)     评分
上一页 下一页
游客

返回顶部