当前位置: 首页 > news >正文

vue3 cesium datav 可视化大屏

目录

0. 预览效果

 1. 代码库包

2. 技术点

3. 一些注意事项(配置参数)

4. 相关代码详情 


0. 预览效果

        包含的功能:

        ① 地球按照一定速度自转

        ② 修改加载的geojson面样式

        ③ 添加 文字 标注!

 1. 代码库包

        

         直接采用vue-cli5 创建项目,选择vue3,router,vuex等,然后这里选择的datav不是官方的,由于官方的datav-vue3有些问题,暂时采用的为DataV Vue3+TS+Vite版 | DataV - Vue3

2. 技术点

        ① css 父相子绝,父元素position: relative; 子元素position: absolute; datav中的BorderBox11,cesium中viewer的挂接的元素下面就有这种。

        ②这里布局写的有点随意,可以参考其他的可视化大屏的布局,多采用几行几列的形式如:"flex:0 1 50%";此外,这里数据都是写死的,后面可以通过配置数据库实现。

        ③css height top width left 等等 尽量按照 n%的形式。

3. 一些注意事项(配置参数)

       项目采用的JavaScript,而非typescript!!!

        ①参考博主的另一篇关于vue3 cesium安装配置webpack的博客

        ② vue.config.js配置如下

const { defineConfig } = require('@vue/cli-service')
// el 按需自动引入
const AutoImport = require('unplugin-auto-import/webpack')
const Components = require('unplugin-vue-components/webpack')
const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')
// cesium 配置
const CopyWebpackPlugin = require('copy-webpack-plugin')
const webpack = require('webpack')
const path = require('path')let cesiumSource = './node_modules/cesium/Source/' //按理说应该是未打包的
const cesiumWorkers = '../Build/Cesium/Workers';module.exports = defineConfig({transpileDependencies: true,publicPath: './',outputDir: "dist", // 输出文件目录lintOnSave: false, // eslint 是否在保存时检查 关闭语法检查// assetsDir: 'static', // 配置js、css静态资源二级目录的位置configureWebpack: {output: {sourcePrefix: ' '},amd: {toUrlUndefined: true},resolve: {alias: {'@': path.resolve('src'),'cesium': path.resolve(__dirname, cesiumSource)},// 参考别人说的,我不太懂webpack,所以都不知道咋解决https zlib问题  cesium github有example介绍了如何解决fallback: { "https": false, "zlib": false, "http": false, "url": false },},plugins: [// 对于webpack版本此处有不同配置,webpack低版本5.x执行下面4行注释的代码,对于webpack高版本9.x及以上,patterns是可以的。new CopyWebpackPlugin({patterns: [{ from: path.join(cesiumSource, cesiumWorkers), to: 'Workers' },{ from: path.join(cesiumSource, 'Assets'), to: 'Assets' },{ from: path.join(cesiumSource, 'Widgets'), to: 'Widgets' },{ from: path.join(cesiumSource, 'ThirdParty'), to: 'ThirdParty' },],}),// new CopyWebpackPlugin([ { from: path.join(cesiumSource, 'Workers'), to: 'Workers'}]),// new CopyWebpackPlugin([ { from: path.join(cesiumSource, 'Assets'), to: 'Assets'}]),// new CopyWebpackPlugin([ { from: path.join(cesiumSource, 'Widgets'), to: 'Widgets'}]),// new CopyWebpackPlugin([ { from: path.join(cesiumSource, 'ThirdParty'), to: 'ThirdParty'}]),new webpack.DefinePlugin({CESIUM_BASE_URL: JSON.stringify('./')// CopyWebpackPlugin from的绝对路径}),// el 自动引入AutoImport({resolvers: [ElementPlusResolver()],}),Components({resolvers: [ElementPlusResolver()],}),],module: {unknownContextCritical: /^.\/.*$/,unknownContextCritical: false}}
})

4. 相关代码详情 

         

        ①index.html 修改

        

        ②App.vue

         

         ③HomeView.vue

<template><BorderBox11 id="container" title="Vue3 Cesium DataV可视化大屏" :title-width="400" :animate="false"><div id="CesiumContainer"></div><router-link to="project01"><BorderBox13 id="box01" title="第一板块" :title-width="200"><div id="title">第一板块</div> <img src="../../public/img01.jpg" alt=""></BorderBox13></router-link><BorderBox13 id="box02" title="第二板块" :title-width="200"><div id="title">第二板块</div> <img src="../../public/img02.jpg" alt=""></BorderBox13><BorderBox13 id="box03" title="第三板块" :title-width="200"><div id="title">第三板块</div> <img src="../../public/img03.jpg" alt=""></BorderBox13><BorderBox13 id="box04" title="第四板块" :title-width="200"><div id="title">第四板块</div> <img src="../../public/img04.jpg" alt=""></BorderBox13><router-link to="project05"><BorderBox13 id="box05" title="第五板块" :title-width="200"><div id="title">第五板块</div> <img src="../../public/img05.jpg" alt=""></BorderBox13></router-link><BorderBox13 id="box06" title="第六板块" :title-width="200"><div id="title">第六板块</div> <img src="../../public/img06.jpg" alt=""></BorderBox13><BorderBox13 id="box07" title="第七板块" :title-width="200"><div id="title">第七板块</div> <img src="../../public/img07.jpg" alt=""></BorderBox13><BorderBox13 id="box08" title="第八板块" :title-width="200"><div id="title">第八板块</div> <img src="../../public/img08.jpg" alt=""></BorderBox13></BorderBox11>
</template><script>import {  BorderBox11, BorderBox13  } from '@kjgl77/datav-vue3';import {reactive, ref, onMounted} from "vue";import * as Cesium from "cesium/Cesium.js";import "cesium/Widgets/widgets.css";export default {name: "App",components: {BorderBox11,BorderBox13,},setup(){var legend = reactive({});// 地球旋转function rotate(time, viewer) {viewer.clock.multiplier = 300; //速度viewer.clock.shouldAnimate = true;var previousTime = viewer.clock.currentTime.secondsOfDay;const onTickCallback = () => {var spinRate = 1;var currentTime = viewer.clock.currentTime.secondsOfDay;var delta = (currentTime - previousTime) / 1000;previousTime = currentTime;viewer.scene.camera.rotate(Cesium.Cartesian3.UNIT_Z, -spinRate * delta);}// 开启地图自转效果viewer.clock.onTick.addEventListener(onTickCallback);};const firstCesium = ()=>{let viewer = new Cesium.Viewer("CesiumContainer", {sceneModePicker: false,navigationHelpButton: false,baseLayerPicker: false,animation: false,timeline: false,geocoder: false,homeButton: false,// infoBox: false,});// 设置自动旋转rotate(4000, viewer);// 设置背景颜色// viewer.scene.skyBox.show = false;// viewer.scene.backgroundColor = Cesium.Color.DARKBLUE;// viewer.scene.sun.show = false;// viewer.scene.moon.show = false;// 去掉logoviewer.cesiumWidget.creditContainer.style.display = "none"; // 去掉背景图层// viewer.imageryLayers.removeAll();// 鼠标右键 倾斜操作viewer.scene.screenSpaceCameraController.tiltEventTypes = [Cesium.CameraEventType.RIGHT_DRAG];// 鼠标滑轮 放缩操作viewer.scene.screenSpaceCameraController.zoomEventTypes = [Cesium.CameraEventType.WHEEL,// Cesium.CameraEventType.PINCH];// 鼠标左键 3D下聚焦局部时给人感觉是平移-本质是地球旋转(范围小-旋转类似平移)viewer.scene.screenSpaceCameraController.rotateEventTypes = [Cesium.CameraEventType.LEFT_DRAG];let geojsonLayer = Cesium.GeoJsonDataSource.load("http://192.168.1.127:80/HeBei_DiZhi/ZG.json",	// 这里是json文件的地址).then((dataSource)=>{const entities = dataSource.entities.values;const colorHash = {};for (let i = 0; i < entities.length; i++) {//For each entity, create a random color based on the state name.//Some states have multiple entities, so we store the color in a//hash so that we use the same color for the entire state.const entity = entities[i];// console.log(i, entity);const name = entity.name;let color = colorHash[name];if (!color) {color = Cesium.Color.fromRandom({alpha: 1.0,});legend[name] = color.toCssHexString();colorHash[name] = color;}//Set the polygon material to our random color.entity.polygon.material = color;//Remove the outlines.entity.polygon.outline = false;// entity.polygon.extrudedHeight =// entity.properties.Population / 50.0;}viewer.dataSources.add(dataSource);viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(115, 38, 1000000, Cesium.Ellipsoid.WGS84),label: {text: "中华人民共和国",showBackground: true,fillColor: Cesium.Color.WHITE,font: '24px sans-serif',// pixelOffset: new Cesium.Cartesian2(20, -15),// scaleByDistance: new Cesium.NearFarScalar(1.5e2, 2.0, 8e5, 0),backgroundColor: Cesium.Color.TRANSPARENT,}});})};onMounted(() => {firstCesium()});return {legend,}}}
</script><style lang="scss" scoped>#container {position: relative;height: 100%;width: 100%;background-color: darkblue;}#CesiumContainer {position: absolute;top: 15%;left: 20%;height: 70%;width: 60%;}#box01 {position: absolute;top: 8%;left: 2.5%;height: 20%;width: 15%;}#title {position: absolute;top: 2%;left: 3.5%;font-size: 0.4vh;color: white;}#box02 {position: absolute;top: 30%;left: 2.5%;height: 20%;width: 15%;}#box03 {position: absolute;top: 8%;right: 2.5%;height: 20%;width: 15%;}#box04 {position: absolute;top: 30%;right: 2.5%;height: 20%;width: 15%;}#box05 {position: absolute;top: 52%;left: 2.5%;height: 20%;width: 15%;}#box06 {position: absolute;top: 52%;right: 2.5%;height: 20%;width: 15%;}#box07 {position: absolute;top: 74%;left: 2.5%;height: 20%;width: 15%;}#box08 {position: absolute;top: 74%;right: 2.5%;height: 20%;width: 15%;}img {position: absolute;top: 20%;left: 15%;height: 70%;width: 70%;}#legend {position: absolute;bottom: 100px;right: 20px;}</style>

        ④ router index.js

        

相关文章:

vue3 cesium datav 可视化大屏

目录 0. 预览效果 1. 代码库包 2. 技术点 3. 一些注意事项&#xff08;配置参数&#xff09; 4. 相关代码详情 0. 预览效果 包含的功能&#xff1a; ① 地球按照一定速度自转 ② 修改加载的geojson面样式 ③ 添加 文字 标注&#xff01; 1. 代码库包 直接采用vue-cli5 创建…...

python内置函数,推导式

abs&#xff1a;取绝对值 data abs&#xff08;-10&#xff09; pow&#xff1a;次方 data pow&#xff08;2&#xff0c;5&#xff09; sum&#xff1a;求和 num_list p[1,2,10,20] res sum(num_list) divmod取商和余数&#xff1a; v1&#xff0c;v2 divmod&…...

【Flink】DataStream API使用之Flink支持的数据类型

Flink的使用过程中&#xff0c;我们的数据都是定义好的 UserBehavior 类型&#xff0c;那还有没有其他更灵活的类型可以用呢&#xff1f;Flink 支持的数据类型到底有哪些&#xff1f; 1. Flink 的类型系统 Flink 作为一个分布式处理框架&#xff0c;处理的是以数据对象作为元…...

QT实现固高运动控制卡示波器

目录 一、固高示波器 二、基于QCustomPlot实现示波器 三、完整源码 一、固高示波器 固高运动控制卡自带的软件有一个示波器功能&#xff0c;可以实时显示速度的波形&#xff0c;可辅助分析电机的运行状态。但是我们基于sdk开发了自己的软件&#xff0c;无法再使用该功能&…...

洛谷P1157详解(两种解法,一看就会)

一、问题引出 组合的输出 题目描述 排列与组合是常用的数学方法&#xff0c;其中组合就是从 n n n 个元素中抽出 r r r 个元素&#xff08;不分顺序且 r ≤ n r \le n r≤n&#xff09;&#xff0c;我们可以简单地将 n n n 个元素理解为自然数 1 , 2 , … , n 1,2,\dot…...

JavaScript异步编程和回调

目录 1、编程语言中的异步 2、JavaScript 3、回调 &#xff13;.&#xff11;在回调中处理错误 &#xff13;.&#xff12;回调的问题 &#xff13;.&#xff12;回调的替代方案 1、编程语言中的异步 默认情况下&#xff0c;JavaScript是同步的&#xff0c;并且是单线程…...

Qt开发笔记(Qt5.9.9下载安装环境搭建win10)

#1 Qt下载网站&#xff08;国内、国外镜像&#xff09; #2 Qt5.9.9安装选项 #3 配置系统环境变量 #4 创建测试项目 #1 Qt下载网站&#xff08;国内、国外镜像&#xff09; 官方下载地址&#xff08;慢&#xff09;&#xff1a;http://download.qt.io/ 国内镜像网站 这里给大家…...

使用Plist编辑器——简单入门指南

本指南将介绍如何使用Plist编辑器。您将学习如何打开、编辑和保存plist文件&#xff0c;并了解plist文件的基本结构和用途。跟随这个简单的入门指南&#xff0c;您将掌握如何使用Plist编辑器轻松管理您的plist文件。 plist文件是一种常见的配置文件格式&#xff0c;用于存储应…...

Python常用的开发工具合集

​ Python是一种功能强大且易于学习的编程语言&#xff0c;被广泛应用于数据科学、机器学习、Web开发等领域。随着Python在各个领域的应用越来越广泛&#xff0c;越来越多的Python开发工具也涌现出来。但是&#xff0c;对于新手来说&#xff0c;选择一款合适的Python开发工具可…...

机器学习之线性回归

往期目录 python在线性规划中的应用 文章目录 一、线性回归算法概述1.1 什么是线性回归&#xff1f;1.2 线性回归算法原理1.3 线性回归的应用场景 二、线性回归算法Python实现2.1 导入必要的库2.2 随机生成数据集2.3 拟合模型2.4 预测结果2.5 结果可视化 三、完整代码 线性回归…...

中国系统正式发声!所有用户永久免费,网友:再见了,CentOS!

点关注公众号&#xff0c;回复“1024”获取2TB学习资源&#xff01; 如果说&#xff1a;没有操作系统会怎么样&#xff1f; 对于个PC来说&#xff0c;无论是台式机、笔记本、平板等等&#xff0c;一切都变的一无是处&#xff0c;这些硬件对我们来说&#xff0c;和一堆废铁没什么…...

Oracle数据库坏块类故障

正常的数据块有其特有的固定格式&#xff0c;如果某数据块内部出现了混乱而导致Oracle无法读取&#xff0c;则可称其为坏块。数据库坏块的影响范围可大可小&#xff0c;严重时会导致数据库无法打开。当数据库出现坏块时&#xff0c;一般出现ORA-01578错误、ORA-10632错误或者OR…...

andorid之摄像头驱动流程--MTK平台

camera成像原理&#xff1a; 景物通过镜头生产光学图像投射到sensor表面上&#xff0c;然后转为模拟电信号&#xff0c;经过数模变成数字图像信号&#xff0c;在经过DSP加工出来&#xff0c;然后在通过IO接口传输到CPU处理。 由于摄像头满足总线、驱动、设备模型&#xff0c;…...

Android9.0 iptables用INetd实现屏蔽ip黑名单的实现

1.前言 在9.0的系统rom定制化开发中,在system中netd网络这块的产品需要中,会要求设置屏蔽ip地址之内的功能,liunx中iptables命令也是比较重要的,接下来就来在INetd这块实现屏蔽ip黑名单的的相关功能,就是在app中只能屏蔽某个网址,就是除了这个网址,其他的都能上网,最后…...

介绍一下json

目录 介绍一下json Elasticsearch7.6学习指南 介绍一下json JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;它以易于阅读和编写的文本形式表示结构化数据。JSON最初是由Douglas Crockford在2001年提出的&#xff0c;它在we…...

DI依赖注入环境

1.构造器注入 上一章节已经说过了&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoca…...

《程序员面试金典(第6版)》面试题 16.18. 模式匹配(暴力破解 + 剪枝)

题目描述 你有两个字符串&#xff0c;即pattern和value。 pattern字符串由字母"a"和"b"组成&#xff0c;用于描述字符串中的模式。 例如&#xff0c;字符串"catcatgocatgo"匹配模式"aabab"&#xff08;其中"cat"是"a&q…...

一天吃透SpringCloud面试八股文

1、什么是Spring Cloud &#xff1f; Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序&#xff0c;提供与外部系统的集成。Spring cloud Task&#xff0c;一个生命周期短暂的微服务框架&#xff0c;用于快速构建执行有限数据处理的应用程序。 Sprin…...

java生成图片缩略图

目录 前言一、使用Base64编码方式1、基本方法2、压缩本地图片保存到本地3、压缩网络图片到图片服务器 二、使用thumbnailator工具方式1、导入依赖2、压缩本地图片保存到本地 前言 下面介绍了两种获取图片缩略图的方式&#xff0c;全都不是一次性压缩&#xff0c;如果没有达到设…...

《统计学习方法》——隐马尔可夫模型(下)

学习算法 HMM的学习&#xff0c;在有观测序列的情况下&#xff0c;根据训练数据是否包含状态序列&#xff0c;可以分别由监督学习算法和无监督学习算法实现。 监督学习算法 监督学习算法就比较简单&#xff0c;基于已有的数据利用极大似然估计法来估计隐马尔可夫模型的参数。…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...