基于嵌入式Linux的MapInfo格式地圖顯示
掌握了文件之間的關系之后,可以用C或C++語言編程實現(xiàn)對.TAB或.MIF文件的讀取。為了存儲對應地理圖元的記錄的信息,本文構造了如下的數(shù)據(jù)結構,如圖2所示:
其中NTz結構指明該文件包含多少個字段,ONETz指明該字段包含多少個部分,kind指明改部分是點、線還是標注,ONEPART又給出了各個部分包含的坐標點的數(shù)量和位置信息。接下來在MiniGUI中主要對這個ONETz結構進行處理。
圖 2 存儲地理圖元數(shù)據(jù)結構 |
4. 地圖的繪制
4.1 基本的點、線、多邊形的繪制
在把將上一步得到的坐標和坐標系的定義通過高斯投影變換[5],再將得到的坐標經過變換到MiniGUI的顯示窗口,在本文中即平臺的LCD的某個區(qū)域上,按照MiniGUI中定義的POINT類型,最后在MiniGUI中的MSG_PAINT消息中進行地圖的繪制。
進入MiniGUI的繪制窗口前,首先完成對MapInfo格式文件的解析,得到上述的數(shù)據(jù)結構。進入窗口后,根據(jù)不同的地圖元數(shù)據(jù)中指示的類型特點,如點、線、面、文本,調用不同的MiniGUI的繪圖函數(shù),如PollyLineTo、FillPolygon、 TextOut、Circle等函數(shù)在繪制區(qū)進行圖元的繪制。增加坐標的變換和比例尺的分析后,可實現(xiàn)放大,縮小,漫游,測距功能。
4.2 功能擴展
在基本的繪制完成后,還可以根據(jù)之前得到的數(shù)據(jù)結構和MiniGUI庫函數(shù)的API擴展其他的功能。
選取圖元的功能可以通過截取鼠標鍵彈起的信息,得到當前的屏幕位置信息,如果將該位置與線元素的距離比較,如果小于一定的像素閾值,則認為選中,并顯示提示信息;如果是選取面,可以用是否在多邊形內部來判斷是否被選中。
另外,對一些特殊的標注點的圖形顯示,如醫(yī)院、學校,可以采用加載bmp格式的圖標在顯示區(qū)標注。
筆者的平臺要實時的通過串口接受GPS定位坐標和農田采集的信息,通過一個按鈕控制一個線程的開關,該線程讀取串口數(shù)據(jù)記錄到文件中。該線程和MiniGUI之間可采用信號量同步,最終根據(jù)屬性信息對農田區(qū),即MiniGUI的API對多邊形區(qū)域進行著色,產生某種屬性的分布圖。最后還可以將所有農田數(shù)據(jù)整合,得到預測的產量等分布圖等等。
5. 結束語
本文提供了一種面向手持設備的工具嵌入式地圖顯示的具體方案,通過對MiniGUI的移植和對MapInfo格式文件的分析,達到最終地圖的顯示。采用北京市二環(huán)以內的MapInfo地圖進行顯示(含1000個左右的各種圖元),將嵌入式平臺顯示結果(圖3)和PC機上的 MapInfo軟件顯示的結果(圖4)進行對比,顯示效果良好,這種方案支持漫游、查詢、地圖匹配等功能,并可利用Linux和MiniGUI的API進行功能擴展,在手持平臺上很好的滿足一般的地圖顯示的要求,為今后地圖匹配,農田數(shù)據(jù)采集打下了基礎。
本文由北京市教委基金委教育委員會發(fā)展計劃項目支持 項目名稱:CANOPEN現(xiàn)場總線與電動汽車綜合監(jiān)控系統(tǒng)關鍵技術研究項目編號:KZ20041000501
文章創(chuàng)新點:本文提供了一種面向手持設備的工具嵌入式地圖顯示的具體方案--采用Linux和MiniGUI開發(fā),在保證系統(tǒng)穩(wěn)定性的同時,減小系統(tǒng)大小,保持穩(wěn)定性,最終形成一個低成本的但能支持主流MapInfo格式地圖文件的地圖顯示平臺,平臺在小型地圖中應用良好,平臺用途廣泛,可擴展功能,滿足一些對地圖基本操作的應用,為農田信息采集或其它進一步功能的實現(xiàn)打下了基礎。
參考文獻:
[1] 三味工作室 MapInfo6.0 應用開發(fā)指南[M] 北京人民郵電出版社 2001年
[2] 劉瑜,張晶等 地理信息系統(tǒng)——原理、方法和應用[M] 北京 科學出版社 2003
[3] 趙森 地理坐標與直角坐標相互轉換的算法[J] 火力與指揮控制 2001年12月
[4] 胡伍生,高成發(fā) GPS測量原理及其應用[M] 北京 人民交通出版社 2002年
[5] 鄧玉嬌 高斯投影與經緯度投影VC++ 編程轉換——以MIF 文件中投影轉換為例[J]中國地質大學計算機應用研究 2003年
[6] 陳諷,毛洋林,潘志浩 基于嵌入式Linux的圖形界面顯示系統(tǒng)的設計[J] 微計算機信息 2004 20卷 01期 76頁
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關文章:linux教程
評論