基於WebGL架構的3D可視化平臺ThingJS—讓糧倉「智慧」升級

首先咱們先了解一下基於WebGL架構的3D可視化平臺——ThingJS是什麼?html

ThingJS是優鍩科技開發的一套面向物聯網應用的在線3D可視化應用開發及運營PaaS平臺,以「 ThingJS雲視PaaS服務」形式面向廣大物聯網企業提供全生命週期在線3D可視化服務。安全

ThingJS平臺包括可視能力層和功能應用層。架構

可視能力層由ThingJS雲視PaaS服務、ThingJS開發平臺和ThingJS配套組件組成。ThingJS雲視PaaS服務提供便捷的應用部署,Thing JS開發平臺和配套組件讓3D開發變得簡單高效,讓3D可視化交互能力在多種物聯網場景中得以應用。app

能夠從下圖中瞭解ThingJS和傳統3D開發的區別
v2-cd7448c86a0c8fc59c4e96a40c0d63ba_hd.png
下面咱們來聊一聊什麼是智慧糧倉dom

正所謂「國以民爲本,民以食爲天」。糧食既是關係國計民生和國家經濟安全的重要戰略物資,也是人民羣衆最基本的生活資料。其中糧倉是糧食建設的根基,對保障糧食安全尤其重要。隨着信息化技術發展,全國各地開始智慧糧倉的建設,咱們能夠經過一個視頻看一下使用ThingJS3D可視化平臺作的3D可視應用,ThingJS—可視一體化,讓糧倉「智慧」升級。ide

視頻查看:https://v.qq.com/x/page/m0767...ui

慧農業3D可視化視頻介紹:url

"數字糧倉3D可視化系統「是ThingJS智慧糧倉行業應用系列產品之一,實現了糧庫的庫區、倉庫、設備、的逐級可視。以糧倉監控爲重點,集成儲備糧管理、糧食通風、糧情監測控制、燻蒸監測等系統,實現糧倉、糧情、動環、倉容、能耗、告警、出入庫等信息:spa

可視:糧倉的園區、倉區、倉庫、設備的3D可視;code

可查:3D場景內查看糧情、動環、倉容、能耗、視頻監控、出入庫等信息;

可控:3D場景內控制倉門、倉窗、通風口、風機、空調等設備設施的開關狀態;

可防:系統經過集成數據,提早預知糧食黴菌、蟲害的產生與生長趨勢,提前制定防治措施,實現糧食綠色、生態儲藏。

構建糧倉內糧情的監控、預警、診斷、分析一體化的3D可視化平臺。

咱們經過ThingJS3D可視化平臺作了個糧倉3D可視化Demo,包含了糧倉的庫區,工廠,宿舍等逐級可視,同時也包含了糧倉的溫度、空間剩餘等功能的顯示。點擊查看DEMO便可預覽。

咱們在文末附上完整的代碼,你們能夠直接在ThingJS3D可視化平臺體驗。

查看DEMO:http://www.thingjs.com/guide/...

糧倉的全景預覽
v2-02f762d894502fd9d12b191702c87f4d_hd.png

宿舍區域
v2-51ec588908040d74d3c2db4152263f2b_hd.png

糧倉區域
v2-ef2132b10ecb7057dbacba24929806b6_hd.png

糧倉信息
v2-de045b4a4b1d06142b4d9e8565fe74a7_hd.png

完整代碼

//加載場景代碼
var app = new THING.App({
    // 場景地址
    "url": "http://www.thingjs.com/./uploads/wechat/S2Vyd2lu/scene/CB20190228115320",
    //背景設置
    "skyBox": "BlueSky"
});

var toolbar2 = new THING.widget.Panel({ width: '250px', captionPos: 'hover' });
toolbar2.position = [10, 10];

// 數據對象
var dataObj = {
    area01: false,
    area02: false,
    area03: false,
    overall: true,

}

THING.Utils.dynamicLoad(['lib/iconfont.js'], function () {

    var button1 = toolbar2.addImageBoolean(dataObj, 'area01').caption('宿舍區域').url('#momoda_lc-icontubiao22');
    var button2 = toolbar2.addImageBoolean(dataObj, 'area02').caption('工廠區域').url('#momoda_lc-icontubiao10');
    var button3 = toolbar2.addImageBoolean(dataObj, 'area03').caption('糧倉區域').url('#momoda_lc-icontubiao21');
    var button4 = toolbar2.addImageBoolean(dataObj, 'overall').caption('全景預覽').url('#momoda_lc-icontubiao28');

    button1.on('change', function (ev) {
        dataObj.area02 = false;
        dataObj.area03 = false;
        dataObj.overall = false;
        app.camera.flyTo({
            'position': [-22.356943810261143, 13.20176112267712, 28.19482648304762],
            'target': [-53.24507055455286, 0.6162378602394785, 6.3743932170050375],
            'time': 2000,
            'complete': function () {
                app.camera.inputEnabled = false;
            }
        });
    });

    button2.on('change', function (ev) {
        dataObj.area01 = false;
        dataObj.area03 = false;
        dataObj.overall = false;
        // 攝像機飛行到某位置
        app.camera.flyTo({
            'position': [-2.8177753324747767, 16.090400887405227, 19.94073098974482],
            'target': [-2.685240969328181, -1.3204502556714408, 3.6209106265430773],
            'time': 2000,
            'complete': function () {
                app.camera.inputEnabled = false;
            }
        });

    });

    button3.on('change', function (ev) {
        dataObj.area01 = false;
        dataObj.area02 = false;
        dataObj.overall = false;
        // 攝像機飛行到某位置
        app.camera.flyTo({
            'position': [33.313117413004846, 20.17892561437951, 30.105105312212782],
            'target': [50.84710727906235, -1.7298146965736394, 10.602912178089504],
            'time': 2000,
            'complete': function () {
                app.camera.inputEnabled = false;
            }
        });

    });

    button4.on('change', function (ev) {
        dataObj.area01 = false;
        dataObj.area02 = false;
        dataObj.area03 = false;
        // 攝像機飛行到某位置
        app.camera.flyTo({
            'position': [-18.079999999999977, 80.427, 101.051],
            'target': [13.422, 2.597, 2.226],
            'time': 2000,
            'complete': function () {
                app.camera.inputEnabled = true;
            }
        });


    });


});

var panel;
app.on('SingleClick', function (ev) {

    if (ev.button == 2) {
        if (panel) {
            panel.destroy();
            panel = null;
        }
        if (curObject) {
            curObject.playAnimation('close');
            curObject = null;
            app.camera.flyTo({
                'position': [33.313117413004846, 20.17892561437951, 30.105105312212782],
                'target': [50.84710727906235, -1.7298146965736394, 10.602912178089504],
                'time': 2000,
                'complete': function () {
                    app.camera.inputEnabled = false;
                }
            });
        }
        return;
    }

    var object = ev.object;
    if (object == null || object.name == "field")
        return;
    if (panel != null) {
        panel.destroy();
        panel = null;
    }
    panel = new THING.widget.Panel({
        width: '200px',
        cornerType: 'polyline'
    })
    var data = {
        type: '小米',
        admin: 'Kerwin',
        surplus: Math.round(Math.random() * 100) + '%',
        temperature: Math.round(Math.random() * 10) + '°'
    }
    // 綁定物體身上相應的屬性數據
    panel.addString(object, 'id').caption('倉庫編號');
    panel.addString(data, 'admin').caption('管理員');
    panel.addString(data, 'type').caption('庫存種類');
    panel.addString(data, 'surplus').caption('剩餘空間');
    panel.addString(data, 'temperature').caption('倉庫溫度');
    panel.position = [500, 50];
    //建立UIAnchor面板
    var uiAnchor = app.create({
        type: 'UIAnchor',
        parent: object,
        element: panel.domElement,
        localPosition: [0, -49, 0],
        pivot: [-0.2, 2.1]
    });

    uiAnchor["panel"] = panel;

    return uiAnchor;
});

var curObject;
app.on('dblclick', function (ev) {
    if (ev.button == 2)
        return;
    if (curObject) {
        curObject.playAnimation('close');
        curObject = null;
    }
    var object = ev.object;
    curObject = object;
    curObject.playAnimation('open');
    app.camera.flyTo({
        object: curObject,
    });
});
相關文章
相關標籤/搜索