1. 程式人生 > >Echart3+vue實現自定義多色板塊遷徙地圖

Echart3+vue實現自定義多色板塊遷徙地圖

成品圖
這裡寫圖片描述

(vue)

一、需求
  • 中國板塊中的每一個板塊按權重顏色不同
  • 遷徙線條的顏色不同
  • 遷徙路徑下的文字大小根據權重而定
  • 實現遷徙的動態效果
二、實現思路
  • 需要地圖,echart,vue的js檔案並分別引入(這裡地圖引入china.js)
  • 一個記錄所有遷徙點的經緯度座標的物件geoCoordMap
  • 一個記錄出發點到遷徙點的對應關係陣列,每個遷徙點賦予value值對應權重和線條顏色HZdata
  • 一個記錄字型大小的變數mapFontSize
  • 在data中定義series
  • mounted中初始化echart
  • 在beforeDestroy中釋放定義了echart的變數
三、資料的處理和實現
    // methods
    getSeries() {
      var _this = this
      var series = [];

      [
        ['杭州', BJdata]
      ].forEach(function(item, i) {
        series.push(
          {  // 遷徙的展示線
            type: 'lines',
            zlevel: 2,
            effect: {  // 顯示線上的特效
              show: true
, period: 3, // 特效動畫的時間 trailLength: 0.02, // 特效尾跡的長度 symbol: 'arrow', // 特效樣式 symbolSize: 5, // 特效大小 }, lineStyle: { // 線的樣式 normal: { width: 1, opacity: .5, curveness: 0.2
// 邊的曲度 } }, data: _this.convertData(item[1]) // 將定義好的遷徙對應陣列傳給convertData函式處理 }, { // 遷徙點的效果 type: 'effectScatter', // 帶有漣漪特效動畫的散點(氣泡)圖 coordinateSystem: 'geo', zlevel: 2, rippleEffect: { // 漣漪特效相關配置 period: 4, // 特效動畫的時間 brushType: 'stroke', // 波紋的繪製方式,預設'fill'(效果類似呼吸燈),'stroke'(效果類似水波紋) scale: 4 // 波紋的最大縮放比例 }, label: { normal: { show: true, position: 'right', offset: [13, 0], formatter: '{b}', // 模板變數有 {a}、{b}、{c},分別表示系列名,資料名,資料值。 fontWeight: 'lighter' }, emphasis: { show: false } }, symbol: 'circle', // 標記的圖形 // 標記的圖形大小,這裡的大小不固定,根據value值來做計算 symbolSize: function(val) { return 4 + val[2] / 10 }, itemStyle: { normal: { show: false, color: '#fff' } }, data: item[1].map(function(dataItem, i) { return { // 每個遷徙點的name和value值,value為包含遷徙點座標點和遷徙點value的陣列 name: dataItem[0].name, value: geoCoordMap[dataItem[0].name].concat([dataItem[0].value]), // 這裡可以根據外層數量來單獨定義每個點的樣式大小等 label:{ normal:{ fontSize: 12 } } } }) }, { type: 'scatter', // 散點(氣泡)圖 coordinateSystem: 'geo', zlevel: 2, rippleEffect: { // 漣漪特效相關配置 period: 4, // 特效的執行時間 brushType: 'stroke', // 波紋的繪製方式,預設'fill'(效果類似呼吸燈),'stroke'(效果類似水波紋) scale: 4 // 波紋的縮放比例 }, label: { // 是否顯示文字標籤 normal: { show: false } }, symbol: 'circle', // 標記圖形 symbolSize: 10, // 標記圖形大小 itemStyle: { normal: { show: true, color: '#9966cc' } }, // 資料展示 data: [{ name: '貴陽市', value: [106.636577, 26.653325, 100] }], }, // 在這裡設定地圖每個模組的顏色 { name: 'categoryA', type: 'map', geoIndex: 0, tooltip: {show: true}, // 需要設定顏色的模組名稱,value對應visualMap中的顏色值 data:[ { name: '北京', value: 0 }, { name: '上海', value: 2 } //. //. //. ], } ) }) this.series = series }, convertData(data) { var res = [] for (var i = 0; i < data.length; i++) { var dataItem = data[i] // 這裡data[i]的格式為[{name: '遷徙點名稱', value: '遷徙點的value值'}, {name: '出發點的名稱'}] // 遷徙點的座標 var fromCoord = geoCoordMap[dataItem[0].name] // 出發點的座標 var toCoord = geoCoordMap[dataItem[1].name] if (fromCoord && toCoord) { // 資料處理(這裡的陣列順序影響遷徙線中標記的指向,如果toCoord在前,則標記從出發點指向遷徙點,反之從遷徙點指向出發點) res.push([ { coord: toCoord }, { coord: fromCoord, value: dataItem[0].value } ]) } } return res }

series定義好之後新增到option中,使用計算屬性即可

    // computed
    opt() {
      let _this = this
      let obj = {
        visualMap: {
          show: false,
          min: 0,
          max: 100,
          // visualMap顏色值,對應方式是從高到低,這裡的顏色如果需要動態展示也可以定義在data中
          color: ['#0aff45', '#e4ff88', '#0fe6ff', '#f36467']
        },
        geo: {
          map: 'china', // 地圖名稱,如果是省級/市級區域,需要寫入中文,如北京地圖應該在這裡寫'北京' 
          label: {
            emphasis: {
              show: false   // 是否顯示地圖上每個板塊的名稱
            }
          },
          // 這個引數用於地圖的長寬比
          // aspectScale: 0.5,
          // 當前視角的縮放比例。
          // zoom: 1.5,
          layoutCenter: ['50%', '53%'],
          layoutSize: '100%',
          itemStyle: {
            normal: {
              borderWidth: 0,
              opacity: .6
            }
          }
        },
        series: _this.series
      }
      return obj
    }

相關推薦

Echart3+vue實現定義板塊遷徙地圖

成品圖 (vue) 一、需求 中國板塊中的每一個板塊按權重顏色不同 遷徙線條的顏色不同 遷徙路徑下的文字大小根據權重而定 實現遷徙的動態效果 二、實現思路 需要地圖,echart,vue的js檔案並分別引入(這裡地圖引入china

定義UITableView實現定義左滑刪除按鈕及按鈕,拖拽cell和表頭進行排序

本文介紹了能拖拽cell和表頭進行排序的自定義UITableView,並且能自定義左滑顯示的UIButton樣式。 先看左滑自定義按鈕效果圖  :     override func tableView(_ tableView: UITableView, editA

vue定義選樣式

自定義多選框樣式 平時一直用的框架中的樣式,這次不行了 要自己寫。 做個筆記記錄一下 很久沒寫這中樣式了 設計要求的樣式 其實那個勾並不是checkbox,而是一個i標籤,給他的兩邊設定border

vue+elementui定義Dialog元件之登入彈框話框實現(實現不同vue元件關聯)

elementui提供一個可實現彈框的元件el-dialog,一般會將彈框寫在一個vue檔案,通過el-dialog套用類似於這種 <el-button round @click="dialogFormVisible = true">登入</el-butt

Vue的elementUI實現定義主題

使用vue開發專案,用到elementUI,根據官網的寫法,我們可以自定義主題來適應我們的專案要求,下面來介紹一下兩種方法實現的具體步驟,(可以參考官方文件自定義主題官方文件),先說專案中沒有使用scss編寫,用主題工具的方法(使用的較多) 第一種方法:使用命令列主題工具 使用vue

實現定義view(2):仿Android QQ螢幕顯示ListView的效果

本文在《仿 UC,墨跡天氣左右拖動 多螢幕顯示效果》的基礎上對程式碼進行修改,模仿Android QQ主介面的分屏ListView滑動效果。 當進行橫向滑動時,會切換螢幕,當縱向滑動時,ListView會滾動。 效果圖如下: 程式碼如下: FlingGallery.

Android定義TAB懸浮控制元件實現蘑菇街首頁效果

說明: 1.viewpager不能左右滑動; 2.轉載時程式碼略有改動(注:修復tab控制元件不能自動滑動的問題); 3.原始碼下載後不能直接執行,經過調整此問題已經修復。 核心程式碼: package com.Imy.Fuli.Fra

Vue directive定義指令+canvas實現H5圖片壓縮上傳-Base64格式

前言 最近優化專案-手機拍照圖片太大,回顯速度比較慢,使用了vue的自定義指令實現H5壓縮上傳base64格式的圖片 canvas自定義指令 Vue.directive("canvas",

CSS 實現定義樣式的單選框與選框

前端在開發的過程中,經常會遇見使用單選框以及多選框的情況,但是預設的選框按鈕的樣式單一,一般我們需要去自定義一些選框按鈕的樣式; 通常情況下,單選、多選為方便自定義樣式,一般會採用input+

vue.js實現定義輸入分頁

let ons substr inf div con ima com bsp 效果如下: html: <input type="text" value="1" v-model="page.page_my_selected" @blur="onBlur">

VUE2 配合mint-ui實現 定義 loadmore(下拉重新整理,上拉更)

<template> <div class="page-loadmore"> <h1 class="page-title">Pull up</h1> <p class="page-loadmore-de

研究MapReduce原始碼之實現定義LineRecordReader完成行讀取檔案內容

TextInputFormat是Hadoop預設的資料輸入格式,但是它只能一行一行的讀記錄,如果要讀取多行怎麼辦? 很簡單 自己寫一個輸入格式,然後寫一個對應的Recordreader就可以了,但是要實現確不是這麼簡單的 首先看看TextInputForma

MapReduce-MulitipleOutputs實現定義輸出到個目錄

輸入源資料樣例: Source1-0001 Source2-0002 Source1-0003 Source2-0004 Source1-0005 Source2-0006 Source3-0007 Source3-0008描述: Source1開頭的資料屬於集合A;Sou

vue 通過定義指令實現 置頂操作;

body template binding info tel timer 實現 當前 png 項目需求:要求當前項目每個頁面滑到超出一屏的距離時,出現 backTop 按鈕,點擊則回到最頂端;俗稱置頂操作: 因為涉及到的頁面較多,每個頁面都加肯定顯得重復累贅,最終想到了 V

Vue+elementUI 定義動態資料選單導航元件實現展開收縮+路由跳轉router-view渲染資料 路由跳轉到同一個頁面帶引數ID 自動重新整理資料

準備:匯入ElementUI 看官網教程 資料準備:JSON資料轉換成樹狀 參考文章: JS實現 JSON扁平資料轉換樹狀資料 後臺我拿的資料是這樣的格式: [ {id:1 , parentId: 0, name: '', level: 0}, {id:2 , parentId: 0, name: '',

vue 封裝定義組件

lec com != 封裝 data als storage -m .com 先說說組件的結構 最好單獨放一個文件夾,有依賴的話裝依賴 Sjld.vue 內容 <template id="sjld"> <label >

如何實現定義同步組件

nds 允許 oid try unlock all 同步 while name package com.chen;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.AbstractQ

JS簡單實現定義右鍵菜單

ans idt 右鍵 動畫 忘記 span spa round 部分 RT,一個簡單的例子,僅僅講述原理 <div id="menu" style="width: 0;height: 0;background: cadetblue;position: absolu

Notification的基本用法以及使用RemoteView實現定義布局

解決 edi ngs 取消 ets lsp 過程 net tde Notification的作用 Notification是一種全局效果的通知,在系統的通知欄中顯示。既然作為通知,其基本作用有: 顯示接收到短消息、即時信息等 顯示客戶端的推送(廣告、優惠、新聞等)

vue(2) - 定義指令

asc color true dom this == ont ron 指令 我們都知道v-for、v-html、等等都是指令:擴展html 語法 自定義指令: 屬性指令 Vue.deirctive(指令名稱,function(){   this.el ==>原生的do