vue项目实现 cesium + heatmap.js 实现在三维地球上绘制热力图
2019-04-11 11:05
3463 查看
做个热力图,刚开始做了大半天,都没有成功,第二天上午来到公司,很快就做出来了,特记录一下。
效果是这样的:
主要步骤是:
1,下载heatmap.js。地址是:https://github.com/pa7/heatmap.js
把项目zip下载下来找到build中的heatmap.js放到自己的项目中
我使用的时vue单页项目,只有一个html。说一下开始走的弯路。开始是用vue引入js的方式,先是在main.js中用import引入,报错h337这个对象为定义,后来又在.vue页面中中单独import还是报这个错。最后是在index.html中用script标签引入,然后直接在.vue页面中使用
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>vue-cesium</title> <!--引入热力图js--> <script src="static/js/heatmap.js"></script> </head> <body> <div id="app"></div> <!-- built files will be auto injected --> </body> </html>
然后在页面中使用
<template> <div> <div class="body-content"> <div id="cesiumContainer"></div> <div id="heatmap" v-show="false"></div> </div> </div> </template> <script> /** * @Author shizc * 热力图效果 */ import Cesium from 'cesium/Cesium' import widgets from 'cesium/Widgets/widgets.css' export default { name: "cesiumHotMap", data(){ return{ viewer:{} } }, mounted(){ var len = 300; var points = []; var max = 100; var width = 600; var height = 400; var latMin = 28.364807; var latMax = 40.251095; var lonMin = 94.389228; var lonMax = 108.666357; var dataRaw = []; for (var i = 0; i < len; i++) { var point = { lat: latMin + Math.random() * (latMax - latMin), lon: lonMin + Math.random() * (lonMax - lonMin), value: Math.floor(Math.random() * 100) }; dataRaw.push(point); } // for (var i = 0; i < len; i++) { var dataItem = dataRaw[i]; var point = { x: Math.floor((dataItem.lat - latMin) / (latMax - latMin) * width), y: Math.floor((dataItem.lon - lonMin) / (lonMax - lonMin) * height), value: Math.floor(dataItem.value) }; max = Math.max(max, dataItem.value); points.push(point); } var heatmapInstance = h337.create({ container: document.querySelector('#heatmap') }); var data = { max: max, data: points }; // heatmapInstance.setData(data); var viewer = new Cesium.Viewer('cesiumContainer'); viewer._cesiumWidget._creditContainer.style.display = "none"; var canvas = document.getElementsByClassName('heatmap-canvas'); console.log(canvas); viewer.entities.add({ name: 'heatmap', rectangle: { coordinates: Cesium.Rectangle.fromDegrees(lonMin, latMin, lonMax, latMax), material: new Cesium.ImageMaterialProperty({ image: canvas[0], transparent: true }) } }); viewer.zoomTo(viewer.entities); } } </script> <style> #heatmap{ width: 500px; height: 500px; } </style>
参考的是这位朋友代码:https://zhuanlan.zhihu.com/p/31497328
主要思路是用heatmap.js画图,然后用entity添加到地球上
我遇到的主要问题是不能正确的引入heatmap.js。
相关文章推荐
- cesium热力图(cesiumheatmap.js)
- 结合heatmap.js,在Openlayers中如何实现热力图
- 热力图实现-heatmap.js 代码示例
- Vue-cli项目中mockjs + axios实现前后端分离代码demo(清晰易懂)
- screenfull.js实现全屏功能(vue项目中运用)
- Matlab实现同图片多色彩三维绘制 3d surf colormap
- Vue.js实现 项目 生成到上线的全过程
- vue中使用heatmapjs的示例代码(结合百度地图)
- python绘制热力图heatmap
- 实现基于vue全家桶+mint-ui+node.js+socket.io+MongoDB模仿微信的网页即时聊天项目
- Leaflet+heatmap实现离线地图加载和热力图应用
- heatmap.js 一个用canvas画热力图的利器
- heatmap.js 一个用canvas画热力图的利器
- heatmap.js调用百度地图api做热力图
- heatmap.js 一个用canvas画热力图的利器
- vue.js项目 el-input 组件 监听回车键实现搜索
- 环境: Ubuntu下 Cesiumjs 调试环境配置 (著名的三维虚拟地球开源项目)
- heatmap.js 一个用canvas画热力图的利器
- Vue项目(vuecli3.0搭建)集成高德地图实现路线轨迹绘制
- 基于开源项目SharpMap的热力图(HeatLayer)实现。