vue3 echarts 各省地图展示
效果:
1.在src下新建utils文件夹添加各省地图的json文件(下载各省地图的网址 DataV.GeoAtlas地理小工具系列)
2.安装echarts
npm install echarts
3.在项目文件中中引入json
<template>
<div class="back">
<div id="chinaMap" class="china-map"></div>
</div>
</template>
<script lang="ts" setup>
import * as echarts from 'echarts';
import { ref, reactive, computed, onMounted } from "vue";
import { getProvince,findProvinceSaltProduct,getProvinceCompany } from "../../../common/api.js";
import AnHuiData from '../../../utils/anhui.json'
import AoMenData from '../../../utils/aomen.json'
import BeiJingData from '../../../utils/beijing.json'
import ChongQingData from '../../../utils/chongqing.json'
import FuJianData from '../../../utils/fujian.json'
import GanSuData from '../../../utils/gansu.json'
import GuangDongData from '../../../utils/guangdong.json'
import GuangXiData from '../../../utils/guangxi.json'
import GuiZhouData from '../../../utils/guizhou.json'
import HaiNanData from '../../../utils/hainan.json'
import HeBeiData from '../../../utils/hebei.json'
import HLJData from '../../../utils/heilongjiang.json'
import HeNanData from '../../../utils/henan.json'
import HuBeiData from '../../../utils/hubei.json'
import HuNanData from '../../../utils/hunan.json'
import JiangSuData from '../../../utils/jiangsu.json'
import JiangXiData from '../../../utils/jiangxi.json'
import JiLinData from '../../../utils/jilin.json'
import LiaoNingData from '../../../utils/liaoning.json'
import NeiMengGuData from '../../../utils/neimenggu.json'
import NingXiaData from '../../../utils/ningxia.json'
import QingHaiData from '../../../utils/qinghai.json'
import ShanDongData from '../../../utils/shandong.json'
import ShangHaiData from '../../../utils/shanghai.json'
import ShanXiData from '../../../utils/shanxi.json'
import shanXiData from '../../../utils/shanxi1.json'
import SiChuanData from '../../../utils/sichuan.json'
import TaiWanData from '../../../utils/taiwan.json'
import TianJinData from '../../../utils/tianjin.json'
import XiangGangData from '../../../utils/xianggang.json'
import XinJiangData from '../../../utils/xinjiang.json'
import XiZangData from '../../../utils/xizang.json'
import YunNanData from '../../../utils/yunnan.json'
import ZheJiangData from '../../../utils/zhejiang.json'
onMounted(() => {
findProvinceSaltProducts()
});
//获取省份
const TYDatalist:any = ref([])
const provinceNames = ref<string>('');
const getProvinces = () => {
getProvince().then((res:any)=>{
console.log(res);
provinceNames.value = res.provinceName
if(provinceNames.value == '湖北省'){
TYDatalist.value = HuBeiData
initMap()
}else if(provinceNames.value == '山西省'){
TYDatalist.value = ShanXiData
initMap()
}else if(provinceNames.value == '安徽省'){
TYDatalist.value = AnHuiData
initMap()
}else if(provinceNames.value == '澳门'){
TYDatalist.value = AoMenData
initMap()
}else if(provinceNames.value == '北京市'){
TYDatalist.value = BeiJingData
initMap()
}else if(provinceNames.value == '重庆市'){
TYDatalist.value = ChongQingData
initMap()
}else if(provinceNames.value == '福建省'){
TYDatalist.value = FuJianData
initMap()
}else if(provinceNames.value == '甘肃省'){
TYDatalist.value = GanSuData
initMap()
}else if(provinceNames.value == '广东省'){
TYDatalist.value = GuangDongData
initMap()
}else if(provinceNames.value == '广西省'){
TYDatalist.value = GuangXiData
initMap()
}else if(provinceNames.value == '贵州省'){
TYDatalist.value = GuiZhouData
initMap()
}else if(provinceNames.value == '海南省'){
TYDatalist.value = HaiNanData
initMap()
}else if(provinceNames.value == '河北省'){
TYDatalist.value = HeBeiData
initMap()
}else if(provinceNames.value == '黑龙江省'){
TYDatalist.value = HLJData
initMap()
}else if(provinceNames.value == '河南省'){
TYDatalist.value = HeNanData
initMap()
}else if(provinceNames.value == '湖南省'){
TYDatalist.value = HuNanData
initMap()
}else if(provinceNames.value == '江苏省'){
TYDatalist.value = JiangSuData
initMap()
}else if(provinceNames.value == '江西省'){
TYDatalist.value = JiangXiData
initMap()
}else if(provinceNames.value == '吉林省'){
TYDatalist.value = JiLinData
initMap()
}else if(provinceNames.value == '辽宁省'){
TYDatalist.value = LiaoNingData
initMap()
}else if(provinceNames.value == '内蒙古自治区'){
TYDatalist.value = NeiMengGuData
initMap()
}else if(provinceNames.value == '宁夏回族自治区'){
TYDatalist.value = NingXiaData
initMap()
}else if(provinceNames.value == '青海省'){
TYDatalist.value = QingHaiData
initMap()
}else if(provinceNames.value == '山东省'){
TYDatalist.value = ShanDongData
initMap()
}else if(provinceNames.value == '上海市'){
TYDatalist.value = ShangHaiData
initMap()
}else if(provinceNames.value == '陕西省'){
TYDatalist.value = shanXiData
initMap()
}else if(provinceNames.value == '四川省'){
TYDatalist.value = SiChuanData
initMap()
}else if(provinceNames.value == '台湾'){
TYDatalist.value = TaiWanData
initMap()
}else if(provinceNames.value == '天津市'){
TYDatalist.value = TianJinData
initMap()
}else if(provinceNames.value == '香港'){
TYDatalist.value = XiangGangData
initMap()
}else if(provinceNames.value == '新疆维吾尔自治区'){
TYDatalist.value = XinJiangData
initMap()
}else if(provinceNames.value == '西藏自治区'){
TYDatalist.value = XiZangData
initMap()
}else if(provinceNames.value == '云南省'){
TYDatalist.value = YunNanData
initMap()
}else if(provinceNames.value == '浙江省'){
TYDatalist.value = ZheJiangData
initMap()
}
})
}
const MapdataList = ref([])
const findProvinceSaltProducts = () =>{
let param = new FormData()
param.append('startDate',searchForm.time[0]?searchForm.time[0]:'')
param.append('endDate',searchForm.time[1]?searchForm.time[1]:'')
param.append('companyId',searchForm.companyName)
findProvinceSaltProduct(param).then((res:any) =>{
MapdataList.value = res
getProvinces()
})
}
const initMap = async () => {
var chartDom = document.getElementById('chinaMap');
echarts.dispose(chartDom as HTMLElement);
var myChart = echarts.init(chartDom);
myChart.hideLoading();
echarts.registerMap('DT', TYDatalist.value);
var mapBoxOption = {
tooltip: {
trigger: 'item',
formatter:function (params:any) {
if(params.value){
return params.name + '<br/>' + params.value +'吨';
}else{
return params.name + '<br/>' + '0'+'吨';
}
}
},
visualMap: {
min: 0,
max: 500000,
text: ['MAX', '0'],
realtime: true,
calculable: true,
inRange: {
color: ['#51adcf','#177cb0','#34699a']
},
textStyle:{
color:'#fff'
}
},
series: [
{
type: 'map',
map: 'DT',
label: {
show: true
},
data: MapdataList.value,
}
]
}
myChart.setOption(mapBoxOption);
};
</script>
const MapdataList = ref<Array<{ name: any; value: any; fromName: any; }>>([])
const findProvinceSaltSaleIns = () =>{
let param = new FormData()
param.append('startDate',searchForm.time[0]?searchForm.time[0]:'')
param.append('endDate',searchForm.time[1]?searchForm.time[1]:'')
param.append('companyId',searchForm.companyName)
findProvinceSaltSaleIn(param).then((res:any) =>{
interface CitySales {
name: string;
value: number;
fromName:Array<{ from: string; sales: number }>;
}
//对数据进行处理
var list = [];
const citySalesMap: Record<string, CitySales> = reactive({});
for (var i = 0; i < res.length; i++) {
var cityName = res[i].cityName;
var salesNum = res[i].salesNum;
var fromName = res[i].fromCityName;
if (citySalesMap.hasOwnProperty(cityName)) {
citySalesMap[cityName].value += salesNum;
citySalesMap[cityName].fromName.push({
from:fromName,
sales:salesNum
})
} else {
list.push({
name: cityName,
value: salesNum,
fromName: [{
from:fromName,
sales:salesNum
}]
});
citySalesMap[cityName] = list[list.length - 1];
}
}
MapdataList.value = list
getProvinces()
})
}
const initMap = async () => {
var chartDom = document.getElementById('chinaMap');
echarts.dispose(chartDom as HTMLElement);
var myChart = echarts.init(chartDom);
// myChart = echarts.init(chartDom);
myChart.hideLoading();
echarts.registerMap('HK', TYDatalist.value);
var mapBoxOption = {
tooltip: {
trigger: 'item',
formatter:function (params:any) {
if (params.value && params.data.fromName.length > 0) {
const fromNameHtml = params.data.fromName.map((item:any) => `${item.from}:${item.sales}吨`).join('<br/>');
return `${params.name}<br/>${fromNameHtml}`;
} else {
return `${params.name}<br/>0吨`;
}
}
},
visualMap: {
min: 0,
max: 500000,
text: ['MAX', '0'],
realtime: true,
calculable: true,
inRange: {
color: ['#51adcf','#177cb0','#34699a']
},
textStyle:{
color:'#fff'
}
},
series: [
{
type: 'map',
map: 'HK',
label: {
show: true
},
data: MapdataList.value,
}
]
}
myChart.setOption(mapBoxOption);
};