一、Apache Echarts
官网地址:https://echarts.apache.org/
npm install echarts --save
二、获取地图的GeoJSON
地址:DataV.GeoAtlas地理小工具系列
左侧是地图,右侧是JSON数据路径,点击你想要生成的地图省市、地级(以中华人名共和国为例为例)
注意:地图点击可以下钻,再点进去是二级,直到你想要的省市地区(点击旁边的空白可以返回上一级);右侧JSON数据的链接地址,可以选择下载下来(放在json文件夹中),也可以使用在线地址!(json API与geoJSON数据地址均可用)
三、项目中引用
import * as echarts from 'echarts';
四、准备放地图的容器
<div style="width:800px;height:600px" id="main"></div>
五、配置地图option信息
let mapOption = {
tooltip: {
trigger: 'item',
formatter: () => {
let showHtml = ''
showHtml += `
<span style="display: flex; font-size: 12px;">
${'装机量'}:${params.name}</br>
</span>
`
return showHtml
},
},
legend: {
orient: 'vertical',
left: 'left',
data: [],
},
series: [
{
name: '安装信息',
type: 'map',
mapType: 'china',
roam: false,
label: {
normal: {
show: true,
},
emphasis: {
show: true,
},
},
emphasis: {
scale: true,
itemStyle: {
areaColor: '#fff',
},
},
symbolSize: function (val) {
return val[2] / 15
},
showEffectOn: 'render',
itemStyle: {
areaColor: '#2043AA',
borderColor: '#111',
color: '#fff',
},
zlevel: 1,
data: [
{
name: '北京',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{
name: '天津',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{
name: '上海',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{
name: '重庆',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{ name: '河北', value: Math.round(Math.random() * 100) },
{ name: '河南', value: Math.round(Math.random() * 100) },
{ name: '云南', value: Math.round(Math.random() * 100) },
{ name: '辽宁', value: Math.round(Math.random() * 100) },
{ name: '黑龙江', value: Math.round(Math.random() * 100) },
{ name: '湖南', value: Math.round(Math.random() * 100) },
{ name: '安徽', value: Math.round(Math.random() * 100) },
{ name: '山东', value: Math.round(Math.random() * 100) },
{ name: '新疆', value: Math.round(Math.random() * 100) },
{ name: '江苏', value: Math.round(Math.random() * 100) },
{ name: '浙江', value: Math.round(Math.random() * 100) },
{ name: '江西', value: Math.round(Math.random() * 100) },
{ name: '湖北', value: Math.round(Math.random() * 100) },
{ name: '广西', value: Math.round(Math.random() * 100) },
{ name: '甘肃', value: Math.round(Math.random() * 100) },
{ name: '山西', value: Math.round(Math.random() * 100) },
{ name: '内蒙古', value: Math.round(Math.random() * 100) },
{ name: '陕西', value: Math.round(Math.random() * 100) },
{ name: '吉林', value: Math.round(Math.random() * 100) },
{ name: '福建', value: Math.round(Math.random() * 100) },
{ name: '贵州', value: Math.round(Math.random() * 100) },
{ name: '广东', value: Math.round(Math.random() * 100) },
{ name: '青海', value: Math.round(Math.random() * 100) },
{ name: '西藏', value: Math.round(Math.random() * 100) },
{ name: '四川', value: Math.round(Math.random() * 100) },
{ name: '宁夏', value: Math.round(Math.random() * 100) },
{ name: '海南', value: Math.round(Math.random() * 100) },
// {name: '台湾',value: Math.round(Math.random()*100)},
{ name: '香港', value: Math.round(Math.random() * 100) },
{ name: '澳门', value: Math.round(Math.random() * 100) },
],
},
],
}
六、初始化地图
我的地图Json文件是下载放到项目里assets下的,你可以使用在线的也可以引用本地的
var myChart = echarts.init(document.getElementById('main')); //获取当前的div
echarts.registerMap('china', data) // 注册china.json的数据到初始化的echarts对象
myChart.setOption(mapOption) // 绑定地图的配置参数对象,参考第二步
myChart.resize()
效果如下:
完整代码如下:
<template>
<div id="app">
<img alt="Vue logo" src="./assets/logo.png">
<div id="main" style="width:1000px;height:800px;"></div>
</div>
</template>
<script>
import * as echarts from 'echarts';
import data from './assets/map.json'
export default {
name: 'App',
mounted() {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
var option = {
tooltip: {
trigger: 'item',
formatter: (params) => {
let showHtml = ''
showHtml += `
<span style="display: flex; font-size: 12px;">
${'装机量'}:${params.name}</br>
</span>
`
return showHtml
},
},
legend: {
orient: 'vertical',
left: 'left',
data: [],
},
series: [
{
name: '安装信息',
type: 'map',
mapType: 'china',
roam: false,
label: {
normal: {
show: true,
},
emphasis: {
show: true,
},
},
emphasis: {
scale: true,
itemStyle: {
areaColor: '#fff',
},
},
symbolSize: function (val) {
return val[2] / 15
},
showEffectOn: 'render',
itemStyle: {
areaColor: '#2043AA',
borderColor: '#111',
color: '#fff',
},
zlevel: 1,
data: [
{
name: '北京',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{
name: '天津',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{
name: '上海',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{
name: '重庆',
value: Math.round(Math.random() * 100),
warn: 10,
problem: 12,
},
{ name: '河北', value: Math.round(Math.random() * 100) },
{ name: '河南', value: Math.round(Math.random() * 100) },
{ name: '云南', value: Math.round(Math.random() * 100) },
{ name: '辽宁', value: Math.round(Math.random() * 100) },
{ name: '黑龙江', value: Math.round(Math.random() * 100) },
{ name: '湖南', value: Math.round(Math.random() * 100) },
{ name: '安徽', value: Math.round(Math.random() * 100) },
{ name: '山东', value: Math.round(Math.random() * 100) },
{ name: '新疆', value: Math.round(Math.random() * 100) },
{ name: '江苏', value: Math.round(Math.random() * 100) },
{ name: '浙江', value: Math.round(Math.random() * 100) },
{ name: '江西', value: Math.round(Math.random() * 100) },
{ name: '湖北', value: Math.round(Math.random() * 100) },
{ name: '广西', value: Math.round(Math.random() * 100) },
{ name: '甘肃', value: Math.round(Math.random() * 100) },
{ name: '山西', value: Math.round(Math.random() * 100) },
{ name: '内蒙古', value: Math.round(Math.random() * 100) },
{ name: '陕西', value: Math.round(Math.random() * 100) },
{ name: '吉林', value: Math.round(Math.random() * 100) },
{ name: '福建', value: Math.round(Math.random() * 100) },
{ name: '贵州', value: Math.round(Math.random() * 100) },
{ name: '广东', value: Math.round(Math.random() * 100) },
{ name: '青海', value: Math.round(Math.random() * 100) },
{ name: '西藏', value: Math.round(Math.random() * 100) },
{ name: '四川', value: Math.round(Math.random() * 100) },
{ name: '宁夏', value: Math.round(Math.random() * 100) },
{ name: '海南', value: Math.round(Math.random() * 100) },
// {name: '台湾',value: Math.round(Math.random()*100)},
{ name: '香港', value: Math.round(Math.random() * 100) },
{ name: '澳门', value: Math.round(Math.random() * 100) },
],
},
],
}
echarts.registerMap('china', data) // 注册china.json的数据到初始化的echarts对象
myChart.setOption(option) // 绑定地图的配置参数对象,参考第二步
myChart.resize()
}
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>