baidu 地图多个终点选择一个最近的,画出行车线路


var storecity = '{$_JOYEGB[ipstore][city]}';
var storelng = "{$storelng}";  //经度
var storelat = "{$storelat}";  //纬度
var storename = "{$storename}";  //名称
var storeid = "{$storeid}";  //id
var storeoutsitedistance = "{$storeoutsitedistance}"; //送餐距离
var storeoutsitetime = "{$storeoutsitetime}"; //送餐时间
var storepreparetime = "{$storepreparetime}"; //送餐时间
var storelngstr = storelng.substring(0,storelng.length-1).split("|");    //将获取来的字符串使用"|"切割成数组
var storelatstr = storelat.substring(0,storelat.length-1).split("|");
var storenamestr = storename.substring(0,storename.length-1).split("|");
var storeidstr = storeid.substring(0,storeid.length-1).split("|");
var storeoutsitedistancestr = storeoutsitedistance.substring(0,storeoutsitedistance.length-1).split("|");  
var storeoutsitetimestr = storeoutsitetime.substring(0,storeoutsitetime.length-1).split("|");  
var storepreparetimestr = storepreparetime.substring(0,storepreparetime.length-1).split("|");
var map,marker,myGeo,myIcon,storeIcon,storePoint,storeMarker,polyline,pts,driving,searchIndex,minVal,minPoint,storePoints,fixedPoint,distance,outsitetime,arraytime;
var getDistanceValue;
function addaddress(tar){
    if(map)
        return false;
    
    $(tar).hide();
    $(tar).prev().show();
    $(tar).prev().prev().show();
    $(tar).next().show();
    $(tar).next().next().show();
    $(tar).prev().unbind('keyup');
    $(tar).prev().unbind('blur');
    $(tar).prev().val(storecity);
    
    
    $(tar).prev().keyup(
    
        function(){
            if(myGeo){                
                $('#distance_info').html('');
                $('#distance_inp').val('');    
                myGeo.getPoint($(tar).prev().val(), function(point){
                    if (point) {
                        map.centerAndZoom(point, 16);
                        addmarker(point,$(tar).prev(),$(tar).next(),true);
                    }
                }, $(tar).prev().val());
            }
        }
    );    
    
    $(tar).prev().blur(    
        function(){            
            if(myGeo){                
                myGeo.getPoint($(tar).prev().val(), function(point){
                    if (point) {
                        map.centerAndZoom(point, 16);
                        addmarker(point,$(tar).prev(),storePoints,true);
                    }
                }, $(tar).prev().val());
            }
        }
    );        
    
    
    myIcon = new BMap.Icon( 'image/Bubble_me.png',new BMap.Size(30, 48),{anchor: new BMap.Size(15, 48)});
    storeIcon = new BMap.Icon( 'image/Bubble_small.png',new BMap.Size(30, 48),{anchor: new BMap.Size(15, 48)});
    map = new BMap.Map('MAPCONTENT');  
    driving = new BMap.DrivingRoute(map);    //创建驾车实
    myGeo = new BMap.Geocoder();
    searchIndex = 0;
    var mkr = null;
    var markers = [];
    storePoints  = [];
    for(i=0;i<storelngstr.length;i++){
        var storePoint = new BMap.Point(storelngstr[i], storelatstr[i]);
        storePoint.name = storenamestr[i];
        storePoint.id = storeidstr[i];
        storePoint.outsitedistance = storeoutsitedistancestr[i];
        storePoint.outsitetime = storeoutsitetimestr[i];
        storePoint.preparetime = storepreparetimestr[i];
        storePoints.push(storePoint);
         mkr = new BMap.Marker(storePoint, {title: storenamestr[i]});      
           map.addOverlay(mkr);
        var label = new BMap.Label(storenamestr[i],{offset:new BMap.Size(20,-10)});
            mkr.setLabel(label);
            markers.push(mkr);
            map.centerAndZoom(storePoint, 16);
    }
    
    driving.setSearchCompleteCallback(function(rs){  
          searchIndex++;
        
        pts = driving.getResults().getPlan(0).getRoute(0).getPath();    //通过驾车实例,获得一系列点的数组  
        getDistanceValue = driving.getResults().getPlan(0).getDistance(false);
        getDistance = driving.getResults().getPlan(0).getDistance(true);
        
         if(!minVal ||  minVal > getDistanceValue){
            minVal =  getDistanceValue;
            minPoint = (rs.getStart()).point;
            fixedPoint = pts;
            distance = getDistance;
         }
        
         if( searchIndex == storePoints.length){
            var st = getStoreInfo(minPoint);
            
            if(minVal < st.outsitedistance){
                arraytime =  Math.ceil(minVal / 1000)*parseFloat(st.outsitetime) +parseFloat(st.preparetime);
                output = "<b style='color:red;'>" +distance +"</b>";             //获取距离
                $('#distance_info').html('&nbsp;距离'+st.name+':'+ output+'&nbsp;&nbsp下单后预计送达时间:<b style="color:red";>'+arraytime+'</b>分钟');    
                $('#distance_inp').val(minVal);        
                $('#storeid').val(st.id);    
                
                if(polyline) map.removeOverlay(polyline);
                if(fixedPoint){
                    polyline = new BMap.Polyline(fixedPoint);       
                    map.addOverlay(polyline);
                }
            }else{
                alert("对不起,您当前地址超出"+st.name+"送餐范围!");
                $('#distance_info').html('');
                $('#distance_inp').val('');    
            }
        
            minVal = null
            searchIndex = 0;
            
         }
        
        
    
            
        
    });
    myGeo.getPoint(storecity, function(point){
        if (point) {        
            marker = new BMap.Marker(point,{icon:myIcon});
            map.addOverlay(marker);            
            addmarker(point,$(tar).prev(),storePoints);
            $('input[name=lng]').val(point.lng);
            $('input[name=lat]').val(point.lat);
            setTimeout(function(){
                map.panTo(point);
                marker.setAnimation(BMAP_ANIMATION_BOUNCE);
            },3000);
        }
    }, storecity);

    map.addEventListener("click", function(e){  
        addmarker(e.point,$(tar).prev(),storePoints);
    })
    
    map.enableScrollWheelZoom();  // 开启鼠标滚轮缩放
    map.enableKeyboard();         // 开启键盘控制
    map.enableContinuousZoom();   // 开启连续缩放效果
    //map.enableInertialDragging(); // 开启惯性拖拽效果
}

function getStoreInfo(pts){
    for(var i=0,l=storePoints.length; i<l ; i++){
        if(pts.lng == storePoints[i].lng    && pts.lat == storePoints[i].lat){
            
            return     storePoints[i];
        }    
    }
}
function addmarker(point,input,storePoints,key){

    if(marker)
        map.removeOverlay(marker);
    
    marker = new BMap.Marker(point,{icon:myIcon});
    map.addOverlay(marker);
    marker.setAnimation(BMAP_ANIMATION_BOUNCE);
    
    $('input[name=lng]').val(point.lng);
    $('input[name=lat]').val(point.lat);
    
    myGeo.getLocation(point, function(rs){
        
        if(input && !key){
            var addComp = rs.addressComponents;
            input.val(addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);
        }
         //三种驾车策略:最少时间,最短距离,避开高速
        var routePolicy = [BMAP_DRIVING_POLICY_LEAST_TIME,BMAP_DRIVING_POLICY_LEAST_DISTANCE,BMAP_DRIVING_POLICY_AVOID_HIGHWAYS];
        for(i=0;i<storePoints.length;i++){
            driving.search(storePoints[i], point,routePolicy[1]);   
    
        }
        
        
    });
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值