<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 手機(jī)與無(wú)線通信 > 設(shè)計(jì)應(yīng)用 > GPS模塊與ARM-Linux平臺(tái)數(shù)據(jù)傳送研究

          GPS模塊與ARM-Linux平臺(tái)數(shù)據(jù)傳送研究

          作者: 時(shí)間:2011-09-06 來(lái)源:網(wǎng)絡(luò) 收藏
          下面是程序?qū)崿F(xiàn)的關(guān)鍵函數(shù)部分代碼。

          本文引用地址:http://www.ex-cimer.com/article/155815.htm

            /*包含必要的頭文件*/

            #include

            #include

            #include

            #include

            #include

            #include

            #include

            int _Initial(int n_tty_no)

            {

            int ret_tty=-1;

            int ret_thread=-1;

            ret_tty=OpenComPort(n_tty_no,9600,8,“1”,‘N’);/*打開串口,并設(shè)置通信屬性,如波特率,位,有無(wú)奇偶校驗(yàn),停止位等*/

            ret_thread=pthread_create(pthr_id,NULL,_

            Thread_Port_Svc,NULL);/*創(chuàng)建接收線程*/

            …

            }

            void*_Thread_Port_Svc(void*pData)

            {/*接收線程函數(shù)*/

            unsigned char buf_GPS[256];

            int ret_rd_com;

            while(1) {

            bzero(buf_GPS,sizeof(buf_GPS));

            ret_rd_com=ReadComPort((void*)buf_GPS,

            sizeof(buf_GPS));/*讀串口,接收*/

            GPS_Parse_Data(buf_GPS,gps_data);

            /*調(diào)用解析語(yǔ)句函數(shù),*/

            …}

            在GPS_Parse_Data(buf_GPS,gps_data)函數(shù)中每接收一個(gè)GPS語(yǔ)句,調(diào)用一次字符串解析函數(shù)。

            GPS_Parse_Data_Line(char*str_gprs_data_line,GPS_DATA_TYPE*GPS_DATA){

            char*temptr;

            temptr=str_gprs_data_line;

            /*字符串賦給臨時(shí)指針,然后對(duì)其解析*/

            if(strncmp(temptr,RMC_DATA_L,strlen(RMC_DATA_L))==0) {/*解析RMC語(yǔ)句串*/

            startchar(temptr,',');

            temptr=temptr+strlen(temptr)+12;

            /*$GPRMC,HHMMSS.SSS*/

            GPS_DATA->Time.Flag=temptr[0];

            temptr=temptr+27;

            /*A,DDMM.MMMM,N,DDDMM.MMMM,E*/

            …}

            以上只是GPS信息處理的部分代碼。經(jīng)過(guò)交叉編譯調(diào)試下載至目標(biāo)上,運(yùn)行后可得到本地地理位置信息。實(shí)驗(yàn)所得為:時(shí)間10:28:35;緯度:北緯30°46’;經(jīng)度:東經(jīng)103°57’。用戶也可以根據(jù)需要選擇提取GPS的其他語(yǔ)句,只需編寫解析相應(yīng)語(yǔ)句字符串的代碼即可。4.2 GPS坐標(biāo)的轉(zhuǎn)換

            上述所得的結(jié)果屬于WGS84坐標(biāo),而在工程上實(shí)用的大多是國(guó)家坐標(biāo)系,因此GPS數(shù)據(jù)采集結(jié)果的使用就存在與國(guó)家坐標(biāo)系間的坐標(biāo)轉(zhuǎn)換問(wèn)題。一般要通過(guò)兩步轉(zhuǎn)換:首先將上述實(shí)測(cè)經(jīng)緯度坐標(biāo)即WGS84大地坐標(biāo)(L,B)轉(zhuǎn)換為對(duì)應(yīng)于WGS84橢球的高斯平面坐標(biāo)(X84,Y84),然后再經(jīng)過(guò)平面坐標(biāo)轉(zhuǎn)換,將高斯平面坐標(biāo)(X84,Y84)強(qiáng)制附合到本地高斯平面坐標(biāo)系統(tǒng)[4]。

            (1)高斯投影換算

            將GPS采集所得出的大地坐標(biāo)(L,B)轉(zhuǎn)換為高斯平面坐標(biāo)(X84,Y84)。有關(guān)的推導(dǎo)過(guò)程較復(fù)雜,本文只給出結(jié)果:

            

            由上述原理利用EXCEL就可以算出對(duì)應(yīng)的高斯平面坐標(biāo)。

            (2)平面坐標(biāo)轉(zhuǎn)換

            平面坐標(biāo)轉(zhuǎn)換的目的就是將高斯投影換算得出平面坐標(biāo)(X84,Y84)轉(zhuǎn)換為當(dāng)?shù)貒?guó)家坐標(biāo)系的平面坐標(biāo)。下面介紹一種平均轉(zhuǎn)軸相似轉(zhuǎn)換法,以轉(zhuǎn)換為北京54坐標(biāo)系下的平面坐標(biāo)(X54,Y54)為例,說(shuō)明該方法實(shí)現(xiàn)過(guò)程。

            首先,根據(jù)公共點(diǎn)分別在WGS84和北京54系中的高斯平面坐標(biāo),求出該點(diǎn)在兩個(gè)坐標(biāo)系中同一邊的方位角之差?駐?琢和長(zhǎng)度比例系數(shù)?資,然后按下式計(jì)算任一點(diǎn)在北京54系中的平面坐標(biāo)。

            

            將得到的X54,Y54坐標(biāo)可應(yīng)用于GIS系統(tǒng)標(biāo)圖,實(shí)現(xiàn)導(dǎo)航定位。

            ?;贜MEA-0183通信協(xié)議,在Linux下通過(guò)多線程編程實(shí)現(xiàn)了GPS基本定位信息的采集與處理,所得數(shù)據(jù)滿足精度要求,為導(dǎo)航定位系統(tǒng)或GIS系統(tǒng)提供了數(shù)據(jù)基礎(chǔ)。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();