使用百度地图API加载文件标注点位的方法

1.实现效果

在这里插入图片描述

2.操作步骤

2.1 百度地图个人开发者注册

需要在百度地图开放平台注册个人账户,获取百度地图AK(密钥)

2.2新建文档粘贴如下代码

步骤1:新建XXX.txt文档,粘贴下述代码后,修改代码中第36行“ak=您的AK"”为2.1节中您个人申请的百度地图AK:;
步骤2:将文件 .txt 后缀修改为 .html
步骤3:用浏览器打开

<!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" />
    <title>批量标注地点并显示名称</title>
    <style type="text/css">
        body,
        html {
            width: 100%;
            height: 100%;
            margin: 0;
        }
 
        #l-map {
            height: 95%;
            width: 100%;
        }
 
        #upload-container {
            height: 5%;
        }
 
        .cluster-label {
            background-color: rgba(0, 0, 0, 0.5);
            color: white;
            padding: 5px;
            border-radius: 50%;
            display: flex;
            justify-content: center;
            align-items: center;
        }
    </style>
    <script type="text/javascript"
        src="http://api.map.baidu.com/api?v=2.0&ak=您的AK"></script>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/xlsx/dist/xlsx.full.min.js"></script>
</head>
 
<body>
    <div id="l-map"></div>
    <div id="upload-container">
        <input type="file" accept=".xlsx, .xls" onchange="handleFileUpload(event)" />
    </div>
</body>

<script type="text/javascript">
    var map = new BMap.Map("l-map");
    map.centerAndZoom(new BMap.Point(116.404, 39.915), 8);
    map.enableScrollWheelZoom();

	//map.setMapType(BMAP_PERSPECTIVE_MAP);     //修改地图类型为3D地图
	//map.setMapType(BMAP_NORMAL_MAP); //普通地图
	//map.setMapType(BMAP_HYBRID_MAP); //混合地图
	//map.setMapType(BMAP_SATELLITE_MAP); //卫星地图
    map.addControl(new BMap.MapTypeControl());          //添加地图类型控件

    var markers = new Map(); // 使用 Map 数据结构存储经纬度和名称

 
    function handleFileUpload(event) {
        const file = event.target.files[0];
        const reader = new FileReader();
 
        reader.onload = function (event) {
            const data = new Uint8Array(event.target.result);
            const workbook = XLSX.read(data, { type: 'array' });
            const firstSheetName = workbook.SheetNames[0];
            const worksheet = workbook.Sheets[firstSheetName];
            const jsonData = XLSX.utils.sheet_to_json(worksheet, { raw: true, header: 1 });
            addPointsToMap(jsonData.slice(1)); // Skip header row
        };
 
        reader.readAsArrayBuffer(file);
    }
 
    function addPointsToMap(data) {
        var markerCache = {};
 
        data.forEach(function (row) {
            const lng = row[0];
            const lat = row[1];
            const label = row[2];
 
            const randX = Math.random() * 0.02 - 0.01; // 添加随机性偏移
            const randY = Math.random() * 0.02 - 0.01; // 添加随机性偏移
            const point = new BMap.Point(lng + randX, lat + randY);
 
            if (!markerCache[`${lng},${lat}`]) {
                markerCache[`${lng},${lat}`] = {
                    point: point,
                    labels: [label]
                };
            } else {
                markerCache[`${lng},${lat}`].labels.push(label);
            }
        });
 
        for (var key in markerCache) {
            const markerData = markerCache[key];
            const marker = new BMap.Marker(markerData.point);
            const labelText = markerData.labels.join(', ');
            var labelOpts = {
                position: markerData.point,
                offset: new BMap.Size(-20, -25)
            };
 
            if (markerData.labels.length > 1) {
                // 创建和显示聚合标记
                const clusterLabel = new BMap.Label(markerData.labels.length, {
                    position: markerData.point
                });
                clusterLabel.setStyle({
                    color: 'white',
                    backgroundColor: 'rgba(0, 0, 0, 0.8)',
                    border: 0,
                    borderRadius: '50%',
                    padding: '5px',
                    textAlign: 'center'
                });
                marker.setLabel(clusterLabel);
 
                // 为聚合标记添加点击事件
                addClusterMarkerInfoWindow(marker, markerData.labels);
            } else {
                var textLabel = new BMap.Label(labelText, labelOpts);
                marker.setLabel(textLabel);
            }
 
            map.addOverlay(marker);
        }
    }
 
    function addClusterMarkerInfoWindow(marker, labels) {
        marker.addEventListener('click', function () {
            const infoWindow = new BMap.InfoWindow(labels.join('<br>'));
            map.openInfoWindow(infoWindow, marker.getPosition());
        });
    }
</script>
 
</html>

2.3 新建EXCEL文档

如下图所示
第一列:经度
第二列:纬度
第三列:显示的信息
在这里插入图片描述

2.4 加载文件

点击右下角“选择文件”,加载上述的EXCEL文件即可。
在这里插入图片描述
在这里插入图片描述
右上角还可以切换背景为“卫星地图”
在这里插入图片描述

3. 本文资源下载

可下载如下文件打开替换AK后即可使用
使用百度地图API加载文件标注点位(HTML)

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驯龙高手_追风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值