<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.chart {
width: 1200px;
height: 800px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="chart"></div>
<script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/echarts-gl/dist/echarts-gl.min.js"></script>
<!-- 这里为了方便直接把源json文件改成js文件 -->
<script src="./linyi.js"></script>
<script>
// 注册自定义城市边界信息
echarts.registerMap('Linyi', Linyi);
// 图表实例
let chart = echarts.init(document.querySelector('.chart'));
// map3D视角控制参数
let viewControl = {
beta: 35,
alpha: 45,
distance: 120,
// zoomSensitivity: 0, // 是否允许放大
// rotateSensitivity: 0,// 是否允许旋转
};
// 标注点数据
// 这里的name需要和城市边界信息中的name对应才能显示出来,因为没有坐标信息,name是唯一可以对应起来的
let pointData = [{
name: '兰山区',
value: 10
},
{
name: '河东区',
value: 20
},
{
name: '罗庄区',
value: 99
}
]
let label = {
show: true,
formatter(params) {
if (params.value) {
return `{radiusBg|${params.value}}`
} else {
return null;
}
},
rich: {
radiusBg: {
color: "#fff",
align: 'center',
width: 50,
height: 50,
fontSize: 22,
},
},
textStyle: {
width: 50,
height: 64,
backgroundColor: {
image: 'data:image/png;base64,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'
}
}
};
chart.setOption({
series: [{
zlevel: 10,
viewControl,
map: 'Linyi',
type: "map3D",
regionHeight: 10,
label: {
show: true,
color: '#fff',
fontWeight: 'bold',
fontSize: 14,
textShadowBlur: 2,
textShadowOffsetY: 2,
textShadowColor: 'rgba(0, 0, 0, 0.5)'
},
itemStyle: {
opacity: 1,
borderWidth: 2,
color: '#428BF4',
borderColor: '#61CFF8',
},
emphasis: {
label: {
show: true,
textStyle: {
color: '#fff'
}
},
itemStyle: {
color: '#007EE8',
borderWidth: 10,
borderColor: '#6BECF5'
}
},
light: {
ambient: {
color: '#fff',
intensity: 0.4
}
},
},
{
zlevel: 20,
viewControl,
map: 'Linyi',
type: "map3D",
regionHeight: 10,
itemStyle: {
color: 'transparent'
},
emphasis: {
itemStyle: {
color: 'transparent'
}
},
data: pointData.map(v => {
v.label = label;
v.emphasis = {
label
}
return v
})
}
]
});
</script>
</body>
</html>