Maureen • 2023-07-06

Echarts簡單畫地圖

範例

Description

Apache Echarts 是什麼神奇好物!簡單介紹 Echarts,無痛成為圖表達人!

這篇文章會提到

  • Echarts 是什麼
  • Echarts 安裝與使用
  • 從哪裡得到台灣的 geojson

Echarts 是什麼

為什麼想使用Echats

畫地圖的library比比皆是,比較常見的像 Leaflet.js、D3.js。 之所以會想使用Echarts來繪製,主要是由於工作上常常需要將資料放在台灣的地圖上來參照。 有時候也會需要來回切換縣市和鄉鎮地圖。 有用過Leaflet的讀者應該知道,畫面的Loading實在要等太久~效率很差。 基於這個理由,再加上如果只是需要呈現縣市輪廓,不需要呈現更多的細節。 Echarts 容易上手、官方將功能做的又美又好用,在眾多library中脫穎而出👑

Echats的優缺點

除了上述提到的好入門、功能很讚,還有其他優點:

  1. 可以閱讀壓縮後的jeojson,將檔案大小變小

    geojson的coordinates通常都是落落長一大串,Echarts有個特殊的壓縮方式,可以大幅縮減篇幅,詳細如何縮減的此篇文章先不談~ 以下範例為壓縮後的程式碼,真的超級精簡🥹

  // 壓縮後的geojson節錄
    "geometry": {
      "type": "MultiPolygon",
      "coordinates": [["@@HCGG@CMGBCKECDGGGE@FDNHDDH@FLBFCDFFB"],["@@HAAEKICBEGG@GDINFFJ@@CJDP@"],
        ["@@FABCL@@EGKBCLABEJB@GLHCH@FHAJFJ@LBLCCEAIECIKCFGC@EMKG@AFE@IGEGE@@HQ@CFG@DJHF@DFFCDAFFBDHGDDL"],
        ["@@H@BGJ@@IEIDABFFDJ@BAAGMGAFO@CGG@EACBG@AAMCGG@GBSCEIA@L@HABFJFFEFBFDFPJHANNHDADHD"],
        ["@@BEIEEECBFNDAHD"],["@@FEGABH"],["@@AEHGGGBCGEIBCFDFHFCFNF"],["@@QQCBHHDFJB"],
        ["@@DEDECKHCNB@HFHH@@GHEHBFGBEK@CFIMEAAECBGCKHFJAFGDGCBJGFEGCHLFAFLB"]
      ],
    }
  1. 地圖互動的功能,應有盡有,設定也非常簡單!

缺點的部分,是在台灣的討論度相對低。相關討論幾乎都在中國論壇,有任何問題也是以簡體中文的回答為大宗。

Echarts 安裝與使用

Echarts 官網

首先在你的專案中安裝 Echarts(以下用vue專案來做示範)

  • Install ECharts
  •   npm install echarts --save
  • Import ECharts
  •   在 main.js 中 import echarts
    
      import * as echarts from 'echarts';
    
      Vue.prototype.$echarts = echarts;
  • demo.vue
  •   <template>
        <div>
          // 地圖的div 一定要給 width 和 height
          <div id="map_chart" :style="{ width: '800px', height: '800px' }"></div>
        </div>
      </template>
      <script>
      import mapJson from '../assets/map.json';
    
      export default {
        mounted() {
          this.create_chart();
        },
    
        methods: {
          create_chart() {
            // 選擇要繪圖的DOM
            let map_chart = this.$echarts.init(document.getElementById("map_chart"));
            // 使用 registerMap 註冊地圖
            this.$echarts.registerMap('mapJson', mapJson);
    
            const option = {
              series: [
                {
                  name: "台灣地圖",
                  type: "map", // 必要的
                  map: "mapJson", // 必要的
                  silent: false, // hover地圖的變化
                  emphasis: { // hover地圖的變化的設定
                    itemStyle: {
                      areaColor: 'none'
                    },
                    label: {
                      show: true,
                    },
                  },
                  select: { // 地圖點選後的變化的設定
                    disabled: false, // 能不能點選地圖
                    itemStyle: {
                      areaColor: 'steelblue'
                    },
                  },
                  label: { // 地圖上要不要顯示區域名稱
                    show: true,
                  },
                  data: mapData.data[0],
                  roam: true, // 地圖可以平移及縮放
                  boundingCoords:[ [118,26.5], [122.4,21.5] ],
                  center: [120.3, 23.8],
                  layoutCenter: ['50%', '50%'],
                  left: '5%', 
                  aspectScale:1,
                  scaleLimit: { min: 1, max: 12.0 },
                }
              ],
              // color bar
              visualMap: { 
                min: 0,
                max: 20,
                text: ["High", "Low"],
                realtime: false,
                calculable: true,
                inRange: {
                  color: ["lightskyblue", "yellow", "orangered"],
                },
              },
            };
            map_chart.setOption(option);
          },
        },
      };
      </script>

    從哪裡得到台灣的 geojson

    1. 政府資料開放平臺
    2. 政府資料開放平臺下載直轄市、縣市界線(TWD97經緯度)SHP格式

    註:SHP -> geojson:將檔案放上mapshaper,可以轉成 geojson 格式。 步驟可參考此篇文章