js 百度地图

GPS定位与百度地图应用

js 百度地图


<!DOCTYPE html>
<html>
<head>
    <title>GPS定位系统</title>
    <meta name="Robots" content="noindex,nofollow,noarchive"/>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no"/>
    <link rel="shortcut icon" type="image/x-icon" href="__STATIC__/img/favicon.ico?version={:C('VERSION')}"/>
    <link rel="stylesheet" type="text/css" href="__STATIC__/css/base.css?version={:C('VERSION')}"/>
    <style>
        .amap-copyright{display:none !important}
        #calendarTable{line-height:16px !important}

        .menu_icon{float:left;margin:7px 0 0 10px;font-family:Comic Sans MS;width:18px;height:3px;padding:3px 0;border-top:3px solid #DD575C;border-bottom:3px solid #DD575C;background-color:#DD575C;background-clip:content-box;cursor:pointer}

        .desk_tab{width:100%;line-height:26px}
        .desk_tab th, .desk_tab td{border:1px solid #CCCCCC}
        .desk_tab th{background:#DFE8F6}
        .desk_tab td.hover_t{border:1px dashed #CCCCCC;color:#999}
        .desk_tab td.hover_t:hover{border:1px dashed #BBBBBB;color:#666}

        #route_desk select, #route_desk input{vertical-align:middle;font-size:14px }
        #route_desk button{vertical-align:middle;padding:5px 1%;border:none;border-radius:3px;background:#6699CC;font-size:14px;color:#EEEEEE}

        /*配送员位置的Label名字*/
        .amap-marker-label{min-width:50px;text-align:center;background:rgba(0,0,0,0.5);box-sizing:border-box;border:0;border-radius:3px;color:#FFF}

        #map_set{position:absolute;right:0;bottom:0;z-index:99;padding:5px 10px;border:1px solid #666;border-radius:5px;background:#FFF}

        #orbitbg{position:absolute;z-index:990;top:50%;bottom:0;width:100%;height:50%;background:rgba(0,0,0,0.7)}
    </style>
</head>
<body class="hboxpage" data-first="0">
<div id="gps_desk" style="width:320px">
    <p class="mt10 mb10 center" style="border-bottom:1px solid #ccc;">
        <select style="margin-left:10px;font-size:12px;padding:2px;width:140px;height:35px;"  id="onoffline" onchange="displayOnOff()">

        </select>
        <input type="text" id='nickName' value="" style="width:140px;height:30px;" placeholder="输入名称查询" oninput="queryNickName()">
        <input type="hidden" id="offinput" value="0" >
    </p>
    <p class="center mt10 mb10" style="display: none">
        <select style="margin-left:10px;font-size:14px;padding:3px" onchange="fresh()" id="selectFresh">
            <option value="1">10秒刷新</option>
            <option value="2">不刷新</option>
        </select>
        <button class="active_t" style="padding:2px 4%" onclick="window.location.reload();">刷新</button>
    </p>
    <p class="pointer hover_t" style="text-align:center" onclick="addUser()"><b class="mr10 font16" style="vertical-align:middle;">+</b>定位器</p>
    <table class="center desk_tab">
        <tr>
            <th width="100">名称</th>
            <!--<th width="50" class="pointer active_t" onclick="setKeloopBear();">持单↺</th>-->
            <th width="50" class="pointer active_t">持单</th>
            <th width="50" class="pointer active_t" onclick="deskSequence(this)" data-type="0">状态↑↓</th>
            <th width="40">定位</th>
            <th width="45">操作</th>
        </tr>
        <tbody id="detailTemplate">
        </tbody>
        <script type="text/html" id="detailTemplate_tmp">
            {{each list as arr i }}
            <tr id="offline" data-id="{{arr.id}}" data-state="{{if arr.state==1}}online{{else}}offline{{/if}}">
                {{if arr.from==1}}
                <td class="pointer fontb clo0" title="定位神器:{{arr.device_imei}}">{{arr.nick_name}}</td>
                {{/if}}
                {{if arr.from==2}}
                <td class="pointer fontb blue" title="快跑者APP帐户:{{arr.id_card}}">{{arr.nick_name}}</td>
                {{/if}}
                {{if arr.from==1}}
                <td>-</td>
                {{/if}}
                {{if arr.from==2}}
                <!--<td id="bear_{{arr.id_card}}">-</td>-->
                <td >{{arr.count}}</td>
                {{/if}}
                {{if arr.state==1}}
                <td class="green" title="号卡:{{arr.id_card}}">在线</td>
                {{/if}}
                {{if arr.state==0}}
                <td class="clo9" title="号卡:{{arr.id_card}}">离线</td>
                {{/if}}
                {{if arr.record}}
                <td class="pointer" onclick="focusCenter(this)" id="sign_{{arr.id}}" data-longitude="{{arr.record.longitude}}" data-latitude="{{arr.record.latitude}}">
                    <img height="24" src="__STATIC__/img/sign_map.png"/>
                </td>
                {{else}}
                <td><img height="24" src="__STATIC__/img/sign_map_no.png"/></td>
                {{/if}}
                {{if arr.from==1}}
                <td class="cmlr3">
                    <a onclick="updateUser($(this))" style="cursor:pointer;" data-id="{{arr.id}}" data-name="{{arr.nick_name}}" data-card="{{arr.id_card}}" data-imei="{{arr.device_imei}}" data-charactor="{{arr.from}}">修改</a>
                </td>
                {{/if}}
                {{if arr.from==2}}
                <td class="cmlr3">-</td>
                {{/if}}
            </tr>
            {{/each}}
        </script>
    </table>
</div>

<div class="flex vboxpage bgf">
    <div class="flex" id="container" style="overflow:hidden"></div>
</div>

<div class="flex" id="vista" style="width:60%;display:none"></div>

<div id="map_set">
    <p>
        <button class="active_t font14" onclick="startRuler()">开始测距</button>
        <button class="right active_t font14" onclick="closeVista()" id="closeVistaBtn" style="display:none">关闭街景</button>
    </p>
</div>

<!--个人信息设置-->
<div id="set_box" style="display:none"></div>

<!--修改设备对话框-->
<div id="gps_userU" style="display:none">
    <div class="fullbg" style="z-index:399" onclick="$(this).parent().hide();"></div>
    <div class="pop center" style="z-index:400">

        <div id="type_deviceU" style="display:block">
            设备编号:<input type="text" id="device_imeiU" /><br/>
            备注名称:<input type="text" id="nick_nameU" /><br/>
            SIM号卡:<input type="text" id="id_cardU" /><br/><br/>
        </div>

        <button class="common_btn" onclick="update();">提交保存</button>
        <button class="common_btn" style="margin-left:30px;background:#CCCCCC;" onclick="del();">删除设备</button>
    </div>
</div>

<!--添加设备对话框-->
<div id="gps_user" style="display:none">
    <div class="fullbg" style="z-index:399" onclick="$(this).parent().hide();"></div>
    <div class="pop center" style="z-index:400">
        <!--设备类型:-->
        <!--<label><input type="radio" na   me="from" value="1" checked>定位神器</label>-->
        <!--<label><input type="radio" name="from" value="2">快跑者APP</label><br/>-->
        <div id="type_device" style="display:block">
            设别编号:<input type="text" id="device_imei" /><br/>
            备注名称:<input type="text" id="nick_name" /><br/>
            SIM号卡:<input type="text" id="id_card" /><br/><br/>
        </div>
        <button class="common_btn" onclick="add();">提交保存</button>
    </div>
</div>
</body>
</html>
<script type="text/javascript" src="__STATIC__/js/jquery.2.2.1.min.js"></script>
<script type="text/javascript" src="__STATIC__/js/template.js?version={:C('VERSION')}"></script>
<script type="text/javascript" src="__STATIC__/js/calendar.js"></script>

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=7isb5V1OeAamqDkMICsp3Yaz"></script>


<script>
    var markers = [],

        detailData,
        detailDataOnline=[],
        detailDataOffline=[],
        id,
        imei,
        idCard,
        nickName,
        circledata,
        polylines = [],
        pathName = [],
        pathData = [],
        pathColor= [];

    var searchUrl = "http://yingyan.baidu.com/api/v3/entity/search";

    var map = new BMap.Map("container");          // 创建地图实例
    var point = new BMap.Point(116.404, 39.915);  // 创建点坐标
    map.centerAndZoom(point, 15);                 // 初始化地图,设置中心点坐标和地图级别
    map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放

    map.addControl(new BMap.NavigationControl());
    map.addControl(new BMap.ScaleControl());
    map.addControl(new BMap.OverviewMapControl());
    map.addControl(new BMap.MapTypeControl());

    //设置所在城市
    var myCity = new BMap.LocalCity();
    myCity.get(function myFun(result){
        var cityName = result.name;
        map.setCenter(cityName);
    });

    $(function(){
        setKeloopLogin();

        fresh();

        setTimeout(function(){
            $("body").data("first","1");
        },500);

    });

    /*设置快跑者进入的登录*/
    function setKeloopLogin(){
        var token = '{$token}';
        if(token != ''){
            token_str = 'Bearer '+token;
            var expdate = new Date();   //初始化时间
            expdate.setTime(expdate.getTime() + 1*(60 * 60 * 24 * 7)*1000);   //设置过期时间1天
            document.cookie = "authorization"+"="+token_str+";expires="+expdate.toGMTString()+";path=/";
        }
    }



    /*对在线离线配送员排序*/
    function deskSequence(obj){
        var type=$(obj).data("type");
        $("#detailTemplate").find("tr").each(function (){
            if(type==0 || type==2) {
                if ($(this).data("state") == "offline") {
                    $("#detailTemplate").append($(this));
                }
                $(obj).data("type",1);
            }else{
                if ($(this).data("state") == "online") {
                    $("#detailTemplate").append($(this));
                }
                $(obj).data("type",2);
            }
        })
    }

    function fmtDate(obj){
        var date =  new Date(obj);
        var y = 1900+date.getYear();
        var m = "0"+(date.getMonth()+1);
        var d = "0"+date.getDate();
        return y+"-"+m.substring(m.length-2,m.length)+"-"+d.substring(d.length-2,d.length);
    }


    //判断下拉框设置刷新时间
    function fresh(){
        getdata();

        if($("#selectFresh").val() == 1){
            circledata = setInterval("getdata()", 10000);
        }else{
            clearInterval(circledata);
        }
        if($("body").data("first")){
            clearpop("设置成功!");
        }
    }

    function conver(){
        var x = 116.32715863448607;
        var y = 39.990912172420714;
        var ggPoint = new BMap.Point(x,y);

        var convertor = new BMap.Convertor();
        var pointArr = [];
        pointArr.push(ggPoint);

        var a;

        convertor.translate(pointArr, 3, 5, function (data){
            if(data.status === 0) {
                a = data.points[0];
                console.log(data);
            }
        });
        return a;
    }

    var a = conver();
    console.log(a);


    function ajaxDataProcess(data){
        console.log(data);
        var totalTemp = [];
        var temp=[];
        var temp2 = [];

        if(data.status==0){
            var entities = data.entities;
            if(entities.length<0){
                return ;
            }

            for(var i=0;i<entities.length;i++){
                var entity = entities[i];
                var locTime = entity.latest_location.loc_time;
                var lon = entity.latest_location.longitude;
                var lat = entity.latest_location.latitude;
                var curTime =  Date.parse(new Date())/1000;
                if(locTime+600<curTime){
                    entity['state'] = 0;
                }else{
                    entity['state'] = 1;
                }

                var locDate = fmtDate(locTime);
                var ob = {
                    "id":entity['entity_name'],
                    "nick_name":entity['entity_desc'],
                    "id_card":entity['tel'],
                    "power":entity['power'],
                    "gate_time":locDate,
                    "state":entity['state'],
                    "create_time":entity['create_time'],
                    "user_id":entity['team_id'],
                    "count":entity['hold_num'],
                    "record":{
                        "gate_time": locDate,
                        "latitude": lat,
                        "longitude": lon
                    },
                };
                totalTemp.push(ob);
            }
        }

        detailData = totalTemp;

        for (var i = 0; i <detailData.length; i++) {
            if(detailData[i].state==1){
                temp.push(detailData[i]);
            }else{
                temp2.push(detailData[i]);
            }
        }

        detailDataOnline=temp;
        detailDataOffline=temp2;
        render();

        console.log(detailDataOffline);
    }
    //ajax获取数据当前所有用户信息列表
    function getdata(){
        var data = {
            'ak':'7isb5V1OeAamqDkMICsp3Yaz',
            'service_id':'154508',
            'filter':'entity_names:1,2,3'
        };
        $.ajax({
            url:searchUrl,
            type:"GET",
            async:true,
            data:data,
            dataType:'jsonp',
            success:function(data){
                ajaxDataProcess(data);
            }
        });
    }

    //渲染页面模板
    function render(){
        var onlinelist = template('detailTemplate_tmp', {list:detailDataOnline});
        var alllist= template('detailTemplate_tmp', {list:detailData});
//            namelist = template('monitorNameTmp', {nameList:detailData});
        var val = $("#nickName").val();
        if(val!=''){
            $('#detailTemplate').html(alllist);
        }else{
            $('#detailTemplate').html(onlinelist);
        }

//        setKeloopBear();
        openInfo(detailDataOnline);
//        $("#monitorName").append(namelist);

        displayPath(detailDataOnline);
        setOnOffNum();
    }

    function setOnOffNum(){
        $("#onoffline").empty();
        var onNum = detailDataOnline.length;
        var offNum = detailDataOffline.length;

        $("#onoffline").append("<option value='1'>在线("+onNum+")人</option><option value='2'>离线("+offNum+")人</option>");
    }

    function displayOnOff(){
        var val = $("#onoffline").val();
        if(val==1){
            circledata = setInterval("getdata()", 10000);
            $('#detailTemplate').html(template('detailTemplate_tmp', {list:detailDataOnline}));
            openInfo(detailDataOnline);
            displayPath(detailDataOnline);
        }else{
            clearInterval(circledata);
            $('#detailTemplate').html(template('detailTemplate_tmp', {list:detailDataOffline}));

            openInfo(detailDataOffline);//显示离线人员位置

            if(polylines.length>0){
                removeMapOverLay(polylines);
            };
        }
    }

    function queryNickName(){
        var val = $("#nickName").val();
        if(val!=''){
            var data = {
                'ak':'7isb5V1OeAamqDkMICsp3Yaz',
                'service_id':'154508',
                'filter':'entity_names:1,2,3|entity_desc:'.val
            };
            $.ajax({
                url:searchUrl,
                type:"GET",
                async:true,
                data:data,
                dataType:'jsonp',
                success:function(data){
                    ajaxDataProcess(data);
                }
            });
            clearInterval(circledata);
        }else{
            fresh();
        }
    }

    /*构建配送员标记*/
    //obj代表要展示定位的对向列表,有detailData(所有配送员)detaiDataOnline(在线配送员)
    function openInfo(obj){

        removeMapOverLay(markers);

        if(!obj){
            return;
        }
        for (var i = 0;i < obj.length;i++){
            var k = [];
            if(obj[i].record){
                k[0] = obj[i].record.longitude;
                k[1] = obj[i].record.latitude;
                var icon = '';
                if(obj[i].state==1){
                    icon = '__STATIC__/img/gps/person.png';
                }else{
                    icon = '__STATIC__/img/gps/offperson.png';
                }

                var pt = new BMap.Point(k[0],k[1]);
                var myIcon = new BMap.Icon(icon, new BMap.Size(300,157));
                var marker = new BMap.Marker(pt,{icon:myIcon});  // 创建标注
                map.addOverlay(marker);              // 将标注添加到地图中

                var label = new BMap.Label(obj[i].nick_name,{offset:new BMap.Size(0,-25)});
                marker.setLabel(label);

                var content ='<p class="fontb" ><b>'+obj[i].nick_name+'</b></p><hr>'+
                    '<p class="fontb">坐标时间 :'+obj[i].record.gate_time+'</p>' +
                    '<p class="fontb" >当前持单量 :'+obj[i].count+'</p>';

                var opts = {
                    width : 300,     // 信息窗口宽度
                    height: 100,     // 信息窗口高度
                    offset: new BMap.Size(0,-25)
                }
                var infoWindow = new BMap.InfoWindow(content, opts);  // 创建信息窗口对象
                marker.addEventListener("click", function(){
                    map.openInfoWindow(infoWindow,pt); //开启信息窗口
                });

                markers.push(marker);

                $("#sign_"+obj[i].id).data("longitude",k[0]).data("latitude",k[1]).data('id',obj[i].id);
            }
        }
    }


    /*添加监控的配送员*/
    function addUser(){
        $("#gps_user").show();
        $("#id_card").val("");
        $("#nick_name").val("");
        $("#device_imei").val("");

    }
    //设置已添加配送员信息
    function updateUser(f){
        var ck = $(f).data("charactor");
        if(ck == 1){
            $("#type_deviceU").show();
            $("#type_keloopU").hide();
            $("#id_cardU").val($(f).data("card"));
            $("#nick_nameU").val($(f).data("name"));
            $("#device_imeiU").val($(f).data("imei"));
        }else{
            $("#type_keloopU").show();
            $("#type_deviceU").hide();
            $("#keloop_nick_nameU").val($(f).data("name"));
            $("#keloop_id_cardU").val($(f).data("card"));
        }
        $("#gps_userU").show();
        var _$id = "#"+ck;
        $(_$id).prop("checked",true);
        id= $(f).data("id");
    }


    //点击图标maker移到地图中央
    function focusCenter(obj){
        var id=$(obj).data("id"),
            clickLatitude = $(obj).data("latitude"),
            clickLongitude = $(obj).data("longitude");

        var pt = new BMap.Point(clickLongitude,clickLatitude);
        map.setCenter(pt);

        for(var i=0;i<detailData.length;i++){
            if(detailData[i].id==id){
                if(detailData[i].state==1){
                    displayPath([detailData[i]]);
                }
                openInfo([detailData[i]]);
                break;
            }
        }
    }
    //添加信息提交
    function add(){
//        var from = $("input[name='from']:checked").val();
        var from = 1;
        if(from == 1){
            imei = $("#device_imei").val();
            idCard = $("#id_card").val();
            nickName = $("#nick_name").val();
        }else if(from == 2){
            if($("#keloop_couriers").length>0){
                idCard = $("#keloop_couriers").val();
                nickName = $('#keloop_couriers option:selected').data('name');
            }else{
                idCard = $("#keloop_id_card").val();
                nickName = $("#keloop_nick_name").val();
            }
        }
        $.ajax({
            url:"/Api/PointRecord/addDevice",
            type:"POST",
            data:{
                from:from,
                imei:imei,
                idCard:idCard,
                nickName:nickName,
            },
            success:function(data){
                if(data.code == "200"){
                    $("#gps_user").hide();
                    getdata();
                    render();
//                    setKeloopBear();
                }else{
                    clearpop(data.message);
                }
            }
        })
    };

    //更改信息提交
    function update(){
//        var from = $("input[name='fromU']:checked").val();
        var from = 1;
        if(from == 1){
            idCard = $("#id_cardU").val();
            nickName = $("#nick_nameU").val();
            imei=$('#device_imeiU').val();
        }else if(from == 2){
            idCard = $("#keloop_id_cardU").val();
            nickName = $("#keloop_nick_nameU").val();
        }
        $.ajax({
            url:"/Api/PointRecord/updateDevice",
            type:"POST",
            data:{
                from:from,
                idCard:idCard,
                nickName:nickName,
                id:id,
                imei:imei
            },
            success:function(data){
                if(data.code == "200"){
                    $("#gps_userU").hide();
                    getdata();
                    render();
//                    setKeloopBear();
                }else{
                    clearpop(data.message);
                }
            }
        })
    }
    //删除信息提交
    function del(){
        if(confirm("确认删除?")){
            idCard = $("#id_cardU").val();
            nickName = $("#nick_nameU").val();
            $.ajax({
                url:"/Api/PointRecord/deleteDevice",
                type:"POST",
                data:{
                    id:id
                },
                success:function(data){
                    if(data.code == "200"){
                        $("#gps_userU").hide();
                        getdata();
                        render();
//                        setKeloopBear();
                    }else{
                        clearpop(data.message);
                    }
                }
            })
        }
    }

    function removeMapOverLay(overLays){
        if(overLays.length>0){
            for(var i=0;i<overLays.length;i++){
                map.removeOverlay(overLays[i]);
            }
        };
    }

    //显示配送员轨迹
    function displayPath(obj){

        removeMapOverLay(polylines);

        var num = obj.length;

        var colors = [
            "#3366cc", "#dc3912", "#ff9900", "#109618", "#990099", "#0099c6", "#dd4477", "#66aa00",
            "#b82e2e", "#316395", "#994499", "#22aa99", "#aaaa11", "#6633cc", "#e67300", "#8b0707",
            "#651067", "#329262", "#5574a6", "#3b3eac"
        ];

        if(num>0){
            for(var i=0;i<num;i++){
                var tel  = obj[i].id_card;
                var lon = obj[i].record.longitude;
                var lat = obj[i].record.latitude;
                var curData = [];
                if(tel!=undefined&&lon!=undefined&&lat!=undefined){
                    if(($.inArray(tel,pathName)==-1||pathName.length==0)){
                        var pt = new BMap.Point(lon, lat);

                        var dataJson = {
                            'tel':tel,
                            'point':[pt],
                        };
                        pathData.push(dataJson);
                        pathName.push(tel);
                    }else{

                        for(var j=0;j<pathData.length;j++){
                            if(pathData[j].tel==tel){
                                var pt = new BMap.Point(lon, lat);
                                pathData[j].point.push(pt);

                                var curData = pathData[j].point;
                                var oldData = curData.map(function(val){
                                    return val;
                                });
                                if(curData.length>2){
                                    var color = '';
                                    for(var n=0;n<pathColor.length;n++){
                                        if(pathColor[n].tel==tel){
                                            var color = pathColor[n].color;
                                            break;
                                        }
                                    }

                                    if(color==''){
                                        var color = getColorByRandom(colors);
                                        pathColor.push({'tel':tel,'color':color});
                                    }

                                    var polyline = new BMap.Polyline(curData,
                                        {
                                            strokeColor:color,
                                            strokeWeight:6,
                                            strokeOpacity:1,
                                            strokeStyle: "dashed",
                                            strokeDasharray:[10, 5]
                                        }
                                    );
                                    map.addOverlay(polyline);

                                    polylines.push(polyline);

                                    curData = oldData;
                                }
                            }
                        }
                    }
                }
            }
        }
    }


    function getColorByRandom(colorList){

        var colorIndex = Math.floor(Math.random()*colorList.length);

        var color = colorList[colorIndex];

        colorList.splice(colorIndex,1);

        return color;

    }

</script>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值