Echarts实现全国地图展示

Echarts介绍:

ECharts是一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表

官方地址:https://echarts.apache.org/zh/index.html

全国地图展示实现:

准备步骤:

1.准备好echarts.js文件

2.阿里云地理下载全国省市区地图的js文件

china.js全国地图文件

image.png

全省地图文件

image.png

全市地图文件

image.png

1.准备一个具备大小的DOM容器,生成的地图会放入这个容器内

<div class="map" style="width:500px;height:500px;">

</div>

2.初始化echarts实例对象

let mychart = echarts.init(document.querySelector('.map'))

3.指定配置项和数据(option),根据具体需求修改配置选项

配置title标题组件,text:title内容,left:距离左边大小,textStyle:字体样式

title: {
  text: '工地统计地图',
  left: '5%',
  textStyle: {
    fontSize: '28'
  }
},

配置tooltip自定义提示框组件,formatter:自定义

tooltip: {
  show: 'true',
  trigger: "item",
  formatter: function (params) {
    let str = ''
    if (isNaN(params.value)) {
      str = params.seriesName + ' : 0'
    } else {
      str = params.seriesName + ' : ' + params.value
    }
    return str
  }
},

配置visualMap视觉映射组件,根据传入的data显示不同的颜色

visualMap: {
  min: 0,
  max: 20,
  left: 'left',
  top: 'bottom',
  text: ['高', '低'],
  calculable: true
},

配置series系列列表,用于配置数据,type设置为map地图类型,mapType为对应的js文件名称,开始默认为全国地图,roam开启缩放

series: [
  {
    name: '工地数量',
    type: "map", 
    mapType: 'china',
    roam: true,
    label: {
      normal: {
        show: true,
        textStyle: {
          color: "#fff",
        },
      },
    },
    itemStyle: {
      normal: {
        borderColor: "#B79891",
        borderWidth: "2",
        areaColor: "#F6EFA6",
      },
      emphasis: {
        areaColor: '#F2D5AD',
      }
    },
    data: data //数据来源
  }
]

4.实现地图展示及下钻

准备好省地图列表,点击地图根据id跳转到对应省级地图

image.png

初始化配置

let map_level = 'china' //地图等级
let cityinfo = [] //城市信息
let provinceName = '' //当前省市区地图名字
let maxValue=0 //映射组件最大值

创建获取省市ID的函数

//获取市区ID
  function getcityId(cityinfo, name) {
    for (let i in cityinfo.features) {
      if (cityinfo.features[i].properties.name == name) {
        return cityinfo.features[i].properties.id + '00'
      }
    }
  }
  //获取省份ID
  function getProvinceId(mapList, name) {
    for (let i in mapList) {
      if (mapList[i].name == name) {
        return mapList[i].id
      }
    }
  }

初始化全国地图

createChinaMap()
function createChinaMap() {
    $.getJSON(`http://127.0.0.3/static/js/echart/json/china.js`, function (chinaJson) {
      }
      //去掉南海诸岛
      data.push({ name: "南海诸岛", value: 0, itemStyle: { normal: { opacity: 0, label: { show: false } }, emphasis: { opacity: 0, label: { show: false } } } })
      //映射组件最大值
      maxValue=getMaxVlaue(data)
      option.visualMap.max=maxValue
      echarts.registerMap('china', chinaJson);
      mychart.setOption(option, true);
    })
    window.addEventListener("resize", function () {
      mychart.resize();
    });
  }
  //获取最大值
  function getMaxVlaue(arr){
    let result=-Infinity
    for(let i in arr){
      if(arr[i].value>result)result=arr[i].value
    }
    return result
  }

点击地图下钻到对应省市区地图

mychart.on('click', function (params) {
    // console.log(params);
    // 判断地图类型,中国地图则变为省地图,省地图变为市区地图
    map_level = map_level === 'china' ? 'province' : map_level === 'province' ? 'city' : null
    if (!map_level) return
    if (map_level === 'province') {
      createMap('geometryProvince', getProvinceId(mapList, params.name), params.name)
    } else if (map_level === 'city') {
      createMap('geometryCouties', getcityId(cityinfo, params.name), params.name)
    }
})
//创建省市区地图
  function createMap(url, id, name) {
    if (map_level === 'province') {
      $.getJSON(`http://127.0.0.3/static/js/echart/json/${url}/${id}.js`, function (chinaJson) {
        //保存当前省市名字
        provinceName = name
        //去掉南海诸岛
        data.push({ name: "南海诸岛", value: 0, itemStyle: { normal: { opacity: 0, label: { show: false } }, emphasis: { opacity: 0, label: { show: false } } } })
        //映射组件最大值
        maxValue=getMaxVlaue(data)
        option.visualMap.max=maxValue
        //创建
        cityinfo = chinaJson
        option.series[0].mapType = name
        echarts.registerMap(name, chinaJson);
        mychart.setOption(option, true);
      })
    } else {
      $.getJSON(`http://127.0.0.3/static/js/echart/json/${url}/${id}.js`, function (chinaJson) {
        //模拟请求数据
        data.splice(0, data.length)
        for (let i in chinaJson.features) {
          if (i < 10) {
            data.push({ name: chinaJson.features[i].properties.name, value: i })
          }
        }
        data.push({ name: "南海诸岛", value: 0, itemStyle: { normal: { opacity: 0, label: { show: false } }, emphasis: { opacity: 0, label: { show: false } } } })
        maxValue=getMaxVlaue(data)
        option.visualMap.max=maxValue
        //创建
        option.series[0].mapType = name
        echarts.registerMap(name, chinaJson);
        mychart.setOption(option, true);
      })
    }
    window.addEventListener("resize", function () {
      mychart.resize();
    });
  }

最后设置右键单击事件返回上一级地图

//取消右键单机默认事件
  let mapRight = document.querySelector('.map')
  mapRight.oncontextmenu = function () { return false }
  //右键单机返回上一级地图
  mychart.on('contextmenu', (params) => {
    if (map_level === 'china') return
    if (map_level === 'city' || map_level == null) {
      createMap('geometryProvince', getProvinceId(mapList, provinceName), provinceName)
      map_level = 'province'
    } else if (map_level === 'province') {
      option.series[0].mapType = 'china'
      createChinaMap()
      map_level = 'china'
    }
  })

最终实现效果

1122d3f4-c0c9-4fa5-af52-287167ca37df.gif

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ECharts是一款功能强大的开源数据可视化库,它提供了丰富的图表类型和交互功能,可以用于实现江苏地图的可视化。 要实现江苏地图,首先需要准备地图数据。可以通过ECharts提供的第三方地图工具或者自行寻找江苏地图的地理数据,获取到地图的边界和各个区域的经纬度坐标。 接下来,使用ECharts地图组件,将地理数据导入到地图中。可以通过`echarts.registerMap`方法注册江苏地图的数据,然后将地图展示在页面上的指定容器中。 在地图展示区域的数据,可以使用ECharts的系列(series)功能。通过配置series的type为`map`,设置mapType为`江苏`,并设置data属性为需要展示的数据,即可在地图展示各个区域的信息,如人口分布、GDP等。 为了增加交互性,可以使用ECharts的视觉映射(visualMap)功能。通过配置visualMap的范围和颜色,可以通过颜色的深浅来表示数据的差异。例如,可以使用不同的颜色来区分各个地区的人口密度。 此外,还可以通过ECharts提供的其他功能,如标记(markPoint)、线条(lines)等来进一步扩展地图展示效果。比如,在地图上标注重要城市或景点的位置,或者展示不同地区之间的交通流量等。 最后,通过ECharts的配置项,可以调整地图的样式、颜色、字体等,以及添加图表的标题、图例等,以满足个性化的需求。 总之,通过ECharts可以很方便地实现江苏地图的可视化展示展示地区数据的分布和差异,提升数据的可解释性和交互性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值