2012-07-12 50 views
1

我正在尋找一些方法來在圖形視圖中壓縮大量(並且動態增長)的數據量以進行可視化。快速可視化大量數據的方法

說我有一個由時間戳值對組成的二進制文件。該文件正在實時增長,並且可以輕鬆超過幾千兆字節。

現在有多個視圖將這些數據顯示爲圖形/繪圖。由於在大多數情況下,我們的x軸上的數據要比數據多得多,所以我們需要以某種方式將這些數據壓縮到所需的分辨率。根據屏幕上的尺寸,每個視圖可能需要不同的分辨率。同時放大和縮小會導致該分辨率的快速更改。

當前算法將數據分成長度相等的部分並計算最小值和最大值。現在對於我們x軸上的每個像素,我們繪製一條從最小值到最大值的垂直線。這樣我們可以確保不會錯過異常值。 (這是要求)

每次需要一個新的分辨率時,我們必須選擇另一個分段長度並遍歷整個文件,這是減速的方法。

解決方案是創建某種緩存層,使我們能夠對不同分辨率的數據進行(恆定時間)調用。不幸的是,我不知道如何以一種仍然顯示我們異常值的方式來實現這樣的緩存。

您是否有任何提示或知道文獻顯示解決這類問題的方法?

環境是Microsoft .net,但這不應該有所作爲,因爲這是關於一般想法。

在此先感謝。

回答

2

我的方法是將數據存儲在多個文件,這樣的:

  • 追加{時間戳,值}爲[0]的文件。
  • for i = 0 ... MAX_REASONABLE:
    • 如果FILE [i]的取樣計數模ZOOM非零,則退出。
    • 從FILE [i]獲取最後一個ZOOM採樣。
    • 將它們壓縮成單個樣本(例如,平均時間戳?獲取最小值?) 和平均樣本數據。
    • 如果FILE [i + 1]不存在,請創建它。
    • 寫新創建的樣品爲FILE第[i + 1]

數據的總量收斂於SIZE *(1 /(1-(1/ZOOM))) - 你需要100如果ZOOM = 2,額外的空間百分比,如果ZOOM = 4,只有33%,等等。

可視化時,您可以快速選擇最接近的顯示級別。假設您需要在包含600.000個樣本的範圍內可視化800個像素,其中ZOOM = 2;那麼600.000/800的對數除以ZOOM的對數得出9.55,這意味着您需要訪問縮放級別9.

該文件被放大ZOOM^9 = 512次,即您將讀取600.000/512 = 1171個採樣並將1171×H圖像重新採樣爲800像素寬度。

總寫入成本平均增加最多300%;總存儲需求將增加至多100%;要生成圖像,您的成本將變得或多或少保持不變,具體取決於您生成的屏幕圖像的寬度。

我已經在這樣的地圖渲染系統上工作過,並且可以通過實時平移和縮放來顯示一個terapixel地圖中的矩形區域(網絡吞吐量和延遲除外,即:在那裏,我們使用JPEG質量)。

+0

謝謝。答案非常有幫助。我們最終同意以這種方式實施。 – 2012-07-14 12:41:46

相關問題