基於 HTML5 Canvas 的機房溫度雲圖展示


前言

在物聯網的大趨勢下,機房的設備信息以及一些環境信息變成了數據擺在了人們面前。在這個大數據的時代,數據的可視化不僅體現在數據值本身,更應該通過數據的變化來獲取一些信息。我們今天的主題,機房溫度雲圖,它通過不同的顏色來展示機房機櫃溫度的高低及變化,將之形象化出來,讓人們更加直觀的觀察溫度值的變化。

下圖是我借助 heatmap.js 熱力圖和 HTML5 Canvas 實現的機房溫度雲圖,這里只是模擬的一個溫度值,相信有了更加真實的數據,它會變得更加炫麗。

http://www.hightopo.com/demo/rackHeatmap/index.html ← 戳我看 Demo

實現過程

現在讓我們來一層一層揭開它的實現過程。

可以看到溫度雲圖有個動態的改變,這里只是加了一個定時器來隨機的改變溫度值。

var values = [50, 60, 70, 80, 90, 100];
var timer1 = setInterval(function() {
    var points = [];
    // 獲取場景中 3 個溫度傳感器的位置,設置模擬的溫度值
    for(var i = 1; i < 4; i++) {
        var tag = 'at' + i;
        data = dataModel.getDataByTag(tag);
        var index = Math.floor(Math.random() * 6);
        if (data) {
            // 設置溫度點位置
            points.push({
                x: data.p3()[0] - floor1Position[0],
                y: data.p3()[2] - floor1Position[2],
                value: values[index]
            });
        }
    }
    // 通過設置溫度點信息,來繪制溫度雲圖
    heatmap1.setData({ data: points, max: 100, min: 0 });
    g3d.invalidateData(floor1);
}, 2000);

溫度傳感器放置在機櫃間的隔層中,通過獲取他們在場景中的位置點坐標和相對應的溫度雲圖六面體(下邊會講到)的位置點坐標,用后者減去前者即得到溫度點在平面雲圖中的坐標點位置。

我們取消定時器后再看下效果。

現在只是一個靜態的溫度雲圖,一個固定的溫度值,沒有了變化,我們來看一下是怎么加溫度雲圖的。

// 創建一張溫度雲圖
heatmap1 = createHeatMap(930, 820);
ht.Default.setImage('hm-floor1', heatmap1._renderer.canvas);
var floor1 = dataModel.getDataByTag('floor1');
floor1Position = floor1.p3();
floor1.s({
    'top.image': 'hm-floor1'
});

// 溫度雲圖的生成函數
function createHeatMap(width, height) {
    heatmap = h337.create({
        width: width,
        height: height,
        radius: 450,
        maxOpacity: 1,
        minOpacity: 0
    });
    heatmap._renderer.canvas.dynamic = true;
    return heatmap;
}

通過 heatmap._renderer.canvas 我們取得溫度雲圖的 canvas,並使用 HT for Webht.Default.setImage('hm-floor1', heatmap1._renderer.canvas) 將其注冊成矢量圖片。
現在溫度雲圖有了,我們要怎么將其部署到機櫃下邊呢?看下面一張圖片。

紅框選的就是一個用來展示溫度雲圖的面,它其實是一個六面體模型的頂面,將它放置在機櫃下邊,再通過 floor1.s({ 'top.image': 'hm-floor1' }) 為其設置貼圖,就成了我們上邊看到的樣式。
現在,讓我們來看一下機房原型吧。

總結

從一個簡單的 3D 機房場景到擁有了可以展示溫度變化的溫度雲圖,讓整個場景動了起來,還有更多有趣的東西可以加進來,讓整個場景變得更加豐富,期待我們一起創造新的改變。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM