您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子百科>通信技術(shù)>衛(wèi)星通信>

GIS地圖開發(fā)(二) - GIS地圖開發(fā)

2018年01月15日 18:33 電子發(fā)燒友網(wǎng) 作者: 用戶評論(0
關(guān)鍵字:GIS(42039)

五、 封裝地圖

有了坐標(biāo)轉(zhuǎn)換類、圖層類、圖層列表類,就可以利用它們做出一個具有縮放平移、圖層管理等功能的地圖了,但為了更方便地對地圖進行操作,還需要對這些類進行組合封裝。新建一個類WeatherMap,添加Coordinator和LayerList類的實例作為它的屬性,為了更符合大家操作習(xí)慣,將Coordinator類的實例作為私有成員,將地圖坐標(biāo)轉(zhuǎn)換等方法加入WeatherMap類,也就是說地圖坐標(biāo)轉(zhuǎn)換中,不訪問Coordinator,而要調(diào)用WeatherMap類的方法。類圖如下:

?GIS地圖開發(fā)

再回到抽象圖層類CustomLayer,它有一個成員Map,即為WeatherMap對象,在將圖層加入圖層列表時會自動賦值。在編寫CustomLayer的子類時,可調(diào)用它來進行坐標(biāo)轉(zhuǎn)換和地圖操作。

為了使地圖在繪制復(fù)雜圖形過程中不至于假死,并在繪圖過程中能隨時中斷繪圖,如快速縮放平移地圖中可終止前次繪圖過程直接繪制最后一次,地圖繪制使用了多線程,但多線程增加了代碼編寫難度,特別是多線程操作UI,對程序流程造成了一定混亂,程序結(jié)構(gòu)受到影響,所幸并不會對圖層代碼造成困難。

六、 再次封裝-增加UI

上面已完成了地圖繪制的核心代碼,為了使代碼編寫更加容易,需要對WeatherMap類再次進行封裝(MapView類),加入UI部分,即給地圖加一個具有界面的殼,并在上面實現(xiàn)地圖的操作如縮放、拖動功能。

MapView從PictureBox類繼承,內(nèi)建了WeatherMap類的實例,在MapView的Refresh()方法中調(diào)用WeatherMap.Render()對地圖進行繪制。

為了完成對地圖的操作,F(xiàn)reeMicaps定義一個IMapTool接口,包含了鼠標(biāo)和鍵盤操作方法,MapView類內(nèi)建一個IMapTool接口成員,MapView的鼠標(biāo)和鍵盤操作,將被IMapTool接口的實例接管,在實現(xiàn)IMapTool接口的類中,可對地圖做各種操作,如平移、縮放等操作,這個對象可隨時替換以實現(xiàn)不同方式的地圖操作。在FreeMicaps中,已完成一個實現(xiàn)IMapTool接口的類ZoomTool,此類為默認(rèn)的地圖縮放和平移工具。IMapTool接口類圖如下:

?GIS地圖開發(fā)

另外,在MapView中,還引入了一個當(dāng)前圖層的概念CurrentLayer,用它來表示當(dāng)前操作的圖層,后面用它來實現(xiàn)圖層元素拾取、圖層工具條等功能。

MapView類圖如下:

?GIS地圖開發(fā)

七、 總覽

地圖部分類關(guān)系圖如下:

?GIS地圖開發(fā)

地圖繪制部分活動圖如下:

?GIS地圖開發(fā)

以上已經(jīng)介紹完FreeMicaps地圖部分設(shè)計框架,相信大家的已對設(shè)計思路已有一定了解,此框架不僅適用于天氣圖分析軟件,也適用于一般的GIS系統(tǒng)。本文僅對FreeMicaps的地圖部分框架進行了介紹,未涉及到具體的地圖數(shù)據(jù)讀取及繪制,這些將在下一篇文章中介紹。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

( 發(fā)表人:彭菁 )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?