zoukankan      html  css  js  c++  java
  • echarts3D地图的绘制

    好久没写播客了,实在不好意思,最近划水比较多,学习少,最近公司的一个需求我觉得挺不错的,在3D地图点的悬浮和下钻上浪费了很多的时间,后面还是跟产品砍了一些需求,不过大体上还是能接受的

    这是在网上找的地球的地图,然后叫UI按照我的要求调下色,下面是地图的文件

    https://files.cnblogs.com/files/fangdongdemao/absnsnsnsdlsdk.zip

    直接上代码吧

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    <div id="box" style=" 600px;height: 400px;"></div>
    <script src="echarts.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="echarts-gl.js" type="text/javascript" charset="utf-8"></script>
    <script src="china.js" type="text/javascript" charset="utf-8"></script>
    <script src="world.js" type="text/javascript" charset="utf-8"></script>
    <script>const coutryAlias = {
        'Afghanistan': '阿富汗',
        'Angola': '安哥拉',
        'Albania': '阿尔巴尼亚',
        'United Arab Emirates': '阿联酋',
        'Argentina': '阿根廷',
        'Armenia': '亚美尼亚',
        'Australia': '澳大利亚',
        'Austria': '奥地利',
        'Azerbaijan': '阿塞拜疆',
        'Burundi': '布隆迪',
        'Belgium': '比利时',
        'Benin': '贝宁',
        'Burkina Faso': '布基纳法索',
        'Bangladesh': '孟加拉国',
        'Bulgaria': '保加利亚',
        'The Bahamas': '巴哈马',
        'Bosnia and Herzegovina': '波黑',
        'Belarus': '白俄罗斯',
        'Belize': '伯利兹',
        'Bolivia': '玻利维亚',
        'Brazil': '巴西',
        'Brunei': '文莱',
        'Bhutan': '不丹',
        'Botswana': '博茨瓦纳',
        'Central African Republic': '中非共和国',
        'Canada': '加拿大',
        'Switzerland': '瑞士',
        'Chile': '智利',
        'China': '中国',
        'Ivory Coast': '象牙海岸',
        'Cameroon': '喀麦隆',
        'Democratic Republic of the Congo': '刚果金',
        'Republic of the Congo': '刚果共和国',
        'Colombia': '哥伦比亚',
        'Costa Rica': '哥斯达黎加',
        'Cuba': '古巴',
        'Northern Cyprus': '北塞浦路斯',
        'Cyprus': '塞浦路斯',
        'Czech Republic': '捷克共和国',
        'Germany': '德国',
        'Djibouti': '吉布提',
        'Dominican Republic': '多米尼加共和国',
        'Algeria': '阿尔及尼亚',
        'Ecuador': '厄瓜多尔',
        'Egypt': '埃及',
        'Eritrea': '厄立特里亚',
        'Spain': '西班牙',
        'Estonia': '爱沙尼亚',
        'Ethiopia': '埃塞俄比亚',
        'Finland': '芬兰',
        'Fiji': '斐济',
        'Gabon': '加蓬',
        'Georgia': '格鲁吉亚',
        'Ghana': '加纳',
        'Guinea': '几内亚',
        'Gambia': '冈比亚',
        'Guinea Bissau': '几内亚比绍',
        'Equatorial Guinea': '赤道几内亚',
        'Greece': '希腊',
        'Denmark': '丹麦',
        'Guatemala': '危地马拉',
        'Guyana': '圭亚那',
        'Honduras': '洪都拉斯',
        'Croatia': '克罗地亚',
        'Haiti': '海地',
        'Hungary': '匈牙利',
        'Indonesia': '印度尼西亚',
        'India': '印度',
        'Ireland': '爱尔兰',
        'Iran': '伊朗',
        'Iraq': '伊拉克',
        'Iceland': '冰岛',
        'Italy': '意大利',
        'Jamaica': '牙买加',
        'Jordan': '约旦',
        'Japan': '日本',
        'Kashmir': '克什米尔',
        'Kazakhstan': '哈萨克斯坦',
        'Kenya': '肯尼亚',
        'Kyrgyzstan': '吉尔吉斯坦',
        'Cambodia': '柬埔寨',
        'South Korea': '韩国',
        'Kosovo': '科索沃',
        'Kuwait': '科威特',
        'Laos': '老挝',
        'Lebanon': '黎巴嫩',
        'Liberia': '利比里亚',
        'Libya': '利比亚',
        'Sri Lanka': '斯里兰卡',
        'Lesotho': '莱索托',
        'Lithuania': '立陶宛',
        'Luxembourg': '卢森堡',
        'Latvia': '拉脱维亚',
        'Morocco': '摩洛哥',
        'Moldova': '摩尔多瓦',
        'Madagascar': '马达加斯加',
        'Mexico': '墨西哥',
        'Macedonia': '马其顿',
        'Mali': '马里',
        'Myanmar': '缅甸',
        'Montenegro': '黑山',
        'Mongolia': '蒙古',
        'Mozambique': '莫桑比克',
        'Mauritania': '毛里塔尼亚',
        'Malawi': '马拉维',
        'Malaysia': '马来西亚',
        'Namibia': '纳米比亚',
        'France': '法国',
        'Niger': '尼日尔',
        'Nigeria': '尼日利亚',
        'Nicaragua': '尼加拉瓜',
        'Netherlands': '荷兰',
        'Norway': '挪威',
        'Nepal': '尼泊尔',
        'New Zealand': '新西兰',
        'Oman': '阿曼',
        'Pakistan': '巴基斯坦',
        'Panama': '巴拿马',
        'Peru': '秘鲁',
        'Philippines': '菲律宾',
        'Papua New Guinea': '巴布亚新几内亚',
        'Poland': '波兰',
        'North Korea': '朝鲜',
        'Portugal': '葡萄牙',
        'Paraguay': '巴拉圭',
        'Israel': '以色列',
        'Qatar': '卡塔尔',
        'Romania': '罗马尼亚',
        'Russia': '俄罗斯',
        'Rwanda': '卢旺达',
        'Western Sahara': '西撒哈拉',
        'Saudi Arabia': '沙特阿拉伯',
        'Sudan': '苏丹',
        'South Sudan': '南苏丹',
        'Senegal': '塞内加尔',
        'United Kingdom': '英国',
        'Solomon Islands': '所罗门群岛',
        'Sierra Leone': '塞拉利昂',
        'El Salvador': '塞尔瓦多',
        'Somaliland': '索马里蓝',
        'Somalia': '索马里',
        'Republic of Serbia': '塞尔维亚',
        'Suriname': '苏里南',
        'Slovakia': '斯洛伐克',
        'Slovenia': '斯洛文尼亚',
        'Sweden': '瑞典',
        'Swaziland': '瑞士',
        'Syria': '叙利亚',
        'Chad': '乍得',
        'Togo': '多哥',
        'Thailand': '泰国',
        'Tajikistan': '塔吉克斯坦',
        'Turkmenistan': '土库曼斯坦',
        'East Timor': '东帝汶',
        'Trinidad and Tobago': '特立尼达和多巴哥',
        'Tunisia': '突尼斯',
        'Turkey': '土耳其',
        'United Republic of Tanzania': '坦桑尼亚',
        'Uganda': '乌干达',
        'Ukraine': '乌克兰',
        'Uruguay': '乌拉圭',
        'United States of America': '美国',
        'Uzbekistan': '乌兹别克斯坦',
        'Venezuela': '委内瑞拉',
        'Vietnam': '越南',
        'Vanuatu': '瓦努阿图',
        'Yemen': '也门',
        'South Africa': '南非',
        'Zambia': '赞比亚',
        'Zimbabwe': '津巴布韦'
    }</script>
    <script type="text/javascript">
        let canvas = document.createElement('canvas')
        let mapChart = echarts.init(canvas, null, {
             4096,
            height: 2048
        })
    
        let pOp = {
            geo: {
                map: 'china',
                // map: 'world',
                label: {
                    show: false,// 地图省份的显示或者隐藏
                    color: "#fff",
                    fontSize: 28,
                    fontFamily: 'Microsoft YaHei',
                },
                emphasis: { //当鼠标放上去  地区区域是否显示名称
                    label: {
                        show: true,
                        textStyle: {
                            color: '#fdfffd',// 省份的文字
                        }
                    }
                },
                itemStyle: {
                    areaColor: 'transparent',// 区域的颜色
                    borderColor: 'rgba(255,255,255,0.6)',
                    emphasis: {
                        areaColor: 'rgba(255,255,255,0.2)'
                    },
                    borderWidth: 1,
                },
                nameMap: coutryAlias,// 世界地图的中文坐标
                regions: [
                    {
                        name: '南海诸岛',
                        itemStyle: {
                            opacity: 1
                        },
                        label: {
                            show: true,
                            color: '#fff'
                        },
                    }
                ],
                top: 0,
                left: 0,
                right: 0,
                bottom: 0,
                boundingCoords: [
                    [-180, 90],
                    [180, -90]
                ]
            },
            series: [
                //涟漪
                {
                    type: 'effectScatter',
                    coordinateSystem: 'geo',
                    zlevel: 20,
                    rippleEffect: {
                        brushType: 'stroke'
                    },
                    label: {
                        show: true,
                        position: 'right',
                        fontSize: 8,
                        formatter: (params => {
                            return params.name
                        })
                    },
                    itemStyle: {
                        normal: {
                            color: '#03ffff'
                        }
                    },
                    data: [{
                        name: '重庆',
                        value: [83.059716, 39.494287],
                    }, {
                        name: '重庆2',
                        value: [104.547759, 40.062111],
                    }]
                },
            ],
    
        }
        mapChart.setOption(pOp)
        const option = {
            visualMap: [{
                type: 'continuous',
                show:false,
                text: ['bar3D'],
                calculable: true,
                max: 300,
                inRange: {
                    color: ['#00f6ff',]
                }
            }],
            tooltip: {
                trigger: 'item',
                formatter(params) {
                    return params.name
                }
            },
            globe: {
                baseTexture: "bg1.png",
                displacementScale: 0.07,
                shading: 'color',// 着色效果
                light: { // 光照阴影
                    ambient: {
                        intensity: 1
                    },
                    main: { // 主光源
                        intensity: 0,
                        shadow: false
                    },
                },
                // 这个是中国地图的视角
                // viewControl: {
                //     projection: 'perspective',
                //     autoRotateSpeed: 5,// 自转速度
                //     // alpha: 0,//视角的方向。
                //     // beta: 10,//左右旋转的角度。
                //     center: [15, 50, 0],// 视角
                //     targetCoord: [116.826801, 0],
                //     autoRotate: false,// 自动旋转
                //     autoRotateAfterStill: 10,//鼠标静止操作后恢复自动旋转的时间间隔
                //     distance: 20, // 视距
                //     rotateSensitivity: 1,//1可以旋转,0不能旋转
                //     zoomSensitivity: 1,//无法缩放
                // },
                viewControl: {
                    center: [0, 0, 0],
                    alpha: 30,
                    beta: 160,
                    autoRotate: false,
                    autoRotateAfterStill: 10,
                    distance: 140,
                    autoRotateSpeed: 4,
                },
                postEffectL: {
                    enable: false,
                },
                layers: [{
                    type: 'blend',
                    texture: mapChart
                }]
            },
            series: [
                {
                    name: 'lines3D',// 3D攻击线
                    type: 'lines3D',
                    globeIndex:1,
                    zlevel: 10,
                    coordinateSystem: 'globe',
                    effect: {
                        show: true,
                        trailWidth: 4,
                        trailOpacity: 1,
                        trailLength: 0.2,
                        constantSpeed: null
                    },
                    blendMode: 'lighter',
                    lineStyle: {
                        color: '#0087f4',
                         2,
                        opacity: 0.5
                    },
                    // silent: true,
                    data: [
                        {
                            coords: [
                                [91.049892, 29.670971],
                                [121.51585, 31.23045]
                            ], value: 20, name: '数据值1'
                        }, {
                            coords: [
                                [91.049892, 29.670971],
                                [21.827762, 39.062555]
                            ], value: 20, name: '数据值2'
                        },
                        {
                            coords: [
                                [113.01339, 30.710328],
                                [121.51585, 31.23045]
                            ], value: 40,name:'数据值3'
                        },
                        {
                            coords: [
                                [102.894877, 29.944241],
                                [121.51585, 31.23045]
                            ], value: 20,name:'数据值4'
                        },
                        {
                            coords: [
                                [91.049892, 29.670971,],
                                [106.868693, 29.204436,]
                            ], value: 60,name:'数据值5'
                        },
                    ],
                },
                //柱状图
                {
                    name: 'bar3D1',
                    type: "bar3D",
                    coordinateSystem: 'globe',
                    barSize: 2, //柱子粗细
                    shading: 'lambert',
                    opacity: 1,
                    zlevel: 10,
                    bevelSize: 0.3,
                    label: {
                        show: false,
                        formatter: (parmas)=>{
                            return parmas.name
                        }
                    },
                    emphasis: {
                        label: false
                    },
                    minHeight:1,
                    itemStyle: {
                        color: '#00f6ff',
                        opacity: 1
                    },
                    data: [
                        //设置空的一个最小值,最大值
                        {
                            name: "",
                            value: [0,0,0],
                            itemStyle:{
                                opacity:0,
                            }
                        },
                        {
                            name: "",
                            value: [0, 0, 1000],
                            itemStyle:{
                                opacity:0,
                            }
                        },
                        {
                            name: "海门3",
                            "value": [104.547759, 40.062111, 1],
                        },
                        {
                            name: "海门4",
                            "value": [123.429736,45.795987, 1]
                        },
                        {
                            name: "海门5",
                            "value": [120.429736,45.795987, 1]
                        }
                    ]
                },
            ]
        }
    
        const myChart = echarts.init(document.getElementById('box'))
    
        myChart.setOption(option)
        myChart.on('click', function (params) {
            console.log(params)
        })
        // 是防抖的函数
        // let chartChange = debounce(function () {
        //     myChart.resize()
        // });
        // $(window).on('resize.newMapWorld', chartChange)
        // //离开页面的时候的时候要释放内存 .dispose();
        // $(window).off('resize.newMapWorld', chartChange);
        // myChart.dispose();//释放内存
    </script>
    </body>
    </html>
    
  • 相关阅读:
    kubernetes集群部署
    centos7通过yum安装mysql,并授权远程连接
    查看mysql主从配置的状态及修正 slave不启动问题
    ios 企业发布
    centos 安装 pip
    前端优化:DNS预解析提升页面速度
    apache mesos 安装
    Oboe 提升web 用户体验以及性能
    webpack 多entry 配置
    webpack es6支持配置
  • 原文地址:https://www.cnblogs.com/fangdongdemao/p/12389015.html
Copyright © 2011-2022 走看看