3D地图的定时高亮和点击事件(基于echarts)

栏目: 编程工具 · 发布时间: 6年前

内容简介:1.因为之前的项目都是基于echarts的刚好echarts-gl页支持3D于是我便选择echarts-gl作为我的练手项目2.所有我选择的技术栈是: vue echarts echarts-gl4.很多人说echarts不支持地图了 嘿嘿嘿 那是因为你没有发现美得眼睛 在你的页面引入

1.因为之前的项目都是基于echarts的刚好echarts-gl页支持3D于是我便选择echarts-gl作为我的练手项目

2.所有我选择的技术栈是: vue echarts echarts-gl

安装Vue和echarts

1.很多人对于ehcarts安装在vue有点抓瞎,更不用说是在vue上面搞3D今天我就来告诉大家如何安装和使用echarts-gl初始化一个3D地图 2.安装echarts和echarts-al

npm i echarts --save npm i echarts-gl --save

3.引用echarts和echarts-gl 在main.js搞事情

import echarts from 'echarts';
import 'echarts-gl'

Vue.prototype.$echarts = echarts
复制代码

4.很多人说echarts不支持地图了 嘿嘿嘿 那是因为你没有发现美得眼睛 在你的页面引入

require('../../node_modules/echarts/map/js/china')

地图消息就在你的node_modules/echarts/map/china中

好了你的echarts和echarts-gl可以用了 下面我们进入编程

初始化echarts-gl 3D地图

1.首先 新建一个option.js 这个文件是用来放配置项的你要是不建立也可以 就是页面的代码多一点 不大好看

  1. 配置页代码如下 (主要是地点标识和3D地图的颜色样式)
//标识数据,用来标识地图上的点,给用户提供点击事件
var geoCoordMap = {
    '黑龙江': [127.9688, 45.368],
    '内蒙古': [110.3467, 41.4899],
    "吉林": [125.8154, 44.2584],
    '北京市': [116.4551, 40.2539],
    "辽宁": [123.1238, 42.1216],
    "河北": [114.4995, 38.1006],
    "天津": [117.4219, 39.4189],
    "山西": [112.3352, 37.9413],
    "陕西": [109.1162, 34.2004],
    "甘肃": [103.5901, 36.3043],
    "宁夏": [106.3586, 38.1775],
    "青海": [101.4038, 36.8207],
    "新疆": [87.9236, 43.5883],
    "西藏": [91.11, 29.97],
    "四川": [103.9526, 30.7617],
    "重庆": [108.384366, 30.439702],
    "山东": [117.1582, 36.8701],
    "河南": [113.4668, 34.6234],
    "江苏": [118.8062, 31.9208],
    "安徽": [117.29, 32.0581],
    "湖北": [114.3896, 30.6628],
    "浙江": [119.5313, 29.8773],
    "福建": [119.4543, 25.9222],
    "江西": [116.0046, 28.6633],
    "湖南": [113.0823, 28.2568],
    "贵州": [106.6992, 26.7682],
    "云南": [102.9199, 25.4663],
    "广东": [113.12244, 23.009505],
    "广西": [108.479, 23.1152],
    "海南": [110.3893, 19.8516],
    '上海': [121.4648, 31.2891]

};
var chinaDatas = [
    [{
        name: '黑龙江',
        value: 100
    }],
    [{
        name: '内蒙古',
        value: 300
    }],
    [{
        name: '吉林',
        value: 300
    }],
    [{
        name: '辽宁',
        value: 300
    }],
    [{
        name: '河北',
        value: 300
    }],
    [{
        name: '天津',
        value: 300
    }],
    [{
        name: '山西',
        value: 300
    }],
    [{
        name: '陕西',
        value: 300
    }],
    [{
        name: '甘肃',
        value: 300
    }],
    [{
        name: '宁夏',
        value: 300
    }],
    [{
        name: '青海',
        value: 300
    }],
    [{
        name: '新疆',
        value: 300
    }],
    [{
        name: '西藏',
        value: 300
    }],
    [{
        name: '四川',
        value: 300
    }],
    [{
        name: '重庆',
        value: 300
    }],
    [{
        name: '山东',
        value: 300
    }],
    [{
        name: '河南',
        value: 300
    }],
    [{
        name: '江苏',
        value: 300
    }],
    [{
        name: '安徽',
        value: 300
    }],
    [{
        name: '湖北',
        value: 300
    }],
    [{
        name: '浙江',
        value: 300
    }],
    [{
        name: '福建',
        value: 300
    }],
    [{
        name: '江西',
        value: 300
    }],
    [{
        name: '湖南',
        value: 300
    }],
    [{
        name: '贵州',
        value: 300
    }],
    [{
        name: '广西',
        value: 300
    }],
    [{
        name: '海南',
        value: 300
    }],
    [{
        name: '上海',
        value: 1300
    }]
];

//处理数据,是的数据格式符合echarts
var convertData = function(data) {
    var res = [];
    for (var i = 0; i < data.length; i++) {
        var geoCoord = geoCoordMap[data[i][0].name];
        if (geoCoord) {
            res.push({
                name: data[i][0].name,
                value: geoCoord.concat(data[i][0].value)
            });
        }
    }
    return res;
};

//具体配置,并输出

export default {
    backgroundColor: '#fff',
    geo3D: {
        data: convertData(chinaDatas),
        map: 'china',
        color: '#fff',
        roam: true, //是否开启鼠标缩放和平移漫游。默认不开启。
        itemStyle: {
            areaColor: 'rgba(255,255,255,1)',
            opacity: 1,
            borderWidth: 1,
            borderColor: '#000'
        }, //地图上每个省的颜色配置
        label: {
            show: false,
        },// 标特是否显示,显示配置
        
        emphasis: { //当鼠标放上去的状态
            label: {
                show: true
            },
            itemStyle: {
                color: '#000'
            }
        },
        
        tooltip: 'axis', //提示框设置
        
        formatter: val => {
            return val
        },
        /** 标签内容格式器,支持字符串模板和
        回调函数两种形式,字符串模板与回调函数
        返回的字符串均支持用 \n 换行。**/
        
        // legendHoverLink: true,
        
        regions: [{
            name: '山东',
            itemStyle: {
                color: '#000',
                opacity: 1,
            },
            label: {
                show: true
            },
        }],//默认高亮区域
    },
    series: [{
        name: 'light',
        type: 'scatter3D', //标识点
        symbol: 'pin',  //散点的形状。默认为圆形。
        coordinateSystem: 'geo3D',
        data: convertData(chinaDatas),
        symbolSize: function() {
            return 36
        },
        label: {
            show: false
        },
        itemStyle: {
            normal: {
                color: '#f00'
            }
        },
        zlevel: 6,
        emphasis: { //当鼠标放上去  地区区域是否显示名称
            label: {
                show: false
            },
            itemStyle: {
                color: '#000'
            }
        },
    },

    ]
};
复制代码

3.引入option

import option from '你的option地址'

4. 创建 div

<div id="myChart" style="height: 1000px; width: 1000px;"></div> 5. 初始化

var myChart = this.$echarts.init(document.getElementById('myChart')); 6. 加载配置项 myChart.setOption(option); 7.这就是效果图 颜色可以自己配置的好看一下哟

3D地图的定时高亮和点击事件(基于echarts)

增加定时高亮事件和点击事件

1.定时器代码(如何高亮关键就是改变geo的regions的name属性) 然后就动了

let regions = setInterval(function() {
    option.geo3D.regions[0].name = option.geo3D.data[count].name
    myChart.setOption(option);
    count ++
    if (count === option.geo3D.data.length) {
        count = 0
    }
}, 1000);

复制代码

2.点击事件

myChart.on('click',function(params){
    clearInterval(regions)
    console.log(params)
    count = params.dataIndex
    option.geo3D.regions[0].name = params.name
    myChart.setOption(option);
});
复制代码

3.双击重新开始定时器事件

myChart.getZr().on('dblclick', function(params) {
    regions = setInterval(function() {
        option.geo3D.regions[0].name = option.geo3D.data[count].name
        console.log(count)
        myChart.setOption(option);
        count ++
        if (count === option.geo3D.data.length) {
            count = 0
        }
    }, 1000);
});
复制代码

4.其实要是在2D上可以用

myChart.dispatchAction({
    type: 'highlight',
    // 可选,系列 index,可以是一个数组指定多个系列
    seriesIndex?: number|Array,
    // 可选,系列名称,可以是一个数组指定多个系列
    seriesName?: string|Array,
    // 可选,数据的 index
    dataIndex?: number,
    // 可选,数据的 名称
    name?: string
})
复制代码

这个事件 很遗憾的是 3D并不支持这些api

###echarts-gl 3D地图的坑爹之处###

1.点击事件(click)

它只能使用getZr()来搞点击 而且返回的信息只有鼠标在屏幕的x,y轴左边 你也可以使用 echartsInstance.convertFromPixel 来转换

但是 其中转换公式和代码的时间也许比你写出来的时间更长 所以我放弃了

当然你也可以使用 ecahrts-gl的 1.0.0 beta-6 版本来做 这个版本就可以直接绑定click时间 但是Radeon高亮设置不了... 好坑啊 而且最好是 直接引入他的源代码

import 'echarts-gl' 替换成 import '../node_modules/echarts-gl/dist/echarts-gl.js';

其他的时间 比如高亮 双击 等等时间 3D地地图中是能给我惊喜 我不得不对我的地图进行阉割 我希望作者可以改一下

而且我想去改一个源代码 但是发现beta5到beta6版本改动的太多了 实在是干不动 同时也希望社区的各位能提供宝贵的意见可以解决这样的BUG

感谢各位老爷的观看~~~ 啾咪 爱你们哟

3D地图的定时高亮和点击事件(基于echarts)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Getting Real

Getting Real

Jason Fried、Heinemeier David Hansson、Matthew Linderman / 37signals / 2009-11-18 / USD 24.99

Getting Real details the business, design, programming, and marketing principles of 37signals. The book is packed with keep-it-simple insights, contrarian points of view, and unconventional approaches......一起来看看 《Getting Real》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具