vue+cesium示例:3D熱力圖(附源碼下載)

接到一位知識星友的邀請,隨機模擬三維數據點,結合heatmap.js實現基于cesium+vue的3D熱力圖需求,適合學習Cesium與前端框架結合開發3D可視化項目。

demo源碼運行環境以及配置

運行環境:依賴Node安裝環境,demo本地Node版本:推薦v18+。

運行工具:vscode或者其他工具。

配置方式:下載demo源碼,vscode打開,然后順序執行以下命令:
(1)下載demo環境依賴包命令:npm install
(2)啟動demo命令:npm run dev
(3)打包demo命令: npm run build

技術棧

Vue 3.5.13

Vite 6.2.0

Cesium 1.128.0

示例效果
在這里插入圖片描述
核心源碼

<template><div id="cesiumContainer" class="cesium-container"></div>
</template>
<script setup>
import { onMounted, onUnmounted, ref } from 'vue';
import * as Cesium from 'cesium';
Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIxZjhjYjhkYS1jMzA1LTQ1MTEtYWE1Mi0zODc5NDljOGVkMDYiLCJpZCI6MTAzNjEsInNjb3BlcyI6WyJhc2wiLCJhc3IiLCJhc3ciLCJnYyJdLCJpYXQiOjE1NzA2MDY5ODV9.X7tj92tunUvx6PkDpj3LFsMVBs_SBYyKbIL_G9xKESA';
// 聲明Cesium Viewer實例
let viewer = null;
// 組件掛載后初始化Cesium
onMounted(async () => {const files = ["./heatmap/heatmap.js"];loadScripts(files, function () {console.log("All scripts loaded");initMap();});
});
const loadScripts = (files, callback) => {// Make Cesium available globally for the scripts// window.Cesium = Cesium;if (files.length === 0) {callback();return;}const file = files.shift();const script = document.createElement("script");script.onload = function () {loadScripts(files, callback);};script.src = file;document.head.appendChild(script);
};
const initMap = async () => {// 初始化Cesium Viewerviewer = new Cesium.Viewer('cesiumContainer', {// 基礎配置animation: false, // 動畫小部件baseLayerPicker: false, // 底圖選擇器fullscreenButton: false, // 全屏按鈕vrButton: false, // VR按鈕geocoder: false, // 地理編碼搜索框homeButton: false, // 主頁按鈕infoBox: false, // 信息框 - 禁用點擊彈窗sceneModePicker: false, // 場景模式選擇器selectionIndicator: false, // 選擇指示器timeline: false, // 時間軸navigationHelpButton: false, // 導航幫助按鈕navigationInstructionsInitiallyVisible: false, // 導航說明初始可見性scene3DOnly: false, // 僅3D場景terrain: Cesium.Terrain.fromWorldTerrain(), // 使用世界地形});// 隱藏logoviewer.cesiumWidget.creditContainer.style.display = "none";viewer.scene.globe.enableLighting = true;// 禁用大氣層和太陽viewer.scene.skyAtmosphere.show = false;//前提先把場景上的圖層全部移除或者隱藏 // viewer.scene.globe.baseColor = Cesium.Color.BLACK; //修改地圖藍色背景viewer.scene.globe.baseColor = new Cesium.Color(0.0, 0.1, 0.2, 1.0); //修改地圖為暗藍色背景// 設置抗鋸齒viewer.scene.postProcessStages.fxaa.enabled = true;// 清除默認底圖viewer.imageryLayers.remove(viewer.imageryLayers.get(0));// 加載底圖 - 使用更暗的地圖服務const imageryProvider = await Cesium.ArcGisMapServerImageryProvider.fromUrl("https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer");viewer.imageryLayers.addImageryProvider(imageryProvider);// 設置默認視圖位置 - 默認顯示全球視圖// viewer.camera.setView({//   destination: Cesium.Cartesian3.fromDegrees(104.0, 30.0, 10000000.0), // 中國中部上空//   orientation: {//     heading: 0.0,//     pitch: -Cesium.Math.PI_OVER_TWO,//     roll: 0.0//   }// });// 啟用地形深度測試,確保地形正確渲染viewer.scene.globe.depthTestAgainstTerrain = true;// 模擬數值const points = new Array(50).fill("").map(() => {return {lnglat: [116.46 + Math.random() * 0.1 * (Math.random() > 0.5 ? 1 : -1),39.92 + Math.random() * 0.1 * (Math.random() > 0.5 ? 1 : -1),],value: 1000 * Math.random(),};});// 創建熱力圖create3DHeatmap(viewer, {dataPoints: points,radius: 15,baseElevation: 0,primitiveType: "TRIANGLES",colorGradient: {".3": "blue",".5": "green",".7": "yellow",".95": "red",},});viewer.camera.flyTo({destination: Cesium.Cartesian3.fromDegrees(116.46, 39.92, 100000),orientation: {},duration: 3,});
}
// 組件卸載前清理資源
onUnmounted(() => {if (viewer) {viewer.destroy();viewer = null;}
});
/*** 創建三維熱力圖* @param {Cesium.Viewer} viewer 地圖viewer對象* @param {Object} options 基礎參數* @param {Array} options.dataPoints 熱力值數組* @param {Array} options.radius 熱力點半徑* @param {Array} options.baseElevation 最低高度* @param {Array} options.colorGradient 顏色配置*/
function create3DHeatmap(viewer, options = {}) {const heatmapState = {viewer,options,dataPoints: options.dataPoints || [],containerElement: undefined,instanceId: Number(`${new Date().getTime()}${Number(Math.random() * 1000).toFixed(0)}`),canvasWidth: 200,boundingBox: undefined, // 四角坐標boundingRect: {}, // 經緯度范圍xAxis: undefined, // x 軸yAxis: undefined, // y 軸xAxisLength: 0, // x軸長度yAxisLength: 0, // y軸長度baseElevation: options.baseElevation || 0,heatmapPrimitive: undefined,positionHierarchy: [],heatmapInstance: null,};if (!heatmapState.dataPoints || heatmapState.dataPoints.length < 2) {console.log("熱力圖點位不得少于3個!");return;}createHeatmapContainer(heatmapState);const heatmapConfig = {container: document.getElementById(`heatmap-${heatmapState.instanceId}`),radius: options.radius || 20,maxOpacity: 0.7,minOpacity: 0,blur: 0.75,gradient: options.colorGradient || {".1": "blue",".5": "yellow",".7": "red",".99": "white",},};heatmapState.primitiveType = options.primitiveType || "TRIANGLES";heatmapState.heatmapInstance = h337.create(heatmapConfig);initializeHeatmap(heatmapState);return {destroy: () => destroyHeatmap(heatmapState),heatmapState,};
}
……

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86970.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86970.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86970.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

批處理實現:自動抓取perfetto日志 自動導出到當前文件夾 自動打開分析頁面

序言 最近在研究性能問題需要抓取trace文件。于是寫了個腳本 使用 雙擊運行批處理文件&#xff0c;可以開始記錄trace。而且以當前文件夾下面的。config.pbtx 作為配置文件。 &#xff08;pbtx就是一個json文件。配置了需要抓取那些參數&#xff0c;可以通過https://ui.per…

未來機器人的大腦:如何用神經網絡模擬器實現更智能的決策?

編輯&#xff1a;陳萍萍的公主一點人工一點智能 未來機器人的大腦&#xff1a;如何用神經網絡模擬器實現更智能的決策&#xff1f;RWM通過雙自回歸機制有效解決了復合誤差、部分可觀測性和隨機動力學等關鍵挑戰&#xff0c;在不依賴領域特定歸納偏見的條件下實現了卓越的預測準…

??Promise代碼理解

1.事件循環與 Promise 執行順序 案例 1&#xff1a;基礎 Promise 同步異步區分 console.log(1); new Promise(resolve > {console.log(2);resolve();console.log(3); }).then(() > console.log(4)); console.log(5); 輸出順序&#xff1a;1&#xff0c;2&#xff0c;3…

57、原生組件注入-【源碼分析】DispatcherServlet注入原理

57、原生組件注入DispatcherServlet注入原理 #### 繼承關系 - DispatcherServlet繼承自FrameworkServlet&#xff0c;而FrameworkServlet繼承自HttpServletBean&#xff0c;最終HttpServletBean繼承自HttpServlet。 - DispatcherServlet實現了ApplicationContextAware接口。 …

【動手學深度學習】3.5. 圖像分類數據集

目錄 3.5. 圖像分類數據集1&#xff09;讀取數據集2&#xff09;讀取小批量3&#xff09;整合所有組件4&#xff09;小結 . 3.5. 圖像分類數據集 我們將使用Fashion-MNIST數據集&#xff0c;作為圖像分類數據集。 %matplotlib inline import torch import torchvision from …

Python的格式化輸入輸出

# Python 的格式化輸出和格式化輸入## 格式化輸出Python 提供了多種字符串格式化的方法&#xff1a;### 1. % 格式化&#xff08;舊式格式化&#xff09;python name "Alice" age 25 print("Name: %s, Age: %d" % (name, age)) # 輸出: Name: Alice, Age…

day65—回溯—單詞搜索(LeetCode-79)

題目描述 給定一個 m x n 二維字符網格 board 和一個字符串單詞 word 。如果 word 存在于網格中&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 單詞必須按照字母順序&#xff0c;通過相鄰的單元格內的字母構成&#xff0c;其中“相鄰”單元格是那些水平相…

iOS安全和逆向系列教程 第19篇:ARM64匯編語言基礎與逆向分析

引言 在成功掌握iOS應用脫殼技術后,我們獲得了可以進行靜態分析的二進制文件。然而,要真正理解iOS應用的底層邏輯,我們必須深入到匯編語言層面。ARM64(也稱為AArch64)是蘋果在iPhone 5s及以后設備中使用的指令集架構。本篇文章將深入探討ARM64匯編語言的基礎知識,并結合…

使用Gitlab CI/CD結合docker容器實現自動化部署

Gitlab CI/CD基本介紹 核心概念 持續集成&#xff08;CI&#xff09;&#xff1a;每次代碼提交后自動觸發構建、測試和代碼檢查&#xff0c;確保代碼質量 持續交付/部署&#xff08;CD&#xff09;&#xff1a;在 CI 基礎上自動將代碼部署到測試或生產環境&#xff0c;支持人工…

初學者運行Pycharm程序可能會出現的問題,及解決辦法

文章目錄 前言一、ModuleNotFoundError: No module named sklearn二、ImportError: cannot import name show_config from numpy (unknown location)三、Pycharm報錯&#xff1a;“Original error was: DLL load failed: 找不到指定的模塊“ 的解決辦法四、ImportError: cannot…

Android開發中的Java與Kotlin:全面對比與深度解析

Android開發中的Java與Kotlin&#xff1a;全面對比與深度解析 在Android開發領域&#xff0c;Java和Kotlin是兩種主流編程語言。自Google在2017年宣布Kotlin為Android官方支持語言以來&#xff0c;Kotlin憑借其現代語法特性和與Java的無縫兼容性&#xff0c;逐漸成為開發者的新…

為應對激烈競爭環境,IBMS系統如何提升企業管理效率

IBMS智能管理系統&#xff1a;賦能企業高效運營&#xff0c;決勝競爭新時代 在瞬息萬變的商業環境中&#xff0c;效率就是競爭力&#xff01;企業如何快速響應市場變化、優化內部流程、降低成本并實現精準決策&#xff1f;IBMS智能管理系統以創新科技為引擎&#xff0c;為企業…

2.3 ASPICE的架構與設計

在ASPICE中&#xff0c;架構與設計是汽車軟件開發過程中非常重要的一環&#xff0c;它涉及到定義和設計軟件系統的整體結構、組件以及其相互關系。良好的架構與設計可以幫助團隊更好地理解和管理軟件系統&#xff0c;提高系統的可維護性、可擴展性和性能。以下是ASPICE中架構與…

生益PCB耐高溫PCB板材怎么樣?

在5G基站晝夜不停地吞吐數據時&#xff0c;在新能源汽車電池管理系統經受極寒酷暑考驗時&#xff0c;在航空航天器穿越大氣層承受2000℃熱浪沖擊時&#xff0c;一塊優質PCB板材的“抗熱基因”正在決定著整個系統的生死存亡。生益科技研發的耐高溫PCB板材&#xff0c;正是在這場…

Java Spring ApplicationEvent 概述

一、Spring 事件機制核心概念 1. 事件驅動架構模型 發布-訂閱模式&#xff1a;解耦事件生產者和消費者觀察者模式&#xff1a;監聽器監聽特定事件事件驅動優勢&#xff1a; 組件間松耦合系統擴展性好支持異步處理事件溯源支持 2. 核心組件 組件作用實現方式ApplicationEve…

Spring核心框架完全指南 - 基礎知識全解析

?? 目錄 ?? Spring框架簡介 ??? IoC容器詳解 ?? 依賴注入(DI)深入理解 ?? Bean配置與管理 ?? Bean的作用域 ?? Bean生命周期 ?? 面向切面編程(AOP) ?? Spring注解詳解 ?? 資源管理 ?? 事件機制 ?? SpEL表達式語言 ?? 實戰案例 ?? 總…

Parasoft C++Test軟件集成測試(部件測試)_操作指南

系列文章目錄 Parasoft C++Test軟件靜態分析:操作指南(編碼規范、質量度量)、常見問題及處理 Parasoft C++Test軟件單元測試:操作指南、實例講解、常見問題及處理 Parasoft C++Test軟件集成測試:操作指南、實例講解、常見問題及處理 進階擴展:自動生成靜態分析文檔、自動…

聊一聊 Linux 上對函數進行 hook 的兩種方式

一&#xff1a;背景 1. 講故事 前兩篇我們介紹了 Minhook 在 Windows 平臺上的強大功效&#xff0c;這一篇我們來聊一聊如何在 Linux 上對函數進行hook&#xff0c;這里介紹兩種方式。 輕量級的 LD_PRELOAD 攔截 LD_PRELOAD是一種共享庫攔截&#xff0c;這種方式的優點在于…

【免費分享】GWO-BP-AdaBoost預測!灰狼優化、人工神經網絡與AdaBoost集成學習算法預測研究

一、模型組成原理 1. 灰狼優化算法&#xff08;GWO&#xff09; 核心思想&#xff1a;模擬灰狼群體的社會等級和狩獵行為&#xff08;包圍、跟蹤、攻擊獵物&#xff09;&#xff0c;通過α、β、δ三級領導層引導種群搜索最優解。算法流程包括&#xff1a; 社會分層&#xff…

matlab實現非線性Granger因果檢驗

matlab程序包。用于格蘭杰因果分析&#xff0c;分析數據時&#xff0c;直接帶入數據即可。 hjt2/README , 1804 hjt2/c-code/Makefile , 57 hjt2/c-code/hjt2_tval.c , 10862 hjt2/matlab/spx_rp.dat , 175202 hjt2/matlab/spx_ur.dat , 174522 hjt2/matlab/spx_uv.dat , 1745…