var layer; $(document).ready(function () { layui.use(['layer'], function () { layer = layui.layer; }); }); function initMap() { // 可删除代码开始 // 检查百度地图API是否加载成功 if (typeof BMapGL === 'undefined') { layer.msg("地图加载失败,请检查网络连接!", {icon: 2}); return; } // 检查容器是否存在 var mapContainer = document.getElementById("map"); if (!mapContainer) { layer.msg("地图容器未找到!", {icon: 2}); return; } // 检查数据 if (!patrolRecordList || patrolRecordList.length === 0) { layer.msg("暂无轨迹数据!", {icon: 2}); var defaultPoint = new BMapGL.Point(116.404, 39.915); map.centerAndZoom(defaultPoint, 12); map.enableScrollWheelZoom(true); return; } //可删除代码结束 // ========== 百度地图初始化与轨迹渲染 ========== // 1. 初始化地图 var map = new BMapGL.Map("map"); // 2. 获取轨迹点数据 if (patrolRecordList.length === 0) { layer.msg("暂无轨迹数据!", {icon: 2}); var defaultPoint = new BMapGL.Point(116.404, 39.915); map.centerAndZoom(defaultPoint, 14); map.enableScrollWheelZoom(true); return; } // 3. 构造轨迹点数组和标记点数组 var points = []; // 轨迹折线点 var markers = []; // 地图标记点 var cardElements = document.querySelectorAll('.track-card'); // 所有卡片元素 patrolRecordList.forEach(function (record, index) { var lng = record.longitude; var lat = record.latitude; var point = new BMapGL.Point(lng, lat); points.push(point); // 创建地图标记点 var marker = new BMapGL.Marker(point); markers.push(marker); // 标记点弹窗信息 var infoWindow = new BMapGL.InfoWindow(`

点位名称:${record.pointName}

巡检人:${record.createBy}

巡检时间:${new Date(record.createTime).toLocaleString()}

经纬度:${lat}, ${lng}

轨迹点ID:${record.id}

`); // 标记点点击事件:高亮对应卡片 + 显示弹窗 marker.addEventListener("click", function () { // 移除所有卡片的active样式 cardElements.forEach(el => el.classList.remove('active')); // 高亮当前卡片 cardElements[index].classList.add('active'); // 滚动到当前卡片 cardElements[index].scrollIntoView({behavior: 'smooth', block: 'center'}); // 显示弹窗 this.openInfoWindow(infoWindow); }); // 卡片点击事件:定位到对应标记点 + 高亮卡片 cardElements[index].addEventListener("click", function () { // 移除所有卡片的active样式 cardElements.forEach(el => el.classList.remove('active')); // 高亮当前卡片 this.classList.add('active'); // 地图中心定位到当前标记点 map.centerAndZoom(point, 15); // 显示标记点弹窗 marker.openInfoWindow(infoWindow); // 轻微动画效果 marker.setAnimation(BMAP_ANIMATION_BOUNCE); setTimeout(() => marker.setAnimation(null), 1500); }); map.addOverlay(marker); }); // 寻找points中间的点位 var midIndex = Math.floor(points.length / 2); const centerPoint = points[midIndex] || new BMapGL.Point(116.404, 39.915); map.centerAndZoom(centerPoint, 13); // 14为地图缩放级别 // 4. 绘制轨迹折线 var polyline = new BMapGL.Polyline(points, { strokeColor: "#1890ff", // 主色调:蓝色 strokeWeight: 6, // 折线宽度 strokeOpacity: 0.8, // 透明度 strokeStyle: 'solid' // 实线 }); map.addOverlay(polyline); // // 5. 起点/终点特殊标记 // // 起点标记 // var startMarker = new BMapGL.Marker(points[0], { // icon: new BMapGL.Icon("http://api.map.baidu.com/img/markers.png", new BMapGL.Size(25, 34), { // offset: new BMapGL.Size(12, 34), // imageOffset: new BMapGL.Size(0, 0) // 起点图标 // }) // }); // map.addOverlay(startMarker); // // startMarker.setLabel(new BMapGL.Label("起点:" + patrolRecordList[0].pointName, { // // offset: new BMapGL.Size(30, -15), // // styles: {fontSize: '12px', color: '#fff', background: '#52c41a', padding: '0px 14px', borderRadius: '3px'} // // })); // startMarker.setLabel(new BMapGL.Label("起点:" + patrolRecordList[0].pointName, { // offset: new BMapGL.Size(30, -15), // styles: { // fontSize: '12px', // color: '#fff', // background: '#52c41a', // padding: '8px 8px', // 左右padding保持一致(14px),保证背景两侧空间对称 // borderRadius: '3px', // textAlign: 'center' // 新增:强制文字在背景内水平居中 // } // })); // // // 终点标记 // var endMarker = new BMapGL.Marker(points[points.length - 1], { // icon: new BMapGL.Icon("http://api.map.baidu.com/img/markers.png", new BMapGL.Size(25, 34), { // offset: new BMapGL.Size(12, 34), // imageOffset: new BMapGL.Size(-114, 0) // 终点图标 // }) // }); // map.addOverlay(endMarker); // endMarker.setLabel(new BMapGL.Label("终点:" + patrolRecordList[patrolRecordList.length - 1].pointName, { // offset: new BMapGL.Size(30, -15), // styles: {fontSize: '12px', color: '#fff', background: '#ff4d4f', padding: '0px 14px', borderRadius: '3px'} // })); // 6. 地图自适应所有轨迹点 map.enableScrollWheelZoom(true); // 开启滚轮缩放 map.setViewport(points); // 适配所有轨迹点 // 7. 初始提示 layer.msg("轨迹加载完成!点击卡片可定位到对应点位", { icon: 1, time: 3000, offset: ['20px', '20px'] }); } // 页面加载完成后初始化地图 window.onload = initMap;