高德地图:热力图、点位基础使用

这篇博客详细介绍了如何使用高德地图API实现目标位置的人流数据热力图分布和监控设备信息展示。通过解析JSON数据,初始化地图,并利用Heatmap和Marker插件展示数据。同时,展示了如何处理点击事件,实现特定点位的优先展示和信息弹窗。此外,还探讨了扩展功能,如根据marker ID调整视角并模拟点击事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高德地图简单开发

需求

1、目标位置人流数据热力图分布
2、目标位置信息展示监控设备信息

实现

第一步:引入高德地图开发需要的前台JS包
需要申请key使用这里就不多赘述,想使用的去高德API官网申请

热力图

//准备数据
//数据json
/**
{"hotData":[{"lng":126.758938,"count":7623,"ZWMC":"永泰城","lat":45.716417},{"lng":126.617183,"count":6028,"ZWMC":"和兴路","lat":45.730658}]}
**/
var hotDataJson = JSON.parse(mapData);
    var hotArr = hotDataJson.hotData;
//地图初始化
 var aMap = new AMap.Map(conId, {
        resizeEnable: false,
        scrollWheel: true,//是否鼠标滚轮放大缩小
        zoom:12,
        center: [126.660, 45.72703],//中心点坐标
        mapStyle: 'amap://styles/4d735c96a849aed8230b757d2f79dd9f'//地图主题样式
    });
//判断浏览器是否支持 
if (!isSupportCanvas()) {
        alert('热力图仅对支持canvas的浏览器适用,您所使用的浏览器不能使用热力图功能,请换个浏览器试试~')
    }
//准备数据过滤掉一些错误的经纬度不存在的数据
for(var i=hotArr.length-1; i>=0; i--){
        if(!(hotArr[i].lng) || !(hotArr[i].lat)){
            hotArr.splice(i,1);
        }
    }
//实现地图
if(hotArr.length > 0){
        aMap.plugin(["AMap.Heatmap"], function() {
            //初始化heatmap对象
            var heatmap = new AMap.Heatmap(aMap, {
                radius: 30, //给定半径
                opacity: [0, 0.6],
                gradient:{
                    0.3: 'blue',
                    0.5: 'rgb(117,211,248)',
                    0.7: 'rgb(0, 255, 0)',
                    0.9: '#ffea00',
                    1.0: 'red'
                }
            });
            //设置数据集
            heatmap.setDataSet({
                data: hotArr,
                max: 500
            });
        });
    }

点位图


//准备数据 同上
var hotDataJson = JSON.parse(mapData);
    var hotArr = hotDataJson.ZDSP;
    
 //省略初始化同热力图
if(hotArr.length > 0){
        var markList = [];
        $.each(hotArr,function(i,m){
            // 创建一个 Marker 实例:
            var marker = new AMap.Marker({
                position: new AMap.LngLat(m.JD, m.WD),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
                title: m.NAME
            });
            //这里定义个全局的存放marker的数据 可以清楚点位使用或者地图打点使用
            markList.push(marker);
            //绑定事件弹出信息窗口在做其他操作
            marker.on('click',function () {
                openInfo(aMap,marker,m)
            })
        });
        aMap.add(markList);
    }
//在指定位置打开信息窗体
function openInfo(map,marker,data) {
    var videos = data.VIDEO;
    var zdmc = data.NAME;
    //构建信息窗体中显示的内容
    var info = [];
    $.each(videos,function (i,m) {
        info.push("<p class='input-item' data-id='"+m.CODE+"' οnclick='javascript:jksp(this)'>设备:"+m.NAME+"</p>");
    })
    infoWindow = new AMap.InfoWindow({
        content: '<div style="color: white;opacity:0.7;background:#2B333F;padding: 5px 10px 5px 10px;height: 100%px;width: 350px">' +
            '<div class="bus-tip-top"><span>'+zdmc+'</span></div>'+info.join("")+'</div>', //使用默认信息窗体框样式,显示信息内容
        // anchor: 'bottom-left',
        isCustom:true,//是否自定义样式窗体如果是content的内容样式才会生效
        closeWhenClickMap:true,//是否点击地图关闭弹窗
        offset:new AMap.Pixel(0, -30)//设置弹出信息窗口的位置偏移
    });
    //第一个参数是地图,第二个参数是点的位置
    infoWindow.open(map, marker.getPosition());
}

效果图

在这里插入图片描述
在这里插入图片描述

扩展

今天接到一个修改模拟实现点击一个marker的ID,能够在地图上实现优先展示这个点的位置;同时触发这个marker的click事件。
这里我做了一个marker创建的修改:
第一步:根据官方API文档参考
在这里插入图片描述
创建一个自定义属性这里可以是一个map我就简单创建一个id
在这里插入图片描述
第二步:遍历所有marker集合

if(markerArr!=null&&markerArr.length>0){
        $.each(markerArr,function (i,m) {
        //获取我前面的自义定的ID比较
           var y_station_no =  m.getExtData();
           if(x_station_no==y_station_no){
               //优先展示marker位置
               zdMap.setFitView(m);
               //模拟点击事件弹出
               m.emit('click');
           }
        })
    }else{
        alert("站点信息没有初始化完数据...稍等尝试")
    }

细节

细节就是测试调试每一个参数效果与使用

总结

仔细品尝、细心揣摩 、你想要的需求一般都会提供 请教:高德官网API

使用方法:我使用到的函数。方法
在这里插入图片描述

在这里插入图片描述

<think>好的,用户的问题是关于如何在高德地图中实现点位叠加、热力以及例的功能。我需要结合提供的三个引用内容来给出解决方案。首先,用户提到的引用1和2都提到了使用高德地图JavaScript API来绘制热力,并且强调高德的经纬度体系与用户的数据相符,应该使用高德而不是百度。引用3虽然提到了Android的高德地图热力,但用户的问题可能更偏向Web,不过里面的参数文档链接可能有用。 用户的需求包括点位叠加、热力例。我需要分步骤说明如何实现这三个功能。首先,创建底基础,引用2中提到了使用AMap.Map创建底。然后,叠加点位的话,可能需要使用覆盖物,比如Marker或者点层。热力的实现部分,引用1和2都提到将热力作为层叠加,所以需要配置热力的data和options,并添加到地上。例部分可能需要自定义DOM元素,根据热力的颜色梯度来显示,这部分需要参考heatmap.js的文档(引用3中的链接)。 接下来需要考虑代码示例的结构。先初始化地,然后添加点位,可以使用点聚合或者直接添加多个点。热力的配置需要设置半径、渐变颜色等参数。例部分需要创建一个div,用CSS渐变背景,并标注数值范围。 还需要注意参数的正确性,比如heatmap的data格式是包含经纬度和权重的对象数组,坐标是否使用高德的坐标系。另外,引用3中的文档链接可能提供更详细的参数说明,需要提醒用户参考。 最后,相关问题部分需要生成用户可能进一步询问的问题,比如如何调整热力的样式、如何处理量数据、如何动态更新热力等。确保回答结构清晰,步骤明确,帮助用户逐步实现功能。</think>### 高德地图实现点位叠加与热力例 #### 一、实现步骤 1. **初始化地容器** ```html <div id="container" style="width: 100%; height: 600px;"></div> ``` 2. **创建底实例** ```javascript var map = new AMap.Map('container', { zoom: 10, center: [116.397428, 39.90923] // 初始中心点坐标 }); ``` 3. **添加点位叠加(点层)** ```javascript // 示例数据(经纬度需使用高德坐标系) var points = [ { lng: 116.397428, lat: 39.90923, count: 10 }, { lng: 116.487856, lat: 39.90816, count: 20 } ]; // 创建点层(可自定义标) var markers = points.map(point => { return new AMap.Marker({ position: [point.lng, point.lat], content: `<div style="background:red;border-radius:50%;width:10px;height:10px"></div>` }); }); map.add(markers); ``` 4. **叠加热力层**[^2] ```javascript var heatmap; AMap.plugin(['AMap.Heatmap'], function() { heatmap = new AMap.Heatmap(map, { radius: 25, // 热力点半径 gradient: { // 颜色渐变配置 0.4: 'blue', 0.6: 'green', 0.8: 'yellow', 1.0: 'red' } }); heatmap.setDataSet({ data: points.map(p => ({ lng: p.lng, lat: p.lat, count: p.count })), max: 100 // 最权重值 }); }); ``` 5. **添加例(自定义DOM实现)** ```html <div id="legend" style="position:absolute; bottom:20px; left:20px; background:white; padding:10px"> <div style="background: linear-gradient(to right, blue 0%, green 30%, yellow 60%, red 100%); width:200px; height:20px"></div> <div style="display:flex; justify-content:space-between"> <span>0</span><span>50</span><span>100</span> </div> </div> ``` #### 二、关键参数说明 1. **热力参数** - `radius`: 热力影响半径(像素) - `opacity`: 层透明度 - `gradient`: 颜色梯度映射规则[^3] 2. **性能优化建议** - 超过1万数据点时建议服务生成静态热力片 - 使用`setTimeout`分批次渲染数据量 #### 三、完整示例参考 ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="https://webapi.amap.com/maps?v=2.0&key=您的key"></script> </head> <body> <div id="container"></div> <div id="legend"></div> <script> // 初始化地 var map = new AMap.Map('container', { zoom: 11 }); // 添加热力 AMap.plugin(['AMap.Heatmap'], function() { var heatmap = new AMap.Heatmap(map, { radius: 25, gradient: { 0.4:'blue', 0.6:'green', 0.8:'yellow', 1.0:'red' } }); heatmap.setDataSet({ data: getRandomData(), // 生成测试数据 max: 100 }); }); // 生成模拟数据函数 function getRandomData() { // 返回包含{lng, lat, count}的数组 } </script> </body> </html> ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值