基于高德地图api的热力图实现,详细到每一步,各个框架都能用

您所在的位置:网站首页 实时热力图 基于高德地图api的热力图实现,详细到每一步,各个框架都能用

基于高德地图api的热力图实现,详细到每一步,各个框架都能用

2023-03-25 09:29| 来源: 网络整理| 查看: 265

做业务时一个热力图需求,经过调研后完成。 因为实在不想写json数据,这里用官网的例子举例 lbs.amap.com/api/javascr… 具体热力图出来的样子就是如图:

第一步:你需要一个高德key值 其中需要的key,可以注册高德地图开发者后,在我的应用中找到(需要创建一个应用) 把key值放在这里,这个引入放在项目最外面的index.html里就可以

第二步:需要填数据 这里的数据格式是:

var heatmapData = [ {"lng":"116.311322","lat":"39.957033","count":1}, {"lng":"116.16741","lat":"39.89261","count":2} ]; 复制代码

第三步:具体需求具体定制

1.配置api:

angular框架

declare var AMap: any; // 声明AMap不然会报错 在这个文件中声明、

vue框架:blog.csdn.net/XU441520/ar…

这个文章描述的很详细

2.生成模型

// 此处的hotMap是你html页面div的id

let map = new AMap.Map("hotMap", { resizeEnable: true, // 是否监控地图容器尺寸变化,默认值为false center: [116.418261, 39.921984], // 地图中心点坐标值 zoom: 9.5, // zoom表示地图打开时候默认的缩放级别,数值变大,地图相当于放大,看见的 // 实际面积减小,内容变详细 mapStyle:'amap://styles/596486b8b145fxxxxxxxx' //设置地图的显示样式 // 此处官网支持两种样式,一种自定义,一种默认,这个后面会单独详细讲 }); let heatmap; map.plugin(["AMap.Heatmap"], function () { //初始化heatmap对象 heatmap = new AMap.Heatmap(map, { radius: 25, //给定半径 opacity: [0, 0.8], gradient:{ 0.3: 'blue', 0.5: 'green', 0.7: 'yellow', 0.9: 'red' } }); //设置数据集 heatmap.setDataSet({ data: heatmapData, // 此处填入你整理好的数据 max: 100 }); }); 复制代码

参数详解:

max:代表热点图区分热度的界限,某地区的点数超过max一定比例,即显示对应gradient配置的颜 色。

gradient:

用法:设 (某点范围内点数目(数据中的count) / max) 为x,举个例子:x=100/100=1(此处的1用于gradient的参数),x > 0.9,则目标区域显示的颜色为红色 radius:控制单个点的笼罩半径,半径范围内所有的点都会算作此点的数目,变相增大 x 的值。设置合适的半径,确定每个点的笼罩范围,单位是px。

基本需求的热力图基本完成

1.具体样式定制:

正常地图颜色是白色的,但是也许这个不符合你的需求,lbs.amap.com/dev/mapstyl… 此处连接可以自定义地图,点击此处的使用与分享获取到样式id ,填在之前的代码 mapStyle:'amap://styles/你的id'

2.地图绘制区域边界线 以广东省作为例子: 地图绘制边界后就有明显的区分。

步骤:

获取目标区域的边界坐标点 (通过高德AMap.DistrictSearch这个插件获取边界坐标点)

const opts = { subdistrict: 0, extensions: 'all', level: 'district' }; //实例化DistrictSearch const district = new AMap.DistrictSearch(opts); district.setLevel('district'); 复制代码

参数详解: 2.绘制边界

通过AMap.Polygon对象在地图上绘制多边形。

handlePolygon(result) { // 此处可以写名字,也可以写区域编码 district.search('广东', (status, result) => { const polygons = []; const bounds = result.districtList[0].boundaries; if (bounds) { for (let i = 0, l = bounds.length; i < l; i++) { //每个区域可能有分能几个小块,比如金山区除了有一块陆地圈,还有海上独立的三个小岛 // 生成行政区划polygon const polygon = new AMap.Polygon({ map:map, // 指定地图对象 (此处就是前面声明的map数据) strokeWeight: 3, // 轮廓线宽度 path: bounds[i], //轮廓线的节点坐标数组 fillColor: '#7EE8F2', // 多边形填充颜色 fillOpacity: 0.01, //透明度 borderWeight: 1, // 线条宽度,默认为 1 strokeColor: '#00ffff', // 线条颜色 }); polygons.push(polygon); } } map.setFitView(polygons); // 视口自适应 }); 复制代码

3.自定义边界(绘制3d的那种感觉,突出所选区域部分,使用高德地图绘制多边形区域)

先给map添加属性

var map = new AMap.Map('hotmap',{ viewMode:'3D' // 开启3d视图 }) 复制代码

1. const object3Dlayer = new AMap.Object3DLayer();

// 图层类,用于添加所有Object3D类型

const arr = '121.86412811,31.1146794,121.88112258,31.130991200,' 复制代码

// 你自定义边界的坐标

for (let i = 0; i < arr.length; i++) { path.push(new AMap.LngLat(parseFloat(arr[0]), parseFloat(arr[1]))); } const polygon = new AMap.Object3D.Prism({ path: path, height: 5000, color: 'rgba(9,35,74, 0.2)' }); polygon.transparent = true; // 表示是否使用了透明颜色,并进行颜色混合 object3Dlayer.add(polygon); // 创建一个Object3DLayer // 外多边形坐标数组和内多边形坐标数组 const outer = [ new AMap.LngLat(-360, 90, true), new AMap.LngLat(-360, -90, true), new AMap.LngLat(360, -90, true), new AMap.LngLat(360, 90, true), ]; const pathArray = [outer]; pathArray.push.apply(pathArray, [path]) // AMap.Polygon覆盖物>多边形 const polygon2 = new AMap.Polygon( { map:map, strokeWeight: 3, pathL: pathArray, fillColor: '#7EE8F2', // 多边形填充颜色 fillOpacity: 0.01, borderWeight: 1, // 线条宽度,默认为 1 strokeColor: '#00ffff', // 线条颜色 }); polygon2.setPath(pathArray); map.add(polygon2) 复制代码


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3