注意

  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. Ubuntu安装OpenOffice

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/quantum7/article/det ...

  2. echarts中实现多个label

    先来个效果图 如果你刚好需要实现这种效果,那么可以瞅一瞅了 我要开始水文了 如图所示,图中顶部部分文字乍一看好像是独立于柱状图,显示在最顶上,其实它也是由柱状图模拟而成. 只是吧图形相关属性做了隐藏, ...

  3. 记一起rust悬垂引用解决

    最初要写一段从redis的hash获取json字符串,转化为结构体,代码逻辑如下 use redis::{Client, Commands, Connection, Iter}; use serde: ...

  4. Oracle 章节编号排序

    测试代码 CREATE TABLE TEST (CH_CODE VARCHAR2(10)); INSERT INTO TEST (CH_CODE) VALUES ('1.1'); INSERT INT ...

  5. KafkaConsumerDemo

    pom <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>sp ...

  6. .NET分布式Orleans - 8 - 贪吃蛇项目实战(准备阶段)

    到目前为止,Orleans7的核心概念基本已经学完,我准备使用Orleans7做一个项目实战,来总结自己的学习效果. 项目效果 通过Orleans7来完成一个贪吃蛇游戏,要求如下: 可以多人在线玩 贪 ...

  7. ET8开发微信小游戏之部署云服务器Nginx代理

    最近用ET8搞微信小游戏测试,部署到云服务器,手机上运行,必须要用https备案过得域名,客户端使用websocket创建必须要wss开头,服务端部分通过Nginx进行https通信之后转发到云服务器 ...

  8. #深搜,期望#CF105B Dark Assembly

    洛谷题目传送门 CODEFORCES传送门 分析 题目强调贿赂要在投票开始前完成说明分糖和成功率可以分开计算 那么分糖考虑直接暴搜,由于题目并没有说糖必须全部分完, 所以每一次分完一颗糖后均要求当前状 ...

  9. 修复HTTP动词篡改导致的认证旁路问题的方法

    本文于2016年4月完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. 诡异的问题 分析AppScan扫描报告的时候,发现报告里提示" ...

  10. nginx重新整理——————反向代理[五]

    前言 简单整理一下反向代理. 正文 为什么要反向代理呢? 其实这个问题也是相对来说比较好理解的. 一个就是解耦,为什么这么说呢,就是将原本应用的一部分剥离出来,比如说限制流量,如果在程序中写那么相比会 ...