鮑萍萍,陳 光,王 朋,王鵬輝
(東華大學(xué) 信息科學(xué)與技術(shù)學(xué)院 上海 201620)
?
GPS定位數(shù)據(jù)的提取與存儲(chǔ)系統(tǒng)的設(shè)計(jì)
鮑萍萍,陳光,王朋,王鵬輝
(東華大學(xué) 信息科學(xué)與技術(shù)學(xué)院 上海 201620)
針對(duì)傳統(tǒng)的在VC++平臺(tái)上實(shí)現(xiàn)的GPS定位數(shù)據(jù)的提取與存儲(chǔ)系統(tǒng)已經(jīng)不能滿足系統(tǒng)的實(shí)時(shí)性和可靠性等需求,以及軟件方面存在擴(kuò)展性、兼容性、移植性差等問(wèn)題,運(yùn)用GPS定位技術(shù)、多線程串口通信處理技術(shù)和數(shù)據(jù)庫(kù)存儲(chǔ)訪問(wèn)技術(shù),應(yīng)用Java語(yǔ)言編寫(xiě),在Eclipse開(kāi)發(fā)工具上設(shè)計(jì)并實(shí)現(xiàn)了一套GPS定位數(shù)據(jù)的實(shí)時(shí)提取與存儲(chǔ)系統(tǒng)。測(cè)試結(jié)果表明,該系統(tǒng)運(yùn)行穩(wěn)定,實(shí)驗(yàn)數(shù)據(jù)有效可靠,達(dá)到了預(yù)期的目標(biāo)。
GPS;多線程;串口通信;數(shù)據(jù)存儲(chǔ);Java
引用格式:鮑萍萍,陳光,王朋,等. GPS定位數(shù)據(jù)的提取與存儲(chǔ)系統(tǒng)的設(shè)計(jì)[J].微型機(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),其全方位、全天候、全時(shí)段、高精度等特點(diǎn)使得GPS的應(yīng)用遙遙領(lǐng)先。其原理是用戶通過(guò)GPS接收機(jī)接收衛(wèi)星信號(hào),結(jié)合地理信息系統(tǒng)對(duì)信號(hào)進(jìn)行處理,從而獲得用戶所需的經(jīng)緯度、速度等信息,最終實(shí)現(xiàn)導(dǎo)航和定位[1]。而GPS接收機(jī)中的數(shù)據(jù)提取與存儲(chǔ)是GPS定位中的重要組成部分。
目前,GPS定位數(shù)據(jù)處理系統(tǒng)大多數(shù)在VC++平臺(tái)上實(shí)現(xiàn),其擴(kuò)展性、移植性、兼容性差。為改善其性能,2003年王緩緩等人[2]對(duì)GPS定位數(shù)據(jù)進(jìn)行提取,增強(qiáng)了系統(tǒng)的擴(kuò)展性和兼容性,但仍然存在數(shù)據(jù)不能實(shí)時(shí)接收、同步處理及存儲(chǔ)等問(wèn)題。2006年李新源等人基于Java語(yǔ)言的GPS接收機(jī)的串口通信程序設(shè)計(jì)[3],整個(gè)系統(tǒng)結(jié)構(gòu)雖然較為清晰,但其只是實(shí)現(xiàn)了GPS數(shù)據(jù)的提取,對(duì)數(shù)據(jù)的存儲(chǔ)并未研究。
為改善已有GPS定位數(shù)據(jù)的提取與存儲(chǔ)功能,有效提高數(shù)據(jù)的可靠性和實(shí)時(shí)性等要求,本文基于Java的跨平臺(tái)性、開(kāi)放性與面向?qū)ο蟮忍攸c(diǎn)[3],運(yùn)用GPS定位技術(shù)、多線程串口通信編程技術(shù)和數(shù)據(jù)庫(kù)存儲(chǔ)技術(shù),設(shè)計(jì)了一套GPS定位數(shù)據(jù)的提取與存儲(chǔ)系統(tǒng)。該系統(tǒng)能實(shí)時(shí)地接收、處理和存儲(chǔ)GPS數(shù)據(jù)。
圖1 系統(tǒng)架構(gòu)圖
GPS定位數(shù)據(jù)的提取與存儲(chǔ)系統(tǒng)主要包括GPS串口通信和GPS數(shù)據(jù)存儲(chǔ)兩部分,其結(jié)構(gòu)圖如圖1所示。其中,GPS串口通信部分主要實(shí)現(xiàn)多線程編程、串口的打開(kāi)、串口數(shù)據(jù)的接收、提取處理與串口的關(guān)閉等操作;GPS數(shù)據(jù)存儲(chǔ)部分實(shí)現(xiàn)將提取處理后的數(shù)據(jù)保存在MySQL數(shù)據(jù)庫(kù)中[2-4]。
圖2 串口通信流程圖
傳統(tǒng)的用Java實(shí)現(xiàn)串口通信通常采用串口API,它以獨(dú)立jar包的方式提供一個(gè)標(biāo)準(zhǔn)擴(kuò)展[5]。此系統(tǒng)中,采用串口和并口通信的開(kāi)源Java類庫(kù)RXTX,其提供了多操作系統(tǒng)下的兼容javax.comm串口通信包API的實(shí)現(xiàn)。在Windows操作系統(tǒng)下,包含3個(gè)文件:RXTXcomm.jar、rxtxParallel.dll和rxtxSerial.dll,其提供了通信用的Java API及相應(yīng)的驅(qū)動(dòng)類接口。系統(tǒng)在串口通信前,必須對(duì)串口驅(qū)動(dòng)程序裝載。其串口操作流程圖如圖2所示[6]。
2.1多線程技術(shù)
對(duì)串口進(jìn)行操作的過(guò)程中,為提高CPU的使用效率,系統(tǒng)采用了多線程處理技術(shù),很好地滿足了多任務(wù)和實(shí)時(shí)性的需求[7-8]。
Java有兩種實(shí)現(xiàn)多線程的方式:一是創(chuàng)建一個(gè)類繼承Thread類,并重寫(xiě)run()方法;二是實(shí)現(xiàn)Runnable接口。本文采用繼承Thread類的方式實(shí)現(xiàn)多線程,主要涉及串口數(shù)據(jù)接收線程、數(shù)據(jù)提取處理線程、數(shù)據(jù)存儲(chǔ)線程,系統(tǒng)的關(guān)鍵是處理好線程之間的同步、安全和死鎖[7-8]。
2.2多線程串口通信
(1)串口數(shù)據(jù)接收
在對(duì)GPS串口數(shù)據(jù)接收之前,必須明確GPS接收機(jī)的數(shù)據(jù)接收格式[2-4]。GPS接收機(jī)遵守NEMA-0183標(biāo)準(zhǔn)協(xié)議,該協(xié)議內(nèi)容包含GPS定位的經(jīng)緯度、速度、日期時(shí)間、地面航向、衛(wèi)星狀況、磁偏角等信息。本系統(tǒng)中,使用NEMA-0183協(xié)議中的“MYMGPRMC”幀格式進(jìn)行數(shù)據(jù)的提取處理。
在進(jìn)行數(shù)據(jù)接收前,首先打開(kāi)串口并進(jìn)行參數(shù)設(shè)置。然后,調(diào)用數(shù)據(jù)接收線程中的類實(shí)例方法對(duì)串口數(shù)據(jù)進(jìn)行接收。為保證數(shù)據(jù)的可靠性和實(shí)時(shí)性,系統(tǒng)中設(shè)置了串口事件監(jiān)聽(tīng)器。其部分關(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ù)接收?qǐng)D
(2)串口數(shù)據(jù)提取處理
在成功接收GPS數(shù)據(jù)串后,要對(duì)其解析,轉(zhuǎn)化成相應(yīng)的格式。其思路如下:首先,判斷數(shù)據(jù)串中是否含有“MYMGPRMC”數(shù)據(jù),若存在,則截取MYMGPRMC包含的70 B數(shù)據(jù);其次,對(duì)MYMGPRMC包含的GPS定位信息進(jìn)行提取;最后,對(duì)數(shù)據(jù)作進(jìn)一步的處理運(yùn)算并保存在GpsData對(duì)象中,提高了代碼的健壯性。為了簡(jiǎn)化問(wèn)題,本文只提取出日期時(shí)間、經(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ù)圖
對(duì)GPS定位數(shù)據(jù)進(jìn)行提取處理后,需要將數(shù)據(jù)保存在數(shù)據(jù)庫(kù)中,方便后期的使用。本設(shè)計(jì)將GPS定位數(shù)據(jù)存儲(chǔ)部分作為后臺(tái)數(shù)據(jù)庫(kù),不僅作為定位數(shù)據(jù)的容器,同時(shí)還可以隨時(shí)隨地地訪問(wèn)數(shù)據(jù)庫(kù)與進(jìn)行增、刪、改、查等操作[4]。
在本系統(tǒng)中,將靈活可靠的MySQL作為后臺(tái)數(shù)據(jù)庫(kù),應(yīng)用JDBC技術(shù)連接數(shù)據(jù)庫(kù)。下面從數(shù)據(jù)庫(kù)的配置設(shè)計(jì)、存儲(chǔ)和互聯(lián)來(lái)實(shí)現(xiàn)高效可靠的數(shù)據(jù)存儲(chǔ)。
3.1數(shù)據(jù)庫(kù)的配置與數(shù)據(jù)表的設(shè)計(jì)
對(duì)MySQL數(shù)據(jù)庫(kù)操作前,需要對(duì)其配置。配置信息封裝在dbconfig.properties配置文件中,如圖6所示。
圖6 數(shù)據(jù)庫(kù)配置信息截取圖
本系統(tǒng)采用JDBC方式連接數(shù)據(jù)庫(kù),在MySQL中,需要新建一個(gè)數(shù)據(jù)庫(kù)命名為mydb1,并添加一張數(shù)據(jù)表gpsdata用于存儲(chǔ)GPS定位數(shù)據(jù)。數(shù)據(jù)表的列分別命名為日期時(shí)間datetime、定位狀態(tài)status、緯度latitude、經(jīng)度longitude、速度speed,并設(shè)置相應(yīng)的列屬性,允許為NULL。
3.2數(shù)據(jù)的存儲(chǔ)與互聯(lián)
數(shù)據(jù)的存儲(chǔ)與互聯(lián)技術(shù)是存儲(chǔ)系統(tǒng)設(shè)計(jì)的核心。本設(shè)計(jì)中定義了兩個(gè)核心類:JdbcUtils工具類和JdbcUtilsImpl類。其中,JdbcUtils類主要用于實(shí)現(xiàn)加載配置文件、加載驅(qū)動(dòng)類與獲取連接操作;JdbcUtilsImpl類主要用于向數(shù)據(jù)庫(kù)中存儲(chǔ)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ù)庫(kù)圖
本系統(tǒng)在Eclipse開(kāi)發(fā)環(huán)境下,結(jié)合MySQL數(shù)據(jù)庫(kù)技術(shù),對(duì)GPS定位數(shù)據(jù)進(jìn)行接收和提取處理,并將其存入數(shù)據(jù)庫(kù)中,以供開(kāi)發(fā)者后期使用。其中,系統(tǒng)中利用了Java中的多線程技術(shù),將數(shù)據(jù)接收與提取處理高效地分離,有效地提高了數(shù)據(jù)的處理能力。同時(shí),系統(tǒng)中加入了數(shù)據(jù)存儲(chǔ)部分,為數(shù)據(jù)的有效性和可靠性提供了保障,更加體現(xiàn)了系統(tǒng)的整體性能。
[1] 張帥帥, 崔紅霞. GPS數(shù)據(jù)的采集提取和顯示[J]. 科技創(chuàng)新導(dǎo)報(bào), 2013(25):22-23.
[2] 王緩緩, 李虎. 用Java實(shí)現(xiàn)GPS全球定位系統(tǒng)定位數(shù)據(jù)的提取[J]. 計(jì)算機(jī)與現(xiàn)代化, 2004(11):89-91.
[3] 李新源, 趙樹(shù)法, 魏宗壽,等. 基于Java語(yǔ)言的GPS接收機(jī)的串口通信程序設(shè)計(jì)[J]. 鐵路計(jì)算機(jī)應(yīng)用, 2007, 16(5):4-6.
[4] 徐涴砯, 陳光, 高孟茹. GPS船舶試航數(shù)據(jù)提取與存儲(chǔ)系統(tǒng)的開(kāi)發(fā)[J]. 微型機(jī)與應(yīng)用, 2013,32(23):86-89.
[5] 丁振凡, 王小明, 鄧建明,等. 基于Java的串口通信應(yīng)用編程[J]. 微型機(jī)與應(yīng)用, 2012, 31(13):84-86.
[6] 牛立, 王景中. GPS導(dǎo)航數(shù)據(jù)提取的設(shè)計(jì)與研究[J]. 微型機(jī)與應(yīng)用, 2010, 29(20):1-3.
[7] 李良, 朱善安. 基于Java的串口通信[J]. 電子器件, 2007, 30(2):714-716,720.
[8] 吳金鋒, 劉偉平, 黃紅斌. Java串口通信數(shù)據(jù)采控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 微計(jì)算機(jī)信息, 2010, 26(10):65-66.
[9] 袁林, 曹杰. 利用VC++實(shí)現(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無(wú)線通信,Android應(yīng)用。E-mail:250360420@qq.com。
陳光(1957-),男,教授,主要研究方向:無(wú)線移動(dòng)通信,電磁場(chǎng)理論等。
王朋(1989-),男,碩士研究生,主要研究方向:機(jī)器視覺(jué)與圖形圖像處理技術(shù)。