注意

  1. echarts请使用v5.1.0以上版本,低版本会无法显示,或者无法触发点击事件。
  2. 若有闪屏bug,不要设置temporalSuperSampling属性。
  3. 注意图层顺序。

实现原理

借助 echarts 和 echarts-gl:

  1. 实现立体地图使用geo3d
  2. 立体柱图使用bar3d
  3. geo3d的这层click事件无法触发,遂在其上添加map3d层。
  4. map3d无选中的配置,dispatchAction触发highlight,select对其不生效。变通办法:将map3d层设为透明,通过动态设置geo3d层的regions达到选中高亮的效果。

主要代码实现

预览地址:https://www.makeapie.com/editor.html?c=xelBBd_iFR&v=1

鉴于makeapie已经没了,重新在JSRun中更新了下预览,有相对完整的代码,有需要的朋友可以参考:https://jsrun.net/UPsKp

具体细节可看注释及代码。

// 部分测试数据
var originalDatas = {
dataMap: [
{ name: '目标数', field: 'mbs', unit: '万人' },
{ name: '完成数', field: 'wcs', unit: '万人' },
],
datas: [
{
adcode: 330100,
name: '杭州市',
lng: '119.053576',
lat: '29.887459',
wcs: 10,
mbs: 50,
wcl: 100,
}
]
} var myChart = echarts.init(document.getElementById('echart'));
// zjJsonUrl为地图的geoJson
$.get(zjJsonUrl, (res) => {
echarts.registerMap('map', res); var series = [
{
type: 'map3D',
map: 'map',
// 设置为透明
itemStyle: {
color: [1, 1, 1, 0],
},
emphasis: {
itemStyle: {
color: [1, 1, 1, 0],
},
},
data: originalDatas.datas, viewControl: {
beta: 45, //x轴旋转
alpha: 45, //Y轴旋转
}
},
]; $.each(originalDatas.dataMap, function (i, seriesItem) {
series.push({
name: seriesItem.name,
type: 'bar3D',
coordinateSystem: 'geo3D',
shading: 'lambert',
label: {
show: true,
position: 'top',
formatter: (params) => {
return params.value[2];
},
},
data: originalDatas.datas.map((item) => {
item.value = [
i == 0 ? item.lng - 0 + 0.05 : item.lng - 0.05,
item.lat,
item[seriesItem.field],
seriesItem.unit,
];
return JSON.parse(JSON.stringify(item));
}),
barSize: 2,
minHeight: 1,
itemStyle: {
color: i == 0 ? '#FFB239' : '#5E5FFF',
},
emphasis: {
label: { show: true },
},
// zlevel: i
});
}); option = {
tooltip: {
trigger: 'item',
formatter: function (params) {
if (params.seriesType == 'bar3D') {
return [params.seriesName, params.name + ':' + params.value[2] + (params.value[3] || '')].join(
'<br />'
);
}
},
},
geo3D: {
show: true,
map: 'map', viewControl: {
beta: 45, //x轴旋转
alpha: 45, //Y轴旋转
panMouseButton: 'right', //平移操作使用的鼠标按键
rotateMouseButton: 'left', //旋转操作使用的鼠标按键
},
light: {
main: {
color: '#ffffff',
intensity: 1,
shadow: false,
},
},
itemStyle: {
color: '#4D96FA',
borderWidth: 1,
borderColor: '#fff',
opcity: 1,
}, shading: 'realistic',
label: {
show: true,
color: '#fff',
distance: 5,
},
emphasis: {
label: { show: true },
itemStyle: { color: '#36A8FF' },
},
groundPlane: false,
data: originalDatas.datas,
// 将geo3d放在最底层
zlevel:-1
},
series: series,
}; myChart.setOption(option);
myChart.off('click');
myChart.on('click', function (params) {
// 点击获取data中的数据
console.log(params);
// 设置选中高亮
let regions = [
{
itemStyle: { color: '#36A8FF', opacity: 1 },
label: { show: true },
},
];
regions[0].name = params.name;
option.geo3D.regions = regions;
myChart.setOption(option);
});
});

Echarts立体地图加3D柱图可点击可高亮选中的开发的更多相关文章

  1. echarts柱图自定义为硬币堆叠的形式

    看这标题,可能会有一些人不太明白,那么直接上图,就是柱图展示形式如下图(兼容IE8) 要想实现这样展示效果.我们想用echarts直接实现不行的,即使是纹理填充也不可行的,但是我们可以借助echart ...

  2. echarts - 特殊需求实现代码汇总之【柱图】篇

    其实包括饼图.线图在内,和柱图都一样的感觉,他们的配置项基本也是对应的那几个,所以想实现某些相似的效果,只要找到对应的属性就可以了. 1.柱图渐变色设置 还记得上篇线图中的实现是在areaStyle的 ...

  3. d3.js 实现立体柱图

    前言 随着大数据时代的来临,数据可视化的重要性也越来越凸显,那么今天就基于d3.js今天给大家带来可视化基础图表柱图进阶:立体柱图 关于d3.js d3.js是一个操作svg的图表库,d3封装了图表的 ...

  4. echarts 中 柱图 、折线图、柱图层叠

    app.title = '折柱混合'; option = { tooltip: { trigger: 'axis', axisPointer: { type: 'cross', crossStyle: ...

  5. Echarts设置y轴值间隔 以及设置 barWidth : 30,//柱图宽度

    需求:如图,y轴之间的距离太小,这样就太过于拥挤了,现在要修改echarts里面的属性,设置y轴值间隔让图表看上去舒服一些.     其实很多问题,真的只是因为自己没有好好的看文档,很多文档上面都写的 ...

  6. Echarts-柱状图柱图宽度设置

    先看两张图 图中柱图只需要设置series中的坐标系属性barWidth就可以, 这种图柱状图,折叠柱状图都适应 eg: /** * 堆积柱状图 * @param xaxisdata x轴:标签(数组 ...

  7. 转:ECharts图表组件之简单关系图:如何轻松实现另类站点地图且扩展节点属性实现点击节点页面跳转

    站点地图不外乎就是罗列一个网站的层次结构,提炼地讲就是一个关系结构图.那么我们如何巧用ECharts图表组件内的简单关系结构图来实现一个站点的地图结构呢?另外如何点击某个节点的时候实现页面跳转呢? 针 ...

  8. Echarts4+EchartsGL 3D迁徙图(附源码)

    最近遇到些Echarts迁徙图问题,在实现二维地图的迁徙图后开始开发3D迁徙图,在网上一查,发现3D版本迁徙图资料较少,自己研究并借鉴一些资料后写了一个小demo,希望能帮大家少走些弯路,共同学习. ...

  9. dev控件chart简单实现多图例,双曲线,双柱图,曲线与柱图

    1.效果图 2.数据源代码: ; i < ; i++) { == ) { dt1.Rows.Add( * i); dt2.Rows.Add( * i+); } else { dt1.Rows.A ...

  10. Highcharts 柱图 每个柱子外围的白色边框

    Highcharts 柱图中每条柱外会有默认白色的边框, 去边框代码如下: plotOptions: { bar: { borderColor: "",//去边框 } }

随机推荐

  1. Cesium渲染模块之FBO与RBO

    1. 引言 Cesium是一款三维地球和地图可视化开源JavaScript库,使用WebGL来进行硬件加速图形,使用时不需要任何插件支持,基于Apache2.0许可的开源程序,可以免费用于商业和非商业 ...

  2. C++ Concurrency in Action 读书笔记三:并发操作的同步

    Chapter 4 并发操作的同步·Synchronizing concurrent operations

  3. 使用SpringBatch读取csv文件

    目录 1.需求 2.解决方案 3.注意事项 1.文件路径的获取 2.各个Step如果获取到ExecutionContext中的值 3.FlatFileItemReader使用注意 4.实现步骤 1.导 ...

  4. MySQL备份还原工具

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. Java freemarker 模板生成word动态表格

    1.新建一个word文档 2.把调整完的word另存为xml格式: 3.使用文本编辑器打开 4.xml格式化XML 在线格式化 | 菜鸟工具菜鸟工具-XML 在线格式化..https://c.runo ...

  6. DW:优化目标检测训练过程,更全面的正负权重计算 | CVPR 2022

    论文提出自适应的label assignment方法DW,打破了以往耦合加权的惯例.根据不同角度的一致性和非一致性指标,动态地为anchor分配独立的pos权重和neg权重,可以更全面地监督训练.此外 ...

  7. KingbaseES PLSQL 支持语句级回滚

    KingbaseES默认如果在PLSQL-block 执行过程中的任何SQL 语句导致错误,都会导致该事务的所有语句都被回滚,而Oracle 则是语句级的回滚.KingbaseES 为了更好的与 Or ...

  8. xpath解析爱奇艺电影网页数据

    1 url='https://list.iqiyi.com/www/1/-------------11-1-1-iqiyi--.html' 2 headers={ 3 'User-Agent':'Mo ...

  9. #李超线段树,树链剖分#洛谷 4069 [SDOI2016]游戏

    题目 分析 就是把线段扔到了树上,注意区间查询要比较两个端点的函数值, 把区间赋值转换成两部分,从起点到LCA的区间是斜率为负数的线段, 从终点到LCA的区间是斜率为正数的线段. 代码 #includ ...

  10. C++ 用户输入与数据类型详解:建立基本计算器及变量类型

    C++ 用户输入 你已经学习了 cout 用于输出(打印)值.现在我们将使用 cin 来获取用户输入. cin 是一个预定义变量,它使用提取运算符(>>)从键盘读取数据. 在下面的示例中, ...