vue+echarts实现世界地图热力分布并打标

效果图

在这里插入图片描述

代码

<!--
 * @Fileoverview: 风险分布
 * @Description: 概览-风险分布
-->
<template>
  <div class="map">
    <div ref="self" class="map__content"></div>
  </div>
</template>

<script>
import echarts from "echarts";
import worldMapJson from "@/assets/world.json";
import { worldNameMap, worldGeoMap } from "@/assets/worldNameMap";
const icon = require("@/assets/img/risk-icon.png");
export default {
  data() {
    return { worldNameMap, worldGeoMap };
  },
  mounted() {
    this.initData();
  },
  methods: {
    initData() {
      let chartDom = echarts.init(this.$refs.self);
      let riskData = [
        { name: "中国", value: 120 },
        { name: "澳大利亚", value: 120 },
        { name: "巴西", value: 170 },
        { name: "加拿大", value: 570 },
        { name: "美国", value: 570 },
        { name: "墨西哥", value: 570 },
        { name: "古巴", value: 530 },
        { name: "西班牙", value: 70 },
      ];
      let markPointData = [
        {
          name: "中国",
          coord: this.worldGeoMap["中国"],
          symbol: "image://" + icon,
          symbolSize: 20,
        },
        {
          name: "澳大利亚",
          coord: this.worldGeoMap["澳大利亚"],
          symbol: "image://" + icon,
          symbolSize: 20,
        },
        {
          name: "加拿大",
          coord: this.worldGeoMap["加拿大"],
          symbol: "image://" + icon,
          symbolSize: 20,
        },
      ];
      echarts.registerMap("world", worldMapJson);
      let option = {
        tooltip: {
          trigger: "item",
          backgroundColor: "#fff",
          textStyle: {
            color: "#666666",
          },
          borderWidth: 2,
          borderColor: "#ECECEE",
          padding: 10,
          formatter: function (params) {
            var value = params.value ? params.value : 0;
            return "风险个数<br/>" + params.name + " : " + value + "个";
          },
        },
        visualMap: {
          type: "piecewise",
          splitNumber: 3,
          inverse: true,
          right: 50,
          top: 50,
          pieces: [
            {
              min: 0,
              max: 100,
              color: "#dfe2f5",
            },
            {
              min: 100,
              max: 500,
              color: "#b5c1eb",
            },
            {
              min: 500,
              max: 1000,
              color: "#839aee",
            },
          ],
          textStyle: {
            color: "#6E7784",
          },
          itemWidth: 40,
          itemHeight: 10,
          align: "left",
        },
        series: [
          {
            type: "map",
            map: "world",
            nameMap: this.worldNameMap,
            roam: true,
            itemStyle: {
              areaColor: "#dfe2f5",
              borderWidth: 0,
              emphasis: {
                label: {
                  show: false,
                },
                areaColor: "#feddb3",
              },
            },
            markPoint: {
              label: {
                normal: {
                  show: true,
                },
                emphasis: {
                  show: true,
                },
              },
              itemStyle: {
                normal: {
                  color: "rgba(72,150,128,1)",
                },
              },
              data: markPointData,
            },
            data: riskData,
          },
        ],
      };
      chartDom && chartDom.setOption(option);
      let sizeFun = () => {
        chartDom.resize();
      };
      window.addEventListener("resize", sizeFun);
      this.$once("hook:beforeDestroy", function () {
        echarts.dispose(chartDom);
      });
    },
  },
};
</script>

<style lang="less" scoped>
.map {
  position: relative;
  &__content {
    height: 360px;
    margin-top: -60px;
  }
}
</style>

关键实现点

  1. echarts已不内置地图数据所以需要到网上找,且需要在使用时注册
echarts.registerMap("world", worldMapJson);
  1. 要转换中文也需要一个对应map转换
  2. 标记图片用的是markPoint属性

资源

世界地图数据
世界地图数据json
世界地图中英文转换
中英文转换map

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3是一种流行的JavaScript框架,而Echarts5是一种强大的数据可视化库。结合Vue3和Echarts5,可以很容易地实现世界地图的可视化效果。 首先,你需要在Vue项目中安装Echarts5。可以通过npm或yarn来安装echarts: ``` npm install echarts ``` 或者 ``` yarn add echarts ``` 安装完成后,你可以在Vue组件中引入Echarts,并使用它来绘制世界地图。 在Vue组件中,你可以使用`<template>`签来定义HTML模板,使用`<script>`签来编写JavaScript代码,使用`<style>`签来定义CSS样式。 下面是一个简单的示例代码,展示了如何在Vue3中使用Echarts5绘制世界地图: ```vue <template> <div id="world-map" style="width: 100%; height: 400px;"></div> </template> <script> import * as echarts from 'echarts'; export default { mounted() { this.drawWorldMap(); }, methods: { drawWorldMap() { const chartDom = document.getElementById('world-map'); const myChart = echarts.init(chartDom); // 定义地图数据 const mapData = [ { name: 'China', value: 100 }, { name: 'United States', value: 50 }, // 其他国家... ]; // 配置地图选项 const option = { tooltip: { trigger: 'item', formatter: '{b}: {c}', }, visualMap: { min: 0, max: 100, left: 'left', top: 'bottom', text: ['High', 'Low'], seriesIndex: [1], inRange: { color: ['#e0ffff', '#006edd'], }, }, series: [ { type: 'map', mapType: 'world', roam: true, label: { show: true, }, data: mapData, }, ], }; // 使用配置项绘制地图 myChart.setOption(option); }, }, }; </script> <style> #world-map { width: 100%; height: 400px; } </style> ``` 在上面的代码中,我们首先引入了Echarts库,然后在`mounted`生命周期钩子函数中调用`drawWorldMap`方法来绘制地图。`drawWorldMap`方法中,我们使用`echarts.init`方法初始化一个Echarts实例,并通过配置项`option`来定义地图的样式和数据。最后,使用`myChart.setOption(option)`方法将配置项应用到地图上。 这样,你就可以在Vue项目中使用Vue3和Echarts5来实现世界地图的可视化效果了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值