高德地图渲染多个marker和信息窗体

该代码段展示了从服务端加载河流数据并使用Ajax进行POST请求的实现。数据成功返回后,内容被用来创建自定义信息窗口,显示包括河流名称、位置、属性等详细信息。在地图上点击标记时,会弹出相应河流的信息窗体。
摘要由CSDN通过智能技术生成

 function loadWaterDataFromService() {
  let url = baseip + '/api/selectAttRvBaseList';
  $.ajax({
    xhrFields: {
      withCredentials: false,
    },
    type: 'POST',
    url: url,
    success: function (data) {
      if (data.lists) {
        tableData_river = data.lists;
        icon = icon1;
        //清空数据并展示
        openWaterInfoBox(tableData_river,'rvName','rvSourLong','rvSourLat');
      } else if ('exception' == data.result) {
        //
      }
    },
  })
    .done()
    .fail(function () {});
}

function getContent(singleData){
    let html = `<div class="infoWindow-box">
                    <img class="infoWindow-close" src="../../static/image/close_white.png" />
                    <p class="infoWindow-title">${isnull(singleData.rvName)}</p>
                    <div class="pic-box">
                        <img src="${baseip.substring(0, baseip.length - 1) + singleData.img}"/>
                    </div>
                    <p class="infoWindow-remark">${isnull(singleData.nt)}</p>
                    <ul class="infoWindow-ul">
                        <li><span class="infoWindow-name">河源所在位置:</span><span class="infoWindow-value">${isnull(singleData.rvSourLoc)}</span></li>
                        <li><span class="infoWindow-name">跨界类型:</span><span class="infoWindow-value">${isnull(singleData.crOverTypeNM)}</span></li>
                        <li><span class="infoWindow-name">河流类型:</span><span class="infoWindow-value">${isnull(singleData.rvTypeNM)}</span></li>
                        <li><span class="infoWindow-name">岸别:</span><span class="infoWindow-value">${isnull(singleData.bankNM)}</span></li>
                        <li><span class="infoWindow-name">河流流域面积(km²):</span><span class="infoWindow-value">${isnull(singleData.rvBasArea)}</span></li>
                        <li><span class="infoWindow-name">河床宽(m):</span><span class="infoWindow-value">${isnull(singleData.mnstwi)}</span></li>
                        <li><span class="infoWindow-name">多年平均流量(m³/s):</span><span class="infoWindow-value">${isnull(singleData.mnstsumf)}</span></li>
                        <li><span class="infoWindow-name">流域内人口(万人):</span><span class="infoWindow-value">${isnull(singleData.drbspp)}</span></li>
                        <li><span class="infoWindow-name">洪水平均传播时间(h):</span><span class="infoWindow-value">${isnull(singleData.avtm)}</span></li>
                        <li><span class="infoWindow-name">设计流量(m³/s):</span><span class="infoWindow-value">${isnull(singleData.designQ)}</span></li>
                        <li><span class="infoWindow-name">损耗系数:</span><span class="infoWindow-value">${isnull(singleData.canallossper)}</span></li>
                        <li><span class="infoWindow-name">警戒水位(m):</span><span class="infoWindow-value">${isnull(singleData.warnZ)}</span></li>
                        <li><span class="infoWindow-name">所在行政区:</span><span class="infoWindow-value">${isnull(singleData.adnm)}</span></li>
                        <li><span class="infoWindow-name">河口所在位置:</span><span class="infoWindow-value">${isnull(singleData.rvMouLoc)}</span></li>
                        <li><span class="infoWindow-name">流经地区:</span><span class="infoWindow-value">${isnull(singleData.flowArea)}</span></li>
                        <li><span class="infoWindow-name">河流级别:</span><span class="infoWindow-value">${isnull(singleData.rvGradNM)}</span></li>
                        <li><span class="infoWindow-name">河流长度(km):</span><span class="infoWindow-value">${isnull(singleData.rvLen)}</span></li>
                        <li><span class="infoWindow-name">平均比降(%):</span><span class="infoWindow-value">${isnull(singleData.averSlop)}</span></li>
                        <li><span class="infoWindow-name">集雨面积(km²):</span><span class="infoWindow-value">${isnull(singleData.mnsts)}</span></li>
                        <li><span class="infoWindow-name">枯水流量(m³/s):</span><span class="infoWindow-value">${isnull(singleData.mnstksf)}</span></li>
                        <li><span class="infoWindow-name">洪水最大安全泄量(m³/s):</span><span class="infoWindow-value">${isnull(singleData.mxsfds)}</span></li>
                        <li><span class="infoWindow-name">河道底高程(m):</span><span class="infoWindow-value">${isnull(singleData.canalbuthei)}</span></li>
                        <li><span class="infoWindow-name">安全流量(m³/s):</span><span class="infoWindow-value">${isnull(singleData.safetyQ)}</span></li>
                        <li><span class="infoWindow-name">设防水位(m):</span><span class="infoWindow-value">${isnull(singleData.fortifyZ)}</span></li>
                        <li><span class="infoWindow-name">保证水位(m):</span><span class="infoWindow-value">${isnull(singleData.safetyZ)}</span></li>
                    </ul>
                </div>`
    return html
}

//构建自定义窗体
function createInfoWindow(item) {
    var    content = getContent(item)
  
    var infoWindowData = new AMap.InfoWindow({
        isCustom: true, //使用自定义窗体
        content: content,
        offset: new AMap.Pixel(8 ,-45)
    });
    return infoWindowData
}

 

//打开窗体
function openInfoWindow(infoWindow, marker) {
    infoWindow.open(map, marker.getPosition());
}

//点击标记 获取所点击标记的信息以及窗体要展示的数据,创建信息窗体
function markerClick(marker,item) {
    var infoWindow = createInfoWindow(item)
    openInfoWindow(infoWindow, marker)
}

// 水域/流域/行政区域 弹窗
function openWaterInfoBox(list,keyName,keyLog,keyLat) {
    markerDataArr = []
    var lttd = '',lgtd = '';
    list.forEach((singleData,i) => {    
        if(keyName === 'channame'){
            if(singleData.points){
                let currPoints = singleData.points.split('|');
                if (currPoints) {
                    lttd = parseFloat(currPoints[0].split(',')[0]);
                    lgtd = parseFloat(currPoints[0].split(',')[1]);
                }
            }
            
        }else{
            lttd = singleData[keyLog];
            lgtd = singleData[keyLat];
        }
        var marker = new AMap.Marker({
            position:[lttd, lgtd],//位置
            icon : icon
        })
        marker.setMap(map);
        if(mState !== 5){
            // label默认蓝框白底左上角显示,样式className为:amap-marker-label
            marker.setLabel({
                content : singleData[keyName],
                offset: new AMap.Pixel(0, 5),  //设置文本标注偏移量
                direction: 'bottom' //设置文本标注方位
            });
        }
        
        AMap.event.addListener(marker, 'click', function(e) {
            setTimeout(()=>{
                markerClick(marker,singleData)
            },50)
        });
        markerDataArr.push(marker);
        if(i == 0){
            var infoWindow = createInfoWindow(singleData)
            openInfoWindow(infoWindow, marker)
        }
    })
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值