GIS地圖開發(fā)(二) - GIS地圖開發(fā)
五、 封裝地圖
有了坐標(biāo)轉(zhuǎn)換類、圖層類、圖層列表類,就可以利用它們做出一個(gè)具有縮放平移、圖層管理等功能的地圖了,但為了更方便地對(duì)地圖進(jìn)行操作,還需要對(duì)這些類進(jìn)行組合封裝。新建一個(gè)類WeatherMap,添加Coordinator和LayerList類的實(shí)例作為它的屬性,為了更符合大家操作習(xí)慣,將Coordinator類的實(shí)例作為私有成員,將地圖坐標(biāo)轉(zhuǎn)換等方法加入WeatherMap類,也就是說地圖坐標(biāo)轉(zhuǎn)換中,不訪問Coordinator,而要調(diào)用WeatherMap類的方法。類圖如下:
?
再回到抽象圖層類CustomLayer,它有一個(gè)成員Map,即為WeatherMap對(duì)象,在將圖層加入圖層列表時(shí)會(huì)自動(dòng)賦值。在編寫CustomLayer的子類時(shí),可調(diào)用它來進(jìn)行坐標(biāo)轉(zhuǎn)換和地圖操作。
為了使地圖在繪制復(fù)雜圖形過程中不至于假死,并在繪圖過程中能隨時(shí)中斷繪圖,如快速縮放平移地圖中可終止前次繪圖過程直接繪制最后一次,地圖繪制使用了多線程,但多線程增加了代碼編寫難度,特別是多線程操作UI,對(duì)程序流程造成了一定混亂,程序結(jié)構(gòu)受到影響,所幸并不會(huì)對(duì)圖層代碼造成困難。
六、 再次封裝-增加UI
上面已完成了地圖繪制的核心代碼,為了使代碼編寫更加容易,需要對(duì)WeatherMap類再次進(jìn)行封裝(MapView類),加入U(xiǎn)I部分,即給地圖加一個(gè)具有界面的殼,并在上面實(shí)現(xiàn)地圖的操作如縮放、拖動(dòng)功能。
MapView從PictureBox類繼承,內(nèi)建了WeatherMap類的實(shí)例,在MapView的Refresh()方法中調(diào)用WeatherMap.Render()對(duì)地圖進(jìn)行繪制。
為了完成對(duì)地圖的操作,F(xiàn)reeMicaps定義一個(gè)IMapTool接口,包含了鼠標(biāo)和鍵盤操作方法,MapView類內(nèi)建一個(gè)IMapTool接口成員,MapView的鼠標(biāo)和鍵盤操作,將被IMapTool接口的實(shí)例接管,在實(shí)現(xiàn)IMapTool接口的類中,可對(duì)地圖做各種操作,如平移、縮放等操作,這個(gè)對(duì)象可隨時(shí)替換以實(shí)現(xiàn)不同方式的地圖操作。在FreeMicaps中,已完成一個(gè)實(shí)現(xiàn)IMapTool接口的類ZoomTool,此類為默認(rèn)的地圖縮放和平移工具。IMapTool接口類圖如下:
?
另外,在MapView中,還引入了一個(gè)當(dāng)前圖層的概念CurrentLayer,用它來表示當(dāng)前操作的圖層,后面用它來實(shí)現(xiàn)圖層元素拾取、圖層工具條等功能。
MapView類圖如下:
?
七、 總覽
地圖部分類關(guān)系圖如下:
?
地圖繪制部分活動(dòng)圖如下:
?
以上已經(jīng)介紹完FreeMicaps地圖部分設(shè)計(jì)框架,相信大家的已對(duì)設(shè)計(jì)思路已有一定了解,此框架不僅適用于天氣圖分析軟件,也適用于一般的GIS系統(tǒng)。本文僅對(duì)FreeMicaps的地圖部分框架進(jìn)行了介紹,未涉及到具體的地圖數(shù)據(jù)讀取及繪制,這些將在下一篇文章中介紹。
- 第 1 頁:GIS地圖開發(fā)
- 第 2 頁:GIS地圖開發(fā)(二)
本文導(dǎo)航
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
相關(guān)閱讀:
- [電子說] 中易云GIS場景信息管理平臺(tái)提供強(qiáng)大的空間分析功能 2023-10-21
- [可編程邏輯] 基于FPGA系統(tǒng)Register和Memory的復(fù)位 2023-10-09
- [電子說] GIS組合電器安裝事項(xiàng) 2023-09-26
- [電子說] 潤和軟件HopeStage與超圖軟件 GIS平臺(tái)完成產(chǎn)品兼容性互認(rèn)證 2023-09-25
- [電子說] 淺析C語言中的regiseter關(guān)鍵字 2023-08-25
- [電子說] 變電站GIS室內(nèi)六氟化硫氣體泄露報(bào)警監(jiān)測系統(tǒng)的應(yīng)用方案 2023-08-16
- [電子說] 分布式應(yīng)急指揮中心方案 2023-08-16
- [電子說] 助力GIS配電室氣體減排--六氟化硫SF6氣體在線監(jiān)測報(bào)警系統(tǒng) 2023-07-19
( 發(fā)表人:彭菁 )