echarts结合百度地图使用--热力图

公司的项目要做一个热力图,本来想着是用百度地图直接搞定,但是完成之后,产品经理说要有一个标尺,根据颜色不同来区分热力程度,然后我就一直找插件,但是找了很久,也没有找到,于是就想到了echarts的热力图,结果一做下去,踩了好多坑。

请大家耐心的看下去,因为,这篇文章应该能解开你所有的疑惑。
我用的框架是vue-cli里面还要用到webpack所以就凭空增添了一点难度,请看分解

第一步,既然要用到百度地图肯定就要引入百度地图了,首先申请密匙,
地址:http://lbsyun.baidu.com/index.php?title=jspopular

image.png

然后在你的index.html引入

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <!--引入百度地图-->
    <script  type="text/javascript" 
              src="http://api.map.baidu.com/api?v=2.0&ak=DDLwA2CBFGHRpxFzFx3K5KnBQtHP4hte" ></script>
    <!--引入百度热力图-->
    <script type="text/javascript" src="http://api.map.baidu.com/library/Heatmap/2.0/src/Heatmap_min.js"></script>

    <script type="text/javascript" src=""></script>
    <title>official</title>

  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

引入后需要在webpack.base.conf.js里面添加

module.exports = {
...
externals: {
    "BMap": "BMap",
  },
...
}

第二步 引入echarts 关于如何引入echarts我已经在我之前的文章写过了,不会的同学可以去看下https://www.jianshu.com/p/894b7969ed12
第三步 复制echarts的例子,http://gallery.echartsjs.com/editor.html?c=xSJNKs7EX

<template>
  <!--一定要给宽高,不然会报错,container没有高度-->
  <div id="chart">
    echarts百度地图
  </div>
</template>

<script>
  
  

  export default {
    data(){
      return {

      }
    },
    mounted(){
      let myChart = this.$echarts.init(document.getElementById('chart'));
      var uploadedDataURL = "/asset/get/s/data-1464248983149-HJ1jcQNX.json";

      $.getJSON(uploadedDataURL, function (data) {

        var points = [].concat.apply([], data.map(function (track) {
          return track.map(function (seg) {
            return seg.coord.concat([1]);
          });
        }));
        myChart.setOption({
          animation: false,
          bmap: {
            center: [120.13066322374, 30.240018034923],
            zoom: 14,
            roam: true
          },
          visualMap: {
            show: false,
            top: 'top',
            min: 0,
            max: 5,
            seriesIndex: 0,
            calculable: true,
            inRange: {
              color: ['blue', 'blue', 'green', 'yellow', 'red']
            }
          },
          series: [{
            type: 'heatmap',
            coordinateSystem: 'bmap',
            data: points,
            pointSize: 5,
            blurSize: 6
          }]
        });

        var bmap = myChart.getModel().getComponent('bmap').getBMap();
        bmap.addControl(new BMap.MapTypeControl());
      });


    },
    methods:{

    }
  }
</script>

<style>
 #chart{
   width: 100%;
   height: 100%;
 }
</style>

做到这一步的时候遇到坑了,
第一个是找不到/asset/get/s/data-1464248983149-HJ1jcQNX.json这个url,404错误
第二个是$ is not defined,这两个放在一块解决

先说出现这两个错误的原因
第一个是跨域的问题,
第二个是没有安装jquery
这两个问题搞的我很烦躁,于是我就想直接把echarts demo上的文件放到本地

如何把echarts的数据放到本地?
第一步 打开echarts demo链接
[http://gallery.echartsjs.com/editor.html?c=xSJNKs7EX](http://gallery.echartsjs.com/editor.html?c=xSJNKs7EX)
第二步 先按f12点击network,点击右上角的预览,我们会看到一堆请求
第三步 找到chart-iframe点击展开,找到data-1464248983149-HJ1jcQNX.json,双击
ok,你会发现数据的json文件已经下载下来了(我是用谷歌浏览器下载的)

下载完之后把数据复制到你的项目里,我是在components下新建了一个datas文件夹,放进去,然后把名字改成baiduData.json
然后在我写的地图组件里面引入import baiduJSON from '../datas/baiduData'

<template>
 <!--一定要给宽高,不然会报错,container没有高度-->
  <div id="chart">
    echarts百度地图
  </div>
</template>

<script>
 //引入json数据
  import baiduJSON from '../datas/baiduData'

  export default {
    data(){
      return {

      }
    },
    mounted(){
      let myChart = this.$echarts.init(document.getElementById('chart'));
      let pointsData = baiduJSON;//其实这一步是多余的
      //把数据处理成需要的格式,只是把数值都改成了1,具体项目可以根据自己实际来处理
      var points = [].concat.apply([], pointsData.map(function (track) {
        return track.map(function (seg) {
          return seg.coord.concat([1]);
        });
      }));

let option;
myChart.setOption(option = {
  animation: false,
  bmap: {
    center: [120.13066322374, 30.240018034923],
    zoom: 14,
    roam: true
  },
  visualMap: {
    show: true,
    top: 'top',
    min: 0,
    max: 5,
    seriesIndex: 0,
    calculable: true,
    inRange: {
      color: ['blue', 'blue', 'green', 'yellow', 'red']
    }
  },
  series: [{
    type: 'heatmap',
    coordinateSystem: 'bmap',
    data: points,
    pointSize: 5,
    blurSize: 6
  }]
});

        var bmap = myChart.getModel().getComponent('bmap').getBMap();
        bmap.addControl(new BMap.MapTypeControl());


    },
    methods:{

    }
  }
</script>

<style>
 #chart{
   width: 100%;
   height: 100%;
 }
</style>

把上面的敲下来本以为能看见效果了,但是 怎么还报错 (getMap的问题)
这时我找了网上很多资料说是要引入一个百度组合echarts使用的扩展插件,让在index.html引入

    <script type="text/javascript" src="http://echarts.baidu.com/gallery/vendors/echarts/extension/bmap.min.js"></script>

好多人都说问题解决了,但是我的还是依然报错,蛋疼
然后我去翻echarts官方文档说明http://echarts.baidu.com/changelog.html

image.png

点击进去
image.png

看了上面的引入我发现这个插件好像安装echarts的时候应该一块下载下来了,既然本地就有那我还引个锤子,直接把本地拿出来用就好了
于是本着怀疑的态度,我找了node_modules -- echarts -- extension -- bmap -- bmap.js
果然是有的,于是我在main.js里引入import 'echarts/extension/bmap/bmap';

import Vue from 'vue'
import App from './App'
import axios from 'axios'
import router from './router'
import store from './store/index'
import ElementUI from 'element-ui'
import './components/global.js'
import 'element-ui/lib/theme-chalk/index.css'
import './assets/index.css'
import echarts from 'echarts'
import 'echarts/extension/bmap/bmap';

然后刷新页面,果然,效果出现了
虽然都是一些小问题,但是不知道还是蛮浪费时间的,所幸都解决了
效果图


效果图.png

欢迎有问题的同学留言交流

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容