Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >第116期:高德地图绘制热力图遇到的一个问题

第116期:高德地图绘制热力图遇到的一个问题

作者头像
terrence386
发布于 2022-12-14 00:17:11
发布于 2022-12-14 00:17:11
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

封面图

image.png

中午出去吃饭拍的一张图片【SRR308 自动驾驶毫米波雷达】

场景

项目中有个地方需要绘制热力图,第一个版本比较简单,服务端用python的库生成一个热力图的静态资源(html文件)放到阿里云的云存储上(oss)给前端返回一个地址的链接,前端直接用iframe渲染这个界面就行。

目前新的需求是,热力图需要前端自己绘制,并且需需要能够支持点击时获取对应的坐标信息即坐标附带的自定义信息,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let data = [
    {
     lng:120:55045,
     lat:39.78653,
     img:'test.img',
     ...
    }
]

获取到相应的数据后,根据img等信息调另外的接口处理其他的逻辑。

热力图的绘制方案

前端可视化的方案通常有以下几种方式:

  1. Echarts
  2. antv
  3. bizChart
  4. 百度地图jsApi
  5. 高德地图jsApi
  6. 腾讯地图jsApi

其中前三种主要用来做数据的可视化,主要用来绘制折线图,并图,散点图,直方图等图标。

后三种地图主要用来绘制与地图相关的功能,也可以使用他们的可视化功能做一些可视化的功能。

在前几天和后端对接需求的时候,最初准备采用的方案是echarts,因为它相对来说比较常见,相对来说比较简单,但是结合地图绘制热力图需要申请百度地图的key ,公司目前只有高德地图的相关服务账号,所以临时决定用高德地图的相关api完成这个需求。

绘制热力图

高德地图的api分为两个部分,地图JS API和 LOCA 数据可视化API。当然还有其他的api,因为我的需求只用到这两个API,所以写这里就写这两个API。

接入过程非常简单,只需要按照文档上的demo,正常接入即可:

  1. 安装 jsapi-loader
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm i @amap/amap-jsapi-loader --save
  1. 编写加载代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import AMapLoader from '@amap/amap-jsapi-loader'; 
AMapLoader.load({ 
    "key": "", // 申请好的Web端开发者Key,首次调用 load 时必填 
    "version": "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15 
    "plugins": [], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
    }).then((AMap)=>{ 
        map = new AMap.Map('container'); 
    }).catch(e => { console.log(e); })

上面的代码可以把地图正常加载出来,加载热力图需要用别的代码,方式有两种,一种是用地图jsAPi,另一种是用loca数据可视化API。

  1. 用地图jsAPI方式。

AMap中有一个HeatMap的属性,它属于高德地图的一个自有数据图层,用于加载展示开发者自己拥有的数据或者图像的图层类型。示例代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

var heatmap;
var points = [
   {"lng":116.191031,"lat":39.988585,"count":10},
   {"lng":116.389275,"lat":39.925818,"count":11},
   {"lng":116.287444,"lat":39.810742,"count":12},
   {"lng":116.481707,"lat":39.940089,"count":13},
   {"lng":116.410588,"lat":39.880172,"count":14},
   {"lng":116.394816,"lat":39.91181,"count":15},
   {"lng":116.416002,"lat":39.952917,"count":16},
];
// 加载热力图插件
map.plugin(["AMap.HeatMap"],function(){
   // 在地图对象叠加热力图
   heatmap = new AMap.Heatmap({map:map});
   // 设置热力图数据集
   heatmap.setDataSet({data:points,max:100});
});

  1. 用loca可视化API方案

Loca 我个人理解为创建图层,不同的效果需要创建不同的图层,官方提供有点云图层,散点图层,热力图层等等。

我们的业务需求是热力图,所以需要用Loca.HeatMapLayer()构造函数去实例化一个热力图的图层,示例代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

var heatmapLayer = new Loca.HeatMapLayer({
    loca: loca,
    zooms: [2, 20],
    zIndex: 10,
    visible: true,
    opacity: 1,
})

设置图层样式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
heatmapLayer.setStyle({
    // 除了 gradient 属性,其他的缺省属性将恢复默认值。
    gradient: {
         0.5: 'blue',
         0.65: 'rgb(117,211,248)',
         0.7: 'rgb(0, 255, 0)',
         0.9: '#ffea00',
         1.0: 'red',
     },
     opacity: [0, 1],
     unit: 'meter',
     height: 9000,
     radius: 5000,
     difference: false,
});

点击获取热力图图层中的信息

热力图非常容易绘制,但是想要获取到点击地图时,对应的热力点的信息,这个问题是个难点。

因为地图可以添加点击事件,地图上的覆盖物也可以添加点击事件,但是数据图层我翻了相关的文档,也试着添加了click事件,但是没有找到相关的内容,添加的点击事件也不起作用。

没有好的方案时,干脆提了一个工单问了客服,得到的结果如下:

image.png

只能将事件绑定在地图上,但是点击地图获取的坐标跟后端返回的坐标精度又不是一个等级,而且用的坐标系也不一定是同一个坐标系。

所以这个问题,目前我也没有什么好的方案去解决,实在不行就看看换个实现方式吧😄

最后

大家有什么想法,可以简单讲一下,谢了~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JavaScript高级程序设计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于高德地图开发 Web 应用
前段时间换了工作,从以前的 996 变成了现在的 965,周末有了一些空闲时间,于是就想着写一些文章和大家分享一下。思考了很久,最终确定了主题为前端高德地图的教程。
拿我格子衫来
2022/01/24
5.2K2
基于高德地图开发 Web 应用
前端系列19集-vue3引入高德地图,响应式,自适应
在项目目录中使用npm或yarn安装高德地图的JavaScript API库。你可以使用以下命令之一:
达达前端
2023/10/08
1.6K0
前端系列19集-vue3引入高德地图,响应式,自适应
前端高德地图开发
用户4396583
2024/09/24
5790
leaflet在线地图之热力密度图
之前在练习leaflet的时候没有找到R语言leaflet中的热力密度图接口函数,一直感觉很遗憾。
数据小磨坊
2018/07/25
2.3K0
leaflet在线地图之热力密度图
vue + 高德地图
https://lbs.amap.com/api/javascript-api-v2/summary
用户4396583
2024/09/23
4600
Vue项目使用leaflet+heatmap.js加载热力图
最近做数字工程实践涉及到大量的地图操作,刚开始跳过依赖于supermap iclient for JavaScript,但是越做深入越发现局限性太大,于是开始考虑使用开源地图库做各项操作,本文记录在vue项目中引入原生leaflet及heatmap打开地图及显示热力图的各项操作。
宋天伦
2020/07/16
5.3K0
(送福利)BDP绘制微博转发动态热力图
先把效果图放上来,酷炫压场。看完本文,你就能轻松实现这个动态效果,全程只需几分钟!
古柳_DesertsX
2018/08/21
1.4K0
(送福利)BDP绘制微博转发动态热力图
python调用百度地图API实现热力图
登录百度地图开放平台 ,滚动到页面最底部,点击申请密匙,填写个人电话,邮箱等信息,注册后,登录邮箱点击激活链接,这时浏览器显示“##完成激活!”字样。
用户6808043
2022/02/25
2.3K0
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
在旅游行业和城市规划中,热门景点的数据分析具有重要意义。通过爬取景点数据并生成热力图,可以直观展示游客分布、热门区域及人流趋势,为商业决策、景区管理及智慧城市建设提供数据支持。
小白学大数据
2025/05/16
870
高德地图api接口调用_高德地图步行导航怎么看方向
高德地图API官网:高德开放平台 | 高德地图API。由于博主是基于前端 Vue 框架进行开发的,所以针对地图 JavaScript API 结合 Vue 展开介绍。
全栈程序员站长
2022/10/04
3.1K0
高德地图api接口调用_高德地图步行导航怎么看方向
vue3+ts 使用高德地图JSAPI 加载API并初始化地图
安装jsapi加载器 npm i @amap/amap-jsapi-loader 安装jsap ts声明(很久没更新了,j建议把声明文件复制到项目中根据官方文档调整) npm i @amap/amap-jsapi-types 加载JSAPI并初始化地图 useAMap.ts import AMapLoader from "@amap/amap-jsapi-loader"; import {onMounted, ref, Ref, shallowRef, watchEffect} from "vue";
路过君
2022/09/23
2.6K0
【三维地图】开发攻略 —— 详解“GeoJSON”技术和应用场景
GeoJSON ,一个用于存储地理信息的数据格式。GoeJSON对象可以表示几何、特征或特征集合,支持:点、线、面、多点、多线、多面和几何集合。在基于平面地图,三维地图中都需要用到的一种数据类型。 由于这种格式在三维地图中的优秀属性,使用它我们不仅可以轻松实现地图类功能,更重要的是在3D效果展示上也具有不凡的表现。
葡萄城控件
2022/09/27
2.5K0
【三维地图】开发攻略 —— 详解“GeoJSON”技术和应用场景
高德地图标记点要注意的问题
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143607.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/26
9940
高德地图标记点要注意的问题
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
在旅游行业和城市规划中,热门景点的数据分析具有重要意义。通过爬取景点数据并生成热力图,可以直观展示游客分布、热门区域及人流趋势,为商业决策、景区管理及智慧城市建设提供数据支持。
小白学大数据
2025/05/17
1520
热力图模拟福岛排放核污染水到爆炸💥
关于日本排放核污水,在B站看了很多UP主各路跟踪报道和整活儿,有制作末日视频的,有写末日小说的,有奇怪图片创作的,当时的一个想法是难道就只有B友整活没有掘友用技术整活是吗?
草帽lufei
2024/05/13
2930
热力图模拟福岛排放核污染水到爆炸💥
高德地图JS--批量规划步行路线 优化
调取高德地图JS API 进行步行路线规划 多个起点到达一个重点,根据搜素结果画路线,进行绘图,并为线路添加点击事件 效果如下: 代码如下: <!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=
拿我格子衫来
2022/01/24
1.8K2
高德地图JS--批量规划步行路线 优化
腾讯地图Web版解决热力图被轮廓覆盖的问题
还记得那天傍晚,我正对着电脑调试一个腾讯地图的热力图页面。项目是一个区域人流密度可视化模块,我加了一个淡蓝色的轮廓图层用于表示区域范围,热力图放在下面用于展示人流热度。效果一预览,瞬间眉头皱了起来:热力图几乎被轮廓“盖没了”!
喵喵侠
2025/06/19
860
腾讯地图Web版解决热力图被轮廓覆盖的问题
百度高德地图行政区域边界GeoJSON数据获取并绘制行政区域
highcharts 是提供地图数据包的:https://www.highcharts.com/docs/maps/map-collection
周陆军博客
2023/04/09
4.7K0
手把手教你完成一个数据科学小项目(7):经纬度获取与BDP可视化
请先阅读“中国年轻人正带领国家走向危机”,这锅背是不背? 一文,以对“手把手教你完成一个数据科学小项目”系列有个全局性的了解。
古柳_DesertsX
2018/09/26
1.6K0
vue2(webpack)调用amap高德地图及其UI组件vue2(webpack)调用amap高德地图及其UI组件和标记物#
vue2(webpack)调用amap高德地图及其UI组件和标记物# 今天一个app项目中要使用vue2加入高德地图,本来以为有第三方的插件,结果没找到适合自己用的,因为地图这块,一般都是自定义程度比较高的。注:这块针对的是app版开发,更多更详细请阅读官方api 1、申请key### 点击下边的网址,创建应用,然后申请key,后期要用到,如果已经有key,忽略这一步 http://lbs.amap.com/dev/key/app 2、修改配置### 首先要在build/webpack.base.conf.
用户2235302
2018/06/13
1.8K0
推荐阅读
相关推荐
基于高德地图开发 Web 应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验