百摩网
当前位置: 首页 生活百科

echarts地图3d效果(用好Echart5绘制地图)

时间:2023-07-21 作者: 小编 阅读量: 6 栏目名: 生活百科

二层放在中间,实现基本的地图层,显示对应各个区域的名称。三层放在最外层,实现数据标记,对应地图里圆圈和数据。捕捉georoam事件,上层的geo缩放、偏移的时候,让下层的map跟着上层同步进行。

可视化我们已不再陌生,地图也很常用。有很多公司业务范围可能仅限于某个市区,所以画一个 china 地图意义不大,就只需要绘制某个省份或者市区的地图,然后统计各个区域的一个分布情况,具体的效果如图所示:

一、实现原理:

绘制地图之前,我们先需要明白实现原理是啥样的,然后按照具体的实现步骤,依次实现效果。如果不明白原理,每次完成的都是复制粘贴。

1、开始之前,先确认自己的地图需要分几层,及其作用。

2、该效果实现,需要三层地图实现效果。

  • 一层放在最底层,设置地图的边框,对应地图里最外层的蓝色地图线。
  • 二层放在中间,实现基本的地图层,显示对应各个区域的名称。
  • 三层放在最外层,实现数据标记,对应地图里圆圈和数据。

3、拖动或缩放的时候出现错位,使其同步缩放和拖动

二、Echarts 使用五部曲:

1、下载并引入 echarts

Echarts 已更新到了 5.0 版本,安装完记得检查下自己的版本是否是 5.0 。

npm install echarts --save

下载地图的 json 数据

可以下载中国以及各个省、市、区地图数据。免费的文件下载地址:

http://datav.aliyun.com/portal/school/atlas/area_selector#&lat=30.332329214580188&lng=106.72278672066881&zoom=3.5

下载对应的省份或者市区的地图数据。

引入:

import * as echarts from "echarts"import chinaJSON from '../../assets/json/china.json'

2、准备容器

给元素定义宽高确定的容器用来装地图。

<template> <div ref="xian"></div></template>

3、实例化 echarts 对象

import * as echarts from 'echarts'import xianJSON from '../../assets/json/xian.json'const xian = ref()var myChart = echarts.init(xian.value)// 创建了一个 myChart 对象

如果是绘制的地图,需要先引入和注册地图:

echarts.registerMap('xa', xianJSON)

4、指定配置项和数据

var option = { // 存放需要绘制图片类型,以及样式设置}

5、给 echarts 对象设置配置项

myChart.setOption(option)

三、具体实现步骤

步骤1:绘制基本地图层,显示各个区域。

具体代码为:

<template> <div><div ref="xian"></div> </div></template><script lang="ts" setup>import { ref, onMounted } from 'vue'import * as echarts from 'echarts'import xianJSON from '../../assets/json/xian.json'const xian = ref()onMounted(() => { drwaMap()})function drwaMap() { var myChart = echarts.init(xian.value) echarts.registerMap('xa', xianJSON) var option = {geo: {map: 'xa',zoom: 1,roam: true,center: [109.00853, 34.11078],label: {show: true,color: 'rgba(255,255,255,0.2)',},itemStyle: {normal: {areaColor: '#080b1a',borderColor: 'rgba(0,116,255,0.2)',borderWidth: 2,borderType: 'dashed',},emphasis: {areaColor: '#4f6ee9',color: 'rgba(255,255,255,0.8)',},},}, } myChart.setOption(option)}</script>

步骤2:底层绘制一个地图层,设置地图外层边框

添加 series 属性,再绘制一个地图层,利用 z 放到最底层。

series: [ //绘制一个新地图 {type: 'map',map: 'xa',zoom: 1,roam: true,center: [109.00853, 34.11078],z: -1, // 置于底层itemStyle: {normal: {areaColor: '#2e488f',borderColor: '#0074ff',borderWidth: 5,//设置外层边框线粗细},}, },],

步骤3:添加分布的数据点标记

给 series 中再添加一个配置项:

{ type: 'effectScatter', // 特效散点图 coordinateSystem: 'geo', symbol: 'circle', // symbolSize 设置标记点的大小, //把大小限制再 30 - 50 之间 symbolSize: function (val) {return 30(val[2] / 100) * 20 }, colorBy: 'series', //显示name并设置样式 label: {show: true,formatter: function (data) {return data.value[2]},color: '#080b1a',fontSize: '16',offset: [0, 0],align: 'center',},//涟漪效果设置 rippleEffect: {color: '#32479d',number: 3,period: 4,scale: 2,brushType: 'stroke', }, itemStyle: {normal: {color: '#00e6ff',borderColor: '#32479d',borderWidth: 2, }, }, data: [{ name: '蓝田', value: [109.423479, 34.181634, 50] },{ name: '长安区', value: [108.923479, 34.110134, 30] },{ name: '周至县', value: [108.123479, 34.010134, 2] },{ name: '鄠邑区', value: [108.573479, 34.100134, 4] },{ name: '临潼区', value: [109.283479, 34.510134, 3] },{ name: '高陵区', value: [109.059479, 34.550134, 1] }, ],},

步骤4:处理放大缩小时不同步的问题。

捕捉 georoam 事件,上层的 geo 缩放、偏移的时候,让下层的 map 跟着上层同步进行。添加代码:

myChart.on('georoam', function (params) { var option = myChart.getOption() //获得option对象 if (params.zoom != null && params.zoom != undefined) {//捕捉到缩放时option.series[0].zoom = option.geo[0].zoom //下层geo的缩放等级跟着上层的geo一起改变option.series[0].center = option.geo[0].center //下层的geo的中心位置随着上层geo一起改变 } else { //捕捉到拖曳时option.series[0].center = option.geo[0].center //下层的geo的中心位置随着上层geo一起改变 } myChart.setOption(option) //设置option})

四、完整源码

<template><div><divref="xian"style="width: 100%;height: 800px;border: solid 1px red;background: #0c0b2a;"></div></div></template><script lang="ts" setup>import { ref, onMounted } from 'vue'import * as echarts from 'echarts'import xianJSON from '../../assets/json/xian.json'const xian = ref()onMounted(() => {drwaMap()})function drwaMap() {var myChart = echarts.init(xian.value)echarts.registerMap('xa', xianJSON)var option = {geo: {map: 'xa',zoom: 1,roam: true,center: [109.00853, 34.11078],label: {show: true,color: 'rgba(255,255,255,0.2)',},itemStyle: {normal: {areaColor: '#080b1a',borderColor: 'rgba(0,116,255,0.2)',borderWidth: 2,borderType: 'dashed',},emphasis: {areaColor: '#4f6ee9',color: 'rgba(255,255,255,0.8)',},},},series: [//绘制一个新地图{type: 'map',map: 'xa',zoom: 1,roam: true,center: [109.00853, 34.11078],z: -1,itemStyle: {normal: {areaColor: '#2e488f',borderColor: '#0074ff',borderWidth: 5,},},},{type: 'effectScatter', // 特效散点图coordinateSystem: 'geo',symbol: 'circle',symbolSize: function (val) {return 30(val[2] / 100) * 20},colorBy: 'series',//显示name并设置样式label: {show: true,formatter: function (data) {return data.value[2]},color: '#080b1a',fontSize: '16',offset: [0, 0],align: 'center',},//涟漪效果设置rippleEffect: {color: '#32479d',number: 3,period: 4,scale: 2,brushType: 'stroke',},itemStyle: {normal: {color: '#00e6ff',borderColor: '#32479d',borderWidth: 2,},},data: [{ name: '蓝田', value: [109.423479, 34.181634, 50] },{ name: '长安区', value: [108.923479, 34.110134, 30] },{ name: '周至县', value: [108.123479, 34.010134, 2] },{ name: '鄠邑区', value: [108.573479, 34.100134, 4] },{ name: '临潼区', value: [109.283479, 34.510134, 3] },{ name: '高陵区', value: [109.059479, 34.550134, 1] },],},],}myChart.setOption(option)// 同步缩放、偏移myChart.on('georoam', function (params) {var option = myChart.getOption() //获得option对象if (params.zoom != null && params.zoom != undefined) {//捕捉到缩放时option.series[0].zoom = option.geo[0].zoom //下层geo的缩放等级跟着上层的geo一起改变option.series[0].center = option.geo[0].center //下层的geo的中心位置随着上层geo一起改变} else {//捕捉到拖曳时option.series[0].center = option.geo[0].center //下层的geo的中心位置随着上层geo一起改变}myChart.setOption(option) //设置option})}</script>

    推荐阅读
  • 扬州广陵新城新动态(官宣扬州南区三湾迎来重磅利好)

    关于运河禅修小镇项目的签约仪式月初在上海举行,扬州开发区和福晟集团、鼎盛文化三方签署了合作协议,从内容看,项目不仅仅限于“禅修”两个字。该项目预算180万元。福晟集团官网信息显示,此次扬州文旅综合体项目合作协议的签订,将为三方开启一个全新的未来。

  • 经典语句人生感悟(有关人生感悟的优秀句子)

    在人的一生,有些细微之事,本身毫无意义可言,却具有极大的重要性。事过境迁之后,回顾其因果关系,却发现其影响之大,殊可惊人。放弃过去错误做法的人聪明,放弃过去成功做法的人更聪明。社交的秘决,并不在于讳言真实,而是在讲理的同时不激怒对方。做自己生命中的主角,而不是别人生命中的看客。生命从一开始就在倒计时,不要让无谓的琐事耗费有限的生命燃料。所以,学会爱自己,宠自己,把更多的机会留给自己。

  • 喝什么汤最下奶(产妇喝什么汤下奶)

    猪蹄里面含有丰富的脂肪、蛋白质等,对补血活血具有很大的作用,而且通草对通乳具有很强的效果,把二者结合起来的时候,对于产妇下奶的作用就更加显著。丝瓜对于下奶的功效一直都被人们所津津乐道,而鲢鱼又具有通乳、补虚、理气的作用,因此它对下奶的功效也是显而易见的。

  • 华为trtalooa什么型号(trtalooa是华为什么型号)

    华为trtalooa型号为:华为畅享7Plus全网通高配版4GB+64GB。华为畅享7Plus是畅享系列首款5.5英寸大屏手机,主打功能为大屏金属机身、4000mAh大容量电池、最高4GB+64GB存储组合、1200万大像素拍照、多功能指纹操控、全新EMUI5.1系统、双卡双待、全网通等功能。秉承华为优良做工、出众配置和均衡性能的设计理念,华为畅享7Plus在性能和大屏显示上做了重大提升。

  • 大叶榕树怎么养(关于大叶榕树怎么养)

    下面内容希望能帮助到你,我们来一起看看吧!水肥管理大叶榕树盆景的耐旱性强,不过需要保持环境湿润,建议在生长期间里,给大叶榕树盆景3~4天浇一次水,也需要给其隔20天追施一次肥料,若是在夏季时,需每天适量浇一次水。低温保暖如果大叶榕树盆景进入冬季时,那么最好给它做好保暖措施,给它的树干包裹一层草毡,也可以给树干涂抹一层石灰水,这样有着一定的保暖作用,还要摆放在阳光下养殖,尽量不要使温度低于5℃。

  • 98号汽油和95号汽油区别是啥(98号汽油和95号汽油区别价格)

    98号汽油和95号汽油区别是啥成分含量不同。95号油则由95%的异辛烷了5%的正庚烷构成,98油则由98%的异辛烷和2%的正庚烷构成。98号汽油比95号油贵,98号汽油虽好,并不是适合所有汽车,一般来说汽车油箱盖标注“请加95号以上车用汽油”的车辆可以加注98号汽油。抗爆性是指汽油在发动机内燃烧抗爆震的能力,它是汽油燃烧功能的首要指标,而车子的抗爆性主要取决于发动机的压缩比。

  • 快穿之攻略病娇反派大佬(反派弟弟不简单)

    快穿之攻略病娇反派大佬人鱼公主的小白花6在我们可爱的反派弟弟努力学习的时候,我们的凌青大人也没有闲着。在这三个月里,她给小反派准备了很多“惊喜”。七七把凌青存在空间里的钱,用小爪子一捧一捧地扔。当然不是,无论是人间还是海底,他的组织都是像天机阁一样的存在。他通知手下把东西处理好,不论是权杖还是云灵草还是钱,他都从未动过。

  • 描述交通拥堵的英文(形容拥挤的交通)

    当然英文中与jam有关的表达肯定不止这一个,比如说下面这些。关键在于jam,不知大家知不知道,jam除了有“果酱”的意思外,还有“困境、拥挤”的意思,所以"trafficjam"就很好理解了,是“交通拥挤、交通堵塞”的意思。例句:Insomecitiesthismorning,thereweretrafficjamsupto40mileslong.今晨在某些城市,出现了最长40英里的交通堵塞。您还知道哪些“交通拥挤”的表达呢?

  • 土豆泥通心粉如何做(土豆泥通心粉做法)

    土豆泥通心粉如何做土豆洗净,微波炉高火8分钟左右,放一边待凉。洋葱切丁,番茄去皮切丁,锅中放黄油,待油融化下洋葱和番茄,再加入什锦菜,炒熟之后,小火,放一点水和两勺番茄沙司。煮通心粉,小锅放适量水和一勺盐,待水沸腾后,下通心粉,煮十分钟,出锅过一遍凉水。做土豆泥,土豆泥放凉之后去皮,用勺子碾压成泥,加入适量牛奶,盐,和胡椒粉。土豆泥和2中的洋葱番茄什锦菜混合,装盘,放在通心粉上,吃时搅拌均匀。

  • 池昌旭主演的韩剧哪个最好看(池昌旭主演的9部最热电视剧韩剧)

    池昌旭主演的韩剧哪个最好看池昌旭主演的9部最热电视剧韩剧,看过6部以上的才是真爱粉!