阅读:5070回复:19
画轨迹点
<P>我用VB+MAPOBJECT开发,现在我要实现以下功能:</P>
<P>有一系列的GPS测到的经纬度数据,是“度”的格式,如经度=116.30345;纬度=23.59275,</P> <P>请问我要怎样才能根据这些经纬度数据在MO上画出轨迹点?也就是根据经纬度来画点。需要详细的完整代码,因为我是第一次用MO,实在不知如何入手。</P> <P>希望能给个完整的源码,我的EMAIL:<a href="mailtzhyp2003@tom.com" target="_blank" >zhyp2003@tom.com</A></P> <P>谢谢!!!!!!!!!!!!!!!!</P> |
|
1楼#
发布于:2004-09-15 14:36
谢谢曾经关注过此帖的朋友,关于此帖的问题基本上解决了,如果各位还有更好的解决方法,请多多指教
|
|
2楼#
发布于: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编辑过]
|
|
3楼#
发布于: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>
|
|
4楼#
发布于: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>
|
|
5楼#
发布于: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>
|
|
6楼#
发布于: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" />
|
|
7楼#
发布于:2004-09-13 09:33
<P><b><FONT color=#000066>seava</FONT></b></P><P>点都显示在左上角会不会是因为你的地图文件没有地理位置配准?</P><P>我都没加载地图文件,当然是没有地理位置配准之说了。</P><P>我了解到的解决方法是:在没有地图文件时要经过坐标转换处理,但我对坐标转换不知该如何做,需要选择什么样的坐标系进行相互转换?</P>
|
|
8楼#
发布于: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> |
|
9楼#
发布于: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" />
|
|
上一页
下一页