百度地图API-动态运行画面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了百度地图API-动态运行画面相关的知识,希望对你有一定的参考价值。

<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Track</title>
        <style type="text/css">
            html{height:100%}
            body{height:100%;margin:0px;padding:0px}
            #controller{width:100%; border-bottom:3px outset; height:50px; line-height: 50px; filter:alpha(Opacity=100); -moz-opacity:1; opacity:1; z-index:10000; background-color:lightblue;}
            #container{height:100%}
            .btn {
                background-color: green;
                color: white;
                display: inline-block;
                padding: 5px 12px;
                margin-bottom: 0;
                font-family: inherit;
                font-size: 13px;
                font-weight: 400;
                line-height: 1.53846154;
                text-align: center;
                white-space: nowrap;
                vertical-align: middle;
                cursor: pointer;
                -webkit-user-select: none;
                -moz-user-select: none;
                -ms-user-select: none;
                user-select: none;
                background-image: none;
                border: 1px solid transparent;
                border-radius: 4px;
                -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);
                box-shadow: inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);
                -webkit-transition: all .8s cubic-bezier(.175,.885,.32,1);
                -o-transition: all .8s cubic-bezier(.175,.885,.32,1);
                transition: all .8s cubic-bezier(.175,.885,.32,1);
            }
            .btn:disabled {
                background-color: grey;
            }
            a.btn {
                text-decoration: none;
                background: #8BCB25;
            }
        </style>
        <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=xxx"></script>
        <?php
        $trackJson = CJavaScript::jsonEncode($trackArr);
        ?>
        <script type="text/javascript">
            //解析数组
            var trackJsonObj = $.parseJSON(‘<?php echo $trackJson;?>‘);
            var len = trackJsonObj.length;
            var points=[];
            $.each(trackJsonObj , function(index , obj) {
                var point = new BMap.Point(obj.lng,obj.lat);
                points.push(point);
            });

            var map; //百度地图对象
            var car; //汽车图标
            var label; //信息标签
            var centerPoint;

            var timer; //定时器
            var index = 0; //记录播放到第几个point

            var followChk, playBtn, pauseBtn, resetBtn; //几个控制按钮

            function init() {
                followChk = document.getElementById("follow");
                playBtn = document.getElementById("play");
                pauseBtn = document.getElementById("pause");
                resetBtn = document.getElementById("reset");

                //初始化地图,选取第一个点为起始点
                map = new BMap.Map("container");
                map.centerAndZoom(points[0], 16);
                map.enableScrollWheelZoom();
                map.addControl(new BMap.NavigationControl());
                map.addControl(new BMap.ScaleControl());
                map.addControl(new BMap.OverviewMapControl({isOpen: true}));
                var myIcon = new BMap.Icon("http://developer.baidu.com/map/jsdemo/img/Mario.png", new BMap.Size(32, 70), {    //小车图片
                    offset: new BMap.Size(0, -5),    //相当于CSS精灵
                    imageOffset: new BMap.Size(0, 0)    //图片的偏移量。为了是图片底部中心对准坐标点。
                });
                //通过DrivingRoute获取一条路线的point
                var driving = new BMap.DrivingRoute(map);
                driving.search(points[0],points[len-1]);
                driving.setSearchCompleteCallback(function () {
                    //得到路线上的所有point
//                    points = driving.getResults().getPlan(0).getRoute(0).getPath();
//                    //画面移动到起点和终点的中间
                    centerPoint = new BMap.Point((points[0].lng + points[points.length - 1].lng) / 2, (points[0].lat + points[points.length - 1].lat) / 2);
                    for(var i=0 , len=points.length ; i < len ; i++) {
                        var marker = new BMap.Marker(points[i]);
                        marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
                        map.addOverlay(marker);
                    }
                    map.panTo(centerPoint);
                    //连接所有点
                    map.addOverlay(new BMap.Polyline(points, {strokeColor: "black", strokeWeight: 5, strokeOpacity: 1}));

                    //显示小车子
                    label = new BMap.Label("", {offset: new BMap.Size(-20, -20)});
                    car = new BMap.Marker(points[0],{icon:myIcon});
                    car.setLabel(label);
                    map.addOverlay(car);

                    //点亮操作按钮
                    playBtn.disabled = false;
                    resetBtn.disabled = false;
                });
            }

            function play() {
                playBtn.disabled = true;
                pauseBtn.disabled = false;

                var point = points[index];
                if (index > 0) {
                    map.addOverlay(new BMap.Polyline([points[index - 1], point], {strokeColor: "red", strokeWeight: 1, strokeOpacity: 1}));
                }
                label.setContent("经度: " + point.lng + "<br>纬度: " + point.lat + "<br/>生成时间:"+trackJsonObj[index].create_time);
                car.setPosition(point);
                index++;
                if (followChk.checked) {
                    map.panTo(point);
                }
                if (index < points.length) {
                    timer = window.setTimeout("play(" + index + ")", 600);
                } else {
                    playBtn.disabled = true;
                    pauseBtn.disabled = true;
                    map.panTo(point);
                }
            }

            function pause() {
                playBtn.disabled = false;
                pauseBtn.disabled = true;

                if (timer) {
                    window.clearTimeout(timer);
                }
            }

            function reset() {
                followChk.checked = false;
                playBtn.disabled = false;
                pauseBtn.disabled = true;

                if (timer) {
                    window.clearTimeout(timer);
                }
                index = 0;
                car.setPosition(points[0]);
                map.panTo(centerPoint);
            }
        </script>
    </head>

    <body onload="init();">
        <div id="controller" align="center">
            <input id="follow" type="checkbox"><span style="font-size:12px;">画面跟随</span></input>
            <input id="play" type="button" value="播放" onclick="play();" class="btn btn-edc-reset" disabled />
            <input id="pause" type="button" value="暂停" onclick="pause();" class="btn btn-edc-reset" disabled />
            <input id="reset" type="button" value="重置" onclick="reset()" class="btn btn-edc-reset" disabled />
            <?php echo CHtml::link("返回",array("/userCenter/taskmonitoring/sa/view" , ‘id‘=>$tid), array(‘class‘=>‘btn‘));?>
        </div>
        <div id="container"></div>
    </body>
</html>

  技术分享

 

以上是关于百度地图API-动态运行画面的主要内容,如果未能解决你的问题,请参考以下文章

百度地图API标注+时间轴组合

百度地图javascript api怎么实现自定义标记然后将多个标记点连线起来

地理位置服务——百度地图API

怎么用程序通过百度地图API批量获取具体地址的经纬度

安卓开发——在应用中简单调用Android百度地图API SDK

echarts+百度地图API