日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 平台下基于Qt 的电子地图的绘制

發布時間:2024/3/12 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 平台下基于Qt 的电子地图的绘制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Linux 平臺下基于Qt 的電子地圖的繪制
摘要…………………………………………………………………………………………………………………1
??關鍵詞………………………………………………………………………………………………………………2
??0 引言………………………………………………………………………………………………………………3
??1 電子地圖實現總體設計…………………………………………………………………………………………4
??2 MITAB 庫提取地圖數據模塊……………………………………………………………………………………5
??2.1 讀取MIF 格式文件的空間數據………………………………………………………………………………6
??3 SQLite 數據庫存儲地圖數據模塊 ……………………………………………………………………………7
??4 利用Qt 顯示地圖模塊 …………………………………………………………………………………………8
??4.1 地圖坐標轉換…………………………………………………………………………………………………9
??4.2 圖形對象的顯示………………………………………………………………………………………………10
??4.4 電子地圖的縮放………………………………………………………………………………………………11
??4.5 GPS 模塊………………………………………………………………………………………………………12
??5 結束語……………………………………………………………………………………………………………13
??[參考文獻 (References) ……………………………………………………………………………………14
-
????
--------------------------------------------------------------------------------
正文

1 電子地圖實現總體設計


  系統的硬件平臺是PC 機,軟件平臺選擇的是基于Linux 操作系統的Qt 圖形界面開發平臺 1]。系統設計的流程如圖 所示。圖 電子地圖實現總體設計Fig. Overall design of realizing electronic map

  


2 MITAB 庫提取地圖數據模塊

   MAPINFO 公司并沒有對外公布原始的以矢量形式存儲的數據格式,即TAB 格式。但其提供地圖交換數據格式(MIF,MapInfo Interchange Fomat)[2]供開發人員作二次開發,這種格式的空間數據以ASCII 格式存儲,易生成且可編輯,包含兩個文件(*.mif 和 .mid)。其中 .mif 文件保存了該MapInfo 格式地圖的結構及空間對象的空間信息,而 .mid 文件順序保存了空間的所有屬性信息。嵌入式Linux 中并沒有專門的軟件或插件直接支持MIF 格式的電子地圖。本文采用開放源碼工具MITAB[3]庫從MIF 格式地圖中提取地圖數據。MITAB 提供了兩種讀取MIF 格式地圖的方法:一種是提供 語言應用程序接口,通過調用其中的函數來實現數據的讀寫操作。MITAB 為 語言應用程序接口提供了很完整的文檔資料,編程簡單;另一種是提供C++的接口函數庫,該函數庫可以實現MITAB 的所有功能,但是沒有文檔資料的支持。本課題采用 語言接口讀取地圖,圖 是用MITAB 的語言接口讀取MIF 文件的流程圖。圖 使用MITAB 提取地圖數據流程Fig. Process of using MITAB to obtain map data

  

? ? ?2.1 讀取MIF 格式文件的空間數據

   首先調用mitab_c_open(const char *pzFilename)打開MIF 格式的文件,返回mitab_handle類型的數據,該數據保存了整個mif 文件的所有數據。地圖中有很多圖形對象 MIF 文件把這些圖形對象分為點(point)、直線 line)、折線polyline)、區域 region)、圓弧 arc)、文本 text)、矩形 rectangle)、圓角矩形 rounded rectangle)、橢圓 ellipse)九類。具體提取過程如下:首先,通過調用mitab_c_get_field_count(mitab_handle dataset)函數得到該文件中圖形對象的個數,其參數dataset 為打開地圖文件時返回的數據。讀取圖形對象的feature_id(即該圖形對象在文件中的標識);其次,通過調用 mitab_c_read_feature(mitab_handle dataset,intfeature_id)獲取圖形對象,返回值是mitab_feature 類型的數據,該返回數據包含了當前圖形對象的所有信息;然后,獲取當前圖形對象的類型,通過調用 mitab_c_get_type(mitab_featurefeature)函數;最后,調用相應的函數提取對象里面的數據。調用 mitab_c_get_vertex_x()函數提取緯度,mitab_c_get_vertex_y()函數提取經度,調用 mitab_c_get_pen_color()函數提取畫筆顏色等。最終就可以把所有的圖形對象的數據都提取出來了。讀取完一個圖形對象必須調用 mitab_c_destroy_feature()函數銷毀對象。最后調用mitab_c_close()函數關閉文件。SQLite 數據庫存儲地圖模塊

  


? ? 3 SQLite 數據庫存儲地圖數據模塊

  在Linux 系統下讀取地圖數據,由于地圖數據量大,并且有不斷增大的趨勢,所以單純的文件數據讀取的效率變得越發的不理想,為了提高數據讀取的效率、定位和導航的效 率,我們考慮了采用一個輕量級的數據庫系統來檢索地圖數據。SQLite[4]是2000 年開發出來的一種中小型嵌入式數據庫,可以較為方便的運用到嵌入式系統中,它的源代碼完全開放,可以免費用于任何用途,包括商業目的。SQLite 提供了對SQL92 的大多數支持:支持多表、索引、事務、視圖、觸發和一系列的用戶接口及驅動,簡單易用,速度很快,同時提供了豐富的數據庫接口。它的一個重要的特點是體積 非常小,編譯后也不過幾十KB。根據mif 文件保存圖形對象的格式,在SQLite 數據庫中設計相應的數據表來存儲相應的圖形對象。下面以region 對象為例 如表 。表 數據庫中的地圖數據表Tab. Table of map in database圖形對象類型表結構定義表名對應的SQLite 語句區域經度集緯度集節點數畫筆寬畫筆顏色前景色背景色屬性數據regionCREATE TABLE regionTabale(longitude VARCHAR(300),latitude VARCHAR(300),pointnum INTEGER,penwidth INTEGER,pencolor INTERGER,forecolor INTEGER,backcolor INTERGER,property VACHAR(100))QtSql 模塊提供了與平臺以及數據庫種類無關的訪問SQL 數據庫的接口。Qt 內含SQLite數據庫的驅動,Qt 與SQLite 建立連接之后,就可以使用查詢類(QSqlQuery)執行底層數據庫支持的任何SQL 語句了。利用Qt 數據庫查詢類里面的INSERT 函數就可以把地圖數據導入數據庫,利用SELECT 函數可以把地圖數據從數據庫中導出。然后調用Qt 的繪圖類實現地圖的顯示。

  

? ? 4 利用Qt 顯示地圖模塊

  地圖顯示主要是通過mif 格式地圖中的地圖數據,結合Qt 中的圖形繪圖類實現地圖的顯示。本文中使用的是Qt 中繪圖功能強大的Graphics View[5]。Graphics View 提供了用于管理和交互大量定制的2D 圖形對象平面以及可視化顯示對象的視圖widget,并支持縮放和旋轉功能。Graphics View 使用BSP(二進制空間劃分)樹形可以快速地找到對象,因此即使是包含百萬個對象的大型場景,也能實時圖形化顯示。主要用到的類有 QGraphicsItem、QGraphicsView 和QGraphicsScene 這三個類。Graphics View 提供一個QGraphicsScene 充當的場景即是我們添加圖形的空間,相當于整個世界;一個QGraphicsView 作為視口,也就是我們觀察的窗口,相當于照相機的取景框,這個取景框可以覆蓋整個場景,也可以是場景的一部分;一些QGraphicsItem 作為圖元,Qt內置了很多圖形,比如line、polygon 等,都是繼承自QGraphicsItem。其結構圖參看圖 。圖 Graphics View 結構圖Fig. Structure of Graphics View

  

? ? 4.1 地圖坐標轉換

  Graphics View 坐標基于笛卡爾坐標系統,一個圖元的場景坐標具有 坐標和 坐標。當使用沒有變換的視圖觀察場景時,場景中的一個單元對應屏幕上的一個像素。在GraphicsView 中有三個有效的坐標系統:圖元坐標,場景坐標和視圖坐標。從地圖中提取的經緯度坐標是不能在直接繪制的,需要轉換成Graphics View 里的場景坐標才能顯示的。所以必須要進行坐標轉換。地圖文件中的坐標系統采取的是經緯度坐標,顯示時采取的是場景(Scene)坐標,因此從地圖文件解析 出圖元坐標系統時,需要將圖元的經緯度坐標轉化為場景(Scene)坐標后才能知道在畫布的什么位置顯示圖元。畫布的大小是始終固定不變的,但是它表示的 經緯度范圍可變,而它表示的經緯度范圍就是進行坐標轉換,地圖縮放,地圖平移的基準。為了實現地圖坐標的轉換,自定義一個類Convert,利用這個類, 所有圖元都可以在畫布上找到準確的位置顯示,最終顯示整幅地圖。類定義如下:Class Convert{public:convert();double x1;//畫布左上角代表的經度double y1;//畫布左上角代表的緯度double x2;//畫布右下角代表的經度double y2;//畫布右下角代表的緯度double x;//當前點的經度double y;//當前點的緯度double w;//當前顯示區域的寬度double h;//當前顯示區域的高度double wx;//當前顯示區域經度的范圍double hy;//當前顯示區域緯度的范圍QPoint *point;//存儲坐標轉換后的點QPoint *convertfun(double x,double y);//轉換函數}轉換函數的實現如下:QPointF Convert::convertfun(double x,double y){point=new QPointF(((x-x1)/wx)*w-w/2,((y-y1)/hy)*h-h/2);return *point;}

  

? ? 4.2 圖形對象的顯示

  地圖文件中的圖形對象就是Graphics View 中的圖元。地圖顯示功能就是把地圖數據繪制還原成地圖。將經過坐標轉換后的圖元存儲到QGraphicsItem 類對象, 然后在QGraphicsScene 類對象中繪制出來,最后就能在QGraphicsView 類對象中顯示出來。下面以讀取region 對象為例QPoint *point;//存放圖元節點QPen pen;QVectot pointRegion;//存放一個多邊形所有節點容器QPointgonF *pPolygonF;//多邊形指針QGraphicsPolygonItem *pPolygonItem;/*QGraphicsView 框架下的多邊形圖元,要把圖元封裝成QGraphicsItem 才能夠在該框架里面顯示。 /double brushColor;//存放當前填充顏色double penColor;//存放當前畫筆顏色penColor=mitab_c_get_pen_color(feature);//獲取當前圖形對象的畫筆 顏色if(feature_type==7){for(int pointno=0;i
  4.4 電子地圖的縮放
   QGraphicsView 支持幾何變換,當進行視圖變換時,QGraphicsView 保持視圖的中心,通過應用變換,可以很容易地實現縮放。在視圖類中定義一個放大的槽函數和一個縮小的槽函數,將槽和具有autoRepeat 屬性的QPushButton 進行連接,就可以實現連續的縮放操作。下面是兩個槽函數Public slots:Void zoomIn() {scale(1.5,1.5);}Void zoomOut() {scale(1.5,1.5);}通過以上步驟就可以實現簡單的電子地圖瀏覽,最終程序運行的結果如圖4,放大之后的結果如圖 。其中zoomin 是地圖縮小按鈕,zoomout 是地圖放大按鈕。地圖數據來源于太原市MapInfo 格式的地圖的第一層。圖 太原市電子地圖的第一層圖 放大的電子地圖Fig. First Layer of Taiyuan Electrnic Map Fig. Ampplification of The Electrnic Map

  

? ? 4.5 GPS 模塊

  由于GPS 定位信息內容較少,因此多用RS-232 串口將定位信息 6][7](NAME0183 語句從GPS 接收機送到計算機中進行信息提取處理。通常采取輪詢串口和事件觸發兩種方式對數據進行接收和處理,本系統采用事件觸發方式來提取讀取串口信息。事件采用 Qt 類庫中的Qtimer 類 8],將Qtimer 的timeout 信號與自定義槽slotReadGPSInfo()連接起來。當時間到時(比如1s)系統就會調用slotReadGPSInfo 函數讀取串口信息。對于本文所使用的GPS 接收板,其發送到計算機的數據主要是由幀頭、幀尾和幀內數據組成,根據數據幀的不同,幀頭也不相同,主要有 $GPGGA“、 $GPGSA“、 GPGSV“[5]以及 $GPRMC“等。每種幀頭后的數據也有固定的格式,各幀均以回車符和換行符作為幀尾標識一幀的結束。我們所關心的定位數據如經緯度、速度、時間等均可以 從 $GPRMC“幀中獲得。然后把經緯度坐標轉換成場景坐標,以圖元的形式加載到場景中,就可以實現定位了。
  5 結束語
  該系統 實現電子地圖瀏覽和定位等功能,是嵌入式GPS 定位導航系統的基礎。本文詳細說明了具體的實現步驟。還有很多功能沒有實現,例如導航,值得進一步研究。本方案設計的電子地圖,運行速度快,費用低,很適 合用在旅游景點導游,城市路徑規劃,車輛導航等方面,具有一定的實用價值和經濟價值。

總結

以上是生活随笔為你收集整理的Linux 平台下基于Qt 的电子地图的绘制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 操模特 | 免费日皮视频 | 性欧美bb| 黄色激情视频在线观看 | 天天操狠狠干 | 色综合色| 四虎国产精品永久免费观看视频 | 国产露脸91国语对白 | 美国福利片 | 亚洲制服另类 | 亚洲综合一二三区 | 欧美一卡二卡 | 午夜在线成人 | 国产精品www. | 欧美精品色呦呦 | 亚洲黄色成人网 | 国产一区二区三区乱码 | 天天射日日干 | 日韩精品国产AV | 成人做爰www看视频软件 | 日韩爽爽视频 | 97自拍网| 国产精品成人久久久久 | 亚洲一区二区自偷自拍 | 韩国美女一区二区 | 超碰免费成人 | 成人夜视频 | 91碰碰| 青青操视频在线 | 亚洲免费福利 | 毛片在线免费播放 | 美女视频免费在线观看 | 五月情婷婷 | 男生和女生操操 | 伊人情人综合网 | 蕾丝视频污 | 日本精品久久久 | 亚洲av人人夜夜澡人人 | 国产ts变态重口人妖hd | 久草欧美| 欧美无遮挡 | 成人免费视频软件网站 | av在线资源 | 日韩xxx高潮hd | 亚洲成a人片在线 | 91天天 | 亚洲天堂2024| 亚洲在线中文字幕 | 日韩精品视频观看 | 一二三四区视频 | 色av资源| 中文字幕乱码一区二区三区 | 在线观看av国产一区二区 | 国产69久久精品成人看 | 亚洲一品道 | 亚洲黄色网址大全 | 日本一本久久 | 久草热线 | 亚洲九九九九 | 亚洲伦理一区二区三区 | 天堂√8在线中文 | 亚洲色图激情小说 | 熟女视频一区二区三区 | 精品国产乱码久久久久久久软件 | 超碰在线观看99 | 国语对白av | 成年人免费看视频 | 国产精品一区二区黑人巨大 | 91精品啪在线观看国产线免费 | 国产无遮挡又黄又爽免费网站 | 日本黄色不卡 | 狠狠撸在线视频 | 精品视频区 | 精精国产xxxx视频在线播放 | 国产123| 麻豆精品久久久久久久99蜜桃 | 九九九热视频 | 精品国产乱码久久久久久88av | 和漂亮岳做爰3中文字幕 | 插女生下面 | 偷拍亚洲精品 | 国产做爰免费观看 | 91一区在线观看 | 和黑帮大佬的365 | av中字在线| xxav在线| 九九热在线视频播放 | 芭乐视频色 | 欧美精品福利 | 国产网红无码精品视频 | 国产成人无码久久久精品天美传媒 | 欧美性猛交xxxxx水多 | 中文在线最新版天堂8 | 欧美日韩国产精品一区二区 | 天天摸天天碰天天爽天天弄 | 日韩成人在线网站 | 国产男女猛烈无遮挡免费观看网站 | 黑人欧美一区二区三区 | 久99|