uniapp 实现echart 地图功能,处理手机端geo缩放问题
这里需要去下载echart 4.2.0-rc.1版本 https://lib.baomitu.com/echarts/4.2.0-rc.1/echarts.min.js 兼容手机端缩放与点击事件
先去http://datav.aliyun.com/tools/atlas/#&lat=22.890161256069412&lng=113.423936&zoom=7.5 下载相应的地图,需要切割的在json里面删除
例如我用的是广东的大湾区的,只切了九个省份,其他的删除后生成一个json
上实例
<template>
<div class="map-box">
<view id="echartsmap" class="echart-view"></view>
</div>
</template>
<script>
export default {
data() {
return {}
},
methods: {
}
}
</script>
<script module="echarts" lang="renderjs>
const jsonData = require('common/gd.json');
var myChart
export default {
mounted() {
if (typeof window.echarts === 'function') {
this.mYChartmap()
} else {
// 动态引入较大类库避免影响页面展示
const script = document.createElement('script')
script.src = './static/echarts.min.js'
script.onload = this.mYChartmap.bind(this)
document.head.appendChild(script)
}
},
methods: {
mYChartmap() {
myChart = echarts.init(document.getElementById('echartsmap'))
echarts.registerMap('广东', jsonData)
let _that = this
let newData = function (name, data){
return {
name: name,
type : 'scatter',//带有涟漪特效动画的散点(气泡)图
coordinateSystem : 'geo',
data : [data],
symbol:'circle',
symbolSize : 10,
showEffectOn : 'render',
rippleEffect : {
scale : 5,
brushType : 'stroke'
},
hoverAnimation : true,
itemStyle : {
normal : {
color : function (e){
return e.data.color
},
shadowBlur : 10,
shadowColor : '#fff'
}
},
label : {
normal : {
formatter : function(a){
return a.name;
},
show : true,
position: 'top',
padding : 4,
textStyle:{
color:'#fff'
}
}
},
zlevel : 1
}
}
let optionMap = {
//地图坐标系必备的配置,具体的含义可以参考api
geo : {
roam : true,//是否开启缩放和平移
zoom : .9,//当前视角缩放比例
selectedMode : 'single',//选中模式
label : {
normal : {
show : true,
textStyle : {
color : '#fff'
}
},
emphasis : {
show : true
}
},
// 设置为一张完整经纬度的世界地图
map: 'world',
left: 0,
top: 0,
right: 0,
bottom: 0,
itemStyle : {//地图区域的多边形 图形样式
hoverAnimation : true,
normal : {
opacity : .8,
borderWidth: 1,
areaColor: '#5095B3', //默认的地图板块颜色
borderColor: '#5095B3',//地图边框颜色
},
emphasis : {
areaColor: '#5095B3', //默认的地图板块颜色
borderColor: '#fff',//地图边框颜色
opacity : 1
}
}
},
series : []
};
optionMap.geo.map = '广东';
myChart.setOption(optionMap)
myChart.on('click', function(data) {
_that.navigator(data.name)
})
},
navigator(data){
uni.navigateTo({
url: `/pages/day-list/index?city=${data}`,
});
}
}
}
</script>
<style lang="scss" scoped>
.map-box{
margin: 30upx;
border-radius: 12upx;
overflow: hidden;
box-shadow: 0px 8upx 20px 4px rgba(39, 165, 249, 0.08);
}
.echart-view{
width: 100%;
height: 400upx;
}
</style>
效果图如下

这里要注意:生成的json,echart读取的时候有个name ,本实例用的是广东 ,代码里面需要把两处名称统一,否则地图不出现
echarts.registerMap('广东', jsonData)
optionMap.geo.map = '广东';

浙公网安备 33010602011771号