百度地图api-marker-polyline 覆盖物展示和隐藏 以及自定义信息弹窗

这篇博客介绍了如何使用百度地图API进行地图上的点和线的绘制。具体包括添加带有图标的多个点坐标,以及绘制坐标点集合的线。点击点时会弹出详细信息框,展示了如何实现信息展示和关闭功能。此外,还讨论了如何通过循环匹配来实现展示和隐藏覆盖物,但指出对于大量数据可能需要优化方法。
摘要由CSDN通过智能技术生成

效果:
请添加图片描述

核心代码:

绘制点函数

/**
 * @desc 添加百度坐标的的坐标点集合 点
 * @param {*} markerArr   
 *  [
        {
            "lng": 112.20285691889676,
            "lat": 31.020073171119044
        },
        {
            "lng": 112.2023275670428,
            "lat": 31.02135414948254
        }
    ],
 * @param {Object} iconOne 
 * @param {Number} sizeX 
 * @param {Number} sizeY 
 */
function addMutiPointWithIcon(markerArr, map, iconOne, sizeX, sizeY) {
  markerArr.forEach(item => {
    // 添加点坐标
    var myIcon = new BMapGL.Icon(iconOne, new BMapGL.Size(sizeX, sizeY), {
      anchor: new BMapGL.Size(sizeX / 2, sizeY)
    });
    // 创建Marker标注,使用图标
    var pt = new BMapGL.Point(item.lng, item.lat);
    var marker = new BMapGL.Marker(pt, {
      icon: myIcon,
    });
    marker.type=item.type
    // console.log('这是marker',marker)
    // 将标注添加到地图
    map.addOverlay(marker);
    marker.addEventListener("click", function () {
      if (infoBox) {
        // 关闭旧的
        infoBox.close()
      }
      let str = ''
      if (item.propoties && item.propoties.length) {
        let pros = ''
        item.propoties.forEach(pro => {
          pros +=
            `<div class="infoOne">
            <div class="key">${pro.key}:</div>
          <div class="value">${pro.value}</div>
          </div>`
        })
        str = `
        <div class="baiduPopup">
          <div class="head">
            <div class="title">
            详细信息
            </div>
          </div>
          <div class="main">
             ${pros}
          </div>
        </div>`
        let html = [str];
        infoBox = new BMapGLLib.InfoBox(map, html.join(""), {
          boxStyle: {
            background: "rgba(3,38,84,0.9)",
            width: "18vw",
            height: "30vh",
          },
          closeIconMargin: "1vh 1vh 0 0",
          closeIconUrl: iconClose,
          enableAutoPan: true,
          align: INFOBOX_AT_TOP,
          offset: new BMapGL.Size(0, 32)
        });
        infoBox.open(marker);
      }
      // else {
      //   str = `
      //   <div class="baiduPopup">
      //     <div class="head">
      //       <div class="title">
      //       详细信息
      //       </div>
      //     </div>
      //     <div class="main">
      //       <div class="infoOne">
      //        暂无信息
      //       </div>
      //     </div>
      //   </div>`
      // }
      map.flyTo(pt)
    });
  })
}

引用函数绘制点
在这里插入图片描述
在这里插入图片描述
绘制线函数

/* 
@desc 添加百度坐标的的坐标点集合 
*/
/**
 * 
 * @param {Array} featureArr 
 * @param {Object} map 
 * @param {String} color 
 */
function addLayerWithBaidu(featureArr, map, color,type) {
  featureArr.forEach(item => {
    let path = []
    item.forEach(items => {
      path.push(new BMapGL.Point(items.lng, items.lat))
    })
    var polyline = new BMapGL.Polyline(
      path, {
        strokeColor: color,
        strokeWeight: 3,
        strokeOpacity: 1,
      }
    );
    polyline.type=type
    // console.log('这是polyline',polyline);
    map.addOverlay(polyline);
  })
}

引用函数绘制线:
在这里插入图片描述

勾选展示隐藏:这里我用的是循环匹配去展示和隐藏的,因为百度地图api没有那种覆盖物层,暂时我只能通过这种方法来展示隐藏,若数据量较大的话可能需要优化,少量数据可使用流畅。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值