999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

GIS開發(fā)平臺(tái)在Android下的一種移植實(shí)現(xiàn)

2017-04-14 10:34:48李永紅
軟件 2017年2期
關(guān)鍵詞:跨平臺(tái)二次開發(fā)

齊 冰,初 寧,李永紅

GIS開發(fā)平臺(tái)在Android下的一種移植實(shí)現(xiàn)

齊 冰1,初 寧2,李永紅3

(1. 華北計(jì)算技術(shù)研究所,北京市 100083;2 3. 中國電子設(shè)備系統(tǒng)工程公司研究所,北京市 100039)

GIS應(yīng)用開發(fā)平臺(tái)是一個(gè)涉及到多方面的復(fù)雜項(xiàng)目。基于已有的、在Window平臺(tái)下以C++語言開發(fā)的GIS庫,如何移植到Android平臺(tái)下,并提供在Android平臺(tái)下的GIS二次開發(fā)接口,是本文討論的重點(diǎn)。為此,本文分別從移植原則、移植設(shè)計(jì)、移植思路等角度進(jìn)行闡述。最后作為例子,給出在Android下的應(yīng)用此接口開發(fā)出的Demo運(yùn)行示意圖。

GIS Android 移植 地理信息系統(tǒng)

0 引言

地理信息系統(tǒng)(Geographic Information System,以下簡(jiǎn)稱GIS)是一個(gè)綜合的科學(xué)系統(tǒng),它以計(jì)算機(jī)軟硬件作為基礎(chǔ),以地理空間數(shù)據(jù)為處理對(duì)象,運(yùn)用系統(tǒng)工程和信息科學(xué)的理論對(duì)地理空間數(shù)據(jù)進(jìn)行判斷、分析,并提供決策。新世紀(jì)以后,人們已不再滿足于從臺(tái)式電腦上獲取地理信息,而是提出了更高的要求,推動(dòng)了多終端尤其是移動(dòng)設(shè)備與GIS在相關(guān)領(lǐng)域的結(jié)合,促進(jìn)了 GIS的進(jìn)一步發(fā)展。鑒于Android設(shè)備在移動(dòng)端的比重,本文擬選取Android系統(tǒng)作為適配環(huán)境進(jìn)行論述。

基于一個(gè)已有的以C++語言開發(fā)的GIS平臺(tái),本文分別從移植可行性、基礎(chǔ)技術(shù)原理、移植方案選取、類包詳細(xì)設(shè)計(jì)等角度進(jìn)行闡述。

1 移植原則

本文跨平臺(tái)設(shè)計(jì)為二次開發(fā)用戶創(chuàng)建一套完整的GIS應(yīng)用框架,能適配Android平臺(tái)的GIS應(yīng)用項(xiàng)目,為二次開發(fā)用戶提供一個(gè)完整的解決方案和設(shè)計(jì)開發(fā)平臺(tái),使其能更方便的使用GIS開發(fā)接口,更高效的減少甚至屏蔽Android系統(tǒng)帶來的差異性。最終提高研發(fā)效率、降低研發(fā)成本。其中,基于GIS項(xiàng)目可擴(kuò)展的角度,本文基于市場(chǎng)需求和計(jì)算機(jī)技術(shù)的發(fā)展進(jìn)行升級(jí)、調(diào)整、補(bǔ)充,同時(shí)不破壞整個(gè)GIS項(xiàng)目的整體性,需要滿足以下特性原則:

1.1通用性

相比于C++的GIS庫,Android平臺(tái)下的GIS項(xiàng)目需要滿足針對(duì)其自身平臺(tái)下的需求,在整體設(shè)計(jì)框架領(lǐng)域提供支持。在表現(xiàn)層次上,GIS項(xiàng)目提供統(tǒng)一的接口服務(wù),統(tǒng)一的系統(tǒng)配置文件,統(tǒng)一的地圖初始化流程等。二次開發(fā)者在使用本GIS開發(fā)工具時(shí),在已有的GIS庫中積累的開發(fā)經(jīng)驗(yàn),可以完全移植到Android平臺(tái)中去。

通用性還需要表現(xiàn)在對(duì)地圖的控制使用上面。二次開發(fā)用戶如果由于使用地圖的需求,比如縮放漫游等操作,其在各個(gè)終端平臺(tái)上面,調(diào)用GIS二次開發(fā)接口時(shí)應(yīng)有統(tǒng)一的接口規(guī)范、通用的控制流程,本GIS系統(tǒng)對(duì)API的反應(yīng)處理情況一致。

1.2易用性

相對(duì)于已有的C++編寫的GIS庫項(xiàng)目,Android平臺(tái)下的二次開發(fā)者在面對(duì)跨平臺(tái)應(yīng)用需求時(shí),需要基于Android平臺(tái)下的GIS接口進(jìn)行二次開發(fā)。在面對(duì)數(shù)量龐大的接口,GIS系統(tǒng)在設(shè)計(jì)時(shí)應(yīng)滿足易用性特點(diǎn),分離業(yè)務(wù)邏輯和底層實(shí)現(xiàn),對(duì)二次開發(fā)者屏蔽GIS系統(tǒng)實(shí)現(xiàn)細(xì)節(jié)。

同時(shí)接口的設(shè)計(jì)中滿足通用的命名規(guī)范,針對(duì)不同種類的接口封裝到對(duì)應(yīng)的類別中。總之使二次開發(fā)者更方便、更抽象的使用。在GIS接口支持下,二次開發(fā)用戶更加專注在本身的業(yè)務(wù)邏輯上,滿足易用性特點(diǎn)。

1.3擴(kuò)展性

需求是不斷升級(jí)的,GIS項(xiàng)目在設(shè)計(jì)時(shí)應(yīng)預(yù)留出升級(jí)空間,根據(jù)實(shí)際需要適時(shí)升級(jí)。框架本身應(yīng)具有靈活性,多使用成熟的插件技術(shù),為隨時(shí)可能的升級(jí)提供保證。可擴(kuò)展和需要擴(kuò)展的需求點(diǎn)在某種程度上是可以預(yù)見的。GIS在接口設(shè)計(jì)上時(shí),應(yīng)充分考慮今后的升級(jí)需要,在改動(dòng)原有代碼邏輯最少的情況下,更加方便擴(kuò)展。

1.4維護(hù)性

面對(duì)已有的GIS項(xiàng)目和Android平臺(tái)下項(xiàng)目,如果沒有有效的進(jìn)行維護(hù),則在升級(jí)擴(kuò)展、版本更迭時(shí)會(huì)變得很難以控制。這樣就對(duì)系統(tǒng)本身的維護(hù)性提出了要求。維護(hù)性對(duì)于某款以定型產(chǎn)品而言要求不大,但是本文面對(duì)的情況是用戶需求的變更性和未知性,所以產(chǎn)品迭代一直在進(jìn)行。代碼版本在升級(jí)時(shí),如果可維護(hù)性差,就會(huì)面對(duì)在同一時(shí)刻兩個(gè)平臺(tái)下的各個(gè)版本底層庫的不一致,大大增加系統(tǒng)開發(fā)和維護(hù)成本。所以維護(hù)性對(duì)于跨平臺(tái)項(xiàng)目來說,至關(guān)重要。

2 移植思路

本文GIS項(xiàng)目在Android平臺(tái)下的移植時(shí),充分考慮以上設(shè)計(jì)原則。同時(shí)面對(duì)實(shí)際用戶需求,提出一種解決方案。整體的設(shè)計(jì)思路是,根據(jù)已有的Windows下GIS項(xiàng)目,把它移植到Android系統(tǒng)下,再針對(duì)Android平臺(tái)做些適配性的工作,共用一套GIS庫底層引擎。如此設(shè)計(jì)可以很好的滿足以上設(shè)計(jì)原則。

首先,共用同一套GIS底層庫,可以在系統(tǒng)需要升級(jí)的時(shí)候,只維護(hù)一套GIS底層庫代碼。這樣就可以保證,在一個(gè)項(xiàng)目中修改的關(guān)于GIS底層庫的部分,可以直接同步到其他的項(xiàng)目中去。兩個(gè)平臺(tái)項(xiàng)目之間維護(hù)一個(gè)GIS版本號(hào),不需要分別管理控制。這樣,大大提高了整個(gè)GIS跨平臺(tái)系統(tǒng)的可維護(hù)性。

其次,由于各個(gè)平臺(tái)項(xiàng)目底層共用一套GIS代碼,同時(shí)在針對(duì)Android平臺(tái)進(jìn)行再次封裝時(shí)保持統(tǒng)一的接口命名風(fēng)格,這樣就會(huì)使二次開發(fā)者在使用本GIS接口進(jìn)行開發(fā)時(shí)更加易用。二次開發(fā)者可以選擇在Windows上開發(fā)時(shí),只做很小甚至不用修改,就可以把代碼完整的移植到Android終端上去。對(duì)于二次開發(fā)者本身而言,屏蔽系統(tǒng)和平臺(tái)之間的差別,只關(guān)心GIS項(xiàng)目和其本身的業(yè)務(wù),可以更加方便其使用,提高開發(fā)效率。

再次,GIS底層庫在兩個(gè)平臺(tái)之間共享,導(dǎo)致所有平臺(tái)下對(duì)于底層GIS庫的處理邏輯一致。比如讀取同樣的配置文件、使用同樣的地圖、同樣的初始化使用流程等。如此,在Android的移植中,通用性也可以滿足。

3 移植原理和可行性

JNI(Java Native Interface)提供了若干API實(shí)現(xiàn)了Java和C++的通信。JNI標(biāo)準(zhǔn)成為java平臺(tái)的一部分,允許Java代碼和的代碼進(jìn)行交互。本文利用JNI技術(shù),與底層C++編寫的GIS庫公用一套接口,進(jìn)行Android應(yīng)用與底層GIS庫的數(shù)據(jù)通信和函數(shù)調(diào)用。

如圖1所示,Android APP會(huì)調(diào)用Java以native函數(shù)封裝的API。采用JNI的機(jī)制,native函數(shù)會(huì)和底層GIS庫進(jìn)行通信,互相調(diào)用。Java的native函數(shù)要跟C++的相應(yīng)函數(shù)一一對(duì)應(yīng)。對(duì)應(yīng)必須保證函數(shù)所在的類名、包名,函數(shù)本身的名字、參數(shù)個(gè)數(shù)參數(shù)名,函數(shù)返回值保持一致。之后,JNI機(jī)制會(huì)保證在Java層調(diào)用native函數(shù)時(shí),指向C++對(duì)應(yīng)的函數(shù)上。

圖1 Android應(yīng)用與底層GIS庫的函數(shù)調(diào)用Fig.1 Function calling between Android Application and GIS library

4 地圖的繪制

在從桌面端往Android平臺(tái)的適配中面臨很多問題,其中以在Android下如何繪制為例進(jìn)行闡述。Android下面繪制的效果最終以一個(gè)app的形式展現(xiàn)。

如圖2所示,GISView是重載自View的自定義類,幾個(gè)函數(shù)流程簡(jiǎn)單介紹如下:

圖2 繪制流程圖Fig.2 Chart of drawing flow

4.1Invalidate ()函數(shù)。

在某個(gè)需要重新繪制的時(shí)刻,比如當(dāng)?shù)貓D進(jìn)行縮放或者漫游時(shí),需要通知GISView進(jìn)行重新計(jì)算、重新繪制。此流程開始于invalidate()函數(shù)的調(diào)用。invalidate()函數(shù)可以顯式通知GISView,導(dǎo)致接下來地圖的更新。

4.2OnDraw ()函數(shù)

調(diào)用完invalidate()函數(shù)之后,Android系統(tǒng)會(huì)負(fù)責(zé)在來接下來的時(shí)刻調(diào)用GIS View的onDraw()函數(shù)。GISView onDraw()函數(shù)重載自Android View的onDraw()函數(shù),onDraw()函數(shù)在View整個(gè)的繪制流程中負(fù)責(zé)最后的繪制部分。GISView重載之后,實(shí)現(xiàn)自己的繪制邏輯。

4.3getPixels ()

API層是針對(duì)底層GIS庫封裝的一個(gè)中間層。GIS庫底層使用C++編寫,共用Windows系統(tǒng)上的一套代碼。Android應(yīng)用使用Java語言開發(fā),為了共用一套代碼,本文采用JNI的方式進(jìn)行代碼的共用,封裝的一層Java接口,以供應(yīng)用調(diào)用,來實(shí)現(xiàn)繪制地圖等一系列地圖操作。函數(shù)getPixels()是API層里面的一個(gè)重要的函數(shù)。

4.4getGraphicsBuffer ()

函數(shù)getPixels()的調(diào)用GIS庫里面的getGraphics-Buffer()函數(shù),獲取在GIS庫中保存的位圖buffer,再構(gòu)建一個(gè)位圖數(shù)組返回。GIS庫的實(shí)現(xiàn)中,根據(jù)地圖數(shù)據(jù)等生成位圖和繪制位圖是兩個(gè)過程,生成位圖之后保存在相應(yīng)的buffer中,繪制時(shí)直接獲取已保存的位圖。示意圖如圖所示。

圖3 位圖獲取示意圖Fig.3 Chart of getting bitmap

4.5onDraw()處理

GISView的onDraw()函數(shù)在調(diào)用完JNI的native方法getPixels()并成功返回int型數(shù)組之后,構(gòu)造可以用來在Android上繪制的Bitmap類,再用canvas繪制出來。

最后,給出使用本文封裝的Android庫的一個(gè)demo示意圖,下圖4。

5 結(jié)束語

本文基于一個(gè)已有的,在Windows平臺(tái)下以C++開發(fā)的GIS庫為基礎(chǔ),做了其往Android平臺(tái)移植的工作。分別從移植原則、移植思路等進(jìn)行闡述。其中,在移植工作中著重闡述了在Android平臺(tái)下的如何繪制的問題。最后給出運(yùn)行效果圖。

面對(duì)單一平臺(tái)下的一個(gè)復(fù)雜項(xiàng)目,想要在其他平臺(tái)環(huán)境中實(shí)現(xiàn)相同功能時(shí),本文便提供了一種思路。即,盡可能的重用原有代碼,進(jìn)而增加開發(fā)效率,減少成本。

圖4 運(yùn)行效果示意圖Fig.4 Chart of a running example

[1] 趙斌, 李欣, 朱美正. GIS跨平臺(tái)技術(shù)研究與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與應(yīng)用, 2005, (23): 193-195+212.

[2] 胡達(dá)天, 胡慶武. 基于開源系統(tǒng)的跨平臺(tái)地圖客戶端開發(fā)[J]. 測(cè)繪科學(xué), 2015, (07): 142-145.

[3] 高捷, 何斌棋, 陳光. 基于Android平臺(tái)的移動(dòng)GIS輸配電線路巡檢系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 中國高新技術(shù)企業(yè), 2012, (24): 25-28.

[4] 龔健雅, 賈文玨, 陳玉敏, 解吉波. 從平臺(tái)GIS到跨平臺(tái)互操作GIS的發(fā)展[J]. 武漢大學(xué)學(xué)報(bào)(信息科學(xué)版), 2004, (11): 985-989.

A Development of a GIS Development Platform under Android

QI Bing, CHU Ning, LI Yong-hong
(1. North China Institute of Computing Technology, Beijing 100083, China;2. North China Institute of Computing Technology, Beijing 100083, China)

The GIS application development platform is a complex project involving many aspects. Based on an existing GIS library, which is developed in the Window platform and in C++ language, this paper focuses on how to transplant it to the Android platform, and to provide the Android platform the secondary development interface. Finally, as an example, we give an example using this interface developed by this paper in Android platform.

GIS; Android; Transplant

P208

: A

10.3969/j.issn.1003-6970.2017.02.025

本文著錄格式:齊冰,初寧,李永紅. GIS開發(fā)平臺(tái)在Android下的一種移植實(shí)現(xiàn)[J]. 軟件,2017,38(2):121-124

猜你喜歡
跨平臺(tái)二次開發(fā)
跨層級(jí)網(wǎng)絡(luò)、跨架構(gòu)、跨平臺(tái)的數(shù)據(jù)共享交換關(guān)鍵技術(shù)研究與系統(tǒng)建設(shè)
一款游戲怎么掙到全平臺(tái)的錢?
淺談基于Revit平臺(tái)的二次開發(fā)
甘肅科技(2020年20期)2020-04-13 00:30:02
西門子Operate高級(jí)編程的旋轉(zhuǎn)坐標(biāo)系二次開發(fā)
淺談Mastercam后處理器的二次開發(fā)
模具制造(2019年3期)2019-06-06 02:11:02
跨平臺(tái)APEX接口組件的設(shè)計(jì)與實(shí)現(xiàn)
Micaps3.2 版本二次開發(fā)入門淺析
西藏科技(2015年12期)2015-09-26 12:13:51
基于QT的跨平臺(tái)輸電鐵塔監(jiān)控終端軟件設(shè)計(jì)與實(shí)現(xiàn)
基于OPC跨平臺(tái)通信的電機(jī)監(jiān)測(cè)與診斷系統(tǒng)
基于B/S的跨平臺(tái)用戶界面可配置算法研究
主站蜘蛛池模板: 免费aa毛片| 亚洲一级毛片免费看| 亚洲国产高清精品线久久| 操国产美女| 朝桐光一区二区| 波多野结衣国产精品| 91视频免费观看网站| 国产精品99久久久久久董美香| 亚洲欧美一级一级a| 国产在线观看第二页| 亚洲IV视频免费在线光看| 影音先锋丝袜制服| 午夜欧美理论2019理论| 最新加勒比隔壁人妻| 精品久久久无码专区中文字幕| 欧美精品H在线播放| 色一情一乱一伦一区二区三区小说| 国产丝袜一区二区三区视频免下载| 久久精品最新免费国产成人| AV天堂资源福利在线观看| 久久久久88色偷偷| 三区在线视频| 国产精品第三页在线看| 在线视频亚洲欧美| 免费观看男人免费桶女人视频| 久久亚洲综合伊人| 天堂av高清一区二区三区| 国产乱人伦精品一区二区| 亚洲无码久久久久| 久青草免费视频| 国产真实乱子伦视频播放| 四虎影视无码永久免费观看| 亚洲精品无码AV电影在线播放| 亚洲视频四区| 国产成人无码AV在线播放动漫| 亚洲全网成人资源在线观看| 午夜在线不卡| 污视频日本| 国产精品妖精视频| 亚洲综合经典在线一区二区| 国产jizz| 久久久久久高潮白浆| 久久久久人妻一区精品色奶水| 亚洲婷婷六月| 国产综合欧美| 午夜小视频在线| 日韩精品一区二区三区大桥未久 | 国产欧美日本在线观看| 日韩一区精品视频一区二区| 亚洲不卡网| 999精品视频在线| 成人国产小视频| 久久久精品久久久久三级| 网友自拍视频精品区| 久久久久夜色精品波多野结衣| 免费在线成人网| 国产对白刺激真实精品91| 亚洲91精品视频| 国产亚洲第一页| 伊人色婷婷| 日本在线视频免费| 国产福利拍拍拍| 久久久久亚洲Av片无码观看| 热思思久久免费视频| 无码综合天天久久综合网| 国产一级二级在线观看| 曰AV在线无码| 中文字幕在线一区二区在线| 亚洲第一精品福利| 精品久久国产综合精麻豆| 国产精品免费p区| 蜜桃视频一区| 内射人妻无码色AV天堂| 91免费观看视频| 福利在线不卡一区| 日韩成人午夜| 欧美日韩亚洲综合在线观看| 天堂中文在线资源| 精品国产91爱| 成人毛片免费观看| 国产丰满成熟女性性满足视频| 亚洲人成影视在线观看|