duheng
2025-04-03 82f8a7ead37ff50dec3d0d40e572d4331f14a8b2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title>标注和标注图层-海量点</title>
    <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" />
    <script src="../js/base64.js"></script>
    <style>
        html, body, #container {
            height: 100%;
            width: 100%;
            margin: 0;
        }
 
        .amap-info-window {
            width: 150px;
            background: #fff;
            border-radius: 3px;
            padding: 3px 7px;
            box-shadow: 0 2px 6px 0 rgba(114, 124, 245, .5);
            position: relative;
        }
 
        .amap-info-sharp {
            position: absolute;
            top: 21px;
            bottom: 0;
            left: 50%;
            margin-left: -8px;
            border-left: 8px solid transparent;
            border-right: 8px solid transparent;
            border-top: 8px solid #fff;
        }
    </style>
</head>
<body>
    <div id="container"></div>
 
    <div class="info">
        海量点展示: 30000
    </div>
    <script type="text/javascript"
            src="https://webapi.amap.com/maps?v=2.0&key=3627ed9deaac2622e26a7169f0c36b1b"></script>
    <script type="text/javascript" src="https://a.amap.com/jsapi_demos/static/demo-center/data/mock_position.js"></script>
    <script type="text/javascript">
        var map = new AMap.Map('container', {
            zoom: 9,
            viewMode: '3D',
            center: [116.12, 40.11],
            mapStyle: 'amap://styles/whitesmoke',
            showLabel: false,
            showIndoorMap: false,
        });
 
        map.on('complete', function () {
            // 创建 AMap.LabelsLayer 图层
            var layer = new AMap.LabelsLayer({
                zooms: [3, 20],
                zIndex: 1000,
                collision: false
            });
 
            // 将图层添加到地图
            map.add(layer);
 
            var markers = [];
            var positions = Positions.slice(0, 3E4);
 
            var icon = {
                type: 'image',
                image: sign_type_base64.FirePool,
                //image:'https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png',
                size: [24, 24],
                anchor: 'bottom-center',
            };
 
            for (var i = 0; i < positions.length; i++) {
                var curPosition = positions[i];
                var curData = {
                    position: curPosition,
                    icon
                };
 
                var labelMarker = new AMap.LabelMarker(curData);
 
                markers.push(labelMarker);
 
                // 给marker绑定事件
                labelMarker.on('mouseover', function (e) {
                    var position = e.data.data && e.data.data.position;
 
                    if (position) {
                        normalMarker.setContent(
                            '<div class="amap-info-window">'
                            + position +
                            '<div class="amap-info-sharp"></div>' +
                            '</div>');
                        normalMarker.setPosition(position);
                        map.add(normalMarker);
                    }
                });
 
                labelMarker.on('mouseout', function () {
                    map.remove(normalMarker);
                });
            }
 
            // 一次性将海量点添加到图层
            layer.add(markers);
 
            // 普通点
            var normalMarker = new AMap.Marker({
                anchor: 'bottom-center',
                offset: [0, -15],
            });
        });
    </script>
</body>
</html>