charts3D地球--添加航线
要在地球视角下画出海运路线图
方案
- 添加 globl 地球
- 创建geo地理坐标系
- 创建canvas对象用于承载地图世界地图this.worldChart
//初始化canvas节点let cav = document.createElement("canvas");this.$echarts.registerMap("world", geoJson);this.worldChart = this.$echarts.init(cav, null, {width: 4096,height: 2048,});this.worldChart.setOption(this.worldChartOption);
- 设置globl 的baseTexture为this.worldChart
- 添加lines3D飞线效果
上组件源码
<template><div><div id="box" @click="showAll"></div></div>
</template>
<script>
import geoJson from "./mapJson.js";
import { nameMap, startPoint, changKu, chuan, gongChang } from "./data.js";
import { points, line } from "./lines.js";
export default {data() {return {worldChart: null,// map贴图配置worldChartOption: {backgroundColor: "rgba(3,28,72,1)",// backgroundColor: "transparent",geo: {type: "map",map: "world",nameMap: nameMap,left: 0,top: 0,right: 0,bottom: 0,boundingCoords: [[-180, 90],[180, -90],],zoom: 0,roam: true,itemStyle: {areaColor: "#174f87", //地图区域的颜色color: "#fff", //图形的颜色borderColor: "#2578cb",opacity: 0.9,},emphasis: {//高亮状态下的多边形和标签样式itemStyle: {areaColor: "#31deff",color: "#174f87",borderColor: "#318ED2",borderWidth: 2,shadowColor: "#15629A",shadowBlur: 1,shadowOffsetX: 3,shadowOffsetY: 5,},},label: {fontSize: 28,},},series: [],},globleChart: null,// 地球配置globleChartOption: {globe: {show: true,globeRadius: 120,globeOuterRadius: 150,// baseTexture: require("./assets/earth.jpg"),// environment: require("@/assets/img/bg.png"),environment: require("./assets/starfield.jpg"),shading: "lambert",zlevel: 10,light: {ambient: {// 设置环境光intensity: 1,},main: {// 设置主光源intensity: 1.6,shadow: false, // 开启阴影},},atmosphere: {show: true,offset: 6,color: "rgba(61,149,248,0.6)",glowPower: 5,innerGlowPower: 8,},viewControl: {distance: 240,autoRotate: true,// 开启球体自旋转// 设置地球的自转速度: 单位为 度/秒,默认值为10,也就是36秒转一圈!autoRotateSpeed: 5,// 在鼠标停止操纵后,球体恢复自转的事件autoRotateAfterStill: 5,},},series: [],},};},mounted() {this.initData();},methods: {// 绘制图表initData() {//初始化canvas节点let cav = document.createElement("canvas");this.$echarts.registerMap("world", geoJson);this.worldChart = this.$echarts.init(cav, null, {width: 4096,height: 2048,});this.worldChart.setOption(this.worldChartOption);this.globleChart = this.$echarts.init(document.getElementById("box"));// // 指定图标的配置项和数据this.globleChartOption.globe.baseTexture = this.worldChart;this.globleChart.setOption(this.globleChartOption, true);// 初始化点和路线this.addLines(line);this.addPoint(points);this.worldChart.on("click", (params) => {console.log(params);});this.globleChart.on("click", (params) => {console.log(params);});},// 添加路线addLines(list) {// 路线// 获取飞线两端点let flyLineList = [];list.forEach((li) => {for (let index = 0; index < li.coords.length - 1; index++) {flyLineList.push({coords: [li.coords[index], li.coords[index + 1]],// 数据值value: "",});}});const luxian = {type: "lines",// type: "lines3D",id: "line",coordinateSystem: "geo",// coordinateSystem: "globe",blendMode: "lighter",polyline: true,zlevel: 10,effect: {show: true,period: 4, //速度trailLength: 0.2, //尾部阴影},lineStyle: {//航线的视图效果color: "#CCA343",width: 4,curveness: 0.5,opacity: 0.4,},// convertDatadata: list,// data: flyLineList,};// 路线上的点let startPoint = []; // 取第一个点作为仓库let endPoint = []; // 取最后一个作为起工厂let chuanPoint = []; // 取中间点作为轮船list.forEach((el) => {el.coords.forEach((em, i) => {if (i === 0) {const haveSamePoint = startPoint.find((item) => item && item.name == el.name.split("-")[0]);if (!haveSamePoint) {startPoint.push({name: el.name.split("-")[0],value: em,symbolSize: 30,symbol: changKu,});}} else if (i === el.coords.length - 1) {const haveSamePointEnd = endPoint.find((item) => item && item.name == el.name.split("-")[1]);if (!haveSamePointEnd) {endPoint.push({name: el.name.split("-")[1],value: em,symbolSize: 30,symbol: gongChang,});}} else {chuanPoint.push({name: "",value: em,symbolSize: 60,symbol: chuan,});}});});const linePoint = {// type: "scatter3D",// type: "effectScatter",type: "scatter",id: "onlinePoint",coordinateSystem: "geo",zlevel: 16,rippleEffect: {brushType: "stroke",},label: {fontSize: 16,show: true,position: "right",formatter: "{b}",},itemStyle: {normal: {color: "#f5f802",},},data: [...startPoint, ...endPoint, ...chuanPoint],};console.log([...startPoint, ...endPoint, ...chuanPoint], 787);// this.updataGlobleSerise("line", luxian);this.updataSerise("line", luxian);this.updataSerise("onlinePoint", linePoint);setTimeout(() => {this.updataChart();}, 10);},// 添加标点addPoint(list) {const areaPion = {type: "effectScatter",// type: "scatter3D",// type: 'scatter',id: "areaPoint",coordinateSystem: "geo", //globezlevel: 11,symbol: startPoint,rippleEffect: {brushType: "stroke",},label: {fontSize: 18,show: true,position: "right",formatter: "{b}",},itemStyle: {normal: {color: "#f5f802",},},data: list,};this.updataSerise("areaPoint", areaPion);// this.updataGlobleSerise("areaPoint", areaPion);setTimeout(() => {this.updataChart();this.changeView();}, 10);},updataGlobleSerise(id, item) {let ind = this.globleChartOption.series.findIndex((el) => el.id === id);if (ind > -1) {this.globleChartOption.series[ind] = item;} else {this.globleChartOption.series.push(item);}},updataSerise(id, item) {let ind = this.worldChartOption.series.findIndex((el) => el.id === id);if (ind > -1) {this.worldChartOption.series[ind] = item;} else {this.worldChartOption.series.push(item);}},// 更新updataChart() {this.worldChart.setOption(this.worldChartOption);this.globleChart.setOption(this.globleChartOption, true);},showAll() {this.$emit("no-act");},// 切换视角依据国家名称changeViewByCountry(country) {const targ = points.find((el) => el.name == country);if (targ) {this.changeView(targ.value);}},// 切换视角changeView(point) {// 定位到北京let coord = point || [116.46, 39.92];this.globleChartOption.globe.viewControl.targetCoord = coord;this.globleChart.setOption(this.globleChartOption);},resize() {this.worldChart.resize();this.globleChart.resize();},},watch: {},created() {},
};
</script><style scoped>
#box {width: 100vw;height: 100vh;
}
.tootipbox {position: fixed;left: 50%;top: 500%;z-index: 9999;background-image: url("../../../../assets/img/screen6/label_bg.png");background-repeat: no-repeat;background-size: 100% 100%;width: 200px;height: 125px;background-position: center center;padding: 10px 20px;font-size: 10px;
}
</style>
相关文章:

charts3D地球--添加航线
要在地球视角下画出海运路线图 方案 添加 globl 地球创建geo地理坐标系创建canvas对象用于承载地图世界地图this.worldChart //初始化canvas节点let cav document.createElement("canvas");this.$echarts.registerMap("world", geoJson);this.worldCha…...

变色龙还是树懒:揭示大型语言模型在知识冲突中的行为
你是知识变色龙还是树懒?我今天在ICLR学到一个很有趣的术语,叫做证据顺序(order of evidence)。 大模型RAG处理知识冲突的探讨: 在检索增强生成(Retrieval-Augmented Generation, RAG)的过程中,技术团队会将检索到的前几名文档作为证据,并提示(prompt)给大型语言模型(Large La…...

Android OpenMAX(四)OMX Core
假设我们已经写好了所有的OMX组件,有vdec、venc、adec、aenc,接下来问题来了,我们应该如何管理这些组件呢(创建、销毁)?这一篇文章我们向上一层学习OMX Core提供的标准API。 OMX Core代码位于 OMX_Core.h OMX Core在OpenMAX IL架构中的位置位于IL Client与实际的OMX组件之…...

【Linux】轻量级应用服务器如何开放端口 -- 详解
一、测试端口是否开放 1、测试程序 TCP demo 程序(可参考:【Linux 网络】网络编程套接字 -- 详解-CSDN博客) 2、测试工具 Windows - cmd 窗口 输入命令:telnet [云服务器的公网ip] [port] 二、腾讯云安全组开放端口 1、安全组设…...

git如何查看密码
git查看用户名、邮箱 git config user.name git config user.email 也可以在系统,用户文件夹下面 gitconfig查看 通常无法查看git密码,运行以下命令 git config credential.helper 查看储存的方式,如果是manage 或manage-store则说明是…...

redis脑裂问题
1. 前言 脑裂就是指在主从集群中,同时有两个主节点,它们都能接收写请求。而脑裂最直接的影响,就是客户端不知道应该往哪个主节点写入数据,结果就是不同的客户端会往不同的主节点上写入数据。而且,严重的话,…...

日本率先研发成功6G设备,刺痛了谁?为何日本能率先突破?
日本率先研发成功6G设备,无线数据速率是5G的百倍,这让日本方面兴奋莫名,毕竟日本在科技方面从1990年代以来太缺少突破的创新了,那么日本为何如今在6G技术上能率先突破呢? 日本在1980年代末期达到顶峰,它的科…...

SpringBoot自动配置源码解析+自定义Spring Boot Starter
SpringBootApplication Spring Boot应用标注 SpringBootApplication 注解的类说明该类是Spring Boot 的主配置类,需要运行该类的main方法进行启动 Spring Boot 应用 SpringBootConfiguration 该注解标注表示标注的类是个配置类 EnableAutoConfiguration 直译&#…...

Kafka 环境配置与使用总结
# 部署教程参考 # 官方教程: https://kafka.apache.org/quickstart # 单机部署kafka参考: https://blog.csdn.net/u013416034/article/details/123875299 # 集群部署kafka参考: # https://blog.csdn.net/zhangzjx/article/details/123679453 # https://www.cnblogs.com/And…...

【算法】滑动窗口——串联所有单词的子串
今天来以“滑动窗口”的思想来详解一道比较困难的题目——串联所有单词的子串,有需要借鉴即可。 目录 1.题目2.下面是示例代码3.总结 1.题目 题目链接:LINK 这道题如果把每个字符串看成一个字母,就是另外一道中等难度的题目,即&…...

等保测评安全物理环境测评讲解
等保测评中的安全物理环境测评主要关注信息系统的物理安全保护措施,确保机房、设备和数据的物理安全。以下是安全物理环境测评的关键点讲解: 1. **物理位置选择**: - 机房应选择在具有防震、防风和防雨能力的建筑内。 - 应避免设在建筑…...

TensorRT-llm入门
一、目录 作用TensorRT-llm 为什么快?流程TensorRT-LLM 环境配置大模型 转换、编译与推理如何选择量化类型?lora 大模型如何合并?lora 大模型如何编译,使用?推理加速模型 tensorrRT-LLM、Vllm、fasterTransformer、Be…...

TinyXML-2介绍
1.简介 TinyXML-2 是一个简单、小巧的 C XML 解析库,它是 TinyXML 的一个改进版本,专注于易用性和性能。TinyXML-2 用于读取、修改和创建 XML 文档。它不依赖于外部库,并且可以很容易地集成到项目中。 tinyXML-2 的主要特点包括:…...

JAVA课程设计
一:Java连接mysql数据库 1.1点击进入mysql jar包下载官网 MySQL :: MySQL Community Downloads 将下载好的压缩包进行解压 解压之后下图就是连接数据库所用到的jar包: 将jar包复制到IDEA所用的项目下,放置jar包的目录为lib,需要…...

基于SpringBoot+Vue的旅游网站系统
初衷 在后台收到很多私信是咨询毕业设计怎么做的?有没有好的毕业设计参考? 能感觉到现在的毕业生和当时的我有着同样的问题,但是当时的我没有被骗, 因为现在很多人是被骗的,还没有出学校还是社会经验少,容易相信别人…...

http代理ip按流量划算还是个数划算?
随着科技的进步和互联网的发展,越来越多的企业在业务上都需要用到代理,那么http代理ip按流量划算还是个数划算?小编接下来就跟大家介绍一下: 首先我们得先了解http代理ip的按流量模式和个数模式分别是什么: 一、按流…...

Banana Pi BPI-F3, 进迭时空K1芯片设计,定位工业级应用,网络通信及工业自动化
香蕉派BPI-F3是一款工业级 8核RISC-V开源硬件开发板,它采用进迭时空(SpacemiT) K1 8核RISC-V芯片设计,CPU集成2.0 TOPs AI计算能力。4G DDR和16G eMMC。2个GbE以太网接口,4个USB 3.0和PCIe M.2接口,支持HDM…...

安科瑞工业IT产品及解决方案—电源不接地,设备外壳接地【监测系统对地绝缘电阻】
低压配电系统分类及接地保护方案 国际电工委员会(iec)对各接地方式供电系统的规定规定:(低压:交流1000V以下) 低压配电接地、接零系统分为IT、TT、TN三种基本形式。TN分为TN-C,TN-S,TN-C-S三种…...

栈:概念与实现
1.概念 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈,出数据也在栈顶。栈的元素遵循后进先出LIFO(Last In First Out)的原则。后面进来的数据先出去 2.栈的实现 三种实现方法,数组…...

【Linux】查找服务器中某个文件的完整路径
方法一: 使用 -wholename 来搜索路径: find / -wholename */esm/data.py这个命令会搜索与 */esm/data.py 完全匹配的路径,其中 * 代表任意数量的任意字符。这应该会找到位于任何目录下的 esm/data.py 文件。 可以限定在某个目录下查找&…...

windows server 2019 安装 docker环境
一、根据官方说明进行安装 , 看起来过程相当简单, 但问题还是有的 准备 Windows 操作系统容器 | Microsoft Learn // 一个 powershell 脚本,该脚本配置环境以启用与容器相关的 OS 功能并安装 Docker 运行时。 Invoke-WebRequest -UseBasicParsing "https://r…...

【Linux】探索 Linux du 命令:管理磁盘空间的利器
给我一个拥抱 给我肩膀靠靠 你真的不需要 对我那么好 思念就像毒药 让人受不了的煎熬 我会迷恋上瘾赖在你怀抱 🎵 陶钰玉《深夜地下铁》 在 Linux 系统管理中,磁盘空间管理是一项基础而重要的任务。du(disk usage&#…...

Service 和 Ingress
文章目录 Service 和 IngressServiceEndpointservice 的定义代理集群外部服务反向代理外部域名Service 常用类型 IngressIngress-nginx安装使用 Service 和 Ingress service 和 ingress 是kubernetes 中用来转发网络请求的两个服务,两个服务用处不同,se…...

C++(类和对象—封装)
C面向对象的三大特性 封装 继承 多态 C认为万事万物皆为对象,对象上有其属性和行为 什么是封装? 封装是C面向对象三大特性之一 封装的意义: 将属性和行为作为一个整体,表现生活中的事物 将属性和行为加以权限控制封装意义一: …...

如何训练一个大模型:LoRA篇
目录 写在前面 一、LoRA算法原理 1.设计思想 2.具体实现 二、peft库 三、完整的训练代码 四、总结 写在前面 现在有很多开源的大模型,他们一般都是通用的,这就意味着这些开源大模型在特定任务上可能力不从心。为了适应我们的下游任务,…...

Spring Cloud学习笔记(Nacos):基础和项目启动
这是本人学习的总结,主要学习资料如下 - 马士兵教育 1、基础和版本选择2、启动项目2.1、源码启动项目2.2、命令行启动 1、基础和版本选择 Nacos是用于服务发现和注册,是Spring Cloud Alibaba的核心模块。 根据文档,Spring Cloud Alibaba的版…...

音频提取特征
目录 音频提取特征 音频切割 依赖项: pip install librosa pip install transformers 音频提取特征 import librosa import numpy as np import torch from transformers import Wav2Vec2Processorprocessor Wav2Vec2Processor.from_pretrained("faceboo…...

AJAX前端与后端交互技术知识点以及案例
Promise promise对象用于表示一个异步操作的最终完成(或失败)及其结果值 好处: 逻辑更清晰了解axios函数内部运作机制成功和失败状态,可以关联对应处理程序能解决回调函数地狱问题 /*** 目标:使用Promise管理异步任…...

[AutoSar]BSW_Diagnostic_003 ReadDataByIdentifier(0x22)介绍
目录 关键词平台说明背景一、请求格式二、常用DID三、响应格式四、NRC五、case 关键词 嵌入式、C语言、autosar、OS、BSW、UDS、diagnostic 平台说明 项目ValueOSautosar OSautosar厂商vector , EB芯片厂商TI 英飞凌编程语言C,C编译器HighTec (GCC)au…...

买卖股票的最佳时机 II(LeetCode 122)
❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…...