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
上实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | <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 = '广东';
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!