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)步驟
- 首先要給echarts提供一個(gè)容器。
<template>
<div class="wrapper">
<div class="map-container" ref="myEchart"></div>
</div>
</template>
- 導(dǎo)入echarts和中國地圖的js數(shù)據(jù),當(dāng)然有需求的可以在main文件中按需引入。
import echarts from "echarts";
import "../../../node_modules/echarts/map/js/china.js"; // 引入中國地圖數(shù)據(jù)
- 實(shí)例化echarts對象
this.myEchart = echarts.init(this.$refs.myEchart);
- 參數(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);
- 添加散點(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);
- 測試數(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)鍵代碼
- 省份地圖信息的導(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]}`);
}
- 設(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);
},