Vue3+echarts繪制世界地圖的示例代碼
先放效果圖

之前所查找的資料都沒有講清楚如何引入地圖文件并繪制地圖,下面做一個記錄。
首先下載對應(yīng)的地圖json文件,這里可以參考我的這篇文章,提供了下載地址:
https://echarts.apache.org/examples/data/asset/geo/

第二步,在繪制地圖的vue組件中導(dǎo)入該json文件。解釋第三個import,world可以隨便改名字,在下面第三步注冊地圖的時候?qū)?yīng)第二個world。
import {defineComponent, toRaw} from "vue";
import axios from "axios";
import world from "@/assets/json/world.json"
第三步,定義圖表并配置圖表。注意在注冊地圖的時候,第一個是地圖的名稱,第二個是在import的時候給json文件取的名字
// 定義圖表
this.$echarts.registerMap('world', world)
let map_off = this.$echarts.init(document.getElementById("world_map_off"), "football_customed");
// 配置圖表
map_off.setOption(option)
// 圖表響應(yīng)式改變
window.addEventListener('resize', function () {
map_off.resize();下面給出完整代碼(script),template部分只需要設(shè)置對應(yīng)的圖表id即可

<script>
import {defineComponent, toRaw} from "vue";
import axios from "axios";
import world from "@/assets/json/world.json"
export default defineComponent({
data() {
return {
num: [],
}
},
methods: {
competition() {
// 獲取需要的數(shù)據(jù)
let zhuchang_data = []
let kechang_data = []
axios.get("http://127.0.0.1:5000/competition").then(res => {
// 獲取數(shù)據(jù)
zhuchang_data = toRaw(res.data.zhuchang_data)
kechang_data = toRaw(res.data.kechang_data)
console.log(zhuchang_data)
console.log(kechang_data)
// 生成出線方法
function formtGCData(geoData, data, srcNam, dest) {
var tGeoDt = []
if (dest) {
for (var i = 0; i < data.length; i++) {
if (srcNam !== data[i].name) {
tGeoDt.push({
coords: [geoData[srcNam], geoData[data[i].name]]
})
}
}
} else {
for (var j = 0; j < data.length; j++) {
if (srcNam !== data[j].name) {
tGeoDt.push({
coords: [geoData[data[j].name], geoData[srcNam]]
})
}
}
}
return tGeoDt
}
// 生成進(jìn)線方法
function formtVData(geoData, data, srcNam) {
var tGeoDt = []
for (var i = 0; i < data.length; i++) {
var tNam = data[i].name
if (srcNam !== tNam) {
tGeoDt.push({
name: tNam,
value: geoData[tNam]
})
}
}
tGeoDt.push({
name: srcNam,
value: geoData[srcNam],
symbolSize: 8,
})
tGeoDt.forEach((item) => {
if (item.name === 'china') {
item.itemStyle = {
color: 'red'
}
} else {
item.itemStyle = {
color: '#9E992F'
}
}
})
return tGeoDt
}
// 顯示點的坐標(biāo)
let geoCoordMap = {
china: [117.3, 41.03],
Botswana: [24.68, -22.33],
Canada: [-110.895168, 60.2312],
Brazil: [-50.895168, -10.2312],
};
// 所在點對應(yīng)數(shù)據(jù),上面數(shù)據(jù)添加修改后務(wù)必這里添加修改,value可不用
let data = [
{
id: 1,
name: 'china',
}, {
id: 2,
name: 'Botswana',
}, {
id: 3,
name: 'Canada',
}, {
id: 4,
name: 'Brazil',
}]
//箭頭類型 //''circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none''
var planePath = 'arrow'
// 定義圖表
this.$echarts.registerMap('world', world)
let world_map = this.$echarts.init(document.getElementById("world_map"), "football_customed");
// 定義主場圖表的配置
let option = {
geo: {
type: "map",
map: 'world',
zoom: 1.2,//地圖的縮放
label: {
emphasis: {
show: true,
color: '#fff'
}
},
roam: true,//是否滾動縮放
regions: [
{
name: 'China', //這個名字可以是map(世界地圖),China(中國地圖高亮)
itemStyle: {
normal: {
areaColor: '#480103',
borderColor: '#ffc107',
borderWidth: 1,
},
emphasis: {
areaColor: '#b40106',
},
},
},
],
itemStyle: {
normal: {
areaColor: '#690613',
borderColor: 'rgba(255,255,255,0.6)',//國界線顏色
borderType: 'dotted',//國界線類型
},
emphasis: {
areaColor: '#ad9541'
}
},
},
series: [
{
type: 'lines',//飛線
zlevel: 1,
effect: {
show: true,
period: 6,
trailLength: 0.1,
color: '#fff',//箭頭顏色
symbol: planePath,
symbolSize: 8,
},
lineStyle: {
normal: {
color: '#278FA2',//線的顏色
width: 1,
opacity: 0.4,
curveness: 0.2,
type: 'dotted',//'dotted'點型虛線 'solid'實線 'dashed'線性虛線
},
emphasis: {
type: 'dotted',
color: 'yellow',//線的顏色
}
},
data: formtGCData(geoCoordMap, data, 'china', false)
},
{
type: 'scatter',//圓點
coordinateSystem: 'geo',
zlevel: 10,
symbolSize: 10,
hoverAnimation: false,
silent: true,
data: formtVData(geoCoordMap, data, 'Brazil')
},
]
}
// 配置圖表
world_map.setOption(option)
// 圖表響應(yīng)式改變
window.addEventListener('resize', function () {
world_map.resize();
});
})
},
competition_off() {
// 獲取需要的數(shù)據(jù)
let zhuchang_data = []
let kechang_data = []
axios.get("http://127.0.0.1:5000/competition").then(res => {
// 獲取數(shù)據(jù)
zhuchang_data = toRaw(res.data.zhuchang_data)
kechang_data = toRaw(res.data.kechang_data)
// 生成出線方法
function formtGCData(geoData, data, srcNam, dest) {
var tGeoDt = []
if (dest) {
for (var i = 0; i < data.length; i++) {
if (srcNam !== data[i].name) {
tGeoDt.push({
coords: [geoData[srcNam], geoData[data[i].name]]
})
}
}
} else {
for (var j = 0; j < data.length; j++) {
if (srcNam !== data[j].name) {
tGeoDt.push({
coords: [geoData[data[j].name], geoData[srcNam]]
})
}
}
}
return tGeoDt
}
// 生成進(jìn)線方法
function formtVData(geoData, data, srcNam) {
var tGeoDt = []
for (var i = 0; i < data.length; i++) {
var tNam = data[i].name
if (srcNam !== tNam) {
tGeoDt.push({
name: tNam,
value: geoData[tNam]
})
}
}
tGeoDt.push({
name: srcNam,
value: geoData[srcNam],
symbolSize: 8,
})
tGeoDt.forEach((item) => {
if (item.name === 'china') {
item.itemStyle = {
color: 'red'
}
} else {
item.itemStyle = {
color: '#9E992F'
}
}
})
return tGeoDt
}
// 顯示點的坐標(biāo)
let geoCoordMap = {
china: [117.3, 41.03],
Botswana: [24.68, -22.33],
Canada: [-110.895168, 60.2312],
Brazil: [-50.895168, -10.2312],
};
// 所在點對應(yīng)數(shù)據(jù),上面數(shù)據(jù)添加修改后務(wù)必這里添加修改,value可不用
let data = [
{
id: 1,
name: 'china',
}, {
id: 2,
name: 'Botswana',
}, {
id: 3,
name: 'Canada',
}, {
id: 4,
name: 'Brazil',
}]
//箭頭類型 //''circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none''
var planePath = 'arrow'
// 定義圖表
this.$echarts.registerMap('world', world)
let map_off = this.$echarts.init(document.getElementById("world_map_off"), "football_customed");
// 定義主場圖表的配置
let option = {
geo: {
type: "map",
map: 'world',
zoom: 1.2,//地圖的縮放
label: {
emphasis: {
show: true,
color: '#fff'
}
},
roam: true,//是否滾動縮放
regions: [
{
name: 'China', //這個名字可以是map(世界地圖),China(中國地圖高亮)
itemStyle: {
normal: {
areaColor: '#480103',
borderColor: '#ffc107',
borderWidth: 1,
},
emphasis: {
areaColor: '#b40106',
},
},
},
],
itemStyle: {
normal: {
areaColor: '#690613',
borderColor: 'rgba(255,255,255,0.6)',//國界線顏色
borderType: 'dotted',//國界線類型
},
emphasis: {
areaColor: '#ad9541'
}
},
},
series: [
{
type: 'lines',//飛線
zlevel: 1,
effect: {
show: true,
period: 6,
trailLength: 0.1,
color: '#fff',//箭頭顏色
symbol: planePath,
symbolSize: 8,
},
lineStyle: {
normal: {
color: '#278FA2',//線的顏色
width: 1,
opacity: 0.4,
curveness: 0.2,
type: 'dotted',//'dotted'點型虛線 'solid'實線 'dashed'線性虛線
},
emphasis: {
type: 'dotted',
color: 'yellow',//線的顏色
}
},
data: formtGCData(geoCoordMap, data, 'china', false)
},
{
type: 'scatter',//圓點
coordinateSystem: 'geo',
zlevel: 10,
symbolSize: 10,
hoverAnimation: false,
silent: true,
data: formtVData(geoCoordMap, data, 'Brazil')
},
]
}
// 配置圖表
map_off.setOption(option)
// 圖表響應(yīng)式改變
window.addEventListener('resize', function () {
map_off.resize();
});
})
},
},
mounted() {
this.competition()
this.competition_off()
},
})
</script>核心步驟:下載對應(yīng)的地圖文件;在script中導(dǎo)入json文件;echarts注冊地圖。
到此這篇關(guān)于Vue3+echarts繪制世界地圖的示例代碼的文章就介紹到這了,更多相關(guān)Vue3 echarts繪制世界地圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
antd?select?多選限制個數(shù)的實現(xiàn)代碼
這篇文章主要介紹了antd?select?多選限制個數(shù),實現(xiàn)思路和核心代碼都很簡單,其中核心代碼在于disabled,代碼簡單易懂需要的朋友可以參考下2022-11-11
基于Vue2.0和Typescript實現(xiàn)多主題切換的示例
本文主要介紹了基于Vue2.0和Typescript實現(xiàn)多主題切換的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
vue2.0+SVG實現(xiàn)音樂播放圓形進(jìn)度條組件
這篇文章主要為大家詳細(xì)介紹了Vue2.0+SVG實現(xiàn)音樂播放圓形進(jìn)度條組件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09
vue將后臺數(shù)據(jù)時間戳轉(zhuǎn)換成日期格式
這篇文章主要為大家詳細(xì)介紹了vue將后臺數(shù)據(jù)時間戳轉(zhuǎn)換成日期格式,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07
在小程序/mpvue中使用flyio發(fā)起網(wǎng)絡(luò)請求的方法
這篇文章主要介紹了在小程序/mpvue中使用flyio發(fā)起網(wǎng)絡(luò)請求的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09

