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 = '广东';

 

posted @ 2021-01-13 15:34  惠鹏曦  阅读(3215)  评论(1编辑  收藏  举报