1. |
      |
      |

      基于嵌入式Linux的嵌入式GIS的設計與實現

      摘要:隨著手持設備的飛速發展,嵌入式GIS(地理信息系統)的應用日益廣泛,而嵌入式Linux由于其開放性、廉價性、健壯性和安全性,越來越廣泛地成為嵌入式GIS的主要開發平臺。針對基于嵌入式Linux的嵌入式GIS的實現進行了整體上的設計,并介紹了GPS(全球定位系統)...

      作者:成潔,呂遵明,敖雪來源:網絡|2007年02月14日

      摘要 : 隨著手持設備的飛速發展 , 嵌入式 GIS( 地理信息系統 ) 的應用日益廣泛 , 而嵌入式 Linux 由于其開放性、廉價性、健壯性和安全性 , 越來越廣泛地成為嵌入式 GIS 的主要開發平臺。針對基于嵌入式 Linux 的嵌入式 GIS 的實現進行了整體上的設計 , 并介紹了 GPS( 全球定位系統 ) 通信代理和嵌入式 GIS 人機交互應用程序。

      ?

      關鍵詞 : 嵌入式 GIS; GPS; NMEA0183 協議 ; Qte/Qtop ia

      ?

      引 言

      ?

      嵌入式 GIS( 地理信息系統 ) 是指 GIS 在嵌入式設備例如掌上電腦、手機等手持設備上的應用??蔀?/span> GIS 提供一種移動式的應用 , 具備 GIS 的基本功能 , 例如電子地圖瀏覽、空間位置信息編輯等 , 若設備中包含 GPS( 全球定位系統 ) 模塊或外接 GPS 設備 , 則還可提供 GPS 定位、測距、測速等功能。

      ?

      目前 , 大部分嵌入式 GIS 系統都是以 Windows CE 為基礎進行開發的 , 這是由于 W indows 系統在 PC 市場占有的絕對優勢和巨大影響力造成的。但其在開發成本、軟件自主權以及安全性方面都存在一些問題。而 Linux 由于其自身的開放性、廉價性、健壯性、實時性和安全性已經成為越來越多的嵌入式應用開發的首要平臺。在嵌入式 L inux 環境下實現 GIS 也相應地成為嵌入式 GIS 發展的一個重要方面。但是 , 國內外目前基于 L inux 的嵌入式 GIS 的研究相對滯后 , 因此 , 研究基于嵌入式 Linux 的嵌入式 GIS 開發對于實現具有自主知識產權的高性能、高安全性的嵌入式 GIS 具有重要意義。

      ?

      實現方案

      ?

      本文介紹的基于嵌入式 L inux 的嵌入式 GIS 是運行于安裝有 Qtop ia 環境的手持式設備的應用。本文設計的嵌入式 GIS 應用可用于兩種情況 : 一種是手持設備上安裝有 GPS 模塊 ; 另一種是手持設備上沒有安裝 GPS 模塊 , 而是通過網絡獲取 GPS 信息。

      ?

      1 所示為嵌入式 GIS 應用程序的功能結構示意圖。它主要有兩部分組成 : 一部分為與用戶進行交互的應用程序部分 , 另一部分為與 GPS 設備進行通信的后臺代理程序 , 此代理程序需與 GPS 設備處于同一物理位置 , GPS 設備通過串口進行通信 , 它與 GIS 應用程序可位于同一設備中 , 也可位于不同的位置 , 通過網絡進行通信。

      ?

       

      GPS 通信代理程序的實現

      ?

      GPS 設備與嵌入式平臺之間進行數據傳送 , 大多采用異步串行傳送方式 , GPS 作為 DTE ( 數字終端設備 ) 與嵌入式平臺之間通過 RS-232 串行通信接口進行數據交換。因此 , GPS 的數據通信實際上即完成了 Linux 下的串口編程。兩者之間的通信協議有很多種選擇 , 而目前絕大多數 GPS 生產廠商都采用的是 NMEA0183 通信協議。

      ?

      NMEA0183 通信協議

      NMEA0183 協議是 GPS 串口通信的通信協議 , 在完成 GPS 通信時 , 并不需要了解協議的全部內容 , 只需了解通信基本參數和所需信息的語句格式 , 從中選取有用信息 , 而忽略其他信息。

      ?

      1)NMEA0183 的基本通信參數

      ?

      符合 NMEA0183 標準的通信參數為 : 波特率 =4 800 bit/ s, 數據位 = 8, 奇偶校驗 : , 停止位 = 1 位。

      ?

      2)NMEA0183 的報文格式

      ?

      NMEA 0183 協議報文的語句串 (ASCII 字符 ) 格式全部信息見圖 2 。

      ?

       

        具體內容為 :

      : 串頭 , 表示串開始 , 所有 GPS 語句的起始標志 ;

      AA: 識別符 ;

      XXX: 語句名 ;

      ddd.ddd: 數據字段 , 字母或數字 ;

      * : 星號 , 串尾 ;

      hh: $與 3 之間所有字符代碼的校驗和 ;

      : 回車控制符 ;

      : 換行控制符。

      ?

      在實際的 GPS 應用中 , 并不會用到 NMEA 的全部信息 , 而是根據具體的需要 , 從中選取有用的信息 , 忽略其余的信息內容。

      ?

      例如 : GPRMC, 152252, A, 2513. 3072, N,10346. 3723, E, 0. 0, 230. 4, 250503, 1. 3 ,W,A , *02

      ?

      其中 : GPRMC 為串頭 , 表示此語句為定位語句 ; * ”之前的內容為數據字段 ; 152252 ”為 UTC ( 協調世界時間 ) 24 小時制的標準時間 , 格式為“時時 / 分分 / 秒秒” ; A ”表示信號接收狀態 , A ”表示接收正常 , 也可能為“ V , 則表示一個警告 , 與衛星通信不正常 ; 2513. 3072表示緯度值; N ”標明南北半球 , N ”表示北緯 , S ”表示南緯 ; 10346. 3723表示經度值; E ”標明東西半球 , E ”表示東經 , W ”表示西經 ; 0. 0表示速度; 230. 4 表示方位角, 它的范圍為 000. 0 359. 9; 251205 表示 UTC 的日期 , 格式為“日日 / 月月 / 年年” ; 1. 3表示磁偏角, 范圍為 000. 0 180. 0; W ”表示地磁變化方向。

      ?

      GPS 設備與代理程序的串口通信

      嵌入式 linux 操作系統使用 POSIX termios 接口來控制串口的行為。在系統的頭文件 < termios. h > , POSIX. 1 定義了一個查詢和操縱終端的標準接口 termios, 它包含了終端特性的完整描述。定義如下 :struct termios{

        ? unsigned short c_iflag;   / / 輸入模式標志

        ? unsigned short c_oflag;   / / 輸出模式標志

        ? unsigned short c_cflag;   / / 控制模式標志

        ? unsigned short c_lflag;   / / 本地模式標志

        ? unsigned char c_line;   / / 控制協議

      unsigned char c_cc[NCCS]   / / 控制字符 }

      ?

      實現與 GPS 設備的通信 , 實質上就是完成一個串口編程 , 對串口的屬性進行正確的配置 , 從接收到的 GPS 輸出數據中選取有用的信息進行處理的過程。在 L inux 操作系統中 , 所有的設備都是被當做文件來進行操作的 , 所有的設備以設備文件的形式存儲在目錄 /dev/ 下。對串口進行數據采集的過程簡單描述如下 :

      int fd = open ( " /dev/ ttyS0" ,O_RDWR |O_NOCTTY )  

      / / 打開串口設備 ,O_RDWR 表示以讀寫方式打開 ,O_NOCTTY 表示串口不是控制終端

      struct termios old_op tions, new_op tions  

      / /old_op tions 用于保存原有的設備工作方式 , new_op tions 用于設置新的設備工作方式

      tcgetattr ( fd, &old_op tions)   / / 獲取當前設備方式 ( )   / / 設置結構體 new_op tions 中的 c_iflag 、 c_oflag 、 c_cflag 、

      c_lflag c_cc, 再用 cfsetispeed ( ) cfsetospeed ( ) 函數設置波特率

      tcsetattr ( fd, TCSANOW, &new_op tions) ;   / / 設置新的設備方式

      / / 完成終端的設置后 , 處理串口設備的 GPS 數據輸入 , 從中選取有用的信息

      / / 例如需選取 GPS 輸出數據中的定位信息

      if ( ( buf[O ] = = ) &&( buf [ 3 ] = = R) &&( buf [ 4 ] = =M)

      &&( buf[ 5 ] = =C) )

      / / 檢查語句串頭 , 若為 RMC 則表示此語句為定位語句

      {/ / 檢驗校驗和 , 如果校驗和正確則繼續 , 否則返回 if ( buf[ i ] = , ) {   / / 提取并分解各逗號間的數據 }

      }

      ?

      通過以上代碼就可把 GPS 輸出數據中的有用信息提取出來 , 這些取出的數據 , 可進行一些處理例如格式變換或直接傳送給嵌入式平臺的 GIS 應用程序。

      ?

      上一篇:GPS特點

      下一篇:基于Windows Mobile 5.0的GPS應用程序開發

      色AV永久无码AV影院