美文网首页
android 高德地图轨迹回放功能

android 高德地图轨迹回放功能

作者: yeyecan | 来源:发表于2019-07-30 15:13 被阅读0次

1、高德地图web示例

最近要做一个根据用户车牌号查询用户定位和运动轨迹的功能,第一时间想到做web端的方便便于维护,且我们ios端是用h5框架编写的,也方便ios去使用,去查了一下高德地图,欸?这不就有现成的直接用吗。感慨一句真方便。如下图。


RPReplay_Final1564452712 (2).gif

怎么样,是不是超级方便?然后我们只要在app中的webview中打开它就可以了。开始动画,结束动画,选择时间统统交给web端去做,当然你也可以注入js来调用查询方法,随便你来定义啦。

2、高德地图示例代码

官网上就有详细的示例代码,这里贴上官网地址:高德地图轨迹回放示例,嫌麻烦没问题,代码都帮你们拷过来了。

<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title>轨迹回放</title>
    <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css"/>
    <style>
        html, body, #container {
            height: 100%;
            width: 100%;
        }

        .input-card .btn{
            margin-right: 1.2rem;
            width: 9rem;
        }

        .input-card .btn:last-child{
            margin-right: 0;
        }
    </style>
</head>
<body>
<div id="container"></div>
<div class="input-card">
    <h4>轨迹回放控制</h4>
    <div class="input-item">
        <input type="button" class="btn" value="开始动画" id="start" onclick="startAnimation()"/>
        <input type="button" class="btn" value="暂停动画" id="pause" onclick="pauseAnimation()"/>
    </div>
    <div class="input-item">
        <input type="button" class="btn" value="继续动画" id="resume" onclick="resumeAnimation()"/>
        <input type="button" class="btn" value="停止动画" id="stop" onclick="stopAnimation()"/>
    </div>
</div>
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=您申请的key值"></script>
<script>
    var marker, lineArr = [[116.478935,39.997761],[116.478939,39.997825],[116.478912,39.998549],[116.478912,39.998549],[116.478998,39.998555],[116.478998,39.998555],[116.479282,39.99856],[116.479658,39.998528],[116.480151,39.998453],[116.480784,39.998302],[116.480784,39.998302],[116.481149,39.998184],[116.481573,39.997997],[116.481863,39.997846],[116.482072,39.997718],[116.482362,39.997718],[116.483633,39.998935],[116.48367,39.998968],[116.484648,39.999861]];

    var map = new AMap.Map("container", {
        resizeEnable: true,
        center: [116.397428, 39.90923],
        zoom: 17
    });

    marker = new AMap.Marker({
        map: map,
        position: [116.478935,39.997761],
        icon: "https://webapi.amap.com/images/car.png",
        offset: new AMap.Pixel(-26, -13),
        autoRotation: true,
        angle:-90,
    });

    // 绘制轨迹
    var polyline = new AMap.Polyline({
        map: map,
        path: lineArr,
        showDir:true,
        strokeColor: "#28F",  //线颜色
        // strokeOpacity: 1,     //线透明度
        strokeWeight: 6,      //线宽
        // strokeStyle: "solid"  //线样式
    });

    var passedPolyline = new AMap.Polyline({
        map: map,
        // path: lineArr,
        strokeColor: "#AF5",  //线颜色
        // strokeOpacity: 1,     //线透明度
        strokeWeight: 6,      //线宽
        // strokeStyle: "solid"  //线样式
    });


    marker.on('moving', function (e) {
        passedPolyline.setPath(e.passedPath);
    });

    map.setFitView();

    function startAnimation () {
        marker.moveAlong(lineArr, 200);
    }

    function pauseAnimation () {
        marker.pauseMove();
    }

    function resumeAnimation () {
        marker.resumeMove();
    }

    function stopAnimation () {
        marker.stopMove();
    }
</script>
</body>
</html>

如上图,只写android,没接触过js的同学可能有点看不太懂,没问题,我来简单介绍一下,代码中的markerlineArr分别代表了覆盖物和线路,这个marker可以直接定义,比如在高德地图app中就是那个蓝色的定位图标

定位图标
就是这个玩意儿,在轨迹回放中呢,我们可以把他设计为一部车的形象,而lineArr就更好理解了,就是一个经纬度的数组,里面是车的行车路线的经纬度,然后可以调用new AMap.Polyline的方法来绘制一个行车轨迹,宾果!就是这么简单。

3、轨迹回放结合轨迹纠偏

因为合作方提供的坐标系担心不准确,所以尝试了一下高德自带的轨迹纠偏的api,轨迹纠偏接口可以将偏离道路的轨迹路径纠正到道路上,在地图上显示会看起来细节一点,比如说如下图

未纠偏红色和纠偏后蓝色对比
可以看到,一般我们的点对点绘制,都是直来直去的,两个点之间转折很突兀,但是用高德的轨迹纠偏,只要传过去相应格式的坐标系,就会给你返回纠正后的坐标系,官方使用方法在这里高德地图轨迹纠偏,不知道为什么,我用了轨迹纠偏在高速路上的表现惨不忍睹,甚至没有原坐标系好,但是在城区的表现比原坐标好很多。

记录一下这次轨迹回放功能的实现,就写到这里吧。

相关文章

网友评论

      本文标题:android 高德地图轨迹回放功能

      本文链接:https://www.haomeiwen.com/subject/uukgrctx.html