主要內容概述
(視頻教程已經發布:http://edu.csdn.net/course/detail/3422)
(http://edu.csdn.net/course/detail/3420)
1.解析shapefile(.shp)文件。‘
2.將經緯度數據按照墨卡托投進行投影(調用proj.4庫)完成。
3.將數據用OpenGL的方式進行繪制。
上述3方面只是完成初步的繪制,對於要完成一個復雜的地理信息系統還有很大的差距,
下面介紹我設計的簡單的地理信息框架(用於交流,進步)。先上個圖,根據圖來說更加易懂。
其中地圖框架中包含多個物理地理圖層,是真實存在的圖層,所有在該圖層下的數據都會被繪制到圖層上(即一張圖片)。
物理圖層中包含了多個邏輯圖層(Layer),是為了方便應用層使用而設計的邏輯圖層,用於將地圖要素進行分類管理
使用,最后Layer中包含的是真正的地圖要素數據,是真正繪制使用的數據。
在實際的應用中,可以把影像數據作為一個物理圖層,將矢量要素數據作為一個物理圖層,最后將兩個圖層合成輸出。
當然在實際應用中,我增加了一個圖層,即實時繪制層,即將距離測量,面積測量,角度測量等做在該層,這樣在地圖刷新的
時候重新繪制的數據不多,提高程序的性能。
先上一個圖,我目前做的簡單的gis框架(只是滿足我目前的需求,主要的特點就是速度快)。如下圖所示。
初步的完成上面的框架設計后,我得到了上面的結果,在這想與大家分享的是OpenGL在處理多邊形填充區域的時候比較麻煩,我將矢量線和面做了兩個
邏輯圖層,這樣做可以選擇顯示線和面兩中模式。在完成這個效果圖的時候為了追求效率,遇到最大的問題是繪制文字,眾所周知OpenGL沒有繪制文字
的功能,需要自己做,其用到了我前面的隨筆,有興趣的可以自行參考。
為了做標會功能,在做界面花費了我很多精力,為了讓軟件具備跨平台的目的(可以再Andriod手機平台上用),界面我采用OpenGL封裝了一個輕量級的
界面庫(這個很不值得),網上也有很多開源的界面庫,比如Mygui,FastUI,CEGUI等,我都有用過,要不在效率上滿足不了我的要求,要么占用較大的內存,
最后自己只有自己寫了,上圖。
編輯各種常用的圖形界面如下:
最后,我增加了一個曲線模板,即可以把比較好的樣式保存成模板,想用的使用直接拖出來就直接可以應用。
如下所示。
完成了。后續如果大家覺得還好,我會繼續寫,並把代碼分享出來。