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

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>

    推荐阅读
  • 营业执照的经营场所如何填(怎么填写营业执照的经营场所)

    以下内容大家不妨参考一二希望能帮到您!营业执照的经营场所如何填营业执照的经营场所有房产证的,按照房产证上的载明的详细地址填写;没有房产证的,按照经营场所所在地的村(居)委会、街道办事处、乡镇政府出具的经营场所证明上载明的地址填写。个体工商户应当登记的主要项目如下:字号名称、经营者姓名和住所、从业人数、资金数额、组成形式、经营范围、经营方式、经营场所。

  • 苏轼怀疑人间四月芳菲尽(咋舌苏轼说)

    那时的厕所多半是在猪圈边上起一个小小的平台,平台上另起小屋,里面设有便坑,这种布局使得养猪积肥更加便捷,而这种猪圈与厕所一体的建筑便称为溷厕。殷商时期的甲骨文多为象形字,其组合构成往往可以揭示很多历史细节。说春秋时期有个诸侯叫晋景公,很是混蛋。磨制精细,设计合理,算得上国内罕见的厕器精品。

  • 乘坐动车可以托运行李么?(这个你知道吗)

    正确填写托运单,将品名、件数、到站、发货人、收货人等资料详细填写清楚。持已填好的托运单到司磅员处检斤过磅,由司磅员将货物的件数和准确重量用红蓝铅笔填写在托运单上,并盖人名章。持托运单到制票窗口进行制票并交纳运费,得到绿色的提货联和红色的报销联后,托运程序进行完毕。

  • 我为群众办实事长效机制(我为群众办实事)

    “这个画的是什么?是天安门......”。这是白河县茅坪镇中心小学党员教师在为学区残疾儿童叶存双送教上门课堂中的一幕场景。近日,按照学校“送教上门”计划,一堂精彩的红色教育课随之展开。该校党支部把给学区适龄残疾学生“送教上门”作为“为群众办实事”的重要举措,利用“送教上门”机会,结合不同残疾儿童的特点,制定学习计划,确保学区内因残送教上门的适龄儿童也能在党史学习教育的良好氛围中健康成长。

  • 洼组词语(汉字洼组词语)

    蹄洼[tíwā]蹄迹所陷的洼坑,今天小编就来说说关于洼组词语?下面更多详细答案一起来看看吧!洼组词语蹄洼[tíwā]蹄迹所陷的洼坑。洼水[wāshuǐ]停积的水。洼窞[wādàn]深坑。一洼死水[yīwāsǐshuǐ]洼:水坑。比喻停滞不前的沉闷局面。坳洼[àowā]地面的低洼处。坑洼[kēngwā]洼下去的地方。涝洼地[làowādì]低洼易淹的田地。

  • 毛病一词的由来是怎样的(毛病一词的由来介绍)

    毛病一词的由来是怎样的“毛病”本不是指人,而是指马,“毛病”一词原是专指马的毛色有缺点。如旧题宋朝苏轼《续杂纂》:“怕人知:卖马有毛病。”徐咸《相马书》说:“马旋毛者,善旋五,恶旋十四。所谓毛病最为害者也。”意思是说马身上的毛旋儿有好的,也有坏的。毛旋儿的位置生得不好,就是“毛病”,对主人会有妨害。后来,“毛病”由专指马扩大到其他事物,凡是有缺点或有妨害、有损害的地方,都可称为毛病了。

  • 雷锋是谁(雷锋是谁)

    雷锋是一个对中国、对人类有着特殊意义的名字。但是,在中国乃至世界,雷锋的名字却不属于雷锋一个人,她是千千万万人的共同拥有,她是千千万万人的真诚热爱!即使雷锋被百姓尊称为时代的楷模,他也永远在百姓中!“积小善为大善,善莫大焉”,这与我们当前的“为人民服务”“做人民勤务员”都是一脉相承的,雷锋精神永远值得弘扬。

  • 快手会火的名字大全(快手会火的名字大全女生)

    1、智取赵本山2、哈利波特别大3、好人一生平胸4、会有僵尸替我爱你5、攒一口袋星星6、与可爱私奔7、鲁迅漂流记8、银河小铁骑9、章鱼小肉丸10、油炸小可爱11、月亮供电不足12、汽水味的小盆友13、别摸我的婴儿肥14、柠檬小丸子15、我比纸巾还能扯16、℡你离开的时候我没哭17、死亡与爱18、断桥烟雨ペ相思绝19、心碎红顏泪╮20、笑着承认自己输了21、浮云的痛22、用死亡圈住祢

  • 17款新捷达中配网关线从obd那接可以吗(怎么找接口)

    大众新款及老款捷达虽然车型已经有很大的变化,但OBD位置都还是在差不多的位置,很好找。OBD主要用来诊断汽车运行状况,但现在有些依赖OBD的汽车用品,例如行车记录仪、智能设备以及为车型新增功能,会用到这个OBD接口。OBD是英文On-BoardDiagnostics的缩写,中文翻译为“车载自动诊断系统”。这个系统将从发动机的运行状况随时监控汽车是否尾气超标,一旦超标,会马上发出警示。根据故障码的提示,维修人员能迅速准确地确定故障的性质和部位。

  • 多措并举积极服务毕业就业(把就业服务做到毕业生心坎上)

    经过笔试、面试,小张正式被该公司录用。湖北是高等教育大省,进入毕业季以来,全省教育、人社等各部门出台多项举措,促进高校毕业生就业。小邓深受感动,决定参加西部计划的考试。今年5月,她顺利成为一名光荣的西部计划志愿者,前往新疆服务。为帮助低收入家庭毕业生就业,共青团湖北省委推动省内百余所高校千余名团干部参与结对帮扶活动。2022年,湖北省“挑战杯”赛事共收到省内高校报送的1465件项目,参赛项目数量较上届增长92%。