安卓实现在百度地图上播放历史轨迹

把一个人一个月的轨迹历史描绘出来,并实现按时间顺序回放。小弟菜鸟一枚,代码质量不高,高手勿喷,谢谢。

关于描点和描线,百度地图都有自己的API,大家都应该会了;至于播放动画,肯定不止一种方法,如果大家有好的方法,分享出来,小弟感激不尽。

我的方法是:在一个线程里,开始播放后,遍历存放item的list,找到当前的item,移除他的marker,然后给他换一个marker,再添加到list里面,然后睡眠;接着就判断,如果不是当前item,该什么样子就什么样子,如此迭代就可以了。

http://c.tieba.baidu.com/p/3452432876

http://c.tieba.baidu.com/p/3452895427

http://c.tieba.baidu.com/p/3452890088

代码如下:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

/**
轨迹回放逻辑处理 **/

    private

Runnable rz =
new

Runnable()

    {

        @Override

        public

synchronized

void

run()

        {

            while

(isStartRun)

            {

                for

(
int

i = index; i < mGeoList.size(); i++)

                {

                    OverlayItem
item = mGeoList.get(i);

                    flag
= index;

                    sendMsg(MapApplication.LOCATEOVER_NOTICE_ADAPTER);

                    mOverlayGraphic.removeItem(item);

                    item.setMarker(res.get(3));

                    if

(!isBcak)

                    {

                        break;

                    }

                    mOverlayGraphic.addItem(item);

                    mMapView.refresh();

                    SystemUtils.sleep(1000);

                    mOverlayGraphic.removeItem(item);

                    if

(index ==
0)

                    {

                        item.setMarker(res.get(1));

                    }

                    else

if

(index == mGeoList.size() -
1)

                    {

                        item.setMarker(res.get(2));

                        isStartRun
=
false;

                        isFinish
=
false;

                    }

                    else

                    {

                        View
view = mInflater.inflate(R.layout.overlay_item,
null);

                        TextView
userItemTv1 = (TextView) view.findViewById(R.id.item_tv1);

                        userItemTv1.setText(index
+
1

+
"");

                        Bitmap
bmp = userLocateUtil.createNewBitmap(view);

                        Drawable
drawable =
new

BitmapDrawable(bmp);

                        item.setMarker(drawable);

http://c.tieba.baidu.com/p/3452432876

http://c.tieba.baidu.com/p/3452895427

http://c.tieba.baidu.com/p/3452890088

                    }

                    if

(!isBcak)

                    {

                        break;

                    }

                    mOverlayGraphic.addItem(item);

                    mMapView.refresh();

                    index++;

                    if

(!isFinish)

                    {

                        index
=
0;

                        sendMsg(MapApplication.LOCATEOVER_PLAY_FINISH);

                        break;

                    }

                }

            }

        }

    };

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

private

Handler handler =
new

Handler()

    {

        public

void

handleMessage(Message msg)

        {

            switch

(msg.what)

            {

                case

MapApplication.LOCATEOVER_CHANGE_MAPVIEW:

                    changeMapView();

                    break;

                case

MapApplication.LOCATE_MAPVIEW_REFRESH:

                    mMapView.refresh();

                    mMapView.getController().zoomToSpan(mOverlayGraphic.getLatSpanE6(),
mOverlayGraphic.getLonSpanE6());

                    mMapView.getController().setCenter(mOverlayGraphic.getCenter());

                    PocProgressDialog.cancel();

                    break;

                case

MapApplication.LOCATEOVER_PLAY_FINISH:

                    Toast.makeText(MainActivity.mainActivity,
"播放完毕",
Toast.LENGTH_SHORT).show();

                    flag
=
99999;

                    adapter.notifyDataSetChanged();

                    play.setText("开始回放");

                    break;

                case

MapApplication.LOCATEOVER_NOTICE_ADAPTER:

                    adapter.notifyDataSetChanged();

                    //
mListView.setSelection(flag);备用

                    break;

            }

        }

    };

主要的逻辑就在这里了,下面看看效果:

http://c.tieba.baidu.com/p/3452432876

http://c.tieba.baidu.com/p/3452895427

http://c.tieba.baidu.com/p/3452890088

播放前:

播放时:

http://c.tieba.baidu.com/p/3452432876

http://c.tieba.baidu.com/p/3452895427

http://c.tieba.baidu.com/p/3452890088

时间: 2024-11-08 22:19:00

安卓实现在百度地图上播放历史轨迹的相关文章

百度地图上自定义图片覆盖物上加点击事件

在百度地图上加自定义图片覆盖物之后,在这个覆盖物上加点击手势,发现并不识别.原因不太清楚.不过可以通过别的方法来实现这个功能. 需要用到BMKMapViewDelegate中的方法: - (void)mapView:(BMKMapView *)mapView onClickedMapBlank:(CLLocationCoordinate2D)coordinate 然后判断所点击的坐标是否在指定区域内,在指定区域内之后,调用自己写的相应地方法即可. 百度地图上自定义图片覆盖物上加点击事件,布布扣,

百度地图上的行政区域内部颜色的动态改变

今天刚完成百度地图上的行政区域内部颜色的动态改变(随时间).虽然能基本实现功能,但每次改变颜色时都要重新加载覆盖物(行政区域). 全部源代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w

利用HTML5定位功能,实现在百度地图上定位

利用HTML5定位功能,实现在百度地图上定位 代码如下: <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>HTML5定位</title>     <script type="text/javascript" src="http://lib.sinaapp

利用HTML5定位功能,实现在百度地图上定位(转)

原文:利用HTML5定位功能,实现在百度地图上定位 代码如下: 测试浏览器:ie11定位成功率100%,Safari定位成功率97%,(add by zhj :在手机上测试(用微信内置浏览器打开),无论使用WIFI还是移动4G联网, 定位精度都是蛮高的,误差在几十米内) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>

html5定位并在百度地图上显示

在开发移动端 web 或者webapp时,使用百度地图 API 的过程中,经常需要通过手机定位获取当前位置并在地图上居中显示出来,这就需要用到html5的地理定位功能. navigator.geolocation.getCurrentPosition(callback); 在获取坐标成功之后会执行回调函数 callback; callback 方法的参数就是获取到的坐标点:然后可以初始化地图,设置控件.中心点.缩放等级,然后给地图添加point的overlay: var map = new BM

使用百度地图API制作线路轨迹播放

1.使用百度地图API制作轨迹播放: 可应用于车辆跟踪.行驶线路回放.跑步行程的记录等地图应用场景, 1.1绘制静态轨迹图 获取多个轨迹点point(必须包含经度.纬度) 使用polyline对象依次连接相邻的2个点(注意polyline的个数比point的少1) 1.2绘制动态轨迹图(固定间隔时间) 每隔500毫秒读取一个轨迹点,实现a,b两个功能 a增加一条polyline b将marker从先前的point移到当前点 主方法使用setTimeout方法迭代来实现动态循环 Polyline在

团队项目:安卓端用百度地图api定位显示跑道

因为安卓调用api对我来说是一个完全陌生的领域,我在经过很长时间终于弄出来了,这段时间还是很有成效的,我得到了历练. 第一步:注册成为百度开发者 在百度地图开放平台创建应用.地址http://lbsyun.baidu.com/index.php?title=首页 在电脑中找到sha1码来注册,寻找sha1码的方式,网上有教程,开始我没有用集成安卓的eclipse,用android studio.所以采用的是cmd命令台的方式查找的. 这张图片节选自网络 这是另一种方式:在eclipse中打开Wi

调取百度地图接口,实现取自己的实时位置,然后可以在百度地图上添加信息标注

前几天接了一个小项目,就是有关百度地图的,和我的上一篇不一样,上一篇是复制人家的源代码是把东西写死了的,这次的比较有难度,要调取他的接口,用js来实现. 下面我先说一下主要实现的功能,和要实现的页面 这个小项目分为前台和后台 前台需要两个页面,第一个页面是一打开就可以获得自己的实时位置,显示当前位置与当前的经纬度,这两项是自动获取的,还有标题和电话是可以自己添加的,点击添加,就是到达百度地图的页面,你刚刚添加的东西就会在这个地图上显示,形成一个标注,点击标注,里面显示的就是刚刚你添加的标题和电话

GPS、基站定位在百度地图上纠偏的解决方法

1.加入convertor.js文件 <script type="text/javascript" src="http://api.map.baidu.com/getscript?v=1.4"></script> <script type="text/javascript" src="http://dev.baidu.com/wiki/static/map/API/examples/script/conve