滴滴打车,打车软件app实现。小车在地图上平滑移动的实现,Android,基于高德地图开发实现

最近闲的没事干,发现滴滴出行的app,地图上的小汽车可以跑,很炫是不是,我们公司也是做车辆监控的app的,我就一直揣摩着怎么也让我们的小汽车在地图上跑来跑去啊,这样给人感觉好点,废话不说了,先看下滴滴出行的界面; 
这里写图片描述

1.我们的gps数据是车辆10秒上报一次位置数据;前端请求数据获取当前最新的gps位置; 
2.第一次请求到数据后我把所有的车辆先标记到地图上,高德地图有标记方法; 
3.标记到地图上以后,需要把marker存放到list记录下来(为了更新移动使用); 
4.当再次请求道新的gps数据的时候,我们需要平滑的移动到最新的位置,关键问题是再这里;怎么样在才能平滑移动呢,无非就是需要不断的移动从当前位置到最新的位置,这里就当时从A点移动到B点,无非就是marker.setPosition(),不断的调用知道B点,

List<Marker> markersMap = new ArrayList(Marker);//存放地图上标记marker
private void addMarkToMap(List<MarkerCarOptions> markerCarOptions){

            if(markersMap.size()!=0){
            //markersMap不为空,说明是更新marker
            for (Marker marker : markersMap) {
                for (MarkerCarOptions options : markerCarOptions) {
                    if(marker.getObject().equals(options.car.getBusid())){
                        moverCar(marker, options);
                        break;
                    }
                }
            }
}
    /**
     * 更新地图车辆位置
     * @param markerCarOptions
     */
private void moverCar(final Marker marker,final MarkerCarOptions options){

        //1,获取到起点到终点的点,默认绘制4个点,最后一个为终点
        final List<LatLng> roads = new ArrayList<LatLng>();
        LatLng startLatLng = marker.getPosition();//小车当前位置
        LatLng endLatLng = options.markerOptions.getPosition();//终点位置

        LatLng latLng_2 = new LatLng((startLatLng.latitude+endLatLng.latitude)/2, (startLatLng.longitude+endLatLng.longitude)/2);
        LatLng latLng_1 = new LatLng((startLatLng.latitude+latLng_2.latitude)/2, (startLatLng.longitude+latLng_2.longitude)/2);
        LatLng latLng_3 = new LatLng((latLng_2.latitude+endLatLng.latitude)/2, (latLng_2.longitude+endLatLng.longitude)/2);

        roads.add(latLng_1);
        roads.add(latLng_2);
        roads.add(latLng_3);
        roads.add(endLatLng);
        Thread t =new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub

                try {

                    for (int i = 0; i < roads.size(); i++) {
                        marker.setPosition(roads.get(i));
                        Thread.sleep(200);
                    }
                    marker.setIcon(options.markerOptions.getIcon());

                } catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
            }
        });
        t.start();
    }
 
 
  • 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

5,最后需要说明的是,大家问平均获取的中间点这样获取到底对不对,我告诉你确切的说是不准确的,但是在10秒每次上报的数据之间来这样算是没错的;具体大家可以测下下就知道了,稍后再上了例子好了

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序邦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值