亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Android系統(tǒng)的手機(jī)縣級(jí)氣象服務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

        2015-04-12 00:00:00況源周小明梁富強(qiáng)張波李云杰
        現(xiàn)代電子技術(shù) 2015年7期

        摘 要: 為了適應(yīng)新時(shí)期氣象服務(wù)的現(xiàn)代化建設(shè)需要和提高氣象服務(wù)的綜合能力,氣象部門(mén)結(jié)合實(shí)際需求和自身優(yōu)勢(shì),開(kāi)發(fā)了一款基于Android系統(tǒng)的手機(jī)縣級(jí)氣象服務(wù)系統(tǒng)。主要從技術(shù)手段、功能設(shè)計(jì)、總體結(jié)構(gòu)和主要功能模塊的實(shí)現(xiàn)等方面作簡(jiǎn)要介紹。該系統(tǒng)具有災(zāi)害預(yù)警、重要天氣、以及短中長(zhǎng)期天氣預(yù)報(bào)、監(jiān)測(cè)站點(diǎn)最新實(shí)況的查看、數(shù)據(jù)統(tǒng)計(jì)、數(shù)據(jù)檢索等功能。使用該系統(tǒng),氣象部門(mén)能夠及時(shí)、方便、快捷地提供氣象服務(wù),相關(guān)單位也能及時(shí)、自主、便捷地獲取氣象產(chǎn)品和數(shù)據(jù)資料。

        關(guān)鍵詞: Android; 手機(jī); 氣象服務(wù)系統(tǒng); 功能設(shè)計(jì)

        中圖分類(lèi)號(hào): TN911?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2015)07?0043?03

        0 引 言

        隨著經(jīng)濟(jì)社會(huì)的不斷發(fā)展,自然災(zāi)害對(duì)經(jīng)濟(jì)發(fā)展和社會(huì)生活造成的損失在不斷增大,預(yù)防和減輕自然災(zāi)害已成為擺在全社會(huì)面前的共同任務(wù)。手機(jī)氣象服務(wù)以其及時(shí)、便捷、靈活的特點(diǎn)為用戶獲取各種氣象信息提供了方便,在防災(zāi)減災(zāi)、氣象預(yù)警、重大氣象保障服務(wù)等方面發(fā)揮著不可或缺的作用[1]。同時(shí),Android是一種基于Linux的自由及開(kāi)放源代碼的操作系統(tǒng),在智能手機(jī)操作系統(tǒng)市場(chǎng)擁有巨大的占有率[2]。因此開(kāi)發(fā)一款面向氣象部門(mén)和相關(guān)單位的基于Android系統(tǒng)的手機(jī)縣級(jí)氣象服務(wù)系統(tǒng),能夠有效提高氣象服務(wù)的社會(huì)效益和經(jīng)濟(jì)效益。

        1 系統(tǒng)設(shè)計(jì)

        1.1 主要技術(shù)

        開(kāi)發(fā)Android軟件,首先要搭建Android開(kāi)發(fā)環(huán)境,具體搭建流程為依次安裝JDK、Eclipse、Android SDK和ADT[3]。其中Eclipse是一個(gè)開(kāi)放源代碼、基于Java的可擴(kuò)展開(kāi)發(fā)平臺(tái),軟件開(kāi)發(fā)工作在其基礎(chǔ)上進(jìn)行。同時(shí)還使用到一些第三方開(kāi)發(fā)包,如實(shí)現(xiàn)圖表功能的AChartEngine?1.1.0.jar、地圖服務(wù)和定位服務(wù)的BaiduMapApi_v3_0_0.jar、多頁(yè)面滑動(dòng)切換的Android?Support?v4.jar。

        1.2 功能設(shè)計(jì)

        目前市面上天氣客戶端種類(lèi)繁多,但是它們的天氣信息僅有最近幾天天氣預(yù)報(bào)和少量實(shí)況數(shù)據(jù),且更新較遲緩。針對(duì)這一現(xiàn)狀,氣象部門(mén)自己開(kāi)發(fā)了一款氣象產(chǎn)品豐富、實(shí)況數(shù)據(jù)全面的手機(jī)客戶端,這一研發(fā)成果具有重要意義。系統(tǒng)所有功能模塊如圖1所示,氣象產(chǎn)品有災(zāi)害預(yù)警、重要天氣消息推送、近6天圖形化天氣預(yù)報(bào),短中期天氣預(yù)報(bào)、旬天氣預(yù)報(bào)、氣候趨勢(shì)預(yù)報(bào);實(shí)況數(shù)據(jù)包括最新實(shí)況顯示(以數(shù)據(jù)列表和地圖標(biāo)注兩種方式顯示)、前24小時(shí)氣溫和降雨序列、任意時(shí)段數(shù)據(jù)統(tǒng)計(jì)、任意時(shí)段和任意站點(diǎn)的逐時(shí)數(shù)據(jù)檢索。

        圖1 功能模塊圖

        1.3 總體結(jié)構(gòu)

        在軟件開(kāi)發(fā)設(shè)計(jì)中,應(yīng)用最多的就是分層技術(shù)。軟件分層采用分而治之的思想,將問(wèn)題分解之后各個(gè)擊破,實(shí)現(xiàn)“高內(nèi)聚、低耦合” [4]。因此系統(tǒng)在結(jié)構(gòu)圖2 總體結(jié)構(gòu)圖

        1.3.1 應(yīng)用層

        應(yīng)用層是呈現(xiàn)給用戶的功能界面,即手機(jī)客戶端。因?yàn)闅庀髷?shù)據(jù)的保密性,對(duì)社會(huì)公眾僅提供預(yù)警預(yù)報(bào)服務(wù),特殊用戶需要授權(quán)后才能夠查看實(shí)況數(shù)據(jù)。

        1.3.2 Web層

        因Android系統(tǒng)不能直接對(duì)遠(yuǎn)程數(shù)據(jù)庫(kù)進(jìn)行操作,所以需要一個(gè)中間件來(lái)存取數(shù)據(jù)[5]。應(yīng)用層通過(guò)URL方式提交數(shù)據(jù)請(qǐng)求到Web層,Web層收到請(qǐng)求后從數(shù)據(jù)庫(kù)中提取所需數(shù)據(jù)后生成并返回便于手機(jī)客戶端解析的XML格式頁(yè)面,這里使用Asp.net技術(shù)完成該功能。

        1.3.3 數(shù)據(jù)層

        數(shù)據(jù)層由分別存儲(chǔ)氣象產(chǎn)品、氣象數(shù)據(jù)和軟件管理3個(gè)數(shù)據(jù)庫(kù)組成。為了保障數(shù)據(jù)庫(kù)的安全性,數(shù)據(jù)庫(kù)的服務(wù)器使用獨(dú)立服務(wù)器,并設(shè)在氣象內(nèi)網(wǎng)中,Web層用內(nèi)網(wǎng)IP訪問(wèn)數(shù)據(jù)庫(kù)。

        1.3.4 管理層

        管理層負(fù)責(zé)管理數(shù)據(jù)層的數(shù)據(jù)庫(kù)。其中后臺(tái)管理軟件可進(jìn)行新版本發(fā)布、重要天氣消息推送、授權(quán)管理、手機(jī)客戶端安裝信息查看等操作。

        2 主要功能的實(shí)現(xiàn)

        2.1 數(shù)據(jù)獲取和顯示

        在Android應(yīng)用程序中,如果UI線程處理占用時(shí)間過(guò)長(zhǎng)(如網(wǎng)絡(luò)獲取數(shù)據(jù)、大量數(shù)據(jù)計(jì)算),就會(huì)出現(xiàn)ANR(應(yīng)用程序無(wú)響應(yīng))異常[6]。因此,為了保證良好的用戶體驗(yàn),數(shù)據(jù)獲取需要在多線程中進(jìn)行。另外,由于Andorid規(guī)定只有UI線程才能更新用戶界面[7],為此需要使用Thread+Handler來(lái)解決上述問(wèn)題。在Thread中用HttpURLConnection類(lèi)發(fā)送數(shù)據(jù)請(qǐng)求,線程請(qǐng)求到XML數(shù)據(jù)頁(yè)面后,使用XMLPullParser類(lèi)解析數(shù)據(jù),再將數(shù)據(jù)封裝到Message類(lèi)中,最后用Handler.sendMessage(message)方法發(fā)送給Handler的回調(diào)方法handleMessage進(jìn)行界面更新[8]。

        2.2 權(quán)限管理

        權(quán)限管理是通過(guò)“手機(jī)號(hào)+標(biāo)識(shí)碼”結(jié)合實(shí)現(xiàn)的。先要在后臺(tái)管理軟件新增授權(quán)用戶后(手機(jī)號(hào)為必填項(xiàng)),用戶才能在手機(jī)客戶端的授權(quán)管理頁(yè)面用手機(jī)號(hào)進(jìn)行授權(quán)。授權(quán)的具體流程為先查詢數(shù)據(jù)庫(kù)中是否存在該手機(jī)號(hào),若不存在則授權(quán)失??;如果存在,再查詢是否存在對(duì)應(yīng)標(biāo)識(shí)碼,有標(biāo)識(shí)碼表示該手機(jī)號(hào)已經(jīng)授權(quán)過(guò),不能重復(fù)授權(quán),沒(méi)有對(duì)應(yīng)標(biāo)識(shí)碼則授權(quán)成功并生成惟一的標(biāo)識(shí)碼,生成的標(biāo)識(shí)碼同時(shí)保存在數(shù)據(jù)庫(kù)和手機(jī)客戶端中,如圖3所示。

        圖3 授權(quán)流程圖

        另外若用戶需要用已授權(quán)過(guò)的手機(jī)號(hào)重新授權(quán),則要在后臺(tái)管理軟件中清除該手機(jī)號(hào)的標(biāo)識(shí)碼就可以再次用于授權(quán)。為了保證之前的授權(quán)因此而失效,在每次運(yùn)行手機(jī)客戶端時(shí)都要用手機(jī)客戶端存儲(chǔ)的標(biāo)識(shí)碼和數(shù)據(jù)庫(kù)中的標(biāo)識(shí)碼進(jìn)行比對(duì),如果相同才視為有效的授權(quán)。

        2.3 天氣趨勢(shì)圖

        天氣預(yù)報(bào)趨勢(shì)圖為現(xiàn)今手機(jī)天氣軟件必不可少的功能界面,具有直觀、漂亮的特點(diǎn),如圖4的第2頁(yè)面所示。為提高代碼的可復(fù)用性和可讀性,將其封裝成一個(gè)自定義控件WeatherTrendView,通過(guò)WeatherTrendView的setBitmap(List topBmpList, List lowBmpList)方法指定天氣現(xiàn)象圖標(biāo),setTemperature(List topTemList, List lowTemList)方法指定氣溫?cái)?shù)據(jù)??丶慕缑胬L制在重寫(xiě)的onDraw(Canvas canvas)事件中實(shí)現(xiàn),關(guān)鍵代碼如下:

        protected void onDraw(Canvas canvas) {

        <!--此處有省略代碼-->

        temarg = temmin + (temmax - temmin)/2;

        //temmax為最高氣溫最大值,temmin為最低氣溫最小值

        FontMetrics fontMetrics = mTextPaint.getFontMetrics();

        float fontHeight = fontMetrics.bottom - fontMetrics.top;

        //獲取趨勢(shì)圖中標(biāo)注氣溫的字體高度

        int h1 = this.getHeight()/2; //控件中間位置的高度

        int h2 = (int) (h1 - fontHeight/2);

        float scale = c.getResources().getDisplayMetrics().density;

        int icoHeight = (int)(40 * scale + 0.5f);

        //將圖標(biāo)高度從dp轉(zhuǎn)化為px

        int h3 = (int) (h1 - fontHeight - icoHeight);

        int extraHeight = (int)(150 * scale + 0.5f);

        //控件上下所需的占位高度

        temspace=(this.getHeight() - extraHeight)/((temmax-temmin)); //計(jì)算趨勢(shì)圖中每度所占高度

        for(int i = 0; i < topTem.size(); i++) {

        //繪制最高氣溫趨勢(shì)

        space = (temarg -topTem.get(i)) * temspace;

        //獲取上一個(gè)最高氣溫相對(duì)控件中間位置的偏移高度

        if(topTem.get(i)!=32 766){ //氣溫值為32 766時(shí)表示空值

        if (i != topTem.size() - 1) {

        space1=(temarg - topTem.get(i+1))*temspace;

        //獲取下一個(gè)最高氣溫相對(duì)控件中間位置的偏移高度

        canvas.drawLine(x[i],h1+space,x[i+1],h1+space1, mLinePaint1);

        //用直線連接相鄰最高氣溫,x數(shù)組為水平等分的寬度值

        }

        canvas.drawText(topTem.get(i)+\"°\",x[i],h2+space, mTextPaint); //標(biāo)注最高氣溫?cái)?shù)值

        canvas.drawCircle(x[i],h1+space,radius,mPointPaint);

        //繪制圓點(diǎn)

        canvas.drawBitmap(topBmps[i], x[i]-topBmps[i].getWidth()/2, h3 + space, 1); //繪制天氣現(xiàn)象圖標(biāo)

        }

        }

        <!--此處省略繪制最低氣溫趨勢(shì)代碼-->

        }

        圖4 手機(jī)客戶端重要功能界面

        2.4 地圖和定位

        地圖和定位服務(wù)均基于百度地圖Android SDK實(shí)現(xiàn),百度地圖Android SDK是一套基于Android 2.1及以上版本設(shè)備的免費(fèi)的應(yīng)用程序接口。通過(guò)調(diào)用地圖SDK接口,可以輕松訪問(wèn)百度地圖服務(wù)和數(shù)據(jù),構(gòu)建功能豐富、交互性強(qiáng)的地圖類(lèi)應(yīng)用程序,效果如圖4的第5頁(yè)面所示。地圖上疊加監(jiān)測(cè)站點(diǎn)是使用標(biāo)注覆蓋物MarkerOptions和文字覆蓋物TextOptions實(shí)現(xiàn)的,在初始化每個(gè)MarkerOptions時(shí)把監(jiān)測(cè)數(shù)據(jù)初始化在title屬性值中,在其點(diǎn)擊事件中就可以通過(guò)marker.getTitle()獲取并予以顯示。定位功能用于地圖服務(wù)時(shí)顯示當(dāng)前位置和獲取用戶安裝手機(jī)客戶端時(shí)的地理位置,百度地圖Android SDK可利用設(shè)備當(dāng)前的GPS信息(GPS定位),基站信息(基站定位)和WiFi信息(WiFi定位)完成定位,使定位更為精準(zhǔn)、快速,且提供將當(dāng)前所處地點(diǎn)的位置坐標(biāo)轉(zhuǎn)換為詳細(xì)地址描述的信息[9]。

        2.5 氣溫和降雨序列圖

        AChartEngine是為Android應(yīng)用而設(shè)計(jì)的開(kāi)源/免費(fèi)的繪圖工具庫(kù),可用于繪制折線圖、區(qū)域圖、散點(diǎn)圖、時(shí)間圖、柱狀圖、餅狀圖、環(huán)形圖等多種圖表[10]。系統(tǒng)用其繪制前24小時(shí)氣溫折線圖和前24小時(shí)降雨量柱狀圖。因手機(jī)屏幕寬度不夠完全顯示24小時(shí)序列圖,AChartEngine支持左右滑動(dòng)查看剩余部分。效果如圖4的第4頁(yè)面所示。

        3 結(jié) 語(yǔ)

        Android系統(tǒng)已基本實(shí)現(xiàn)天氣預(yù)警、預(yù)報(bào)和實(shí)況數(shù)據(jù)的整合,為氣象服務(wù)業(yè)務(wù)提供強(qiáng)有力的支撐,提高了氣象服務(wù)能力。但隨著社會(huì)發(fā)展對(duì)氣象服務(wù)要求的不斷提高,系統(tǒng)功能仍需繼續(xù)努力改進(jìn)和完善,不斷提升綜合氣象服務(wù)能力,以適應(yīng)社會(huì)與經(jīng)濟(jì)的發(fā)展對(duì)氣象服務(wù)的需求。

        參考文獻(xiàn)

        [1] 張延龍,楊昆,李炳文,等.基于3G手機(jī)的氣象服務(wù)分析[J].現(xiàn)代電子技術(shù),2011,34(18):24?25.

        [2] 劉峰,袁少雄,黃光慶,等.地質(zhì)災(zāi)害Android終端應(yīng)用系統(tǒng)及其數(shù)據(jù)庫(kù)研究進(jìn)展[J].地理空間信息,2013(6):51?53.

        [3] 沈愛(ài)濤,程濤.基于Android平臺(tái)的應(yīng)用系統(tǒng)開(kāi)發(fā)環(huán)境研究[J].計(jì)算機(jī)光盤(pán)軟件與應(yīng)用,2013(7):247?248.

        [4] 袁鷹.基于分層技術(shù)的計(jì)算機(jī)軟件開(kāi)發(fā)分析[J].計(jì)算機(jī)光盤(pán)軟件與應(yīng)用,2014(1):314?315.

        [5] 李洋,殷云鵬,趙勇.基于Android的網(wǎng)絡(luò)數(shù)據(jù)存儲(chǔ)與訪問(wèn)[J].中國(guó)科技信息,2013(8):92?93.

        [6] 肖柏昀.Android應(yīng)用程序中多線程應(yīng)用的方法研究[J].計(jì)算機(jī)光盤(pán)軟件與應(yīng)用,2014(7):71?72.

        [7] 解志君.Android多線程與消息循環(huán)[J].電子世界,2013(19):87?88.

        [8] 李剛.瘋狂Android講義[M].北京:電子工業(yè)出版社,2013.

        [9] 百度公司.Android SDK v3.0.0幫助文檔[EB/OL].(2014?06?05)[2014?09?15]. http://developer.baidu.com/map/index.php?title=androidsdk.

        [10] 4ViewSoft公司.AChartEngine 1.1.0在線文檔[EB/OL].(2013?05?15)[2014?09?20]. http://www.achartengine.org/content/demo.html.

        国产黄大片在线观看画质优化| 日韩少妇人妻一区二区| 免费av在线 国产精品| 亚洲国产精品久久久av| 久久精品国产网红主播| 国产日韩亚洲欧洲一区二区三区| 国产传媒剧情久久久av| 国产一区二区黄色网页| 国产麻豆精品一区二区三区v视界 妺妺窝人体色www看美女 | 日韩在线无| 日本高清中文一区二区三区| 中文字幕中文字幕在线中二区| 亚洲国产成人久久综合| 亚洲国产18成人中文字幕久久久久无码av | 日本久久高清一区二区三区毛片| 欧美在线专区| 国产精品久久国产三级国| 午夜被窝精品国产亚洲av香蕉| 亚洲成av人片在线观看ww| 亚洲中文字幕无码二区在线| 国产免费一区二区三区在线视频 | 91国内偷拍精品对白| 国产播放隔着超薄丝袜进入| 亚洲综合无码一区二区| 国产激情一区二区三区在线蜜臀| 亚洲最新精品一区二区| 日产亚洲一区二区三区| 伊人网综合| 男女动态视频99精品| 无码人妻精品一区二区三区夜夜嗨| 日日碰狠狠躁久久躁96avv | 亚洲av不卡一区男人天堂| 在线观看免费人成视频| 国产成人精品麻豆| 亚洲日本高清一区二区| 在线观看成人无码中文av天堂| 三上悠亚免费一区二区在线| 青青草视全福视频在线| 一本到在线观看视频| 国产成人一区二区三区在线观看 | 97se色综合一区二区二区|