echarts map 实现酷炫地图

话不多说,先上图

首先,拿到山西的json,把需要的图片准备好,然后开始实现

地图分两部分,第一部分,地图使用geo组件,第二部分是地图上的数字,地市名称以及这些信息下面的发光效果,这第二部分使用type: 'scatter', 实现,都用symbol 设置图片来实现,这里在实现第二部分的时候用到了label,但是label的数字和名称的样式不一样,所以这里采用了rich结合formatter的方式

重点代码:

 

最后是全部代码:

 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    #map{
      width: 443px;
      height: 767px;
      border:1px solid #ccc;
    }
  </style>
</head>
<body>
  <div id="map"></div>
  <script src = "https://fastly.jsdelivr.net/npm/echarts@5/dist/echarts.min.js"></script>
  <script src = "https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
  <script>
    var map = document.getElementById("map");
    var mycharts = echarts.init(map);
    var createImg = document.createElement("img");
    createImg.src = "./img/mapbg.png";
    const CITYAREACOLOR = "rgba(20,71,98,.4)";
    const CITYBOLORCOLOR = "#FFF";
    const CITYNAMEOLOR = "#031620";
    $.ajax({url:"https://geo.datav.aliyun.com/areas_v3/bound/140000_full.json",success:function(result){
        console.log(result);
        let name = "shanximap";
        let geoCoordMap = [];
        result.features.forEach(item=>{
          // console.log(item);
          geoCoordMap.push({
            name:item.properties.name,
            value:item.properties.center,
            num:12
          })
        })
        console.log(geoCoordMap)
        echarts.registerMap(name,result);
        
        let mapOption = {
            series:[
              {
                name: '',
                type: 'scatter',
                symbol:"image://./img/titleBg.png",
                coordinateSystem: 'geo',
                color: ['#000'],
                symbolSize:[178,50],
                symbolOffset:[0,"-50%"],
                label:{
                  show:true,
                  padding:[0,0,0,0],
                  formatter:function(param){
                    return "{a|" + param.data.num + "}" + " " + "{b|" + param.data.name + "}";
                  },
                  rich:{
                    a:{
                      color:"#fff",
                      fontWeight:"bold",
                      fontSize:16,
                      width:89,
                      align:"center",
                      padding:[0,0,0,10]
                    },
                    b:{
                        fontSize:20,
                        color:CITYAREACOLOR,
                        fontFamily:"PangMenZhengDao",
                        fontWeight:"bold",
                        width:89,
                        align:"center",
                        padding:[0,0,0,-30]
                    }
                  }
                },
                data: geoCoordMap,
              },{
                name: '',
                type: 'scatter',
                symbol:"image://./img/light.png",
                coordinateSystem: 'geo',
                symbolSize:[54,47],
                symbolOffset:[0,10],
                color: ['#000'],
                tooltip: {
                  position: "right",
                  color: "#000",
                  formatter(d) {
                    // console.log(d)
                    return `<div style="padding: 5px 10px;">【${d.data.name}】</div>`;
                  },
                },
                label:{
                  show:false
                },
              
                data: geoCoordMap,
              }

            ],
            geo: {
              left:0,
              top:0,
              right:0,
              bottom:0,
              show: true,
              map: name,
              type: 'map',
              mapType: name,
              roam: false,
              zoom:0.8,
              label: {
                show: false
              },
              itemStyle: {
                areaColor:{
                  image: createImg, // 支持为 HTMLImageElement, HTMLCanvasElement,不支持路径字符串
                  repeat: 'no-repeat' 
                },
              },
              emphasis: {
                disabled:false,
                itemStyle:{
                  areaColor:{
                    image: createImg, // 支持为 HTMLImageElement, HTMLCanvasElement,不支持路径字符串
                    repeat: 'no-repeat' 
                  },
                },
                label:{
                  show:false
                }
              }
            }
          }
        mycharts.setOption(
          mapOption
        )
    }});
    
  </script>
</body>
</html>

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于 Echarts 实现全国地图酷炫动态效果,可以使用 Echarts 提供的动画和事件绑定功能,结合自己的业务需求进行实现。 下面是一个简单的示例代码: ```javascript // 创建一个 Echarts 实例 var myChart = echarts.init(document.getElementById('main')); // 定义地图的数据 var geoCoordMap = { '北京': [116.46, 39.92], '上海': [121.48, 31.22], '广州': [113.23, 23.16], '深圳': [114.07, 22.62], '杭州': [119.50, 30.25] }; // 定义某些城市的数据 var data = [ {name: '北京', value: 100}, {name: '上海', value: 200}, {name: '广州', value: 300}, {name: '深圳', value: 400}, {name: '杭州', value: 500} ]; // 定义地图样式 var option = { // 地图的背景色 backgroundColor: '#404a59', // 地图样式 geo: { map: 'china', label: { emphasis: { show: false } }, roam: true, itemStyle: { normal: { areaColor: '#323c48', borderColor: '#111' }, emphasis: { areaColor: '#2a333d' } } }, // 数据的样式 series: [ { name: '城市', type: 'effectScatter', coordinateSystem: 'geo', data: data.map(function (item) { return { name: item.name, value: geoCoordMap[item.name].concat([item.value]) }; }), symbolSize: function (val) { return val[2] / 10; }, showEffectOn: 'emphasis', rippleEffect: { brushType: 'stroke' }, hoverAnimation: true, label: { normal: { formatter: '{b}', position: 'right', show: true } }, itemStyle: { normal: { color: '#46bee9' } } } ] }; // 设置地图的配置项并渲染地图 myChart.setOption(option); // 地图的动态效果 myChart.on('click', function (params) { // 点击某个城市时的操作 console.log(params); }); ``` 通过设置不同的数据和样式,可以实现各种不同的地图效果。同时,Echarts 还提供了丰富的文档和示例,可以帮助开发者更好地理解和使用它的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值