echarts中绘制3D三维地球

简介

echarts中的三维地球,需要用到世界地图json数据,我把json文件放到我的资源中,有需要的自行下载。

安装插件

// 安装echats 
npm install echarts --save
npm install echarts-gl --save

项目中引用

1,引入安装的echarts插件

import * as echarts from 'echarts';
import 'echarts-gl';

2,引入世界地图json文件

import WorldJSON from './world.json'

3,echarts 注册世界地图

//注册世界地图
echarts.registerMap('world', WorldJSON);

绘制3d地球代码

// 绘制3d echarts图表
function draw3Dcharts() {
    let myChart = echarts.init(map.value);
    let geoCoordMap = {
        "海门": [121.15, 31.89],
        "鄂尔多斯": [109.781327, 39.608266],
        "菏泽": [115.480656, 35.23375],
        "合肥": [117.27, 31.86],
        "武汉": [114.31, 30.52],
        "大庆": [125.03, 46.58]
    };
    var alirl = [
        [[121.15, 31.89], [121.48, 31.22]],
        [[120.38, 37.35], [121.48, 31.22]],
        [[123.97, 47.33], [121.48, 31.22]],
        [[118.87, 42.28], [121.48, 31.22]],
        [[121.52, 36.89], [121.48, 31.22]],
        [[102.18, 38.52], [121.48, 31.22]],
        [[118.58, 24.93], [121.48, 31.22]],
        [[120.53, 36.86], [121.48, 31.22]],
        [[119.46, 35.42], [121.48, 31.22]],
        [[119.97, 35.88], [121.48, 31.22]],
        [[121.05, 32.08], [121.48, 31.22]],
        [[ 91.11, 29.97], [121.48, 31.22]]
    ]
    var convertData = function (data) {
        var res = [];
        for (var i = 0; i < data.length; i++) {
            var geoCoord = geoCoordMap[data[i].name];
            if (geoCoord) {
                res.push({
                    name: data[i].name,
                    value: geoCoord.concat(data[i].value)
                });
            }
        }
        return res;
    };
    var baseTexture = null
    // 生成球面纹理
    function getBaseTexture() {
        let canvas = document.createElement('canvas');
        baseTexture = echarts.init(canvas, null , {
            width: 4096,
            height: 2048,
        });
        baseTexture.setOption({
            backgroundColor: '#001213',
            series: [
                {
                    type: 'map',
                    map: 'world',
                    left: 0,
                    top: 0,
                    right: 0,
                    bottom: 0,
                    roam:true,
                    boundingCoords: [
                        [-180, 90],
                        [180, -90],
                    ],
                    label: {
                        show: false,
                        color: '#fff',
                        fontSize: 20,
                    },
                    itemStyle: {
                        areaColor: '#004444',
                        borderColor: '#00cccc',
                        borderWidth: 2,
                    },
                },
            ],
        });
        drawEarth();
    }
    function drawEarth() {
        let option = {
            tooltip: {
                show: true,
            },
            globe: {
                silent: true,
                shading: 'color',
                environment: '#000',
                baseTexture: baseTexture,
                viewControl: {
                    rotateSensitivity: 3, //鼠标旋转灵敏度,设置为0后无法旋转。
                    zoomSensitivity: 0,//鼠标缩放灵敏度
                    autoRotate: true,//自动旋转
                    autoRotateAfterStill: 1,//鼠标停止后多久恢复旋转(为0时暂停后不恢复旋转)
                    //alpha:160,//视角绕 x 轴,即上下旋转的角度
                    //beta:-20,//视角绕 y 轴,即左右旋转的角度。
                    // targetCoord: [75.508268, 18.247872] //定位到哪里
                    // 定位到北京
                    targetCoord: [116.46, 39.92],
                }
            },
            series: [
                //柱状图
                {
                    type: "bar3D",
                    coordinateSystem: 'globe',
                    barSize: 0.5, //柱子粗细
                    shading: 'lambert',
                    opacity: 1,
                    bevelSize: 0.2,
                    itemStyle: {
                        color: '#EBE806',
                        opacity: 0.1
                    },
                    label: {
                        show: false,
                        formatter: '{b}'
                    },
                    data: convertData([
                    {
                        name: "海门",
                        value: (Math.random() * 300).toFixed(2)
                    }, {
                        name: "鄂尔多斯",
                        value: (Math.random() * 300).toFixed(2)
                    }, {
                        name: "招远",
                        value: (Math.random() * 300).toFixed(2)
                    }, {
                        name: "舟山",
                        value: (Math.random() * 300).toFixed(2)
                    }, {
                        name: "齐齐哈尔",
                        value: (Math.random() * 300).toFixed(2)
                    }, {
                        name: "盐城",
                        value: (Math.random() * 300).toFixed(2)
                    }, {
                        name: "赤峰",
                        value: (Math.random() * 300).toFixed(2)
                    }
                    ]),
                },
                {
                    name: 'lines3D',
                    type: 'lines3D',
                    coordinateSystem: 'globe',
                    effect: {
                        show: true,
                        period: 2,
                        trailWidth: 3,
                        trailLength: 0.5,
                        trailOpacity: 1,
                        trailColor: '#0087f4'
                    },
                    blendMode: 'lighter',
                    lineStyle: {
                        // width: 2
                        width: 1,
                        color: '#0087f4',
                        opacity: 0
                    },
                    data: [],
                    silent: false,

                },
                {
                    type: 'lines3D',
                    coordinateSystem: 'globe',
                    effect: {
                        show: true,
                        trailWidth: 5,
                        trailOpacity: 1,
                        trailLength: 0.2,
                        constantSpeed: 5
                    },

                    blendMode: 'lighter',

                    lineStyle: { //航线的视图效果
                        color: '#EBE806',
                        width: 1,
                        opacity: 1
                    },

                    data: alirl
                }
            ]
        };
        for (let i = 0; i < 50; i++) {
            option.series[1].data = option.series[1].data.concat(rodamData())
        }
        myChart.clear();
        myChart.setOption(option, true);
        window.addEventListener('resize', () => {
            myChart.resize();
        });
    }
    function rodamData() {
        let longitude = 105.18
        let longitude2 = Math.random() * 360 - 180
        let latitude = 37.51
        let latitude2 = Math.random() * 180 - 90
        return {
            coords: [
                [longitude2, latitude2],
                [longitude, latitude]
            ],
            value: (Math.random() * 3000).toFixed(2)
        }
    }
    getBaseTexture();
}

效果图展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/367339.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Http请求Cookie失效问题

Http请求Cookie失效问题记录 一、问题现象 在开发功能的过程中&#xff0c;业务依赖cookie进行取之&#xff0c;项目进行交互时会对前端http请求携带的cookies进行解析操作&#xff0c;但在自测调试对过程中出现账户的授权失效的报错问题。 二、问题排查 用arthas进行代码方…

【国产MCU】-CH32V307-GPIO控制:输入与输出

GPIO控制:输入与输出 文章目录 GPIO控制:输入与输出1、GPIO简单介绍2、驱动API介绍3、GPIO配置代码实现3.1 GPIO配置为输出3.2 GPIO配置为输入CH32V307的GPIO口可以配置成多种输入或输出模式,内置可关闭的上拉或下拉电阻,可以配置成推挽或开漏功能。GPIO口还可以复用成其他…

【24美赛思路已出】2024年美赛A~F题解题思路已出 | 无偿自提

A题&#xff1a;资源可用性和性别比例 问题一&#xff1a; 涉及当灯鱼种群的性别比例发生变化时&#xff0c;对更大的生态系统产生的影响。为了分析这个问题&#xff0c;可以采用以下的数学建模思路&#xff1a;建立灯鱼种群模型&#xff1a; 首先&#xff0c;建立一个灯鱼种群…

冰冻天气恰逢春运,“观冰精灵”化身电力供应守护者

据中国路网&#xff0c;截至2月1日14时&#xff0c;受降雪及路面结冰影响&#xff0c;河北、山西、内蒙古、黑龙江、江苏、安徽、河南、山东、西藏、陕西、宁夏、甘肃、新疆共封闭路段66个&#xff08;涉及44条高速公路、5条普通国道、5条普通省道&#xff09;&#xff0c;关闭…

基于大数据的淘宝电子产品数据分析的设计与实现

&#xff08;1&#xff09;本次针对开发设计系统并设置了相关的实施方案&#xff0c;利用完整的软件开发流程进行分析&#xff0c;完成了设置不同用户的操作权限和相关功能模块的开发&#xff0c;最后对系统进行测试。 &#xff08;2&#xff09;框架可以帮助程序开发者快速构建…

2024 Flutter 重大更新,Dart 宏(Macros)编程开始支持,JSON 序列化有救

说起宏编程可能大家并不陌生&#xff0c;但是这对于 Flutter 和 Dart 开发者来说它一直是一个「遗憾」&#xff0c;这个「遗憾」体现在编辑过程的代码修改支持上&#xff0c;其中最典型的莫过于 Dart 的 JSON 序列化。 举个例子&#xff0c;目前 Dart 语言的 JSON 序列化高度依…

PHP集成开发 -- PhpStorm 2023

PhpStorm 2023是一款强大的PHP集成开发环境&#xff08;IDE&#xff09;&#xff0c;旨在提高开发人员的生产力和代码质量。以下是关于PhpStorm 2023软件的详细介绍&#xff1a; 首先&#xff0c;PhpStorm 2023提供了丰富的代码编辑功能&#xff0c;包括语法高亮、自动补全、代…

计算机网络自顶向下Wireshark labs-HTTP

我直接翻译并在题目下面直接下我的答案了。 1.基本HTTP GET/response交互 我们开始探索HTTP&#xff0c;方法是下载一个非常简单的HTML文件 非常短&#xff0c;并且不包含嵌入的对象。执行以下操作&#xff1a; 启动您的浏览器。启动Wireshark数据包嗅探器&#xff0c;如Wir…

版本管理git及其命令介绍-附带详细操作

前言 在版本管理时代之前&#xff0c;人们写软件的方式如下图1所示 图1 无版本管理的代码 其坏处就是软件版本随着时间越来越多&#xff0c;每个版本修改了什么内容&#xff0c;修改了哪些文件&#xff0c;如果没有详细记录也不知道。这样久会导致如果我们想回退到某个版本内…

LLM(3) | 自注意力机制 (self-attention mechanisms)

LLM(3) | 自注意力机制 (self-attention mechanisms) self-attention 是 transformer 的基础&#xff0c; 而 LLMs 大语言模型也都是 transformer 模型&#xff0c; 理解 self-attention, 才能理解为什么 LLM 能够处理好上下文关联性。 本篇是对于 Must-Read Starter Guide t…

Java学习day26:和线程相关的Object类的方法、等待线程和唤醒线程(知识点详解)

声明&#xff1a;该专栏本人重新过一遍java知识点时候的笔记汇总&#xff0c;主要是每天的知识点题解&#xff0c;算是让自己巩固复习&#xff0c;也希望能给初学的朋友们一点帮助&#xff0c;大佬们不喜勿喷(抱拳了老铁&#xff01;) 往期回顾 Java学习day25&#xff1a;守护线…

(十二)常见Linux命令——磁盘分区、进程线程、系统定时任务

文章目录 1、磁盘分区类命令1.1、df (disk free 空余硬盘)查看磁盘空间使用情况1.2、fdisk 查看分区1.3、mount/umount 挂载/卸载 2、进程线程类命令2.1、ps (process status 进程状态)查看当前系统进程状态2.2、kill终止进程 3、系统定时任务命令3.1、crond服务管理3.2、cront…

使用ngrok内网穿透

没有服务器和公网IP&#xff0c;想要其他人访问自己做好的网站&#xff0c;使用这款简单免费的内网穿透小工具——ngrok&#xff0c;有了它轻松让别人访问你的项目~ 一、下载ngrok 官网地址&#xff1a;ngrok | Unified Application Delivery Platform for Developers&#x…

前端开发者应该知道的TypeScript可区分联合

作为一个前端开发者&#xff0c;你的工作不仅仅是移动像素&#xff0c;前端的大部分复杂性来自于处理你的应用程序可能处于的所有不同状态。 它可能是加载数据&#xff0c;等待表单被填写&#xff0c;或者发送一个遥测事件 - 或者同时进行这三项。 如果不能正确处理状态&…

【PostgreSQL内核学习(二十五) —— (DBMS存储空间管理)】

DBMS存储空间管理 概述块&#xff08;或页面&#xff09;PageHeaderData 结构体HeapTupleHeaderData 结构 表空间表空间的作用&#xff1a;表空间和数据库关系表空间执行案例 补充 —— 模式&#xff08;Schema&#xff09; 声明&#xff1a;本文的部分内容参考了他人的文章。在…

深度学习入门笔记(七)卷积神经网络CNN

我们先来总结一下人类识别物体的方法: 定位。这一步对于人眼来说是一个很自然的过程,因为当你去识别图标的时候,你就已经把你的目光放在了图标上。虽然这个行为不是很难,但是很重要。看线条。有没有文字,形状是方的圆的,还是长的短的等等。看细节。纹理、颜色、方向等。卷…

C++学习Day01之namespace命名空间

目录 一、程序及输出1.1 命名空间用途&#xff1a; 解决名称冲突1.2 命名空间内容1.3 命名空间必须要声明在全局作用域下1.4 命名空间可以嵌套命名空间1.5 命名空间开放&#xff0c;可以随时给命名空间添加新的成员1.6 命名空间可以是匿名的1.7 命名空间可以起别名 二、分析与总…

洛谷 P1980 [NOIP2013 普及组] 计数问题

题目背景 NOIP2013 普及组 T1 题目描述 试计算在区间 1 到 n 的所有整数中&#xff0c;数字 x&#xff08;0≤x≤9&#xff09;共出现了多少次&#xff1f;例如&#xff0c;在 1 到 11 中&#xff0c;即在 1,2,3,4,5,6,7,8,9,10,11 中&#xff0c;数字 1 出现了 4 次。 输入…

基于Java SSM框架实现校园快领服务系统项目【项目源码+论文说明】

基于java的SSM框架实现校园快领服务系统演示 摘要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于校园快领服务系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了…

Electron+Vue3+Vite的产品级模板项目

1. electron-vue3-template 基于Vue3 Electron TypeScript的客户端程序模板&#xff0c;使用Vite和Electron Forge构建和打包。 真正做到开箱即用&#xff0c;面向跨平台客户端设计&#xff0c;产品级的项目模板。 项目地址&#xff1a; https://github.com/winsoft666/el…