文章目录

0 前言1 课题背景2 实现效果3 设计原理4 部分代码5 最后

0 前言

 优质竞赛项目系列,今天要分享的是

 大数据全国疫情数据分析与3D可视化

该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!

磊学长这里给一个题目综合评分(每项满分5分)

难度系数:2分工作量:3分创新点:4分

刺 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

1 课题背景

基于大数据的新型冠状病毒疫情三维可视化,借助3D工具实现新冠病毒的可视化分析。

2 实现效果

全球柱状图

全国和分省的面着色

全国城市热力图

3 设计原理

如何用EarthSDK构建一个简单的三维App

构建步骤 1下载EarthSDK 地址:https://earthsdk.com/v/v1.1.0.zip

2.在本地创建一个文件夹,将EarthSDK放入文件夹内,并新建一个index.html文件。 3.index.html文件写入以下代码:

DOCTYPE html>

meta>

创建地球title></p><p><script src="./v1.1.0/XbsjEarth/XbsjEarth.js">script></p><p><style></p><p>html,</p><p>body {</p><p>width: 100%;</p><p>height: 100%;</p><p>margin: 0px;</p><p>padding: 0px;</p><p>}</p><p>style></p><p>head></p><p><body></p><p><div id="earthContainer" style="width: 100%; height: 100%; background: grey"></p><p>div></p><p><script></p><p>var earth;</p><p>function startup() {</p><p>earth = new XE.Earth('earthContainer');</p><p>earth.sceneTree.root = {</p><p>"children": [</p><p>{</p><p>"czmObject": {</p><p>"name": "默认离线影像",</p><p>"xbsjType": "Imagery",</p><p>"xbsjImageryProvider": {</p><p>"createTileMapServiceImageryProvider": {</p><p>"url": XE.HTML.cesiumDir + 'Assets/Textures/NaturalEarthII',</p><p>"fileExtension": 'jpg',</p><p>},</p><p>"type": "createTileMapServiceImageryProvider"</p><p>}</p><p>}</p><p>},</p><p>]</p><p>};</p><p>}</p><p>// 1 XE.ready()会加载Cesium.js等其他资源,注意ready()返回一个Promise对象。</p><p>XE.ready().then(startup);</p><p>script></p><p>body></p><p>html></p><p>4.在myApp目录下执行命令hs -p 81,从而建议一个本地的http服务。</p><p>5.打开chrome浏览器,输入http://127.0.0.1:81,即可访问刚才创建的三维App。</p><p>index.html文件代码讲解</p><p>1.head节点下需要引入XbsjEarth.js文件。</p><p>​</p><p><script src="./v1.1.0/XbsjEarth/XbsjEarth.js">script></p><p>XbsjEarth.js内部会自动调用Cesium相关的js和css文件,因此不需要再引入其他Cesium相关的js和css文件。</p><p>2.body节点下需要增加一个div</p><p>​</p><p><div id="earthContainer" style="width: 100%; height: 100%; background: grey"></p><p>这个div用来承载三维App。</p><p>3.创建App</p><p>​</p><p>earth = new XE.Earth('earthContainer');</p><p>XE.Earth是EarthSDK提供的用来创建三维App的基础类,其参数’earthContainer’实际上是上一个步骤创建的div的id。这样就相当于基于这个div创建了一个三维App。 4 三维场景的基本配置</p><p>​</p><p>earth.sceneTree.root = {</p><p>"children": [</p><p>{</p><p>"czmObject": {</p><p>"name": "默认离线影像",</p><p>"xbsjType": "Imagery",</p><p>"xbsjImageryProvider": {</p><p>"createTileMapServiceImageryProvider": {</p><p>"url": XE.HTML.cesiumDir + 'Assets/Textures/NaturalEarthII',</p><p>"fileExtension": 'jpg',</p><p>},</p><p>"type": "createTileMapServiceImageryProvider"</p><p>}</p><p>}</p><p>},</p><p>]</p><p>};</p><p>通过配置earth.sceneTree.root,来给地球表面贴上一层离线影像。</p><p>earth.sceneTree代表整个三维App的场景树,这里可以通过简单的JSON配置来达成。这里面只增加了一个CzmObject类型的对象,它的类型xbsjType是Imagery,即影像。</p><p>前两不创建App和三维场景配置的代码是写在startup这个函数里面的。我们可以通过: XE.ready().then(startup); 来调用startup执行相应地创建操作。 那么为何需要通过XE.ready()来操作呢。因为XE.ready()函数会自动加载Cesium.js和相关的css文件,当加载完成以后才能进行Cesium的相关操作。</p><p>XE.ready()的返回值是一个Promise,我们可以通过then回调,等到Promise执行完成以后再执行startup操作。</p><p>4 部分代码</p><p>​</p><p>// The Vue build version to load with the `import` command</p><p>// (runtime-only or standalone) has been set in webpack.base.conf with an alias.</p><p>import Vue from 'vue'</p><p>import App from './App'</p><p>import router from './router'</p><p>//import ViewUI from 'view-design';</p><p>//import 'view-design/dist/styles/iview.css';</p><p>Vue.config.productionTip = false;</p><p>/* eslint-disable no-new */</p><p>// XE.ready()用来加载Cesium.js等相关资源</p><p>XE.ready().then(() => {</p><p>// 加载标绘插件</p><p>return XE.HTML.loadJS('../static/XbsjEarth-Plugins/plottingSymbol/plottingSymbol.js');</p><p>}).then(() => {</p><p>// 加载标绘插件</p><p>return XE.HTML.loadJS('../static/XbsjEarth-Plugins/customPrimitive/customPrimitive.js');</p><p>}).then(() => {</p><p>// vtxf g_app赋值,方便调试</p><p>window.g_app = new Vue({</p><p>el: '#app',</p><p>router,</p><p>data() {</p><p>return {</p><p>currentArea: 'china',</p><p>mousemoveArea: '',</p><p>//修改 currentDay 为 currentTime 表示整形,DataServer的所有数据查询接口 具有 ut 参数,表示查询的截至时间, 为0 表示取最新值</p><p>currentTime: new Date().getTime(),</p><p>intervalID: undefined</p><p>}</p><p>},</p><p>components: {</p><p>App</p><p>},</p><p>template: '',</p><p>mounted() {</p><p>this.startGlobeUpdate();</p><p>},</p><p>methods: {</p><p>startGlobeUpdate() {</p><p>this.currentTime = new Date().getTime();</p><p>if (!this.intervalID) {</p><p>var self = this;</p><p>this.intervalID = setInterval(() => {</p><p>self.currentTime = new Date().getTime();</p><p>console.log('globe update', self.currentTime);</p><p>}, 60000);</p><p>}</p><p>},</p><p>stopGlobeUpdate() {</p><p>if (this.intervalID) {</p><p>clearInterval(this.intervalID);</p><p>this.intervalID = undefined;</p><p>}</p><p>}</p><p>}</p><p>})</p><p>});</p><p><!DOCTYPE html></p><p><html lang="zh-CN"></p><p><head></p><p><meta charset="UTF-8"></p><p><meta name="viewport" content="width=device-width, initial-scale=1.0"></p><p><meta http-equiv="X-UA-Compatible" content="ie=edge"></p><p><meta name="xbsj-labels" content="Earth起步"></meta></p><p><title>创建地球

5 最后

刺 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: