Echarts基于geojson的3D柱状图

echarts社区例子:[Make A Pie - 3d地图画线1](https://www.makeapie.com/editor.html?c=xSy3KhFV4M)

效果图:

![md_a203ba23.png](https://gitee.com/dxwangnima/images/raw/master/markdown/md_a203ba23.png)

# npm安装:

```JavaScript

npm install echarts

npm install echarts-gl

```

引入方式:

```JavaScript

import echart from "echarts";

import "echarts-gl";

import "echarts/map/js/china";

```

或者index.html cdn引入

```java

<!--echarts js文件 -->

    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>

    <!--echarts-gl js文件 -->

    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts-gl/dist/echarts-gl.min.js"></script>

    <!-- bmap、china、world 的 js 文件 -->

    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts/dist/extension/bmap.min.js"></script>

    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts/map/js/china.js"></script>

    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts/map/js/world.js"></script>

    <!-- ecStat 的 js 文件 -->

    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts-stat/dist/ecStat.min.js"></script>

    <!-- dataTool 的 js 文件 -->

    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts/dist/extension/dataTool.min.js"></script>

```

# 1.数据结构

```JavaScript

bPoint=[

              {

                name: "名字",//名字

                value:[105.93318,//经度

                      37.981425,//纬度

                          2399//数值

                      ]

              }],

```

# 2.option配置

```JavaScript

<script>

import echart from "echarts";

import "echarts-gl";

import "echarts/map/js/china";

export default {

  data() {

    return {

      bPoint: [

              {

                name: "名字",

                value:[105.93318,37.981425,2399]

              }],

      sPoint: [

              {

                name: "名字",

                value:[106.576627,38.159436,4887]

              }],

    };

  },

  mounted() {

    this.getMapData();

  },

  methods: {

    getMapData() {

      // 绘制柱状图函数 geo底图

      this.drawBarChartGeo("map", this.buyerPoint,this.sellerPoint);

    },

    // 绘制柱状图函数 geo底图

    async drawBarChartGeo(name, buyerData,sellerData) {

      const { data: geoJSON } = await this.$http.get(

          "https://geo.datav.aliyun.com/areas/bound/geojson?code=100000_full"

      );

      // echart.registerMap('geoJSON', geoJSON);

      // 初始化

      const myChart = echart.init(document.getElementById(name));

      let option = {

        geo3D: {

          map: 'china',

          roam: true,

          itemStyle: {

            color: '#475368',

            opacity: 1,

            borderWidth: 0.4,

            borderColor: '#212429'

          },

          label: {

            show: true,

            textStyle: {

              color: '#fff', //地图初始化区域字体颜色

              fontSize: 10,

              opacity: 1,

              backgroundColor: 'rgba(0,23,11,0)'

            }

          },

          shading: 'lambert',

          light: { //光照阴影

            main: {

              color: '#ffffff', //光照颜色

              intensity: 1.2, //光照强度

              //  shadowQuality: 'high', //阴影亮度

              shadow: true, //是否显示阴影

              alpha: 55,

              beta: 10

            },

            ambient: {

              intensity: 0.3

            }

          }

        },

        series: [

          //柱状图

          {

            name: "买家的柱状图",

            type: "bar3D",

            coordinateSystem: "geo3D",

            barSize: 0.4, //柱子粗细

            shading: "lambert",

            bevelSize: 0.3,

            minHeight:1,

            itemStyle: {

              color:"#3678fc",

              opacity: 1,

            },

            label: {

              show: false,

              formatter: (record) => {

                return `${record.name}\n重量:${record.value[2].toFixed(2)}吨`;

              },

            },

            data: bData,

          },

          //柱状图

          {

            name: "卖家家的柱状图",

            type: "bar3D",

            coordinateSystem: "geo3D",

            barSize: 0.4, //柱子粗细

            shading: "lambert",

            bevelSize: 0.3,

            minHeight:1,

            itemStyle: {

              color:"#ffb526",

              opacity: 1,

            },

            label: {

              show: false,

              formatter: (record) => {

                return `${record.name}\n重量:${record.value[2].toFixed(2)}吨`;

              },

            },

            data: sData,

          },

        ],

      };

      myChart.setOption(option);

      //地图点击事件

      // myChart.getZr().on('click', function (params) {});

    }

  }

}

</script>

```

# 3.源码

```JavaScript

<template>

  <div>

    <div id="map"></div>

  </div>

</template>

<script>

import echart from "echarts";

import "echarts-gl";

import "echarts/map/js/china";

export default {

  data() {

    return {

      bPoint: [

              {

                name: "名字",

                value:[105.93318,37.981425,2399]

              }],

      sPoint: [

              {

                name: "名字",

                value:[106.576627,38.159436,4887]

              }],

      drawer: false,

      direction: 'rtl'

    };

  },

  created() {

    // this.getMapData();

  },

  mounted() {

    this.getMapData();

  },

  methods: {

    //  请求数据的函数

    getMapData() {

      // 绘制柱状图函数 geo底图

      this.drawBarChartGeo("map", this.buyerPoint, this.sellerPoint);

    },

    // 绘制柱状图函数 geo底图

    async drawBarChartGeo(name, buyerData,sellerData) {

      const { data: geoJSON } = await this.$http.get(

          "https://geo.datav.aliyun.com/areas/bound/geojson?code=100000_full"

      );

      // 初始化

      const myChart = echart.init(document.getElementById(name));

      let option = {

        geo3D: {

          map: 'china',

          roam: true,

          itemStyle: {

            color: '#475368',

            opacity: 1,

            borderWidth: 0.4,

            borderColor: '#212429'

          },

          label: {

            show: true,

            textStyle: {

              color: '#fff', //地图初始化区域字体颜色

              fontSize: 10,

              opacity: 1,

              backgroundColor: 'rgba(0,23,11,0)'

            }

          },

          shading: 'lambert',

          light: { //光照阴影

            main: {

              color: '#ffffff', //光照颜色

              intensity: 1.2, //光照强度

              //  shadowQuality: 'high', //阴影亮度

              shadow: true, //是否显示阴影

              alpha: 55,

              beta: 10

            },

            ambient: {

              intensity: 0.3

            }

          }

        },

        series: [

          //柱状图

          {

            name: "买家的柱状图",

            type: "bar3D",

            coordinateSystem: "geo3D",

            barSize: 0.4, //柱子粗细

            shading: "lambert",

            bevelSize: 0.3,

            minHeight:1,

            itemStyle: {

              color:"#3678fc",

              opacity: 1,

            },

            label: {

              show: false,

              formatter: (record) => {

                return `${record.name}\n重量:${record.value[2].toFixed(2)}吨`;

              },

            },

            data: bData,

          },

          //柱状图

          {

            name: "卖家家的柱状图",

            type: "bar3D",

            coordinateSystem: "geo3D",

            barSize: 0.4, //柱子粗细

            shading: "lambert",

            bevelSize: 0.3,

            minHeight:1,

            itemStyle: {

              color:"#ffb526",

              opacity: 1,

            },

            label: {

              show: false,

              formatter: (record) => {

                return `${record.name}\n重量:${record.value[2].toFixed(2)}吨`;

              },

            },

            data: sData,

          },

        ],

      };

      myChart.setOption(option);

      //地图点击事件

      // myChart.getZr().on('click', function (params) {});

    }

  }

}

</script>

<style lang="less" scoped>

#map {

  width: 1403px;

  height: 864px;

}

</style>

```

# 4.geojson数据来自:

[地图选择器 (aliyun.com)](http://datav.aliyun.com/tools/atlas/index.html)

通过axios请求:[获取geojson数据](https://geo.datav.aliyun.com/areas/bound/geojson?code=100000_full)

![md_f217f3a5.png](https://gitee.com/dxwangnima/images/raw/master/markdown/md_f217f3a5.png)

遇到什么问题,可留言,看到会尽快回复。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容