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)

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

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

推荐阅读更多精彩内容