可視化方案的實踐--圖庫模

我們在工作中,經常會遇到一些需要可視化展示的地方,如電力,石油,熱力等等,需要有一個圖,然後在圖上我們來展示諸多的信息,甚或需要在圖上將展示進行變化(如開關開合,管道斷開,或展示此位置的電流電壓或熱量流速等),這樣的系統,對我們來說,數據提取等都是簡單的,關鍵是如何將信息展示到圖上,與圖配合起來,進行一個直觀的展示。此類系統難點有二:

1. 如何得到此圖,從客戶得到的圖多是cad等,我們很難直接應用到我們的系統中。
2. 如何將我們的信息展示到圖上呢?將圖爲底,在其上再刷新一層數據(如果圖要放縮移動怎麼辦)?還是將數據直接嵌入到圖中(數據變化,如何觸發圖的變化,刷新太多會不會有效率問題)?

逐個來談吧。

針對第一點,我想大家都有自己的理解了,svg作爲一個普適性圖形格式,極好的適合我們的應用場景。其是矢量圖,保證了放縮不失真,基於xml,可以很好的,將圖元與我們的業務數據綁定。如果你沒有特殊的要求(甚或即使你有特殊要求,也可以通過在xml中添加自定義屬性來滿足),我想這種格式無疑是你最好的選擇。在做系統的時候,其實也瞭解到,有一些單位做的系統,會用自己獨特的圖形格式,也可以理解,這就需要投入更多的人力來完成這個圖形的解析及繪製工具,如果是小項目而公司的長久產品的話,恐怕不值得。
談談我們自己的實現方式吧,我們做了一個svg的編輯工具,可以自已來完成圖形的繪製,同時,可以針對業務對圖形進行屬性的寫入。姑且稱之爲一個作圖軟件吧,這個軟件可單獨成包安裝,也可以嵌入到你的系統中,用來進行繪圖使用,基於java,最終的產出是一個svg格式的圖片。一般不做這種系統的話,可以很少會觸及這種工具軟件的開發,如矩陣的變化,圖形的移動,線的連接等等,還是太複雜了,做應用軟件的人,更多的喜歡去進行業務上的思考,如數據流向,存取方式,對這種作圖類的工具軟件,可以興趣不大,但深入進去,還是挺好玩的,可以把你原來的一些高數及幾何知識撿起來。展示一下效果吧:

屆時,我們可以在自已的系統裏,通過解析這個svg文件,取出各個圖元的唯一標識,然後,與業務數據進行綁定,即可以根據業務進行開關開合或測試數據的展示了。

針對第二點,其實上面也點了一下我們的處理方式。原來的處理方式,是將數據綁定,集中到這個繪圖軟件中,其實這樣不是太好,因爲還是希望保證繪圖軟件只做繪圖這一件事。不想證它再去訪問業務系統或業務數據庫。變通一下,我們可以通過將最終的svg文件作爲共享源,業務系統中加載這個文件,並提供對這個文件的解析,然後將其內的圖元唯一標識與我們的業務數據綁定在一起,實現圖庫模的一體化。

大體說這些吧,其實這種系統還是難在圖怎麼畫,及業務怎麼刷新上。我們都是基於java的,所以做起來平臺比較統一,但是畢竟現在web也可以加載svg,這一定程序上也使得svg可能跨越不同的開發平臺。

大體的技術:繪圖軟件基於java,swing(javafx也可以直接嵌入這個swing),界面大體如下,要是加點皮膚的效果會更好一些:

要是不同的平臺,可以考慮一下本平臺內有無svg處理的庫,java這個領域還是swing的處理庫比較權威一些,javafx都不是太官方,功能上太弱,但是如果你用javafx,可以將swing加載svg後的panel嵌入到javafx中,我們正在用,效果也很好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章