echarts + 百度地图实现散点图

项目需求 echarts + 百度地图实现散点图

最近一直在使用echarts做项目 领导突然给提了一个需求 ,就是要我用echarts实现地图散点数据, 对于当时一直在使用echarts的我来说,感觉不就是小事一碟嘛,这不是有手就行???
真到去做的时候才发现我是那么的天真 ,经过我不断的思考和查阅资料,最总还是解决了,中间解决问题的这段过程真的收益匪浅,说到底还是不够了解。

  • 初始准备
    首先创建一个vue项目 下载echarts第三方包 可以npm下载 也可以到github下载
  • 在页面引入 ceharts 我这这里使用的是 5 以上的版本
// echarts 5 以下的版本 和 5 以上的版本引入的方式 还是有差别的 
import  echarts from 'echarts'; // 这是 5 以下的版本引入的方法
import * as echarts from "echarts"; // 这是 5 以上的版本引入的方法

在这说明一下 5 以下得到版本里面是有一个map文件的 里面放的就是地图数据
但是在5 以上的版本中 移除了map文件 如果需要可以到 5 一下的版本里面clone一份 也可以自己到github找最新的资源

  • 申请百度AK
  • 这里只提供链接 具体如何申请 就不多说了

接下来就是你还要到百度地图开放平台注册自己的账号

在vue项目中的做法

(1)引入baiduAPI
(2)这个访问应用(AK)就是你要在vue项目中public下的 index.html 文件中引入javascript脚本匹配的ak值

 <script src="//api.map.baidu.com/api?type=webgl&v=2.0&ak=你的密钥"></script>
  • 接下来就要在你所对应的文件夹引入bmap包
import * as echarts from "echarts";
require("echarts/extension/bmap/bmap"); // 这个必须要引入 不然会找不到bmap地图包
import { loadBMap } from "../map.js";
  • 还要创建一个map.js 用来导入百度AK值
export function loadBMap(ak) {
  return new Promise(function(resolve, reject) {
      if (typeof BMap !== 'undefined') {
          resolve(BMap)
          return true
      }
      window.onBMapCallback = function() {
          resolve(BMap)
      }
      let script = document.createElement('script')
      script.type = 'text/javascript'
      script.src =
          'http://api.map.baidu.com/api?v=2.0&ak='+ ak +'&__ec_v__=20190126&callback=onBMapCallback'
      script.onerror = reject
      document.head.appendChild(script)
  })
}
  • 然后再mounted 生命周期里面调用
 mounted() {
    this.$nextTick(() => {
      loadBMap("你的密钥").then(() => {
        this.myEcharts();  // echarts 实列
      });
    });
  },

总体的代码就是

<template>
  <div>
    <div class="chart" ref="chart"></div>
    <div
      v-for="(item,index) in buttonList"
      :key="index"
      :class="btnClick == index ? 'active' : ''"
      @click="roamMap(index)"
    >{{item}}</div>
  </div>
</template>

<script>
import * as echarts from "echarts";
require("echarts/extension/bmap/bmap");
import { loadBMap } from "../map.js";

export default {
  name: "Home",
  components: {
    HelloWorld
  },
  data() {
    return {
      // 点击放大缩小按钮
      buttonList: ["+", "-"],
      btnClick: 1,
      myChart: null
    };
  },
  mounted() {
    console.log(echarts, "echarts");

    this.$nextTick(() => {
      loadBMap("你的密钥").then(() => {
        this.myEcharts();
      });
    });
  },
  methods: {
    myEcharts() {
      this.myChart = echarts.init(this.$refs.chart);

      var myData = [
        { name: "上海", value: [121.480539, 31.235929] },
        { name: "合肥", value: [117.27, 31.86] },
        { name: "招远", value: [120.38, 37.35, 142] },
        { name: "舟山", value: [122.207216, 29.985295, 123] }
      ];

      var option = {
        tooltip: {
          formatter: function(params) {
            var value = params.value;
            return `<div style="text-align: left;padding: 0 0.05rem">
                       <div style="line-height: 24px;">
                       <span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:#2ECA9C;"></span>
                        <span>
                          ${
                            params.name == undefined || params.name == null
                              ? "-"
                              : params.name
                          }
                          </span>
</div>
</div>

            `;
          }
        },

        bmap: {
          center: [121.480539, 31.235929], // 中心位置坐标
          zoom: 6, // 地图缩放比例
          roam: true // 开启用户缩放
        },
        visualMap: {
          // 视觉映射组件
          show: false,
          type: "continuous",
          min: 0,
          max: 200,
          calculable: true,
          
          inRange: {
            color: ["#2ECA9C"], // 散点的颜色
            symbolSize:10,  // 散点的大小
          },
          textStyle: {
            color: "#fff"
          }
        },
        series: [
          {
            name: "销量",
            type: "scatter",
            coordinateSystem: "bmap", // 坐标系使用bmap
            data: myData
          }
        ]
      };
      this.myChart.setOption(option);
    },
    // 点击方放大 缩小
    roamMap(val) {
      // console.log(val);

      this.btnClick = val;
      let currentZoom = this.myChart.getOption().bmap[0].zoom; // 当前的缩放比例

      let increaseAmplitude = 1.2; // 点击按钮每次 放大/缩小 比例
      if (val == 1) {
        increaseAmplitude = 0.8;
      }

      this.myChart.setOption({
        bmap: {
          zoom: currentZoom * increaseAmplitude
        }
      });
    }
  }
};
</script>
<style scoped>
.chart {
  margin: 0 auto;
  width: 800px;
  height: 500px;
  background: pink;
}
.active {
  width: px2rem(60);
  height: px2rem(98);
  line-height: px2rem(98);
  text-align: center;
  border-radius: px2rem(30);
  font-size: px2rem(50);
  background-color: #2eca9c;
  color: #fff;
}
::v-deep .anchorBL {
  display: none;
}
</style>
  • 实现地图的总体效果图
    在这里插入图片描述

我这是实现了简单的一个echarts + 百度地图 其实还有好多功能没加上去
有兴趣的朋友可以去 百度地图开放平台echarts官网看一下API 上面介绍都挺全的

  • 总结这次算是接触了一个新的领域吧 也学到很多 也很高兴能和一些志同道合的朋友学习 有什么不对的地放 也希望各位大佬能提出来 万分感谢
  • 这一行业还有很多不懂的地方 我也会继续加油 争取更进一步
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ECharts是百度开源的一个基于JavaScript的可视化库,它支持多种图表类型,包括折线图、柱状图、散点图和饼图等。而且,ECharts还可以和百度地图进行结合,实现地理信息数据的可视化展示。 下面我来简单介绍一下如何使用ECharts实现百度地图的可视化。 首先,我们需要引入ECharts百度地图的API文件。在HTML文件中加入以下代码: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ECharts 百度地图扩展</title> <script src="https://cdn.staticfile.org/echarts/4.7.0/echarts.min.js"></script> <script src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script> </head> <body> <div id="map" style="width: 800px; height: 600px;"></div> </body> </html> ``` 其中,ECharts的文件引入使用了CDN,而百度地图的API文件需要自己去申请密钥并替换到代码中。 接着,在JavaScript中初始化地图,并将其与ECharts进行结合。以下是示例代码: ```javascript var chart = echarts.init(document.getElementById('map')); // 设置地图的配置项和数据 var option = { bmap: { center: [116.46, 39.92], zoom: 10, roam: true }, series: [{ type: 'scatter', coordinateSystem: 'bmap', data: [ [116.46, 39.92], [116.56, 39.92], [116.66, 39.92], [116.76, 39.92], [116.86, 39.92] ], symbolSize: 20, label: { show: true, formatter: function(params) { return params.value[0] + ', ' + params.value[1]; }, position: 'top' }, itemStyle: { color: 'purple' } }] }; // 使用刚指定的配置项和数据显示图表。 chart.setOption(option); ``` 以上代码中,我们定义了一个散点图系列,数据坐标系为百度地图,并设置了散点图的位置、大小、标签和颜色等属性。 最后,我们需要在页面加载完成后触发ECharts图表的渲染。以下是示例代码: ```javascript // 基于准备好的dom,初始化echarts实例 var chart = echarts.init(document.getElementById('map')); // 使用刚指定的配置项和数据显示图表。 chart.setOption(option); // 地图自适应 window.onresize = function() { chart.resize(); }; ``` 上述代码中,我们使用了`window.onresize`事件来自适应地图的大小变化。 以上就是使用ECharts进行百度地图可视化的简单介绍。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值