沈偉 李偉波
摘要:以區(qū)域發(fā)展規(guī)劃可視化技術及軟件為背景,結合了區(qū)域規(guī)劃中信息表示的問題,分析了幾種表示區(qū)域規(guī)劃信息的層次信息可視化方法,提出了基于目錄樹和雙曲樹表示的層次信息結構,最后實現(xiàn)了層次信息可視化技術應用于區(qū)域規(guī)劃,為區(qū)域規(guī)劃的制定和實施提供了可視化導航。
關鍵詞:區(qū)域規(guī)劃;信息可視化;目錄樹;雙曲樹
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2012)20-4879-06
Research & Application of Hierarchical Information Visualization for Regional Planning
SHEN Wei, LI Wei-bo
(School of Computer Science & Technology,Wuhan Institute of Technology,Wuhan 430073, China)
Abstract: Based on visualization technologies and software of regional planning, the essay combines with regional planning issues of infor mation expression, analyses the several methods of hierarchical information visualization to express the information of regional planning, makes the hierarchical information software architecture based on directory tree and hyperbolic tree, finally realizes hierarchical information visualization technology used in the regional planning, provides visualized navigation for the draft and implementation of regional planning. Key words: regional planning; hierarchical information visualization; hyperbolic tree; directory tree; hyperbolic tree
目前,隨著社會不斷的快速發(fā)展,一些城市或區(qū)域面臨著新的發(fā)展契機,因此如何重新來定位新的發(fā)展規(guī)劃就顯得越來越重要,但是傳統(tǒng)的紙質版的區(qū)域規(guī)劃方案已經不能適應新時代的要求,將計算機可視化技術應用于區(qū)域規(guī)劃是解決問題的唯一方法。
區(qū)域發(fā)展規(guī)劃內容的表述是一項大型而且復雜的工程,而且規(guī)劃的內容也在不斷的發(fā)生變化。因此,如何在這海量數(shù)據(jù)中獲取有效信息成為信息可視化技術的研究熱點之一。在信息結構中,樹形結構是應用比較多的。但是,對于區(qū)域發(fā)展規(guī)劃中這種大型的層次結構而言,采用樹形結構不能將所表示內容整體呈現(xiàn)。針對上述的問題,該文以區(qū)域發(fā)展規(guī)劃可視化技術及軟件為背景,在分析研究層次信息可視化技術的基礎上,提出了雙曲樹結構的可視化表示方法,并且著重研究了基于目錄樹和雙曲樹結構的區(qū)域規(guī)劃層次信息可視化的實現(xiàn)方法。
1信息可視化的分析
可視化技術是指運用圖像處理技術和數(shù)據(jù)庫技術,將數(shù)據(jù)轉換成圖形或圖像在計算機屏幕上顯示出來,并進行交互的技術。信息可視化技術就是利用計算機對抽象數(shù)據(jù)的可視表示,用來加強人們對這些抽象數(shù)據(jù)的直觀認識[1]。
抽象信息之間的關系最普遍的一種就是層次關系。層次關系無處不在,如磁盤目錄結構,文檔管理,圖書分類等。傳統(tǒng)的描述層次信息的方法就是將其組織成一個類似于樹的節(jié)點連線圖,這也是層次信息可視化結構最直觀的方式。但是這種樹型結構對于大型的層次結構而言,樹型結構的層次就會交織在一起,不利于展示層次信息,特別是用計算機表示樹型結構時,由于計算機屏幕所提供的可視化空間有限,大型的樹型層次結構,只能通過滾動瀏覽的方式把整個層次結構顯示出來,這對于展示某個樹型結構的整個層次結構信息或某個節(jié)點的信息就可能不是很方便[3]。
隨著人們對層次信息可視化技術的深入研究,也推出了一系列的可視化技術方法。其中,由Xerox Palo Alto研究中心用界面的John Lamping等人提出了一種基于雙曲幾何的可視化和操縱的大型層次結構的Focus+Context,即稱為雙曲樹,在表示大型的層次結構中,應用最多。雙曲樹結構是將層次關系顯示在一個雙曲平面上,然后將雙曲平面映射到顯示的區(qū)域中。雙曲樹結構的出現(xiàn)很好地解決了怎樣在用戶屏幕上顯示龐大的層次信息結構的問題。
2區(qū)域規(guī)劃的層次信息可視化結構的設計
2.1信息可視化的表示模型
該文提出來的可視化表示方法是將區(qū)域規(guī)劃中的這一領域層次信息結構,抽象成目錄樹結構和雙曲樹結構,然后將目錄樹結構映射層目錄樹視圖或雙曲樹視圖來表示區(qū)域規(guī)劃這一領域層次信息,最后通過用戶與目錄樹或雙曲樹視圖進行交互獲取領域信息的過程。如圖1,圖2所示。
2.2目錄樹模型設計模型
在區(qū)域規(guī)劃中,其領域層次中以行政園區(qū)和產業(yè)鏈劃分。樹形結構按預設的行政區(qū)塊(行政區(qū)、區(qū)域、項目、企業(yè))或產業(yè)鏈(行業(yè)、產業(yè)鏈、企業(yè)、項目)逐級表示行政園區(qū)層次信息,如圖3,圖4所示[5]。
目錄樹結構顯示區(qū)域規(guī)劃中領域信息的層次化列表。目錄樹層次結構的頂端是根,層次結構的根的下一層是子項,子項下面是其子項,構成四層父子關系。子項以縮進方式顯示在父項的下面,項目之間用線段連接起來。
目錄樹的數(shù)據(jù)結構如圖5所示。
圖5目錄樹的數(shù)據(jù)結構
創(chuàng)建目錄樹結構的關鍵代碼如下:
void CPrjBrowseView2::CreatTree()
{ m_ctrlTree.DeleteAllItems();
m_TreeBootImage.DeleteImageList();
CPrjBrowseApp * pApp = (CPrjBrowseApp *)AfxGetApp();
CPrjBrowseDoc* pDoc = (CPrjBrowseDoc*)GetDocument();
//Tree控件變量
HTREEITEM hParent;
TVINSERTSTRUCT tvInsert;
tvInsert.hParent = NULL;
tvInsert.hInsertAfter = NULL;
tvInsert.item.mask = TVIF_TEXT;
//創(chuàng)建圖象標簽
m_TreeBootImage.Create(16,16,ILC_COLORDDB | ILC_MASK,4,0);
if(m_tabData.GetCurSel() == 0)
{
m_nImgCardClose = m_TreeBootImage.Add(pApp→LoadIcon(IDI_CARDCLOSE));
m_nImgCardOpen = m_TreeBootImage.Add(pApp→LoadIcon(IDI_CARDOPEN));
}
else if(m_tabData.GetCurSel() == 1)
{
m_nImgCardClose = m_TreeBootImage.Add(pApp→LoadIcon(IDI_CARDCLOSE1));
m_nImgCardOpen = m_TreeBootImage.Add(pApp→LoadIcon(IDI_CARDOPEN1));
}……
//添加子目錄
int nTab = m_tabData.GetCurSel();
if(m_tabData.GetCurSel() == 0)
AddSubTree("DH_00_00_00_00","1","行政單位",hParent); //添加子目錄
else if(m_tabData.GetCurSel() == 1)//sw05.03
AddSubTree("CL_00_00_00_00","1","行政單位",hParent); //添加子目錄
m_ctrlTree.Expand(hParent,TVE_EXPAND); //展開Tree目錄
SetTimer(2,100,NULL);
SetTreeNode();
}
2.3雙曲樹模型設計
雙曲樹模式的設計原理是:雙曲空間焦點的周圍的區(qū)域在圓面上大面積顯示,遠離焦點的區(qū)域以遠景圖的形式慢慢消失在圓面的邊緣上。在圓面上,隨著半徑的增加,節(jié)點對象尺寸就變得越來越小,而圓面邊緣對應雙曲空間上有無限的空間,可以存放大量節(jié)點對象。在雙曲空間中,通過布局為每個節(jié)點分配了相同大小的顯示區(qū)域,因此當任何一個節(jié)點被置為視圖焦點的時候,此節(jié)點都會在圓面中有較大的顯示區(qū)域,而遠離新焦點的區(qū)域會消失在圓面的邊緣上[2]。
雙曲空間只是一個抽象的空間,人們直觀上很難理解,在雙曲空間中完成布局后,就必須用一種方法將雙曲空間里的結構映射到歐氏空間的二維平面,雙曲空間是一個無限空間,計算機顯示屏是一個有限空間(歐幾里德空間)。雙曲空間轉換歐幾里德空間是通過龐萊卡投影來實現(xiàn)。
一般把通過龐萊卡投影得到的圓面稱為龐萊卡圓盤(Poincare Disk)模型,具有以下屬性:
①模型區(qū)域S={(x,y)|x2+y2<1},即圓盤是歐幾里得空間中半徑為1的圓;
②雙曲幾何角度和歐幾里得幾何角度一樣,故龐萊卡投影又稱等角投影;
③雙曲空間的直線對應歐幾里得空間垂直S的弧線,或者過S中心的直線。兩個沒有交點的弧線對應于雙曲平面中的兩條平行線。
映射算法把雙曲空間某節(jié)點映射到扇形區(qū)域(r, d)的中心,所謂的扇形區(qū)域中心即圖6中的C點。設半徑為1,(r, d)扇形區(qū)域兩個端點的坐標為(cosr, sinr)和(cos(r + d), sin(r + d)),那么中心點的坐標是:
Cx = (1/cos(d/2)-tan(d/2)) * cos(d + d/ 2)
Cy = (1/cos(d/2)-tan(d/2)) * sin(d + d/ 2)
然后運用遞歸算法將所有節(jié)點、結構按照以上的映射方式從雙曲空間映射到歐幾里德空間里[4]。
圖6龐萊卡圓盤映射
雙曲樹的數(shù)據(jù)結構如圖7所示。
圖7雙曲樹的數(shù)據(jù)結構
布局雙曲樹結構的關鍵代碼如下:
void CPrjBrowseDoc::layoutHyperbolicTree()
{if(m_pTreeNode != NULL)
{m_pTreeNode→m_nSelState = 1;
double dfOff = 0.02;
m_pTreeNode→m_dfCX = dfOff;
m_pTreeNode→m_dfCY = dfOff;
m_pTreeNode→m_dfLX = dfOff;
m_pTreeNode→m_dfLY = dfOff;
double dfAngle0 = m_pTreeNode→m_dfAngle + PIE / 6;//PIE - 0.5;//m_pTreeNode→m_dfAngle * 2.0;//1.5;
double dfStart0 = m_pTreeNode→m_dfStart - PIE / 12.0;//+ m_pTreeNode→m_dfAngle / 2 - (PIE- 0.5) / 2.0;// * 0.5 / 2; if(dfAngle0 < 0)
dfAngle0 += 2 * PIE;
if(dfStart0 < 0)
dfStart0 += 2 * PIE;
if(m_pTreeNode == &m_TreeNode)
{ dfAngle0 = 2 * PIE;
dfStart0 = 0.0;
m_pTreeNode→SetPoincareOrgPos(0,dfStart0,dfAngle0);
}
else
{double dfOff = 0.20;
m_pTreeNode→m_nLayerPos = fabs(dfOff);
double R0 = m_pTreeNode→GetR2(m_pTreeNode→m_nLayerPos); double R1 = R0 - 1.0 / 10.0;
m_pTreeNode→m_dfCX = R0 * cos(dfStart0 + dfAngle0 / 2);
m_pTreeNode→m_dfCY = R0 * sin(dfStart0 + dfAngle0 / 2);
m_pTreeNode→m_dfLX = R1 * cos(dfStart0 + dfAngle0 / 2);
m_pTreeNode→m_dfLY = R1 * sin(dfStart0 + dfAngle0 / 2);
m_pTreeNode→SetPoincareOrgPos(m_pTreeNode→m_nLayerPos,dfStart0,dfAngle0);
CTreeNode * pTreeNode = m_pTreeNode→m_pParent;
if(pTreeNode != NULL)
{double dfStart = dfStart0 + dfAngle0 + dfAngle0 / 4;
double dfAngle = 2 * PIE - dfAngle0 - dfAngle0 / 2;
pTreeNode→m_nLayerPos = __min(0.20,fabs(pTreeNode→m_nLayerPos - dfOff));
double R0 = pTreeNode→GetR2(pTreeNode→m_nLayerPos);
double R1 = R0 - 1.0 / 10.0;
pTreeNode→m_nLayerPos = 1;
pTreeNode→m_dfCX = R0 * cos(dfStart + dfAngle / 2); pTreeNode→m_dfCY = R0 * sin(dfStart + dfAngle / 2); pTreeNode→m_dfLX = R1 * cos(dfStart + dfAngle / 2); pTreeNode→m_dfLY = R1 * sin(dfStart + dfAngle / 2);
pTreeNode→SetPoincareOrgPos2(pTreeNode→m_nLayerPos,dfStart,dfAngle,m_pTreeNode);
}}}}
2.4目錄樹與雙曲樹相互轉換
目錄樹結構和雙曲樹結構,是一個層次信息兩種表示方法。這兩種方法各有所長各有所短。目錄樹結構在表示層次信息時,是按照人們通常習思維方式表示信息的,具有比較直觀的特點。雙曲樹結構表示層次信息是當層次結構非常大時,在有限的屏幕上很難全面地顯示整個信息,采用焦點十上下文(Focus+Context)的視圖變換方法,可以在顯示一個小的焦點區(qū)域詳細信息的同時,保持整個內容的整體視圖,使用戶很容易訪問上下文信息并能定位到自己所需要的信息。這兩種方法在獲取焦點信息時,顯示的內容是統(tǒng)一的,即時在一方展示某一方面的信息,在另一方同樣展示該信息。
3層次信息可視化技術在區(qū)域規(guī)劃中應用
目前,層次信息可視化技術應用于區(qū)域規(guī)劃中,以潛江城市轉型發(fā)展規(guī)劃為例,如圖8所示,圖中展示了以行政區(qū)劃分的目錄樹結構和雙曲樹結構圖。在目錄樹中,鼠標左鍵點擊“周磯高新產業(yè)園”,就展開了其子項下的五個項目名稱,在其雙曲樹圖中,“周磯高新產業(yè)園”也隨著放大,展開了其子項。同理,在雙曲樹中鼠標左鍵點擊“周磯高新產業(yè)園”,原理一樣[5]。
再如圖9所示,圖中展示了以產業(yè)鏈劃分的目錄樹結構和雙曲樹結構圖。在目錄樹中,鼠標左鍵點擊“支柱產業(yè)”,就展開了其子項下的4個產業(yè)鏈目錄,在其雙曲樹圖中,“支柱產業(yè)”也隨著放大,展開了其子項。同理,在雙曲樹中鼠標左鍵點擊“支柱產業(yè)”,原理一樣。
圖9產業(yè)鏈的目錄樹和雙曲樹的可視化轉換
從上面兩個圖中,可以直觀的觀察出雙曲樹結構表示的大量的層次信息時,有巨大的優(yōu)勢。雙曲樹結構中,將選中的層次信息放大顯示出來。既可以從整體控制整個信息結構,又可以局部放大所需的層次信息。
4結束語
隨著信息可視化技術的不斷成熟和發(fā)展,可視化技術已經成為了近年來研究的熱點問題之一。該文以區(qū)域發(fā)展規(guī)劃可視化技術及軟件研究為前提,分析了層次信息可視化技術,具體設計和實現(xiàn)了目錄樹結構和雙曲樹結構的可視化表示方法,最后通過將層次信息可視化技術應用于區(qū)域規(guī)劃中,最終為區(qū)域規(guī)劃的制定和實施提供了可視化導航。
參考文獻:
[1]鄧滿英.信息可視化探討[J].軟件導刊.2008,7(9):99-100.
[2]竇長威.層次信息可視化技術一種實現(xiàn)方法[J].工程地理計算機應用.2007(46):11-15.
[3]崔軍,賈宗維,王建偉,于慧娟.一種新的層次信息可視化模型[J].山西農業(yè)大學學報:自然科學版,2009,29(2):186-189.
[4]何楊,李偉波,胡維平.層次信息可視化集成技術的應用[J].武漢工程大學學報,2011,33(10):90-94.
[5]沈偉.基于知識工程的區(qū)域規(guī)劃DSS關鍵技術研究[D].武漢:武漢工程大學,2011:42-44,57-64.