leaflet 点击地图marker,popup弹框展示chart图效果实现

该博客介绍了如何利用Leaflet库在地图上绘制Marker,并为Marker添加点击事件。当点击Marker时,会弹出一个包含站点信息的popup窗口。popup内容包括站点名称、当日雨量以及一个ECharts图表,展示近7日雨量过程线。此外,还展示了具体的代码实现和最终效果。
摘要由CSDN通过智能技术生成

1.leaflet绘制地图marker,添加点击事件

drawWaterStMarker(arr){
   // 如果地图没有加载完毕,则返回
   if(!this.map){
      return;
   }
   
   // 清空地图上已存在的站点
  if(this.layerGroup !== null){
       this.layerGroup.clearLayers();
   }
   
   // 如果站点数据为空则返回
  if(arr.length === 0){
     return;
  }

  const layers = [];
  
  for (let item of arr) {
     if(item.lgtd && item.lttd){
         let imgSrc = 'market.jpg';
         let str = `<p class="mapLetter">${item.name}</p>`;
         var myIcon = L.divIcon({
             iconSize: [32, 32],
             iconAnchor: [16, 32],
             html: `<div><img src="${imgSrc}"/>${str}</div>`
         });

         let marker = L.marker([item.lttd, item.lgtd], {
             icon: myIcon
         });
         // 地图marker添加点击事件
         marker.on(`click`, () => {
             this.handleMapMarerClick(item);
         });
         layers.push(marker);
     }
     
 }
     
 this.layerGroup = L.layerGroup(layers);
 this.map.addLayer(this.layerGroup);
 },

2.点击弹框效果实现

handleMapMarerClick(item){
   let drp = item.drp || '--';
   let content = `<div class="boundaryMask-popup">`
   + `<p class="title">${item.stnm}</p>`
    + `<ul class="info">`
   + `<li><span>当日雨量:</span>${drp}</li>`
    +`</ul>`
   + `<div style="width:100%;height:200px" id="pptnMapChart"></div>`
   +` </div>`;
   L.popup({minWidth : 350})
   .setLatLng([item.lttd, item.lgtd])
   .setContent(content)
   .openOn(this.map);
   
   // 判断当前是否有绘制chart的数据,如果有,则显示chart图,如果没有则提示,暂无数据
   if(item.dataList && item.dataList.length > 0){
       this.drawPptnChart(item.dataList);
   }else{
       $("#pptnMapChart").html('<div class="no-data" style="padding-top:15px;">暂无数据</div>');
   }
}

3.popup弹框chart效果实现

drawPptnChart(dataList){
    var myChart=echarts.init(document.getElementById('pptnMapChart'));
    let tmArr = [];
    let dataOne = [];

    for(let item of dataList){
        tmArr.push(item.tm);
        dataOne.push(item.dyp);
    }
    var option = {
             color : ['#006AFF '],
             tooltip: {
                 trigger: 'axis',
                 axisPointer: {
                     type: 'shadow'
                 }
             },
             grid: {
                 top : 50,
                 left: 20,
                 right: 0,
                 bottom: 0,
                 containLabel: true
             },
             xAxis: [{
                 type: 'category',
                 data: tmArr,
                 axisTick: {
                     alignWithLabel: true
                 },
                 axisLabel: {
                     textStyle: {
                         color: '#fff',
                         fontSize: 10
                     },
                     formatter(params) {
                         return params.substring(5,7) + '月' + params.substring(8,10) + '日'
                     }
                 },
             }],
             yAxis: [{
                 name: '近7日雨量过程线(mm)',
                 nameTextStyle : {
                     color : '#409EFF'
                 },
                 type: 'value',
                 splitLine: {
                     show: false,
                 },
                 axisLabel: {
                     textStyle: {
                         color: '#409EFF',
                         fontSize: 10
                     },
                 }
             }],
             series: [{
                     type: 'bar',
                     data: dataOne
                 }
             ]
         };

    myChart.setOption(option);
 },

4.效果图

在这里插入图片描述

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值