Echarts實(shí)現(xiàn)中國地圖、省份地圖及對應(yīng)數(shù)據(jù)展示

Echarts實(shí)現(xiàn)中國地圖、省份地圖及對應(yīng)數(shù)據(jù)展示

一、概述

首先ECharts 是一個(gè)使用 JavaScript 實(shí)現(xiàn)的開源可視化庫。兼容當(dāng)前絕大部分瀏覽器,而且提供大量可交互、可高度個(gè)性化定制的圖表,滿足開發(fā)者各種需求。
今天主要展示echarts地圖功能。echarts內(nèi)置了世界地圖、中國及各個(gè)省市自治區(qū)地圖數(shù)據(jù),可通過標(biāo)準(zhǔn)GeoJson擴(kuò)展地圖類型。

二、echarts實(shí)現(xiàn)中國地圖

先看實(shí)現(xiàn)效果
中國地圖數(shù)據(jù)展示
實(shí)現(xiàn)步驟
  1. 首先要給echarts提供一個(gè)容器。
<template>
  <div class="wrapper">
    <div class="map-container" ref="myEchart"></div>
  </div>
</template>
  1. 導(dǎo)入echarts和中國地圖的js數(shù)據(jù),當(dāng)然有需求的可以在main文件中按需引入。
import echarts from "echarts";
import "../../../node_modules/echarts/map/js/china.js"; // 引入中國地圖數(shù)據(jù)
  1. 實(shí)例化echarts對象
this.myEchart = echarts.init(this.$refs.myEchart);
  1. 參數(shù)設(shè)置,因?yàn)轫?xiàng)目需求需要添加陰影和單獨(dú)設(shè)置地圖邊框,所以實(shí)際上是2張地圖重疊,下面那張地圖做陰影和邊框處理。
let option = {
        tooltip: {
          show: false
        },
        geo: {
          map: "china",
          roam: false,// 一定要關(guān)閉拖拽
          zoom: 1.23,
          center: [105, 36], // 調(diào)整地圖位置
          label: {
            normal: {
              show: false, //關(guān)閉省份名展示
              fontSize: "10",
              color: "rgba(0,0,0,0.7)"
            },
            emphasis: {
              show: false
            }
          },
          itemStyle: {
            normal: {
              areaColor: "#0d0059",
              borderColor: "#389dff",
              borderWidth: 1, //設(shè)置外層邊框
              shadowBlur: 5,
              shadowOffsetY: 8,
              shadowOffsetX: 0,
              shadowColor: "#01012a"
            },
            emphasis: {
              areaColor: "#184cff",
              shadowOffsetX: 0,
              shadowOffsetY: 0,
              shadowBlur: 5,
              borderWidth: 0,
              shadowColor: "rgba(0, 0, 0, 0.5)"
            }
          }
        },
        series: [
          {
            type: "map",
            map: "china",
            roam: false,
            zoom: 1.23,
            center: [105, 36],
            // geoIndex: 1,
            // aspectScale: 0.75, //長寬比
            showLegendSymbol: false, // 存在legend時(shí)顯示
            label: {
              normal: {
                show: false
              },
              emphasis: {
                show: false,
                textStyle: {
                  color: "#fff"
                }
              }
            },
            itemStyle: {
              normal: {
                areaColor: "#0d0059",
                borderColor: "#389dff",
                borderWidth: 0.5
              },
              emphasis: {
                areaColor: "#17008d",
                shadowOffsetX: 0,
                shadowOffsetY: 0,
                shadowBlur: 5,
                borderWidth: 0,
                shadowColor: "rgba(0, 0, 0, 0.5)"
              }
            }
          }
        ]
      };
this.myEchart.setOption(option);
  1. 添加散點(diǎn)數(shù)據(jù),這里注意要把上面設(shè)置過的地圖帶上,之前設(shè)置的series的數(shù)據(jù)會被覆蓋掉。
      var dataValue = this.dealWithData();
      var data1 = dataValue.splice(0, 6);
      var option = {
        series: [
          {
            type: "map",
            map: "china",
            roam: false,
            zoom: 1.23,
            center: [105, 36],
            // geoIndex: 1,
            // aspectScale: 0.75, //長寬比
            showLegendSymbol: false, // 存在legend時(shí)顯示
            label: {
              normal: {
                show: false
              },
              emphasis: {
                show: false
              }
            },
            itemStyle: {
              normal: {
                areaColor: "#0d0059",
                borderColor: "#389dff",
                borderWidth: 0.5
              },
              emphasis: {
                areaColor: "#17008d",
                shadowOffsetX: 0,
                shadowOffsetY: 0,
                shadowBlur: 5,
                borderWidth: 0,
                shadowColor: "rgba(0, 0, 0, 0.5)"
              }
            }
          },
          {
            name: "",
            type: "scatter",
            coordinateSystem: "geo",
            data: dataValue,
            //   symbolSize: function(val) {
            //     return val[2] / 10;
            //   },
            symbol: "circle",
            symbolSize: 8,
            hoverSymbolSize: 10,
            tooltip: {
              formatter(value) {
                return value.data.name + "<br/>" + "設(shè)備數(shù):" + "22";
              },
              show: true
            },
            encode: {
              value: 2
            },
            label: {
              formatter: "{b}",
              position: "right",
              show: false
            },
            itemStyle: {
              color: "#0efacc"
            },
            emphasis: {
              label: {
                show: false
              }
            }
          },
          {
            name: "Top 5",
            type: "effectScatter",
            coordinateSystem: "geo",
            data: data1,
            symbolSize: 15,
            tooltip: {
              show: false
            },
            encode: {
              value: 2
            },
            showEffectOn: "render",
            rippleEffect: {
              brushType: "stroke",
              color: "#0efacc",
              period: 9,
              scale: 5
            },
            hoverAnimation: true,
            label: {
              formatter: "{b}",
              position: "right",
              show: true
            },
            itemStyle: {
              color: "#0efacc",
              shadowBlur: 2,
              shadowColor: "#333"
            },
            zlevel: 1
          }
        ]
      };
      this.myEchart.setOption(option);
  1. 測試數(shù)據(jù)的方法,需要的可以復(fù)制使用
dealWithData() {
      var geoCoordMap = {
        海門: [121.15, 31.89],
        鄂爾多斯: [109.781327, 39.608266],
        招遠(yuǎn): [120.38, 37.35],
        舟山: [122.207216, 29.985295],
        齊齊哈爾: [123.97, 47.33],
        鹽城: [120.13, 33.38],
        赤峰: [118.87, 42.28],
        青島: [120.33, 36.07],
        乳山: [121.52, 36.89],
        金昌: [102.188043, 38.520089],
        泉州: [118.58, 24.93],
        萊西: [120.53, 36.86],
        日照: [119.46, 35.42],
        膠南: [119.97, 35.88],
        南通: [121.05, 32.08],
        拉薩: [91.11, 29.97],
        云浮: [112.02, 22.93],
        梅州: [116.1, 24.55],
        文登: [122.05, 37.2],
        上海: [121.48, 31.22],
        攀枝花: [101.718637, 26.582347],
        威海: [122.1, 37.5],
        承德: [117.93, 40.97],
        廈門: [118.1, 24.46],
        汕尾: [115.375279, 22.786211],
        潮州: [116.63, 23.68],
        丹東: [124.37, 40.13],
        太倉: [121.1, 31.45],
        曲靖: [103.79, 25.51],
        煙臺: [121.39, 37.52],
        福州: [119.3, 26.08],
        瓦房店: [121.979603, 39.627114],
        即墨: [120.45, 36.38],
        撫順: [123.97, 41.97],
        玉溪: [102.52, 24.35],
        張家口: [114.87, 40.82],
        陽泉: [113.57, 37.85],
        萊州: [119.942327, 37.177017],
        湖州: [120.1, 30.86],
        汕頭: [116.69, 23.39],
        昆山: [120.95, 31.39],
        寧波: [121.56, 29.86],
        湛江: [110.359377, 21.270708],
        揭陽: [116.35, 23.55],
        榮成: [122.41, 37.16],
        連云港: [119.16, 34.59],
        葫蘆島: [120.836932, 40.711052],
        常熟: [120.74, 31.64],
        東莞: [113.75, 23.04],
        河源: [114.68, 23.73],
        淮安: [119.15, 33.5],
        泰州: [119.9, 32.49],
        南寧: [108.33, 22.84],
        營口: [122.18, 40.65],
        惠州: [114.4, 23.09],
        江陰: [120.26, 31.91],
        蓬萊: [120.75, 37.8],
        韶關(guān): [113.62, 24.84],
        嘉峪關(guān): [98.289152, 39.77313],
        廣州: [113.23, 23.16],
        延安: [109.47, 36.6],
        太原: [112.53, 37.87],
        清遠(yuǎn): [113.01, 23.7],
        中山: [113.38, 22.52],
        昆明: [102.73, 25.04],
        壽光: [118.73, 36.86],
        盤錦: [122.070714, 41.119997],
        長治: [113.08, 36.18],
        深圳: [114.07, 22.62],
        珠海: [113.52, 22.3],
        宿遷: [118.3, 33.96],
        咸陽: [108.72, 34.36],
        銅川: [109.11, 35.09],
        平度: [119.97, 36.77],
        佛山: [113.11, 23.05],
        海口: [110.35, 20.02],
        江門: [113.06, 22.61],
        章丘: [117.53, 36.72],
        肇慶: [112.44, 23.05],
        大連: [121.62, 38.92],
        臨汾: [111.5, 36.08],
        吳江: [120.63, 31.16],
        石嘴山: [106.39, 39.04],
        沈陽: [123.38, 41.8],
        蘇州: [120.62, 31.32],
        茂名: [110.88, 21.68],
        嘉興: [120.76, 30.77],
        長春: [125.35, 43.88],
        膠州: [120.03336, 36.264622],
        銀川: [106.27, 38.47],
        張家港: [120.555821, 31.875428],
        三門峽: [111.19, 34.76],
        錦州: [121.15, 41.13],
        南昌: [115.89, 28.68],
        柳州: [109.4, 24.33],
        三亞: [109.511909, 18.252847],
        自貢: [104.778442, 29.33903],
        吉林: [126.57, 43.87],
        陽江: [111.95, 21.85],
        瀘州: [105.39, 28.91],
        西寧: [101.74, 36.56],
        宜賓: [104.56, 29.77],
        呼和浩特: [111.65, 40.82],
        成都: [104.06, 30.67],
        大同: [113.3, 40.12],
        鎮(zhèn)江: [119.44, 32.2],
        桂林: [110.28, 25.29],
        張家界: [110.479191, 29.117096],
        宜興: [119.82, 31.36],
        北海: [109.12, 21.49],
        西安: [108.95, 34.27],
        金壇: [119.56, 31.74],
        東營: [118.49, 37.46],
        牡丹江: [129.58, 44.6],
        遵義: [106.9, 27.7],
        紹興: [120.58, 30.01],
        揚(yáng)州: [119.42, 32.39],
        常州: [119.95, 31.79],
        濰坊: [119.1, 36.62],
        重慶: [106.54, 29.59],
        臺州: [121.420757, 28.656386],
        南京: [118.78, 32.04],
        濱州: [118.03, 37.36],
        貴陽: [106.71, 26.57],
        無錫: [120.29, 31.59],
        本溪: [123.73, 41.3],
        克拉瑪依: [84.77, 45.59],
        渭南: [109.5, 34.52],
        馬鞍山: [118.48, 31.56],
        寶雞: [107.15, 34.38],
        焦作: [113.21, 35.24],
        句容: [119.16, 31.95],
        北京: [116.46, 39.92],
        徐州: [117.2, 34.26],
        衡水: [115.72, 37.72],
        包頭: [110, 40.58],
        綿陽: [104.73, 31.48],
        烏魯木齊: [87.68, 43.77],
        棗莊: [117.57, 34.86],
        杭州: [120.19, 30.26],
        淄博: [118.05, 36.78],
        鞍山: [122.85, 41.12],
        溧陽: [119.48, 31.43],
        庫爾勒: [86.06, 41.68],
        安陽: [114.35, 36.1],
        開封: [114.35, 34.79],
        濟(jì)南: [117, 36.65],
        德陽: [104.37, 31.13],
        溫州: [120.65, 28.01],
        九江: [115.97, 29.71],
        邯鄲: [114.47, 36.6],
        臨安: [119.72, 30.23],
        蘭州: [103.73, 36.03],
        滄州: [116.83, 38.33],
        臨沂: [118.35, 35.05],
        南充: [106.110698, 30.837793],
        天津: [117.2, 39.13],
        富陽: [119.95, 30.07],
        泰安: [117.13, 36.18],
        諸暨: [120.23, 29.71],
        鄭州: [113.65, 34.76],
        哈爾濱: [126.63, 45.75],
        聊城: [115.97, 36.45],
        蕪湖: [118.38, 31.33],
        唐山: [118.02, 39.63],
        平頂山: [113.29, 33.75],
        邢臺: [114.48, 37.05],
        德州: [116.29, 37.45],
        濟(jì)寧: [116.59, 35.38],
        荊州: [112.239741, 30.335165],
        宜昌: [111.3, 30.7],
        義烏: [120.06, 29.32],
        麗水: [119.92, 28.45],
        洛陽: [112.44, 34.7],
        秦皇島: [119.57, 39.95],
        株洲: [113.16, 27.83],
        石家莊: [114.48, 38.03],
        萊蕪: [117.67, 36.19],
        常德: [111.69, 29.05],
        保定: [115.48, 38.85],
        湘潭: [112.91, 27.87],
        金華: [119.64, 29.12],
        岳陽: [113.09, 29.37],
        長沙: [113, 28.21],
        衢州: [118.88, 28.97],
        廊坊: [116.7, 39.53],
        菏澤: [115.480656, 35.23375],
        合肥: [117.27, 31.86],
        武漢: [114.31, 30.52],
        大慶: [125.03, 46.58]
      };
      var data = [];
      for (var key in geoCoordMap) {
        data.push({ name: key, value: geoCoordMap[key] });
      }
      return data;
    }

三、echarts實(shí)現(xiàn)省份地圖

項(xiàng)目效果
省份地圖展示
實(shí)現(xiàn)步驟與中國地圖類似這里就不贅述了,這里直接貼出關(guān)鍵代碼
  1. 省份地圖信息的導(dǎo)入,請?jiān)趯?shí)例化echarts對象前導(dǎo)入對應(yīng)省份地圖信息
initImportFile() {
      var filaName = {
        浙江: "zhejiang.js",
        安徽: "anhui.js",
        澳門: "aomen.js",
        北京: "beijing.js",
        重慶: "chongqing.js",
        福建: "fujian.js",
        甘肅: "gansu.js",
        廣東: "guangdong.js",
        廣西: "guangxi.js",
        貴州: "guizhou.js",
        海南: "hainan.js",
        河北: "hebei.js",
        黑龍江: "heilongjiang.js",
        河南: "henan.js",
        湖北: "hubei.js",
        湖南: "hunan.js",
        江蘇: "jiangsu.js",
        江西: "jiangxi.js",
        吉林: "jilin.js",
        遼寧: "liaoning.js",
        內(nèi)蒙古: "neimenggu.js",
        寧夏: "ningxia.js",
        青海: "qinghai.js",
        山東: "shandong.js",
        上海: "shanghai.js",
        山西: "shanxi.js",
        山西1: "shanxi1.js",
        四川: "sichuan.js",
        臺灣: "taiwan.js",
        天津: "tianjin.js",
        香港: "xianggang.js",
        新疆: "xinjiang.js",
        西藏: "xizang.js",
        云南: "yunnan.js"
      };
      require(`echarts/map/js/province/${filaName[this.province]}`);
    }
  1. 設(shè)置省份地圖option參數(shù),因?yàn)闆]有省份數(shù)據(jù)信息,所以暫時(shí)沒做省份的散點(diǎn)圖。
initChinaMap() {
      let option = {
        tooltip: {
          show: false
        },
        geo: {
          map: this.province,
          roam: false,
          // zoom: 1.23,
          label: {
            normal: {
              show: false,
              fontSize: "10",
              color: "rgba(0,0,0,0.7)"
            }
          },
          itemStyle: {
            normal: {
              areaColor: "#0d0059",
              borderColor: "#389dff",
              borderWidth: 1, //設(shè)置外層邊框
              shadowBlur: 5,
              shadowOffsetY: 8,
              shadowOffsetX: 0,
              shadowColor: "#01012a"
            },
            emphasis: {
              areaColor: "#184cff",
              shadowOffsetX: 0,
              shadowOffsetY: 0,
              shadowBlur: 5,
              borderWidth: 0,
              shadowColor: "rgba(0, 0, 0, 0.5)"
            }
          }
        },
        series: [
          {
            type: "map",
            map: this.province,
            roam: false,
            showLegendSymbol: false, // 存在legend時(shí)顯示
            label: {
              normal: {
                show: false
              },
              emphasis: {
                show: false,
                textStyle: {
                  color: "#fff"
                }
              }
            },
            itemStyle: {
              normal: {
                areaColor: "#0d0059",
                borderColor: "#389dff",
                borderWidth: 0.5
              },
              emphasis: {
                areaColor: "#17008d",
                shadowOffsetX: 0,
                shadowOffsetY: 0,
                shadowBlur: 5,
                borderWidth: 0,
                shadowColor: "rgba(0, 0, 0, 0.5)"
              }
            }
          }
        ]
      };
      let myEchart = echarts.init(this.$refs.myEchart);
      myEchart.setOption(option);
    },

四、備注

  1. 上述所有option的配置參數(shù)都可在官方文檔中查看。
  2. 全國地圖實(shí)例: 美國地圖
  3. 省份地圖實(shí)例: 香港地圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。