JS 百度地图实现地图上显示多种自定义覆盖物

1 篇文章 0 订阅
1 篇文章 0 订阅

JS 百度地图实现地图上显示多种自定义覆盖物功能总结(可结合Echarts实现,多看api,能节省不少时间)

实现效果图:

1.BMap 坐标点添加自定义标注(Maker使用图片)

 2.BMap 标注弹出信息提示框(使用InfoWindow)

 var pointArray = new Array();

    var maker = new Array();

    var greenIcon = new BMap.Icon('/public/src/Partner/img/green_normal.png',new BMap.Size(30,30));

    var purpleIcon = new BMap.Icon('/public/src/Partner/img/purple_offline.png',new BMap.Size(30,30));

    var yellowIcon = new BMap.Icon('/public/src/Partner/img/yellow_shut.png',new BMap.Size(30,30));

    var redIcon = new BMap.Icon('/public/src/Partner/img/red_stop.png',new BMap.Size(30,30));

 

    for(var i = 0;i < makerArr.length; i++){

        var p0 = makerArr[i].point.split(",")[0];

        var p1 = makerArr[i].point.split(",")[1];

 

        var steelContent = '<div><p style="margin:0;line-height:1.2;font-size:13px;"><br/>经度:'+p0+'<br/>纬度:'+p1+

            '<br/><br>设备名称:'+makerArr[i].title+'</br></p></div>';

        var steelOpts = {

            width : 80,     //信息窗口宽度

            height: 100,     //信息窗口高度

            title : "" , //信息窗口标题

            enableMessage:true //设置允许信息窗发送短息

        };

        pointArray[i] = new BMap.Point(p0,p1);

        maker[i] =  createMaker(makerArr[i].state,pointArray[i],steelContent,steelOpts);

 

      map.addOverlay(maker[i]);

    };

        function createMaker (state,point,content,option){

        var maker = null;

        if(state == 0){

            maker = new BMap.Marker(point,{icon:greenIcon});

        }else if(state == 1){

            maker= new BMap.Marker(point,{icon:purpleIcon});

        }else if(state == 2){

            maker = new BMap.Marker(point,{icon:yellowIcon});

        }else if(state == 3){

            maker = new BMap.Marker(point,{icon:redIcon});

        };

        maker.addEventListener("mouseover",function(){

            this.openInfoWindow(new BMap.InfoWindow(content, option));

        });

        maker.addEventListener("mouseout",function(){

            this.closeInfoWindow();

        });

        return maker;

};

上述方式可以实现自定标注,鼠标经过覆盖物时,弹窗显示提示信息

还有一种方式:

使用PointCollection(),一个PointCollection只能显示一种图标,若要显示多种,则可以使用多个PointColletion.弹窗的信息可以通过点携带信息。

var pointArrayGreen = new Array();
    var pointArrayPurple = new Array();
    var pointArrayYellow = new Array();
    var pointArrayRed = new Array();
    var pointArray = new Array();

    for(var i = 0;i < makerArr.length; i++){
        var p0 = makerArr[i].point.split(",")[0];
        var p1 = makerArr[i].point.split(",")[1];

        var point = new BMap.Point(p0,p1);
        point.title = makerArr[i].title;
        if(makerArr[i].state == 0){
            pointArrayGreen.push(point);
            pointArray.push(point);
        }else if(makerArr[i].state == 1){
            pointArrayPurple.push(point);
            pointArray.push(point);
        }else if(makerArr[i].state == 2){
            pointArrayYellow.push(point);
            pointArray.push(point);
        }else{
            pointArrayRed.push(point);
            pointArray.push(point);
        }
       // markers[i] =  createMaker(makerArr[i].state,pointArray[i],steelContent,steelOpts);
       // map.addOverlay(markers[i]);
    };
   // pointArray = pointArrayGreen.concat(pointArrayPurple).concat(pointArrayYellow).concat(pointArrayRed);
    var optionsGreen = {
        shape:BMAP_POINT_SHAPE_STAR    ,
        size:BMAP_POINT_SIZE_BIG,
        color:'#6CC00F'
    };
    var optionsPurple = {
        shape:BMAP_POINT_SHAPE_STAR    ,
        size:BMAP_POINT_SIZE_BIG,
        color:'#6C6FBF'
    };
    var optionsYellow = {
        shape:BMAP_POINT_SHAPE_STAR    ,
        size:BMAP_POINT_SIZE_BIG,
        color:'#F5A623'
    };
    var optionsRed = {
        shape:BMAP_POINT_SHAPE_STAR    ,
        size:BMAP_POINT_SIZE_BIG,
        color:'#FF5300'
    };
    var pointCollectionGreen = new BMap.PointCollection(pointArrayGreen,optionsGreen);
    var pointCollectionPurple = new BMap.PointCollection(pointArrayPurple,optionsPurple);
    var pointCollectionYellow = new BMap.PointCollection(pointArrayYellow,optionsYellow);
    var pointCollectionRed = new BMap.PointCollection(pointArrayRed,optionsRed);
    map.addOverlay(pointCollectionGreen);
    map.addOverlay(pointCollectionPurple);
    map.addOverlay(pointCollectionYellow);
    map.addOverlay(pointCollectionRed);
    var steelOpts = {
        width : 80,     //信息窗口宽度
        height: 100,     //信息窗口高度
        title : "" , //信息窗口标题
        enableMessage:true    //设置允许信息窗发送短息
    };
    pointCollectionGreen.addEventListener("mouseover",function(e){
        var point = new BMap.Point(e.point.lng,e.point.lat);
        var steelContent = '<div><p style="margin:0;line-height:1.2;font-size:13px;"><br/>经度:'+e.point.lng+'<br/>纬度:'+e.point.lat+
            '<br/><br>设备名称:'+e.point.title+'</br></p></div>';
        map.openInfoWindow(new BMap.InfoWindow(steelContent, steelOpts),point);
    });
    pointCollectionPurple.addEventListener("mouseover",function(e){
        var point = new BMap.Point(e.point.lng,e.point.lat);
        var steelContent = '<div><p style="margin:0;line-height:1.2;font-size:13px;"><br/>经度:'+e.point.lng+'<br/>纬度:'+e.point.lat+
            '<br/><br>设备名称:'+e.point.title+'</br></p></div>';
        map.openInfoWindow(new BMap.InfoWindow(steelContent, steelOpts),point);
    });
    pointCollectionYellow.addEventListener("mouseover",function(e){
        var point = new BMap.Point(e.point.lng,e.point.lat);
        var steelContent = '<div><p style="margin:0;line-height:1.2;font-size:13px;"><br/>经度:'+e.point.lng+'<br/>纬度:'+e.point.lat+
            '<br/><br>设备名称:'+e.point.title+'</br></p></div>';
        map.openInfoWindow(new BMap.InfoWindow(steelContent, steelOpts),point);
    });
    pointCollectionRed.addEventListener("mouseover",function(e){
        var point = new BMap.Point(e.point.lng,e.point.lat);
        var steelContent = '<div><p style="margin:0;line-height:1.2;font-size:13px;"><br/>经度:'+e.point.lng+'<br/>纬度:'+e.point.lat+
            '<br/><br>设备名称:'+e.point.title+'</br></p></div>';
        map.openInfoWindow(new BMap.InfoWindow(steelContent, steelOpts),point);
    });
    pointCollectionGreen.addEventListener("mouseout",function(){
        map.closeInfoWindow();
    });
    pointCollectionPurple.addEventListener("mouseout",function(){
        map.closeInfoWindow();
    });
    pointCollectionYellow.addEventListener("mouseout",function(){
        map.closeInfoWindow();
    });
    pointCollectionRed.addEventListener("mouseout",function(){
        map.closeInfoWindow();
    });

3.BMap 自定义控件(左下角的标注信息)

 // 定义一个控件类,即function

    function ZoomControl(){

        // 设置默认停靠位置和偏移量

        this.defaultAnchor = BMAP_ANCHOR_TOP_LEFT;

        this.defaultOffset = new BMap.Size(10, 400);

    }

    // 通过JavaScript的prototype属性继承于BMap.Control

    ZoomControl.prototype = new BMap.Control();

    ZoomControl.prototype.initialize = function(map){

        var div = document.createElement("div");

        // 添加文字说明

        var div1 =  div.appendChild(document.createElement("div"));

        var img = document.createElement("img");

        img.src = '/public/src/Partner/img/green_normal.png';

        img.style.width = "16px";

        img.style.height = "16px";

        div1.appendChild(img);

        div1.appendChild(document.createTextNode("正常设备"));

 

 

        var div2 =  div.appendChild(document.createElement("div"));

        var img = document.createElement("img");

        img.src = '/public/src/Partner/img/purple_offline.png';

        img.style.width = "16px";

        img.style.height = "16px";

        div2.appendChild(img);

        div2.appendChild(document.createTextNode("离线设备"));

        div2.style.marginTop = "10px";

 

        var div3 =  div.appendChild(document.createElement("div"));

        var img = document.createElement("img");

        img.src = '/public/src/Partner/img/yellow_shut.png';

        img.style.width = "16px";

        img.style.height = "16px";

        div3.appendChild(img);

        div3.appendChild(document.createTextNode("断电设备"));

        div3.style.marginTop = "10px";

 

        var div4 =  div.appendChild(document.createElement("div"));

        var img = document.createElement("img");

        img.src = '/public/src/Partner/img/red_stop.png';

        img.style.width = "16px";

        img.style.height = "16px";

        div4.appendChild(img);

        div4.appendChild(document.createTextNode("停运设备"));

        div4.style.marginTop = "10px";

 

        /*div.style.cursor = "pointer";

        div.style.border = "1px solid gray";

        div.style.backgroundColor = "white";*/

 

        // 添加DOM元素到地图中

        map.getContainer().appendChild(div);

        // 将DOM元素返回

        return div;

    };

    var myZoomCtrl = new ZoomControl();

    // 添加到地图当中

    map.addControl(myZoomCtrl);

4.Echarts 地图使用,样式多样化(全局图及局部图)

  1. geo方式,设置option信息如下
  2. bmap方式,option中如下

5.地图缩放级别根据坐标点自适应

 function setZoom(bPoints) {
     var view = map.getViewport(eval(bPoints));
     var mapZo}传参为所有地图点的数组。

6.鼠标移到地图左下角自定义标注上市地图相应显示对应点

  1.使用echarts的legend

2.自定义控件设置mouseover,mouseout事件

7.echart与BMap结合

<script type="text/javascript" src="http://echarts.baidu.com/gallery/vendors/echarts/echarts.min.js"></script>
<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=UGPStLSouCwqTsplymZXEaowiIl7wjUR"></script>
<script type="text/javascript" src="http://echarts.baidu.com/gallery/vendors/echarts/extension/bmap.min.js"></script>

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值