[公益项目]用unity引擎呈现疫情大数据

疫情地球大数据

下载地址

点击下载 版本: v1.2.0

注: 项目作为学习用途,源代码仍可通过GitHub查看,亦可自行编译运行

正文

这次的疫情对人类来说是一次灾难,渺小的我不知该如何是好。我希望能够通过写程序来为社会贡献一份自己微薄的力量。经过几天的思考,我决定使用Unity3D疫情和C#做一个疫情地球大数据。爆肝3天,初版已经完成。(半)成品如图所示(由于时间仓促,UI我没有加上,感兴趣的基友可以前往我的github克隆并添加,文章末尾会放出开源地址)

这个疫情可视化的地球可以直观地看出各个地区的疫情分布情况,中国精确到省份,外国精确到全国(以首都为国家位置)。使用Unity 粒子系统来进行数据的渲染,白色最轻,接着是黄色,严重是红色。粒子的密度和颜色的深浅可以反映出一个地区的严重程度。地球是可以用鼠标拖动的,滚轮可缩放。

接下来说说项目的开发流程。其实在开发的过程中,遇到很多大大小小的坑,也不是那么容易。
首先是地球场景的构建。我直接采用一个球体,调整到合适的大小,并贴上世界地图的贴图。(贴图的资源来源于互联网,不用于任何商业用途,侵删!)。
接着就是最关键的环节: 数据的获取与数据的渲染。
数据接口是来自腾讯新闻的疫情大数据,可以获取到全球的所有疫情数据。疫情的数据已经拿到, 但是拿到的数据只有地区和确诊人数,要如何将它们渲染到球体上呢?

这个问题困扰了我一段时间。因为我的球体采用简单的建模方式,并没有数据在上面,手动一个地区一个地区放置是绝对不可能完成的。所以后面我采用了一种方法:先获取各个地区的经纬度信息,再将经纬度转换成球体坐标,将数据以粒子的形式进行渲染。

经纬度的数据来源于Google地图云服务,由于Google有日请求量限制,所以我做了缓存,仅在有改动时才会进行请求。
在拿到经纬度数据后,我尝试将它转换为unity中对应的球体坐标。这个环节我卡了好久,因为我进行了好多计算,都没办法精确地将数据渲染到具体位置。经过我的不懈努力,和查阅了大量关于球体坐标的资料后,我终于成功了哈哈哈(我太难了~)

数据可以精确地渲染到全球的各个地区,并且如果有新的确诊案例,地图上会自动渲染数据。
本项目已开源,希望能尽自己的一分微薄之力,与大家一同共渡难关。

开源仓库地址: https://github.com/yeliheng/NcovEarth

真希望这场疫情快点过去。感谢医学工作者在前线默默地奉献着自己的生命,向你们致敬!辛苦了!!!
武汉加油!中国加油!世界加油!大家齐心协力,定能共渡难关!待到春暖花开时,我们再一起共赏祖国的大好河山!!!