鮑萍萍,陳 光,王 朋,王鵬輝
(東華大學(xué) 信息科學(xué)與技術(shù)學(xué)院 上海 201620)
?
GPS定位數(shù)據(jù)的提取與存儲系統(tǒng)的設(shè)計
鮑萍萍,陳光,王朋,王鵬輝
(東華大學(xué) 信息科學(xué)與技術(shù)學(xué)院 上海 201620)
針對傳統(tǒng)的在VC++平臺上實現(xiàn)的GPS定位數(shù)據(jù)的提取與存儲系統(tǒng)已經(jīng)不能滿足系統(tǒng)的實時性和可靠性等需求,以及軟件方面存在擴展性、兼容性、移植性差等問題,運用GPS定位技術(shù)、多線程串口通信處理技術(shù)和數(shù)據(jù)庫存儲訪問技術(shù),應(yīng)用Java語言編寫,在Eclipse開發(fā)工具上設(shè)計并實現(xiàn)了一套GPS定位數(shù)據(jù)的實時提取與存儲系統(tǒng)。測試結(jié)果表明,該系統(tǒng)運行穩(wěn)定,實驗數(shù)據(jù)有效可靠,達到了預(yù)期的目標(biāo)。
GPS;多線程;串口通信;數(shù)據(jù)存儲;Java
引用格式:鮑萍萍,陳光,王朋,等. GPS定位數(shù)據(jù)的提取與存儲系統(tǒng)的設(shè)計[J].微型機與應(yīng)用,2016,35(11):11-13.
隨著衛(wèi)星導(dǎo)航定位技術(shù)的發(fā)展,全球衛(wèi)星定位系統(tǒng)(Global Position System,GPS)成為目前最為常用的一種導(dǎo)航定位系統(tǒng),其全方位、全天候、全時段、高精度等特點使得GPS的應(yīng)用遙遙領(lǐng)先。其原理是用戶通過GPS接收機接收衛(wèi)星信號,結(jié)合地理信息系統(tǒng)對信號進行處理,從而獲得用戶所需的經(jīng)緯度、速度等信息,最終實現(xiàn)導(dǎo)航和定位[1]。而GPS接收機中的數(shù)據(jù)提取與存儲是GPS定位中的重要組成部分。
目前,GPS定位數(shù)據(jù)處理系統(tǒng)大多數(shù)在VC++平臺上實現(xiàn),其擴展性、移植性、兼容性差。為改善其性能,2003年王緩緩等人[2]對GPS定位數(shù)據(jù)進行提取,增強了系統(tǒng)的擴展性和兼容性,但仍然存在數(shù)據(jù)不能實時接收、同步處理及存儲等問題。2006年李新源等人基于Java語言的GPS接收機的串口通信程序設(shè)計[3],整個系統(tǒng)結(jié)構(gòu)雖然較為清晰,但其只是實現(xiàn)了GPS數(shù)據(jù)的提取,對數(shù)據(jù)的存儲并未研究。
為改善已有GPS定位數(shù)據(jù)的提取與存儲功能,有效提高數(shù)據(jù)的可靠性和實時性等要求,本文基于Java的跨平臺性、開放性與面向?qū)ο蟮忍攸c[3],運用GPS定位技術(shù)、多線程串口通信編程技術(shù)和數(shù)據(jù)庫存儲技術(shù),設(shè)計了一套GPS定位數(shù)據(jù)的提取與存儲系統(tǒng)。該系統(tǒng)能實時地接收、處理和存儲GPS數(shù)據(jù)。
圖1 系統(tǒng)架構(gòu)圖
GPS定位數(shù)據(jù)的提取與存儲系統(tǒng)主要包括GPS串口通信和GPS數(shù)據(jù)存儲兩部分,其結(jié)構(gòu)圖如圖1所示。其中,GPS串口通信部分主要實現(xiàn)多線程編程、串口的打開、串口數(shù)據(jù)的接收、提取處理與串口的關(guān)閉等操作;GPS數(shù)據(jù)存儲部分實現(xiàn)將提取處理后的數(shù)據(jù)保存在MySQL數(shù)據(jù)庫中[2-4]。
圖2 串口通信流程圖
傳統(tǒng)的用Java實現(xiàn)串口通信通常采用串口API,它以獨立jar包的方式提供一個標(biāo)準(zhǔn)擴展[5]。此系統(tǒng)中,采用串口和并口通信的開源Java類庫RXTX,其提供了多操作系統(tǒng)下的兼容javax.comm串口通信包API的實現(xiàn)。在Windows操作系統(tǒng)下,包含3個文件:RXTXcomm.jar、rxtxParallel.dll和rxtxSerial.dll,其提供了通信用的Java API及相應(yīng)的驅(qū)動類接口。系統(tǒng)在串口通信前,必須對串口驅(qū)動程序裝載。其串口操作流程圖如圖2所示[6]。
2.1多線程技術(shù)
對串口進行操作的過程中,為提高CPU的使用效率,系統(tǒng)采用了多線程處理技術(shù),很好地滿足了多任務(wù)和實時性的需求[7-8]。
Java有兩種實現(xiàn)多線程的方式:一是創(chuàng)建一個類繼承Thread類,并重寫run()方法;二是實現(xiàn)Runnable接口。本文采用繼承Thread類的方式實現(xiàn)多線程,主要涉及串口數(shù)據(jù)接收線程、數(shù)據(jù)提取處理線程、數(shù)據(jù)存儲線程,系統(tǒng)的關(guān)鍵是處理好線程之間的同步、安全和死鎖[7-8]。
2.2多線程串口通信
(1)串口數(shù)據(jù)接收
在對GPS串口數(shù)據(jù)接收之前,必須明確GPS接收機的數(shù)據(jù)接收格式[2-4]。GPS接收機遵守NEMA-0183標(biāo)準(zhǔn)協(xié)議,該協(xié)議內(nèi)容包含GPS定位的經(jīng)緯度、速度、日期時間、地面航向、衛(wèi)星狀況、磁偏角等信息。本系統(tǒng)中,使用NEMA-0183協(xié)議中的“MYMGPRMC”幀格式進行數(shù)據(jù)的提取處理。
在進行數(shù)據(jù)接收前,首先打開串口并進行參數(shù)設(shè)置。然后,調(diào)用數(shù)據(jù)接收線程中的類實例方法對串口數(shù)據(jù)進行接收。為保證數(shù)據(jù)的可靠性和實時性,系統(tǒng)中設(shè)置了串口事件監(jiān)聽器。其部分關(guān)鍵代碼如下,數(shù)據(jù)接收結(jié)果圖如圖3所示。
serialport.addEventListener(commlist);
serialport.notifyOnDataAvailable(true);
if(arg0.getEventType()==SerialPortEvent.DATA_AVAILABLE){
int y=0;
byte[] b= new byte[1024];
while((y=in.read(b))!=-1){
System.out.println("下面為讀取的數(shù)據(jù)"+new String(b)));}}
圖3 串口數(shù)據(jù)接收圖
(2)串口數(shù)據(jù)提取處理
在成功接收GPS數(shù)據(jù)串后,要對其解析,轉(zhuǎn)化成相應(yīng)的格式。其思路如下:首先,判斷數(shù)據(jù)串中是否含有“MYMGPRMC”數(shù)據(jù),若存在,則截取MYMGPRMC包含的70 B數(shù)據(jù);其次,對MYMGPRMC包含的GPS定位信息進行提??;最后,對數(shù)據(jù)作進一步的處理運算并保存在GpsData對象中,提高了代碼的健壯性。為了簡化問題,本文只提取出日期時間、經(jīng)緯度、狀態(tài)、速度信息[9]。其部分關(guān)鍵代碼如下所示[2],數(shù)據(jù)提取處理圖如圖4、圖5所示。
if (gprmcdata!=null){
String gprmcdata=gprmcstart.substring(0,70);
......
gpsdata=new GpsData();
......
for (int i =0;i<12;i++){
String value =gprmcdata.substring(0, gprmcdata.indexOf(","));
gprmcdata =gprmcdata.substring(gprmcdata.indexOf(",")+1);
switch(i){
case 3: gpsdata.setLatitude(DateTimeUtils.ChangeLatitude(value));
System.out.println(gpsdata.getLatitude()); //緯度
break;.......}}}
圖5 解析處理后的數(shù)據(jù)
圖4截取的GPRMC數(shù)據(jù)圖
對GPS定位數(shù)據(jù)進行提取處理后,需要將數(shù)據(jù)保存在數(shù)據(jù)庫中,方便后期的使用。本設(shè)計將GPS定位數(shù)據(jù)存儲部分作為后臺數(shù)據(jù)庫,不僅作為定位數(shù)據(jù)的容器,同時還可以隨時隨地地訪問數(shù)據(jù)庫與進行增、刪、改、查等操作[4]。
在本系統(tǒng)中,將靈活可靠的MySQL作為后臺數(shù)據(jù)庫,應(yīng)用JDBC技術(shù)連接數(shù)據(jù)庫。下面從數(shù)據(jù)庫的配置設(shè)計、存儲和互聯(lián)來實現(xiàn)高效可靠的數(shù)據(jù)存儲。
3.1數(shù)據(jù)庫的配置與數(shù)據(jù)表的設(shè)計
對MySQL數(shù)據(jù)庫操作前,需要對其配置。配置信息封裝在dbconfig.properties配置文件中,如圖6所示。
圖6 數(shù)據(jù)庫配置信息截取圖
本系統(tǒng)采用JDBC方式連接數(shù)據(jù)庫,在MySQL中,需要新建一個數(shù)據(jù)庫命名為mydb1,并添加一張數(shù)據(jù)表gpsdata用于存儲GPS定位數(shù)據(jù)。數(shù)據(jù)表的列分別命名為日期時間datetime、定位狀態(tài)status、緯度latitude、經(jīng)度longitude、速度speed,并設(shè)置相應(yīng)的列屬性,允許為NULL。
3.2數(shù)據(jù)的存儲與互聯(lián)
數(shù)據(jù)的存儲與互聯(lián)技術(shù)是存儲系統(tǒng)設(shè)計的核心。本設(shè)計中定義了兩個核心類:JdbcUtils工具類和JdbcUtilsImpl類。其中,JdbcUtils類主要用于實現(xiàn)加載配置文件、加載驅(qū)動類與獲取連接操作;JdbcUtilsImpl類主要用于向數(shù)據(jù)庫中存儲GPS數(shù)據(jù)、數(shù)據(jù)表的更新、釋放等。其部分關(guān)鍵代碼如下所示,圖7為數(shù)據(jù)存入情況。
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dbconfig.properties");
props = new Properties();
props.load(in);
Class.forName(props.getProperty("driverClassName"));
DriverManager.getConnection(props.getProperty("url"),props.getProperty("username"),props.getProperty("password"));
String sql = "INSERT INTO gpsdata VALUES(?,?,?,?,?)";
pstmt=con.prepareStatement(sql);pstmt.setString(1, gpsdata.getDatetime());
......
pstmt.setDouble(4, gpsdata.getSpeed());
pstmt.executeUpdate();
圖7 數(shù)據(jù)成功存入數(shù)據(jù)庫圖
本系統(tǒng)在Eclipse開發(fā)環(huán)境下,結(jié)合MySQL數(shù)據(jù)庫技術(shù),對GPS定位數(shù)據(jù)進行接收和提取處理,并將其存入數(shù)據(jù)庫中,以供開發(fā)者后期使用。其中,系統(tǒng)中利用了Java中的多線程技術(shù),將數(shù)據(jù)接收與提取處理高效地分離,有效地提高了數(shù)據(jù)的處理能力。同時,系統(tǒng)中加入了數(shù)據(jù)存儲部分,為數(shù)據(jù)的有效性和可靠性提供了保障,更加體現(xiàn)了系統(tǒng)的整體性能。
[1] 張帥帥, 崔紅霞. GPS數(shù)據(jù)的采集提取和顯示[J]. 科技創(chuàng)新導(dǎo)報, 2013(25):22-23.
[2] 王緩緩, 李虎. 用Java實現(xiàn)GPS全球定位系統(tǒng)定位數(shù)據(jù)的提取[J]. 計算機與現(xiàn)代化, 2004(11):89-91.
[3] 李新源, 趙樹法, 魏宗壽,等. 基于Java語言的GPS接收機的串口通信程序設(shè)計[J]. 鐵路計算機應(yīng)用, 2007, 16(5):4-6.
[4] 徐涴砯, 陳光, 高孟茹. GPS船舶試航數(shù)據(jù)提取與存儲系統(tǒng)的開發(fā)[J]. 微型機與應(yīng)用, 2013,32(23):86-89.
[5] 丁振凡, 王小明, 鄧建明,等. 基于Java的串口通信應(yīng)用編程[J]. 微型機與應(yīng)用, 2012, 31(13):84-86.
[6] 牛立, 王景中. GPS導(dǎo)航數(shù)據(jù)提取的設(shè)計與研究[J]. 微型機與應(yīng)用, 2010, 29(20):1-3.
[7] 李良, 朱善安. 基于Java的串口通信[J]. 電子器件, 2007, 30(2):714-716,720.
[8] 吳金鋒, 劉偉平, 黃紅斌. Java串口通信數(shù)據(jù)采控系統(tǒng)的設(shè)計與實現(xiàn)[J]. 微計算機信息, 2010, 26(10):65-66.
[9] 袁林, 曹杰. 利用VC++實現(xiàn)GPS全球定位系統(tǒng)定位數(shù)據(jù)的提取[J]. 現(xiàn)代電子技術(shù), 2004, 27(24):105-107.
Design of GPS positioning data extraction and storage system
Bao Pingping,Chen Guang,Wang Peng,Wang Penghui
(College of Information Science & Technology,Donghua University,Shanghai 201620,China)
The traditional GPS positioning data extraction and storage system based on VC++ platform can’t meet the demand of real-time and reliability. It has disadvantages such as scalability, compatibility, portability problems on software.The design this paper proposed applies GPS positioning technology,multithreding serial communication technology and database storage access technology,using the Java programming language.It designs and implements a set of GPS data real-time receiving,extracting and storaging system on Eclipse development tools. Results of test show that the system has stable operation,experimental data is effective and reliable, and has reached the expected goal.
GPS; multithreading; serial communication; data storage; Java
TP391
A
10.19358/j.issn.1674- 7720.2016.11.004
2016-03-03)
鮑萍萍(1990-),通信作者,女,碩士研究生,主要研究方向:GPS無線通信,Android應(yīng)用。E-mail:250360420@qq.com。
陳光(1957-),男,教授,主要研究方向:無線移動通信,電磁場理論等。
王朋(1989-),男,碩士研究生,主要研究方向:機器視覺與圖形圖像處理技術(shù)。