【小白】记初学百度地图遇到的简单小问题

 

参照百度地图官方例子,实现更改默认图标,创建多个图标、标签、信息窗口,添加鼠标悬停事件、图标跳动效果,全部代码如下(重点标记部分见最后的注解):


HTML:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
        body, html {
            width: 100%;
            height: 100%;
            margin: 0;
            font-family: "微软雅黑";
        }

        #allmap {
            width: 100%;
            height: 780px;
        }

    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script>
    <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
    <title>给多个点添加信息窗口</title>
</head>
<body>
    <div id="allmap"></div>
</body>
</html>

JavaScript:

<script type="text/javascript">
    // 百度地图API功能
    map = new BMap.Map("allmap");
    map.centerAndZoom(new BMap.Point(116.417854, 39.921988), 15);   //设置地图显示中心点【1】

    /*存储信息集合【2】*/
    var data_info = [
        [116.417854, 39.921988, "地址:北京市东城区王府井大街88号乐天银泰百货八层"],
        [116.406605, 39.921585, "地址:北京市东城区东华门大街"],
        [116.412222, 39.912345, "地址:北京市东城区正义路甲5号"]
    ];

    /*创建信息窗口*/
    var opts = {
        width: 250,     // 信息窗口宽度
        height: 80,     // 信息窗口高度
        title: "信息窗口",      // 信息窗口标题
        enableMessage: true     //设置允许信息窗发送短息
    };

    /*遍历信息集合*/
    for (var i = 0; i < data_info.length; i++) {

        //创建坐标点
        var point = new BMap.Point(data_info[i][0], data_info[i][1]);

        //更改图标
        var myIcon = new BMap.Icon("https://i-blog.csdnimg.cn/blog_migrate/8c2e23ea14d9c887ecd443493ee12cfe.png", new BMap.Size(23, 25), {
            offset: new BMap.Size(10, 25),      // 指定定位位置
            imageOffset: new BMap.Size(0, 0 - 12 * 25)      //设置图片偏移(这里选中的第13个,从上往下)【3】
        });

        //创建标注
        var marker = new BMap.Marker(point, { icon: myIcon });

        //创建标签
        var label = new BMap.Label("我是标签" + i, { offset: new BMap.Size(20, -10) });
        label.setStyle({
            'max-width': 'none'     // bootstrap给label默认了一个max-width:100%;这句会影响地图label的样式【4】
        });
        map.addOverlay(marker);     // 将标注添加到地图中
        marker.setLabel(label);     // 把label设置到maker上

        //设置信息窗口内容
        var content = data_info[i][2];
        map.addOverlay(marker);     // 将标注添加到地图中
        addEventHandler(content, marker);       // 添加事件
        marker.setAnimation(BMAP_ANIMATION_BOUNCE);     // 跳动的动画
    }

    /*添加marker的事件*/
    function addEventHandler(content, marker) {
        //鼠标悬停事件
        marker.addEventListener("mouseover", function (e) {
            openInfo(content, e)
        });
    }

    /*打开信息窗口*/
    function openInfo(content, e) {
        var p = e.target;
        var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);
        var infoWindow = new BMap.InfoWindow(content, opts);  // 创建信息窗口对象
        map.openInfoWindow(infoWindow, point); //开启信息窗口
    }
</script>


最终效果图:



下面开始讲述容易出现的部分问题:


【1】地图未显示自定义坐标点?

开始时候,犯了一个特别low的错误,从后台数据库获取坐标点,运行后一直纳闷没显示图标,最后请教别人才知道是自己没有选好中心点,后台数据是广东的位置,中心点却定在北京,当然是找不到的。如果不知道坐标,可以用百度地图的拾取坐标系统http://api.map.baidu.com/lbsapi/getpoint/index.html拾取到想要的中心点坐标。


【2】后台数据集合问题

注意是二维数组,我用ajax从后台获取数据是这样写的:

                    //二维数组
                    var data_info = new Array();
                    for (var i = 0; i < data.Data.length; i++) {
                        data_info[i] = new Array();
                        data_info[i][0] = data.Data[i].LocaltionX;  //经度
                        data_info[i][1] = data.Data[i].LocaltionY;  //维度
                        data_info[i][2] = data.Data[i].content;     //信息窗口内容
                    }


【3】更改icon图标问题

引用百度自己的标注,如果没深入学过前端CSS,可能还不太明白,这里可以参考CSS的background-position

如果是想用自定样式的话可以自己制作并切图,具体操作可以百度下“百度地图icon自定义”等关键字。



【4】label标签问题

    如果不写【4】,效果(“我是标签0”)如下:

百度后才知道是套用了bookstracp,默认label max-width:100%,所以要改为none

小白一只,记录下学习中遇到的困难,如若有什么错误或问题还望多多指教~

 
 
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值