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

        ?

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

        2017-04-14 10:34:48李永紅
        軟件 2017年2期
        關鍵詞:跨平臺二次開發(fā)調(diào)用

        齊 冰,初 寧,李永紅

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

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

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

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

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

        0 引言

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

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

        1 移植原則

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

        1.1通用性

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

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

        1.2易用性

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

        同時接口的設計中滿足通用的命名規(guī)范,針對不同種類的接口封裝到對應的類別中??傊苟伍_發(fā)者更方便、更抽象的使用。在GIS接口支持下,二次開發(fā)用戶更加專注在本身的業(yè)務邏輯上,滿足易用性特點。

        1.3擴展性

        需求是不斷升級的,GIS項目在設計時應預留出升級空間,根據(jù)實際需要適時升級??蚣鼙旧響哂徐`活性,多使用成熟的插件技術,為隨時可能的升級提供保證??蓴U展和需要擴展的需求點在某種程度上是可以預見的。GIS在接口設計上時,應充分考慮今后的升級需要,在改動原有代碼邏輯最少的情況下,更加方便擴展。

        1.4維護性

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

        2 移植思路

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

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

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

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

        3 移植原理和可行性

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

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

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

        4 地圖的繪制

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

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

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

        4.1Invalidate ()函數(shù)。

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

        4.2OnDraw ()函數(shù)

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

        4.3getPixels ()

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

        4.4getGraphicsBuffer ()

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

        圖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庫的一個demo示意圖,下圖4。

        5 結(jié)束語

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

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

        圖4 運行效果示意圖Fig.4 Chart of a running example

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

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

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

        [4] 龔健雅, 賈文玨, 陳玉敏, 解吉波. 從平臺GIS到跨平臺互操作GIS的發(fā)展[J]. 武漢大學學報(信息科學版), 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ā)平臺在Android下的一種移植實現(xiàn)[J]. 軟件,2017,38(2):121-124

        猜你喜歡
        跨平臺二次開發(fā)調(diào)用
        淺談基于Revit平臺的二次開發(fā)
        甘肅科技(2020年20期)2020-04-13 00:30:02
        核電項目物項調(diào)用管理的應用研究
        淺談Mastercam后處理器的二次開發(fā)
        模具制造(2019年3期)2019-06-06 02:11:02
        LabWindows/CVI下基于ActiveX技術的Excel調(diào)用
        測控技術(2018年5期)2018-12-09 09:04:46
        跨平臺APEX接口組件的設計與實現(xiàn)
        測控技術(2018年9期)2018-11-25 07:44:58
        西門子Easy Screen對倒棱機床界面二次開發(fā)
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術研究
        基于QT的跨平臺輸電鐵塔監(jiān)控終端軟件設計與實現(xiàn)
        基于OPC跨平臺通信的電機監(jiān)測與診斷系統(tǒng)
        基于B/S的跨平臺用戶界面可配置算法研究
        亚洲中文字幕永久网站| 99精品人妻无码专区在线视频区 | 一区二区三区观看视频在线| 女色av少妇一区二区三区| 国产国产人免费人成免费视频| 久久无码潮喷a片无码高潮| 99久久婷婷国产综合精品青草免费| 国产熟妇人妻精品一区二区动漫| 亚洲国产99精品国自产拍| 中文字幕成人精品久久不卡| 人妻少妇偷人精品久久人妻 | 极品人妻少妇av免费久久| 国产午夜手机精彩视频| a级毛片在线观看| 亚洲中文欧美日韩在线| 国产三级精品三级在线| 女同同志熟女人妻二区| 男人和女人做爽爽免费视频 | 亚洲亚洲亚洲亚洲亚洲天堂| 国产少妇高潮在线视频| 日韩人妻不卡一区二区三区| 暖暖 免费 高清 日本 在线| 少妇被猛男粗大的猛进出| 国产乱人伦偷精品视频免| 污污污国产免费网站| 国产精品国产三级国产不卡| 欲女在线一区二区三区| 永久黄网站免费视频性色| 99久久综合狠狠综合久久| 国产传媒剧情久久久av| 一区二区三区四区亚洲免费| 狠狠色丁香婷婷综合潮喷| 日本做受高潮好舒服视频| 春色成人在线一区av| 精品女人一区二区三区| 欧美亅性猛交内射| 婷婷亚洲久悠悠色悠在线播放| 久久频这里精品99香蕉| 精品蜜臀国产av一区二区| 日韩亚洲中文有码视频| 一区二区三区人妻无码|