echarts图表,结合城市范围选择器,实现展示地图指定区域,且可以点击城市下穿至下一级区域交互效果;
指定区域获取方式:
城市范围选择器:http://datav.aliyun.com/portal/school/atlas/area_selector
示例1:
echarts图表,展示地图指定区域,并写入经纬度标注点展示标注;
点击城市下穿至下一级区域;
下级区域点击可返回至上级;
区域变化时,重置经纬度标注点数据;
点击标注点可获取相应标识,可对应做相应处理;
demo:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>合肥地图</title>
<style>
*{ margin: 0; padding: 0;}
body{ background: linear-gradient(45deg , #001B4B , #006FCA , #006FCA , #003783);}
</style>
</head>
<body>
<div id="main" style="width: 100vw; height: 100vh;"></div>
<script src="//libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/echarts@5.4.0/dist/echarts.min.js"></script>
<script>
var listKey = {
'合肥市':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/340100_full.json',
},
'瑶海区':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/340102.json',
points:[{name: '瑶海区111',value: [117.313076,31.866118]},]
},
'庐阳区':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/340103.json',
points:[{name: '庐阳区111',value: [117.261397,31.889056]},{name: '庐阳区222',value: [117.269733,31.881452]},]
},
'蜀山区':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/340104.json',
points:[{name: '蜀山区111',value: [117.157229,31.872589]},{name: '蜀山区222',value: [117.173902,31.848054]},]
},
'包河区':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/340111.json',
points:[{name: '包河区111',value: [117.298183,31.81746]},{name: '包河区222',value: [117.407992,31.761968]},]
},
'长丰县':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/340121.json',
points:[{name: '长丰县111',value: [117.168961,32.490058]},]
},
'肥东县':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/340122.json',
points:[{name: '肥东县111',value: [117.473675,31.899776]},{name: '肥东县222',value: [117.473675,31.890456]},]
},
'肥西县':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/340123.json',
points:[{name: '肥西县111',value: [117.09212,31.763079]},{name: '肥西县222',value: [117.051876,31.718367]},]
},
'庐江县':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/340124.json',
points:[{name: '庐江县111',value: [117.293574,31.273179]},{name: '庐江县222',value: [117.304497,31.224772]},]
},
'巢湖市':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/340181.json',
points:[{name: '巢湖市111',value: [117.802437,31.639333]},{name: '巢湖市222',value: [117.897298,31.62064]},]
},
}
var keyName = '合肥市';
function setMap(){
// $.get('//geo.datav.aliyun.com/areas_v3/bound/340100_full.json', function (geoJson) {
$.get(listKey[keyName].json, function (geoJson) {
myChart.hideLoading();
echarts.registerMap('HF', geoJson);
myChart.setOption(
(option = {
title: {
show: true, //显示标题
// left: 'left', //显示在横向位置
// top: 'top', //显示在竖向位置
textStyle:{
color:'#ffffff'
},
text: '合肥地图',
subtext: 'ECharts 快速上手', //点击 跳转链接(sublink)
sublink:'https://echarts.apache.org/handbook/zh/get-started/',
subtextStyle:{
color:'#fff'
},
},
tooltip: {
trigger: 'item',
formatter: '{b}<br/>{c}(单位)'
},
toolbox: {
show: true, // 显示菜单
orient: 'vertical',
// left: 'right', //显示在横向位置
// top: 'top', //显示在竖向位置
iconStyle:{
borderColor:'#fff'
},
feature: {
dataView: { readOnly: false }, //数据视图
restore: {}, //刷新重置
saveAsImage: {}, //保存为图片
}
},
visualMap: {
show: true, //显示数据区间查看器
min: 10,
max: 600,
text: ['High', 'Low'],
// left: 'left', //显示在横向位置
// top: 'bottom', //显示在竖向位置
textStyle:{
color:'#ffffff'
},
realtime: false,
calculable: true,
inRange: {
// 地图渲染色值(根据data中value数据区间展示对应渐变过度色值,值越小展示越靠前的色值)
// color: ['#B0E1FF', '#63C1FD' , '#3CADF4'],
color: ['lightskyblue', 'yellow', 'orangered'],
}
},
series: [
{
name: '合肥地图',
type: 'map',
map: 'HF',
label: {
show: true
},
data: [
{ name: '瑶海区', value: 10 }, //{b} : name {c} : value
{ name: '庐阳区', value: 50 },
{ name: '蜀山区', value: 100 },
{ name: '包河区', value: 150 },
{ name: '长丰县', value: 300 },
{ name: '肥东县', value: 400 },
{ name: '肥西县', value: 500 },
{ name: '庐江县', value: 600 },
{ name: '巢湖市', value: 70 },
],
// 自定义名称映射(地图JSON中name是英文的展示处理)
nameMap: {
'yaohai': '瑶海区',
// ...
}
},
// 写入经纬度标注点所需
{
name: '',
type: 'scatter',
coordinateSystem: 'geo',
color: ['#000'],
tooltip: {
position: "right",
color: "#000",
formatter(d) {
// console.log(d)
return `<div style="padding: 5px 10px;">【${d.data.name}】</div>`;
},
},
itemStyle: {
color: '#ddb926',
normal: {
areaColor: '#8abcd1',
borderColor: '#fff',
borderWidth: 1,
},
emphasis: {
areaColor: '#fff',
borderColor: '#ff0000',
borderWidth: 0.5,
}
},
// 经纬度数据
data: keyName == '合肥市' ? [].concat(listKey['瑶海区'].points,listKey['庐阳区'].points,listKey['蜀山区'].points,listKey['包河区'].points,listKey['长丰县'].points,listKey['肥东县'].points,listKey['肥西县'].points,listKey['庐江县'].points,listKey['巢湖市'].points) : listKey[keyName].points,
}
],
// 写入经纬度标注点所需
geo: {
show: true,
map: 'HF',
type: 'map',
// mapType: 'anhui',
roam: false,
// label: {
// normal: {
// // 显示省份标签
// show: false,
// textStyle: {
// color: '#fff',
// fontSize: 10
// }
// },
// emphasis: {
// // 对应的鼠标悬浮效果
// show: true,
// // 选中后的字体样式
// textStyle: {
// color: '#000',
// fontSize: 14
// }
// }
// },
// itemStyle: {
// color: '#ddb926',
// normal: {
// areaColor: '#8abcd1',
// borderColor: '#fff',
// borderWidth: 1
// },
// emphasis: {
// borderWidth: 0.5,
// borderColor: '#8abcd1',
// areaColor: '#fff'
// }
// },
// emphasis: {
// label: {
// show: false
// }
// }
}
})
);
});
}
var chartDom = document.getElementById('main');
var myChart = echarts.init(chartDom);
var option;
myChart.showLoading();
setMap();
option && myChart.setOption(option);
window.addEventListener('resize', myChart.resize);
myChart.on('click', function (param) {
console.log(param)
console.log(param.name)
if(!listKey[param.name]){
return;
}
if(keyName == param.name){
keyName = '合肥市';
}else{
keyName = param.name;
}
setMap();
})
</script>
</body>
</html>
示例2:
echarts图表,展示地图指定区域;
部分城市点击可下穿至下一级区域;
下级区域点击第二次时,可返回至上级;
demo:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>安徽地图</title>
<style>
*{ margin: 0; padding: 0;}
body{ background: linear-gradient(45deg , #faddcb , #eb493c);}
</style>
</head>
<body>
<div id="main" style="width: 100vw; height: 100vh;"></div>
<script src="//libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/echarts@5.4.0/dist/echarts.min.js"></script>
<script>
var listKey = {
'安徽省':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/340000_full.json',
},
'合肥市':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/340100_full.json',
},
'芜湖市':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/340200_full.json',
},
// '蚌埠市':{
// json:'https://geo.datav.aliyun.com/areas_v3/bound/340300.json',
// },
// '淮南市':{
// json:'https://geo.datav.aliyun.com/areas_v3/bound/340400.json',
// },
// '马鞍山市':{
// json:'https://geo.datav.aliyun.com/areas_v3/bound/340500.json',
// },
// '淮北市':{
// json:'https://geo.datav.aliyun.com/areas_v3/bound/340600.json',
// },
'铜陵市':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/340700_full.json',
},
// '安庆市':{
// json:'https://geo.datav.aliyun.com/areas_v3/bound/340800.json',
// },
// '黄山市':{
// json:'https://geo.datav.aliyun.com/areas_v3/bound/341000.json',
// },
'滁州市':{
json:'https://geo.datav.aliyun.com/areas_v3/bound/341100_full.json',
},
// '阜阳市':{
// json:'https://geo.datav.aliyun.com/areas_v3/bound/341200.json',
// },
// '宿州市':{
// json:'https://geo.datav.aliyun.com/areas_v3/bound/341300.json',
// },
// '六安市':{
// json:'https://geo.datav.aliyun.com/areas_v3/bound/341500.json',
// },
// '亳州市':{
// json:'https://geo.datav.aliyun.com/areas_v3/bound/341600.json',
// },
// '池州市':{
// json:'https://geo.datav.aliyun.com/areas_v3/bound/341700.json',
// },
// '宣城市':{
// json:'https://geo.datav.aliyun.com/areas_v3/bound/341800.json',
// },
}
var isBackBefore = false; //根据此标识设置二级第二次点击返回上级
var keyName = '安徽省';
function setMap(){
// $.get('//geo.datav.aliyun.com/areas_v3/bound/340100_full.json', function (geoJson) {
$.get(listKey[keyName].json, function (geoJson) {
myChart.hideLoading();
echarts.registerMap('AnHui', geoJson);
myChart.setOption(
(option = {
visualMap: {
show: false, //显示数据区间查看器
min: 0,
max: 100,
inRange: {
// 地图渲染色值(根据data中value数据区间展示对应渐变过度色值,值越小展示越靠前的色值)
// color: ['lightskyblue', 'yellow', 'orangered'],
color: ['rgba(255,0,0,.1)','rgba(255,0,0,1)'],
}
},
tooltip: {
trigger: 'item',
formatter: '{b}<br/>点亮数:{c}',
backgroundColor: 'rgba(255,255,255,.8)',
borderColor: 'rgba(255,255,255,0)',
textStyle: {
fontSize: 26,
}
},
series: [
{
name: '安徽地图',
type: 'map',
map: 'AnHui',
// aspectScale: 1, //长宽比, 默认是: 0.75
zoom: 1.2, //当前视角的缩放比例, 默认是: 1
label: {
show: true,
fontSize: 30,
color: 'yellow',
},
// 地图区域的多边形 图形样式
itemStyle: {
areaColor: '#f00', //地图区域的颜色(设置了 visualMap inRange color 则其权重高)
// color: '#eee', //
borderColor: '#fff886',
borderWidth: 2,
// borderType: 'solid', // solid dashed dotted
shadowColor: 'rgba(0, 0, 0, 0.2)',
shadowBlur: 10,
shadowOffsetX: 1,
shadowOffsetY: 1,
// opacity: 1,
},
// 高亮状态下的多边形和标签样式
emphasis: {
itemStyle: {
areaColor: '#ff0', //地图区域的颜色
},
label: {
color: '#f00',
},
},
// 选中状态下的多边形和标签样式
select: {
itemStyle: {
areaColor: '#ff0', //地图区域的颜色
},
label: {
color: '#f00',
},
},
data: [
{ name: '蚌埠市', value: 0 },
{ name: '淮南市', value: 10 },
{ name: '马鞍山市', value: 20 },
{ name: '淮北市', value: 30 },
{ name: '安庆市', value: 40 },
{ name: '黄山市', value: 50 },
{ name: '阜阳市', value: 60 },
{ name: '宿州市', value: 70 },
{ name: '六安市', value: 80 },
{ name: '亳州市', value: 90 },
{ name: '池州市', value: 100 },
{ name: '宣城市', value: 110 },
// 合肥市-对应数据
{ name: '合肥市', value: 90 },
{ name: '瑶海区', value: 10 },
{ name: '庐阳区', value: 10 },
{ name: '蜀山区', value: 10 },
{ name: '包河区', value: 10 },
{ name: '长丰县', value: 10 },
{ name: '肥东县', value: 10 },
{ name: '肥西县', value: 10 },
{ name: '庐江县', value: 10 },
{ name: '巢湖市', value: 10 },
// 芜湖市-对应数据
{ name: '芜湖市', value: 70 },
{ name: '镜湖区', value: 10 },
{ name: '鸠江区', value: 10 },
{ name: '弋江区', value: 10 },
{ name: '湾沚区', value: 10 },
{ name: '繁昌区', value: 10 },
{ name: '南陵县', value: 10 },
{ name: '无为市', value: 10 },
// 铜陵市-对应数据
{ name: '铜陵市', value: 40 },
{ name: '铜官区', value: 10 },
{ name: '义安区', value: 10 },
{ name: '郊区', value: 10 },
{ name: '枞阳县', value: 10 },
// 滁州市-对应数据
{ name: '滁州市', value: 80 },
{ name: '琅琊区', value: 10 },
{ name: '南谯区', value: 10 },
{ name: '来安县', value: 10 },
{ name: '全椒县', value: 10 },
{ name: '定远县', value: 10 },
{ name: '凤阳县', value: 10 },
{ name: '天长市', value: 10 },
{ name: '明光市', value: 10 },
]
},
],
})
);
});
}
var chartDom = document.getElementById('main');
var myChart = echarts.init(chartDom);
var option;
myChart.showLoading();
setMap();
option && myChart.setOption(option);
window.addEventListener('resize', myChart.resize);
myChart.on('click', function (param) {
// console.log(param)
// console.log(param.name)
if(!listKey[param.name]){
// console.log(['合肥市','芜湖市','铜陵市','滁州市'].indexOf(keyName))
if(['合肥市','芜湖市','铜陵市','滁州市'].indexOf(keyName) != -1){
if(isBackBefore){
isBackBefore = false;
keyName = '安徽省';
setMap();
}else{
isBackBefore = true;
}
}
return;
}
// console.log(keyName , param.name)
// if(keyName == param.name){
// keyName = '合肥市';
// }else{
keyName = param.name;
// }
setMap();
})
</script>
</body>
</html>