本發(fā)明是涉及地理信息技術(shù)、數(shù)字地圖領(lǐng)域的一種地圖圖形制作技術(shù),給出了一種基于腳本驅(qū)動的層次化圖形構(gòu)造方法。
背景技術(shù):
地圖圖形是地圖符號中線面符號的具體實現(xiàn)和信息表達傳輸載體,地圖符號是地圖的語言,它是表達地圖內(nèi)容的基本手段。地圖符號是由形狀不同、大小不一和色彩有別的圖形和文字組成。就單個符號而言,它可以表示事物的空間位置、大小、質(zhì)量和數(shù)量特征;就同類符號而言,可以反映各類要素的分布特點;而各類符號的總和,則可以表明各要素之間的相互關(guān)系及區(qū)域總體特征。地圖符號可以指出目標(biāo)種類(如鐵路)及其數(shù)量特征和質(zhì)量特征,并且可以確定對象的空間位置和現(xiàn)象的分布(如人口密度等)。
目前,國內(nèi)外相關(guān)軟件中地圖符號設(shè)計的途徑主要有五種:1)文本編輯器設(shè)計方法。其特點是速度慢且不能實時觀察所設(shè)計的符號。2)二次開發(fā)。采用系統(tǒng)提供的二次開發(fā)語言編程實現(xiàn)。特點是各GIS軟件提供的二次開發(fā)語言各異,所使用的函數(shù)庫龐大,需要重新編譯系統(tǒng)才能完成符號增刪改工作。3)利用系統(tǒng)本身的圖形編輯功能將符號當(dāng)作普通的圖形塊設(shè)計制作。其特點是制作的符號為柵格圖片,不具有交互功能。4)使用系統(tǒng)提供的符號設(shè)計器。用戶使用系統(tǒng)提供的符號設(shè)計器可將系統(tǒng)本身提供的基本符號與自定義的符號進行組合、位移、縮放等操作后得到制圖所需的復(fù)雜符號(如復(fù)雜線符號、面符號)。5)使用互聯(lián)網(wǎng)上相關(guān)網(wǎng)站共享的地圖符號,使用主流編程語言開發(fā)的地圖符號設(shè)計系統(tǒng);論文《公共安全應(yīng)急平臺中符號庫的設(shè)計與實現(xiàn)》(周玉清,李靜,羅靈軍,等.公共安全應(yīng)急平臺中符號庫的設(shè)計與實現(xiàn)[J].地理與地理信息科學(xué),2004,20(04):11-14.)總結(jié)了地圖符號制作的基本方法。
上述地圖符號制作方法存在的缺點主要包括:1)制作生成的地圖圖形符號往往是柵格圖片或矢量線劃圖形,不具有動態(tài)交互性;2)采用特定技術(shù)和特定軟件制作的地圖圖形符號難以移植和靈活應(yīng)用,難以在其它平臺上面進行集成和應(yīng)用;3)采用計算機編程語言編程實現(xiàn)的符號,在增加修改新的符號時都需要重新編譯程序,可擴展性不強。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于,克服現(xiàn)有技術(shù)和解決方案中存在的缺陷,提供一種新的交互式地圖圖形符號制作方法:腳本驅(qū)動的層次化圖形構(gòu)造方法。這種方法能夠支持靈活便捷地實現(xiàn)可交互式地圖圖形符號的制作、管理與維護、可視化場景中矢量化顯示與動態(tài)交互。
本發(fā)明采用的技術(shù)方案是:
腳本驅(qū)動的層次化圖形構(gòu)造方法,包括以下步驟:
(一)編寫用于構(gòu)造線面符號的腳本文件代碼:
步驟1,定義構(gòu)造交互式地圖圖形所需要的元素,這些元素類型包括:(1)用于描述和構(gòu)造該交互式地圖圖形輪廓的幾何圖形算法;(2)用于存儲描述幾何對象樣式的屬性定義;(3)定義用于改變圖形幾何形狀的控制點;(4)用于輔助控制點實現(xiàn)圖形幾何形狀變化的比例值參數(shù)列表;(5)用于規(guī)定用戶可交互式輸入最多和最少點數(shù);
步驟2,編寫實現(xiàn)交互式地圖圖形輪廓繪制的幾何圖形構(gòu)造算法的腳本代碼,其中實現(xiàn)不同類型的交互式地圖圖形所用到的幾何圖形算法各不相同;
步驟3,在交互式地圖圖形幾何圖形構(gòu)造算法中定義比例值參數(shù),通過改變比例值參數(shù)的值來實現(xiàn)對圖形幾何形態(tài)的改變;
步驟4,定義控制點在交互式地圖符號中的顯示位置,在腳本代碼中實現(xiàn)各控制點的鼠標(biāo)移動事件,在鼠標(biāo)移動事件響應(yīng)函數(shù)中編寫根據(jù)控制點位置移動而合理改變對應(yīng)比例值的算法,以通過比例值來動態(tài)交互式改變地圖符號幾何形態(tài);
(二)注冊用于圖形構(gòu)造的交互式腳本文件,將腳本文件注冊到顯示裝置的符號管理器中,以供顯示裝置調(diào)用;
(三)實現(xiàn)圖形構(gòu)造所需要的輸入層,用于輸入圖形基本繪制點信息,動態(tài)交互輸入圖形基本繪制點的過程包括:第一次單擊后的初始化圖形、基本點增加的重新構(gòu)造、鼠標(biāo)移動觸發(fā)的實時更新三個階段;
(四)通過顯示裝置中設(shè)計的接收腳本驅(qū)動的圖形構(gòu)造結(jié)果的輸出層,使得顯示裝置獲取所需要的圖形繪制參數(shù)信息,這些繪制參數(shù)信息在所述步驟1中定義,調(diào)用并執(zhí)行基于腳本語言實現(xiàn)的圖形構(gòu)造算法,傳入由用戶交互式輸入的圖形繪制基本點序列,交互式地圖圖形制作腳本執(zhí)行完成后,完成交互式地圖圖形的構(gòu)造。
所述步驟1中,在腳本代碼中構(gòu)造交互式地圖圖形繪制所需要的圖形算法和元素,這些算法和繪制元素從不同層次構(gòu)造可交互的線狀地圖圖形和面狀地圖圖形;交互式地圖圖形繪制所需要的幾何圖形信息均以線的形式存儲,并都保存于由坐標(biāo)序列組成的線條,線條分為閉合和非閉合兩種,閉合線條即定義為面圖形。
所述步驟2中,實現(xiàn)交互式地圖圖形輪廓繪制的幾何圖形構(gòu)造算法的腳本程序是由更新函數(shù)作為主輸入函數(shù)。
所述步驟3中,以實例化比例值對象的方式定義可供顯示裝置調(diào)用的比例值,比例值在幾何圖形構(gòu)造過程中以參數(shù)的形式作用于幾何圖形的長度、寬度、角度和位置值的計算結(jié)果,以實現(xiàn)通過改變比例值,達到實時動態(tài)改變圖形的幾何形狀。
所述步驟4中,以實例化控制點對象的方式定義可供顯示裝置調(diào)用和渲染的控制點對象,控制點對象是幫助用戶以交互的方式改變圖形形狀和位置的控制器,在腳本程序中對控制點對象進行聲明、定義顯示位置、定義并實現(xiàn)其鼠標(biāo)移動事件。
所述步驟(二)中,腳本驅(qū)動的圖形構(gòu)造文件與圖形的對應(yīng)關(guān)系是一對一的關(guān)系;多個圖形組成一個圖形集合,多個圖形集合組成一個圖形類別集,符號管理器包含多個圖形類別集。
所述步驟(四)中,輸出到顯示裝置中的交互式地圖圖形繪制所需元素包括:圖形幾何信息、控制點信息、控制比例值信息和繪制屬性信息。
本發(fā)明的方法可以實現(xiàn)腳本語言驅(qū)動的層次化圖形構(gòu)造方法,通過基于Lua腳本的圖形構(gòu)造層、符號文件注冊層、輸入接口層、輸出接口層,實現(xiàn)地圖圖形的交互式動態(tài)輸入、構(gòu)造和輸出。相比現(xiàn)有傳統(tǒng)的繪制方法,本發(fā)明通過層次化圖形構(gòu)造的方法,實現(xiàn)了地圖圖形構(gòu)造算法與繪制分離,突破了傳統(tǒng)地圖圖形符號缺乏交互功能或線面圖形符號添加、修改和刪除需要重新編譯系統(tǒng)的弱點,使得地圖圖形符號庫中符號的維護和擴展變得更加高效和低成本。通過該方法構(gòu)造的矢量圖形具有良好的交互性,能很好地應(yīng)對地理對象豐富多樣性的特點,滿足不同類型不同層次的圖形構(gòu)造要求,增強地理實體對象的繪制能力和信息表達能力。
附圖說明
圖1是本發(fā)明方法的流程示意圖;
圖2是地圖圖形符號的存儲組織結(jié)構(gòu);
圖3表示的含義包括:鐵道線路圖形的效果示意、圖形基本點和控制點、拖動控制點后圖形的變化;
圖4是(a)受災(zāi)區(qū)域分布范圍和(b)人口聚集區(qū)域范圍圖形示意及構(gòu)造流程圖。
具體實施方式
下面對本發(fā)明實施例中的技術(shù)方法和流程進行清楚、完整的描述。地圖圖形符號種類繁多且方法各異,其中本文所描述的,開發(fā)實現(xiàn)用于構(gòu)造圖形的Lua腳本程序的實施例僅是本發(fā)明中的部分實施例,而不是全部實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明基于圖形構(gòu)造腳本文件編寫、圖形構(gòu)造腳本文件注冊、繪制基本點輸入、繪制元素及屬性輸出四個層次進行地圖圖形符號構(gòu)造,具體包括以下四個部分:
第1部分開發(fā)實現(xiàn)用于構(gòu)造圖形的Lua腳本語言程序,根據(jù)層次結(jié)構(gòu),實現(xiàn)其圖形構(gòu)造的主要組成元素,包括:生成圖形輪廓的圖形算法、繪制屬性、比例值、控制點、控制參數(shù)等。本圖形庫主要涉及的交互式地圖幾何圖形元素包括:獨立直線、獨立曲線、封閉直線、封閉曲線及多線條組合圖形等。
第2部分設(shè)計實現(xiàn)Lua腳本文件注冊接口層,用于注冊圖形構(gòu)造的Lua腳本文件到顯示裝置中的圖形符號管理器,Lua腳本文件是用于存儲構(gòu)造圖形的腳本代碼,需要將其注冊到顯示裝置,供顯示裝置進行調(diào)用和執(zhí)行圖形構(gòu)造。
第3部分設(shè)計實現(xiàn)輸入接口層,用于實現(xiàn)輸入圖形構(gòu)造基本點到Lua腳本程序中,在本發(fā)明中腳本語言是層次化圖形構(gòu)造的核心部分,但交互式圖形輸入功能和接口不在Lua腳本語言中進行實現(xiàn)。圖形構(gòu)造基本點交互式采集程序,采用C++接口層開發(fā)實現(xiàn),通過Lua的虛擬棧輸入到圖形構(gòu)造的Lua腳本中。
第4部分設(shè)計實現(xiàn)圖形繪制元素輸出接口層,用于實現(xiàn)從Lua腳本中輸出圖形輪廓、繪制屬性、比例值、控制點、控制參數(shù)等圖形繪制元素。
所述第1部分開發(fā)實現(xiàn)用于構(gòu)造圖形的Lua腳本程序主要內(nèi)容和流程為:
A.為每個圖形符號創(chuàng)建一個對應(yīng)的Lua腳本文件,并進行規(guī)則命名,將創(chuàng)建的Lua腳本文件索引信息添加到符號管理器配置文件中,使得該腳本文件可以被注冊程序調(diào)用。
B.在Lua腳本文件中聲明該圖形輸出元素,主要包括幾何對象、控制點對象、比例值、最多最少點數(shù)控制,其中幾何對象的聲明方式為PolyLine:new(),控制點對象的聲明方式為controlHandle:new(),比例值對象的聲明方式為scaleDouble/scaleDoubleF:new(參數(shù)值,"參數(shù)值說明"),最大最小點數(shù)控制變量為maxControlNum和minControlNum。
C.以function update(lstPoint)作為主函數(shù),編寫Lua腳本代碼,Lua腳本代碼需要實現(xiàn)的邏輯和功能主要包括:a,基本點由函數(shù)參數(shù)lstPoint傳入,根據(jù)基本點構(gòu)造特定圖形的算法;b,將比例值做為參數(shù)加入到圖形的構(gòu)造算法中,使得可以通過改變比例值達到改變圖形幾何形態(tài)的效果;c,根據(jù)圖形構(gòu)造算法原理和控制點用途,設(shè)置控制點顯示位置;d.實現(xiàn)每個控制點的posMove(pos)函數(shù),設(shè)計程序算法,通過傳入的鼠標(biāo)移動控制點的實時位置,重新計算相應(yīng)比例值對象的值,達到隨著控制點移動,實時改變圖形幾何形態(tài)的作用。
D.定義和設(shè)置圖形繪制的其它元素,包括線條是否閉合、是否啟用填充、線條顏色及填充顏色、圖形內(nèi)嵌文字及文字顯示位置、文字樣式、線條樣式等。
所述第2部分用于注冊和管理Lua腳本文件的圖形符號管理器主要通過四個層次來實現(xiàn)對圖形符號的分類分層管理,包括:符號管理器(ISymbolContainer),符號類別容器(ISymbolLib),圖形集合(ISymbolSet),圖形符號(ISymbol)。其層次關(guān)系是符號管理器中可以添加多個符號類別容器中,符號類別容器中可以包含任意多個圖形集合,圖形集合中可以包括任意多個圖形符號,用于實現(xiàn)圖形構(gòu)造的Lua腳本文件索引信息被注冊在ISymbol接口中。
所述第3部分輸入接口層主要包括三個層次,圖形繪制元素初始化(initSymbol)、創(chuàng)建圖形幾何對象(buildSymbol)、實時更新圖形繪制基本點(updateSymbol),其中圖形繪制元素初始化主要用于初始化圖形繪制的基本元素,包括存儲圖形輪廓的幾何對象、圖形控制參數(shù)、比例值、控制點對象等。在圖形創(chuàng)建狀態(tài)下,鼠標(biāo)左鍵每次單擊地圖,都將添加圖形構(gòu)造基本點,Lua腳本程序中根據(jù)輸入的基本點序列創(chuàng)建圖形幾何對象;在圖形創(chuàng)建狀態(tài)下,觸發(fā)鼠標(biāo)移動事件時,調(diào)用實時更新圖形構(gòu)造函數(shù)。在輸入接口層當(dāng)中,通過數(shù)據(jù)壓棧的方式,動態(tài)傳入由用戶交互產(chǎn)生的所有圖形繪制的基本點序列,其中輸入接口層中基本點坐標(biāo)信息保存在點序列存儲對象中。
所述第4部分圖形繪制元素輸出接口層,主要實現(xiàn)圖形繪制元素由Lua腳本程序輸出到采用C++開發(fā)的顯示裝置當(dāng)中,輸出的內(nèi)容包括繪制對象及屬性描述信息,輸出層的接口主要包括:用于輸出圖形輪廓對象的getPolyLine接口、用于輸出文字對象的getText接口、用于輸出控制點對象的getControlHandle接口、用于輸出比例值對象的getScale接口、用于輸出新增加的基本繪制點的line_addp接口、用于輸出圖形輪廓線是否為虛的line_dotted接口、用于輸出對象填充屬性的line_set_draw_state接口、用于輸出線條繪制顏色的line_setColor接口、用于輸出控制點位置的set_controlHandlePos接口、用于輸出比例值的set_ScaleValue接口以及用于輸出文字及線條其它樣式的相關(guān)接口。
采用本方法構(gòu)造的地圖圖形符號,實現(xiàn)了腳本語言驅(qū)動的交互式地圖圖形符號制作方法,基于符號制作和管理顯示分離的原則,結(jié)合腳本語言解釋器,實現(xiàn)了腳本驅(qū)動的地圖圖形符號文件注冊、繪制元素及屬性輸入輸出裝置。
實施例1
本實施例提供一種腳本驅(qū)動的層次化圖形構(gòu)造方法,基于本方法的鐵路圖形其核心步驟流程如圖1所示。具體實施時,包括以下步驟:
A.編寫用于實現(xiàn)圖形構(gòu)造的Lua腳本代碼文件,本實施例選取鐵道線路圖形,來說明基于本發(fā)明所述的技術(shù)方案構(gòu)造圖形的典型過程,鐵道線路圖形如圖3所示:
1.定義實現(xiàn)圖形構(gòu)造所需要的幾何存儲對象,定義為全局變量。實現(xiàn)表示鐵道線路圖形所需要的存儲對象為三個,即鐵道的左右兩條軌道的平行線和表示鐵路軌枕的等間距平行橫線。
2.設(shè)置輸出圖形的顏色,鐵路軌道線為紅色,鐵路軌枕為黑色。
3.定義控制點,該圖形定義兩個控制點,分別用于調(diào)用圖形整體寬度和軌枕間距。
4.定義比例值,該圖形共定義兩個比例值,用于輔助上述兩個控制點實現(xiàn)其改變圖形寬度和軌枕間距的功能。
5.定義圖形構(gòu)造最多最少控制點數(shù),實現(xiàn)該圖形構(gòu)造最少需要2個基本點、最多支持3000個基本點。
6.聲明其它全局對象,這些對象都是實現(xiàn)圖形構(gòu)造算法的輔助對象或變量,主要包括:表示鐵道左右鐵軌的曲線存儲對象、比例尺、長度、角度等輔助對象或變量。
7.在update(lstPoint)函數(shù)中實現(xiàn)圖形構(gòu)造算法,圖形構(gòu)造基本點序列通過lstPoint.vertex[i]獲取,將圖形構(gòu)造算法計算得到的構(gòu)造圖形的點序列存儲在聲明的幾何對象中,圖形構(gòu)造算法中需要加入比例值參數(shù),使得能通過改變比例值達到改變圖形的效果。
8.在update(lstPoint)函數(shù)中設(shè)置控制點的顯示位置,在本實施例中第一個控制點的顯示位置定義在鐵路左側(cè)軌道的起點,第二個控制點的顯示位置定義在鐵道第二根軌枕的中點位置。
9.實現(xiàn)兩個控制點的posMove(pos)函數(shù),posMove函數(shù)的內(nèi)容是為了根據(jù)鼠標(biāo)實時移動控制點的位置去改變比例值,上述步驟6中已經(jīng)實現(xiàn)將比例值作為參數(shù)加入在圖形構(gòu)造的算法之中,此處改變比例值便可實現(xiàn)圖形形狀的改變。
其具體的軟件方法,主要編碼流程和方法如下所示:
B.將用于實現(xiàn)圖形構(gòu)造的Lua腳本文件在符號管理器中進行注冊,符號管理器的層次結(jié)構(gòu)如圖2所示,符號管理器組織層次從大到小依次為符號管理器、圖形類別集、圖形集、圖形。符號管理器是設(shè)計在程序啟動時最先進行初始化,初始化過程中會創(chuàng)建并實例化其符號工廠成員變量mSymbolFactory,圖形類別集、圖形集和圖形都是通過符號工廠創(chuàng)建,將通過符號工廠創(chuàng)建的圖形類別集添加到其父容器符號管理器中,圖形集添加到父容器圖形類別集中,圖形添加到其父容器圖形集當(dāng)中。其具體的軟件方法,如下代碼所示:
ISymbolFactory*mFactory=pSymbolContainer->getSymbolFactory();//獲取符號工廠
ISymbolLib*mLib=pFactory->createSymbolLib();//創(chuàng)建圖形類別集
mLib->setLibName("名稱");mLib->setLibID(ID);//設(shè)置分類集名稱和ID
ISymbolSet*mSet=pFactory->createSymbolSet();//創(chuàng)建圖形集
mSet->setSymbolSetName("名稱");mSet->setSymbolSetID(ID);//設(shè)置名稱ID
ISymbol*mSymbol=pFactory->createSymbol(類型,ID,"描述");//創(chuàng)建圖形
mSet->addObject(pSymbol);mSymbol->setSymbolSet(pSet);//將圖形綁定到圖形集
mLib->addObject(pSet);mSet->setSymbolLib(pLib);//將圖形集綁定到圖形類別集
pSymbolContainer->addObject(mLib);//將圖形類別集保存到圖形容器當(dāng)中。其中圖形符號的索引組織形式為:symbolRegeister(15,"99/03/10/15.lua")。
C.輸入圖形構(gòu)造所需要的基本點,將交互式圖形構(gòu)造過程分為三個階段:(1)在激活符號后處于圖形創(chuàng)建狀態(tài)時,鼠標(biāo)左鍵第一次單地圖時進行圖形初始化;(2)在創(chuàng)建狀態(tài)下,鼠標(biāo)左鍵每次單擊地圖,都會輸入圖形構(gòu)造所需要的基本點,進行圖形的重新構(gòu)造;(3)在創(chuàng)建狀態(tài)下,鼠標(biāo)在地圖上移動都會進行實時更新圖形構(gòu)造操作,實現(xiàn)圖形實時動態(tài)交互。在第一階段圖形初始化階段,主要依次完成以下處理流程:1.創(chuàng)建用于保存圖形構(gòu)造基本點序列的存儲對象;2.根據(jù)符號對應(yīng)的腳本文件注冊信息,調(diào)用圖形構(gòu)造腳本文件解釋器加載圖形構(gòu)造腳本文件和依賴算法庫文件;3.初始化用于Lua腳本程序接收進行數(shù)據(jù)輸入輸出操作的Table對象,并把它放在棧頂。在圖形構(gòu)造階段依次完成以下處理流程:1.將新增加的圖形構(gòu)造基本點添加到存儲序列中;2.創(chuàng)建基本點序列中各點的對應(yīng)的控制點(controlHandle)對象,并將這些控制點添加到控制點容器中。在實時更新圖形階段完成以下處理流程:1.根據(jù)鼠標(biāo)移動位置,更新繪制基本點序列;2.將當(dāng)前產(chǎn)生的基本構(gòu)造點序列和地圖比例尺參數(shù)進行進棧操作,為將這些構(gòu)造信息傳入腳本文件做準(zhǔn)備;3.調(diào)用Lua腳本文件的update函數(shù),將用于圖形構(gòu)造的基本點信息傳入圖形構(gòu)造腳本代碼當(dāng)中。
D.基于Lua腳本構(gòu)造完成的圖形在繪制和顯示之前需要輸出到顯示裝置之中,圖形輸出的實施內(nèi)容和流程主要包括:
1.輸出用于繪制和顯示的圖形輪廓坐標(biāo)點序列,顯示裝置中用于接收輸出圖形的函數(shù)為getPolyLine(lua_State*L),在該函數(shù)中將輸出的輪廓對象創(chuàng)建為可以直接用于繪制和顯示的對象,輸出的輪廓對象包括有該對象是否閉合的屬性。
2.輸出控制點對象,顯示裝置中用于接收從Lua圖形構(gòu)造腳本中輸出的控制點對象的函數(shù)為getControlHandle(lua_State*L),獲取其坐標(biāo)及onMove成員函數(shù)后,便能在顯示裝置中創(chuàng)建可交互的控制點對象。
3.輸出比例值對象,顯示裝置中用于接收從Lua圖形構(gòu)造腳本中輸出的比例值對象的函數(shù)為setParamValue(lua_State*L),通過該函數(shù)將接收到的比例值對象被創(chuàng)建為可以在顯示裝置中調(diào)整修改的成員變量。
4.輸出圖形輪廓顏色,本實例采用的鐵道線路符號,設(shè)計為軌道為紅色,軌枕為黑色,顯示裝置中用于接收圖形輪廓線條顏色的接口為line_setColor(lua_State*L)。通過此接口可以實現(xiàn)在顯示裝置中設(shè)置線條顏色。
顯示裝置在拿到輸出的鐵路線路圖形輪廓坐標(biāo)點序列、控制點對象、比例值等對象后,即可調(diào)用圖形繪制和顯示接口,進行圖形的繪制和顯示。
實施例2
本實施例提供一種腳本驅(qū)動的層次化圖形構(gòu)造方法,其構(gòu)造方法中的第二、三和四部分的實現(xiàn)流程對于每一個圖形來說都是相同的,但第一部分,編寫用于實現(xiàn)圖形構(gòu)造的Lua腳本代碼部分對于每個圖形都是不同的,本文以描述“受災(zāi)區(qū)域分布范圍”和“人口聚集區(qū)域范圍”圖形為例,如圖4所示,進一步說明實施圖形構(gòu)造的Lua腳本文件代碼實施方法和流程。
受災(zāi)區(qū)域分布范圍圖形,該圖形主要包括一個外接多邊表、多邊中心文字標(biāo)注、多邊形線條填充這三個對象,用于該構(gòu)造圖形的Lua腳本文件軟件實施方法如下:
(1)定義圖形輸出元素及屬性:
outLine=PolyLine:new();outLine:setFillType(ESF_Bias_L);//設(shè)置線條填充
outLine2=PolyLine:new(true);//輸出表示折線區(qū)域和內(nèi)部填充線的兩個線條對象
minControlNum=2;maxControlNum=2000;//最少輸入2個點,最多2000個點
sizeHandle=controlHandle:new();sizeParam=scaleDouble:new(0.1,"符號文字的大小");定義輸出用于控制文字大小的控制點和比例值
text1=innerText:new(0);text1:setText("災(zāi)");//定義輸出文字對象及內(nèi)容
function update(lstPoint)
……//初始化數(shù)據(jù)處理
insertAll(lstPoint.vertex,vs);vs:bind(outLine);//將基本點插值成連續(xù)的線,并綁定在輸出元素中
……//將需要的點插入或綁定到輸出元素中
centerPos=Vector2:new(centerx,centery);//計算得到多邊表中心點,作為文字顯示位置
……
text1:setCenter(c);text1:setDst(c+dir*length*sizeParam:value());
sizeHandle:updatePos(c);//設(shè)置文字顯示位置及尺寸大小,設(shè)置控制點位置
end
function sizeHandle:onMove(pos)//改變圖形大小控制點函數(shù)
……
v,sig=getProjection(pos-centerPos,direction*-1);//計算控制點移動向量;
……
sizeParam:setValue(percent*5);//重新設(shè)置比例值參數(shù)
……
end
B.描述人口聚集區(qū)域范圍圖形,該圖形主要包括表示區(qū)域的封閉曲線和曲線內(nèi)部四個簡單描述人物的圖形,用于構(gòu)造該圖形的Lua腳本文件軟件實施的主要方法如下:
(1)定義輸出元素
outLine=PolyLine:new(true);shape1=PolyLine:new();//輸出幾何對象
peopleUp=scaleDouble:new(1,"內(nèi)部符號的大小");//調(diào)整大小的比例值
peopleCenterX=scaleDouble:new(0.0,"內(nèi)部符號位置X坐標(biāo)");//調(diào)整X坐標(biāo)比例值
peopleCenterY=scaleDouble:new(0.0,"內(nèi)部符號位置Y坐標(biāo)");//調(diào)整Y坐標(biāo)比例值
peoplePosHandle=controlHandle:new();peopleSizeHandle=controlHandle:new();
//用于調(diào)整曲線區(qū)域內(nèi)部人物圖形位置和大小的控制點。
function effect.bind()//繪制人物圖形函數(shù)
……//省略部分算法為,根據(jù)中心點,計算人物兩條手臂的起始點和終點,保存在P1,P2,P3,P4這四個點對象中
shapeArm=PolyLine:new(true);//新建幾何對象,用于保存表示人物手臂的圖形
shapeArm:add(p2,p3);shapeArm:add(p3,p1);//將四個點添加到保存人物手臂的圖形中
p5=(p2+p3)/2+ld:rotate(-90)*l*2.1;//以人物手臂中點為起點,求算正下方相隔一定距離的另一個點,以這兩個點的線段做為表示人物腿部的線段
p6=(p1+p3)/2+ld:rotate(-90)*l*2.1;//表示另一條腿的線段
shapeLeg=PolyLine:new();//定義表示腿部的輸出元素,
shapeLeg:add((p2+p3)/2,p5);shapeLeg:add((p1+p3)/2,p6);
//將計算好的表示人物兩條腿的線段,添加到對應(yīng)的輸出元素中
p3=p3-d*l/2;c1=circle:new(0,p3,l/2);//計算表示頭部的圓形及中心位置
shapeCircle=PolyLine:new(true);c1:bind(shapeCircle)//將該圓形輸出
function update(lstPoint)//主函數(shù)部分
……//用于生成曲線封閉區(qū)劃的代碼
……//求得封閉曲線中心坐標(biāo),保存在變量c當(dāng)中
effect.p=c;effect.bind();//根據(jù)曲線區(qū)域點,調(diào)用構(gòu)造第一個人物
……以前類推,構(gòu)造第二、三、四個人物
end
function triangleSizeHandle:onMove(pos)//移動改變大小的控制點時調(diào)用的函數(shù)。
function trianglePosHandle:onMove(pos)//移動改變區(qū)域內(nèi)人物圖形位置控制點時的調(diào)用函數(shù)。