鮑萍萍,陳 光,王 朋,王鵬輝
(東華大學 信息科學與技術學院 上海 201620)
?
GPS定位數據的提取與存儲系統的設計
鮑萍萍,陳光,王朋,王鵬輝
(東華大學 信息科學與技術學院 上海 201620)
針對傳統的在VC++平臺上實現的GPS定位數據的提取與存儲系統已經不能滿足系統的實時性和可靠性等需求,以及軟件方面存在擴展性、兼容性、移植性差等問題,運用GPS定位技術、多線程串口通信處理技術和數據庫存儲訪問技術,應用Java語言編寫,在Eclipse開發工具上設計并實現了一套GPS定位數據的實時提取與存儲系統。測試結果表明,該系統運行穩定,實驗數據有效可靠,達到了預期的目標。
GPS;多線程;串口通信;數據存儲;Java
引用格式:鮑萍萍,陳光,王朋,等. GPS定位數據的提取與存儲系統的設計[J].微型機與應用,2016,35(11):11-13.
隨著衛星導航定位技術的發展,全球衛星定位系統(Global Position System,GPS)成為目前最為常用的一種導航定位系統,其全方位、全天候、全時段、高精度等特點使得GPS的應用遙遙領先。其原理是用戶通過GPS接收機接收衛星信號,結合地理信息系統對信號進行處理,從而獲得用戶所需的經緯度、速度等信息,最終實現導航和定位[1]。而GPS接收機中的數據提取與存儲是GPS定位中的重要組成部分。
目前,GPS定位數據處理系統大多數在VC++平臺上實現,其擴展性、移植性、兼容性差。為改善其性能,2003年王緩緩等人[2]對GPS定位數據進行提取,增強了系統的擴展性和兼容性,但仍然存在數據不能實時接收、同步處理及存儲等問題。2006年李新源等人基于Java語言的GPS接收機的串口通信程序設計[3],整個系統結構雖然較為清晰,但其只是實現了GPS數據的提取,對數據的存儲并未研究。
為改善已有GPS定位數據的提取與存儲功能,有效提高數據的可靠性和實時性等要求,本文基于Java的跨平臺性、開放性與面向對象等特點[3],運用GPS定位技術、多線程串口通信編程技術和數據庫存儲技術,設計了一套GPS定位數據的提取與存儲系統。該系統能實時地接收、處理和存儲GPS數據。

圖1 系統架構圖
GPS定位數據的提取與存儲系統主要包括GPS串口通信和GPS數據存儲兩部分,其結構圖如圖1所示。其中,GPS串口通信部分主要實現多線程編程、串口的打開、串口數據的接收、提取處理與串口的關閉等操作;GPS數據存儲部分實現將提取處理后的數據保存在MySQL數據庫中[2-4]。

圖2 串口通信流程圖
傳統的用Java實現串口通信通常采用串口API,它以獨立jar包的方式提供一個標準擴展[5]。此系統中,采用串口和并口通信的開源Java類庫RXTX,其提供了多操作系統下的兼容javax.comm串口通信包API的實現。在Windows操作系統下,包含3個文件:RXTXcomm.jar、rxtxParallel.dll和rxtxSerial.dll,其提供了通信用的Java API及相應的驅動類接口。系統在串口通信前,必須對串口驅動程序裝載。其串口操作流程圖如圖2所示[6]。
2.1多線程技術
對串口進行操作的過程中,為提高CPU的使用效率,系統采用了多線程處理技術,很好地滿足了多任務和實時性的需求[7-8]。
Java有兩種實現多線程的方式:一是創建一個類繼承Thread類,并重寫run()方法;二是實現Runnable接口。本文采用繼承Thread類的方式實現多線程,主要涉及串口數據接收線程、數據提取處理線程、數據存儲線程,系統的關鍵是處理好線程之間的同步、安全和死鎖[7-8]。
2.2多線程串口通信
(1)串口數據接收
在對GPS串口數據接收之前,必須明確GPS接收機的數據接收格式[2-4]。GPS接收機遵守NEMA-0183標準協議,該協議內容包含GPS定位的經緯度、速度、日期時間、地面航向、衛星狀況、磁偏角等信息。本系統中,使用NEMA-0183協議中的“MYMGPRMC”幀格式進行數據的提取處理。
在進行數據接收前,首先打開串口并進行參數設置。然后,調用數據接收線程中的類實例方法對串口數據進行接收。為保證數據的可靠性和實時性,系統中設置了串口事件監聽器。其部分關鍵代碼如下,數據接收結果圖如圖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("下面為讀取的數據"+new String(b)));}}

圖3 串口數據接收圖
(2)串口數據提取處理
在成功接收GPS數據串后,要對其解析,轉化成相應的格式。其思路如下:首先,判斷數據串中是否含有“MYMGPRMC”數據,若存在,則截取MYMGPRMC包含的70 B數據;其次,對MYMGPRMC包含的GPS定位信息進行提取;最后,對數據作進一步的處理運算并保存在GpsData對象中,提高了代碼的健壯性。為了簡化問題,本文只提取出日期時間、經緯度、狀態、速度信息[9]。其部分關鍵代碼如下所示[2],數據提取處理圖如圖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 解析處理后的數據

圖4截取的GPRMC數據圖
對GPS定位數據進行提取處理后,需要將數據保存在數據庫中,方便后期的使用。本設計將GPS定位數據存儲部分作為后臺數據庫,不僅作為定位數據的容器,同時還可以隨時隨地地訪問數據庫與進行增、刪、改、查等操作[4]。
在本系統中,將靈活可靠的MySQL作為后臺數據庫,應用JDBC技術連接數據庫。下面從數據庫的配置設計、存儲和互聯來實現高效可靠的數據存儲。
3.1數據庫的配置與數據表的設計
對MySQL數據庫操作前,需要對其配置。配置信息封裝在dbconfig.properties配置文件中,如圖6所示。

圖6 數據庫配置信息截取圖
本系統采用JDBC方式連接數據庫,在MySQL中,需要新建一個數據庫命名為mydb1,并添加一張數據表gpsdata用于存儲GPS定位數據。數據表的列分別命名為日期時間datetime、定位狀態status、緯度latitude、經度longitude、速度speed,并設置相應的列屬性,允許為NULL。
3.2數據的存儲與互聯
數據的存儲與互聯技術是存儲系統設計的核心。本設計中定義了兩個核心類:JdbcUtils工具類和JdbcUtilsImpl類。其中,JdbcUtils類主要用于實現加載配置文件、加載驅動類與獲取連接操作;JdbcUtilsImpl類主要用于向數據庫中存儲GPS數據、數據表的更新、釋放等。其部分關鍵代碼如下所示,圖7為數據存入情況。
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 數據成功存入數據庫圖
本系統在Eclipse開發環境下,結合MySQL數據庫技術,對GPS定位數據進行接收和提取處理,并將其存入數據庫中,以供開發者后期使用。其中,系統中利用了Java中的多線程技術,將數據接收與提取處理高效地分離,有效地提高了數據的處理能力。同時,系統中加入了數據存儲部分,為數據的有效性和可靠性提供了保障,更加體現了系統的整體性能。
[1] 張帥帥, 崔紅霞. GPS數據的采集提取和顯示[J]. 科技創新導報, 2013(25):22-23.
[2] 王緩緩, 李虎. 用Java實現GPS全球定位系統定位數據的提取[J]. 計算機與現代化, 2004(11):89-91.
[3] 李新源, 趙樹法, 魏宗壽,等. 基于Java語言的GPS接收機的串口通信程序設計[J]. 鐵路計算機應用, 2007, 16(5):4-6.
[4] 徐涴砯, 陳光, 高孟茹. GPS船舶試航數據提取與存儲系統的開發[J]. 微型機與應用, 2013,32(23):86-89.
[5] 丁振凡, 王小明, 鄧建明,等. 基于Java的串口通信應用編程[J]. 微型機與應用, 2012, 31(13):84-86.
[6] 牛立, 王景中. GPS導航數據提取的設計與研究[J]. 微型機與應用, 2010, 29(20):1-3.
[7] 李良, 朱善安. 基于Java的串口通信[J]. 電子器件, 2007, 30(2):714-716,720.
[8] 吳金鋒, 劉偉平, 黃紅斌. Java串口通信數據采控系統的設計與實現[J]. 微計算機信息, 2010, 26(10):65-66.
[9] 袁林, 曹杰. 利用VC++實現GPS全球定位系統定位數據的提取[J]. 現代電子技術, 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應用。E-mail:250360420@qq.com。
陳光(1957-),男,教授,主要研究方向:無線移動通信,電磁場理論等。
王朋(1989-),男,碩士研究生,主要研究方向:機器視覺與圖形圖像處理技術。