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

基于移動GIS的矢量電子海圖可視化研究

2018-05-04 07:31:54趙軍宮麗瑋周圣川胡振彪
城市勘測 2018年2期
關(guān)鍵詞:系統(tǒng)

趙軍,宮麗瑋,周圣川,胡振彪

(1.青島市勘察測繪研究院,山東 青島 266032; 2.青島市西海岸基礎(chǔ)地理信息中心有限公司,山東 青島 266000)

1 引 言

隨著智能移動設(shè)備的飛速發(fā)展,電子海圖系統(tǒng)不再停滯于桌面系統(tǒng),移動端電子海圖系統(tǒng)的應(yīng)用也越來越多。然而,相比傳統(tǒng)桌面電子海圖系統(tǒng),移動設(shè)備由于其存儲空間小、運(yùn)算能力有限、屏幕尺寸較小、輸入輸出形式較少[1,2],對于大量TPK海圖柵格瓦片的加載,“瘦小”的移動設(shè)備就顯得不切實際,對于數(shù)據(jù)的更新也是一個難題。其次,移動設(shè)備可視化范圍較小,對于海圖符號的精細(xì)化顯示要求更高,這些相對傳統(tǒng)桌面海圖系統(tǒng)可以忽略的問題,在移動設(shè)備上都是必須解決的難題。

本文將矢量電子海圖“移植”到移動端;同時,不同于傳統(tǒng)的純底層電子海圖讀取-解析-顯示-功能開發(fā)模式,本文依托ArcGIS for Android SDK作為技術(shù)框架,通過繼承圖層類DynamicLayer,自定義新View圖層類,采用MVC模式,不僅實現(xiàn)了矢量電子海圖的可視化,采用ArcGIS本身的可視化引擎,可視化速度和效果顯著,而且“借用”ArcGIS成熟的功能模塊,依托ArcGIS API進(jìn)行二次開發(fā),系統(tǒng)穩(wěn)定,大大縮短后期的系統(tǒng)功能模塊開發(fā)時間,提高系統(tǒng)的可擴(kuò)展性和應(yīng)用效果。

2 電子海圖

本文采用S-57電子海圖數(shù)據(jù),即符合IHO標(biāo)準(zhǔn)《數(shù)字化海道測量數(shù)據(jù)傳輸標(biāo)準(zhǔn)》的國際標(biāo)準(zhǔn)電子海圖。國際標(biāo)準(zhǔn)電子海圖是按S-57標(biāo)準(zhǔn)的要求組織的描寫海域地理信息和航海信息的數(shù)字產(chǎn)品,主要以描述海域要素為主,詳細(xì)表示水深、航行障礙物、助航標(biāo)志、港口設(shè)施、潮流、海流等要素的數(shù)字化信息。電子海圖數(shù)據(jù)文件的命名已經(jīng)嚴(yán)格規(guī)范設(shè)定,按照IHO要求和規(guī)定編制,000是標(biāo)準(zhǔn)電子海圖文件格式的后綴,其封裝結(jié)構(gòu)是一種高壓縮的數(shù)據(jù)交換格式。中國海事電子海圖的數(shù)據(jù)文件名表現(xiàn)形式為CN******.000,以CN331340.000為例,其中“CN”是中國海事的代碼(由IHO統(tǒng)一分配)、數(shù)字“3”是航海用途(表示沿海、Coastal),31340表示圖幅編號;小改正更新數(shù)據(jù)文件表現(xiàn)形式是CN******.nnn,其含義與基礎(chǔ)數(shù)據(jù)文件名的意義相同,但后綴根據(jù)小改正更新次數(shù)進(jìn)行編號,最大可達(dá)到999次,如第十次小改正更新,其文件名是CN******.010[3,4]。

電子海圖根據(jù)空間信息的數(shù)據(jù)結(jié)構(gòu)主要包括兩大類:光柵式電子海圖和矢量式電子海圖。其各自特點如表1所示。

電子海圖分類 表1

從上表可以看出,矢量電子海圖數(shù)據(jù)占用空間更小,矢量繪制海圖符號顯示效果更佳,支持各種空間分析、數(shù)據(jù)更新。移動平臺內(nèi)存空間有限,考慮到需要海上作業(yè)、離線加載海圖數(shù)據(jù)等問題,矢量電子海圖的優(yōu)勢可以得到更好的發(fā)揮。

3 矢量電子海圖可視化

3.1 相關(guān)工具及技術(shù)

000海圖文件的解析用C++來實現(xiàn),而Android主流應(yīng)用的開發(fā)使用Java語言,因此涉及C++與Android端Java代碼的對話問題,需要實現(xiàn)兩者之間的無障礙交流;為了解決這一問題,本文選擇采用NDK工具和JNI技術(shù),也是目前Android開發(fā)解決此類相關(guān)問題的主流途徑。

(1)NDK介紹

眾所周知,Android相關(guān)應(yīng)用軟件的開發(fā),都是以Java作為主流開發(fā)語言,這主要是因為Android SDK使用Java語言編寫。但在實際程序開發(fā)中,同樣支持C/C++,即所謂的原生編程。Android系統(tǒng)架構(gòu)下的核心庫是一個由C/C++編寫的庫的集合,因此,可以認(rèn)為,Android平臺實際是由C/C++搭建,由C/C++編程也成為現(xiàn)實[8]。

為了在系統(tǒng)底層支持“Java與C/C++”的交換開發(fā),催生了NDK(Native Development Kit)。NDK是一個工具集,支持開發(fā)者使用本地代碼(C/C++)進(jìn)行程序部分功能的開發(fā)。NDK的出現(xiàn),使得開發(fā)者可以重用一些成熟的C/C++本地庫來完成程序某些特定功能的開發(fā),從而提高程序性能。

C/C++的嵌入,豐富了Android的開發(fā);同時,C/C++語言本身的特性,也使NDK給Android開發(fā)帶來了一系列的天然優(yōu)勢:

①明顯提高代碼的安全性。應(yīng)用層主流語言Java被反編譯難度較低,而以C/C++編寫的動態(tài)庫的反編譯過程則要困難得多。

②對本地開源動態(tài)庫的利用更加方便。NDK的出現(xiàn),可以大大提高這些開源庫的使用,不僅可以有效重用現(xiàn)有代碼,還可以有效提高程序開發(fā)的效率。

③明顯提高代碼的執(zhí)行效率。C/C++語言本省的高性能性,將其進(jìn)行較高性能的應(yīng)用邏輯層面的開發(fā)時,可以大大優(yōu)化代碼的執(zhí)行效率。

④提高代碼的可移植性。本地C/C++動態(tài)庫以 .so庫的形式獨立存在,可以方便地應(yīng)用于其他的嵌入式平臺,明顯提高代碼的重用性。

(2)JNI技術(shù)混編

JNI,即Java Native Interface,Java本地接口;用來實現(xiàn)Java代碼和本地C/C++代碼的交互。

NDK作為谷歌開發(fā)推出的開發(fā)和編譯工具集,主要用于Android的JNI開發(fā),NDK提供Java和C/C++交互的環(huán)境,用來實現(xiàn)Java代碼與本地的C/C++的相互調(diào)用。比如,當(dāng)我們需要使用某個函數(shù),基于效率等原因,函數(shù)用C/C++語言在NDK環(huán)境中一個類文件中實現(xiàn),然后將該類文件打包成so動態(tài)庫;利用JNI技術(shù),我們只需在Java層加載上述本地動態(tài)庫、定義一個JNI式的接口,便可以實現(xiàn)語言之間的交互,如圖1所示。

圖1 JNI應(yīng)用流程圖

通過Android中的應(yīng)用程序框架,可以簡單、直接地看出JNI給程序調(diào)用帶來的變化。正常情況下的Android框架:最上層是Android的應(yīng)用程序代碼,為Java語言,中間層是Framework框架層,為C/C++代碼,通過Framework層進(jìn)行系統(tǒng)的調(diào)用,調(diào)用系統(tǒng)的底層庫函數(shù)和Linux內(nèi)核,如圖2所示。

圖2 Android框架圖

圖3 使用JNI的Android框架圖

使用JNI時的Android框架:不再經(jīng)過Framework框架層,通過JNI直接調(diào)用本地開發(fā)者編寫的C/C++代碼,本地代碼最后通過NDK環(huán)境編譯成so動態(tài)庫,該動態(tài)庫通過JNI提供的一個Stable的ABI(二進(jìn)制程序接口application binary interface)調(diào)用Linux內(nèi)核,如圖3所示。

上述兩張圖2和3,可以看出JNI是連接Android框架層(Framework-C/C++)和應(yīng)用框架層(Application Framework-Java)的紐帶。

本文研究選擇ArcGIS Runtime SDK for Android作為系統(tǒng)開發(fā)框架,雖然ArcGIS的API技術(shù)已相對成熟,但ArcGIS SDK并不能解析和繪制S-57電子海圖矢量格式的000文件。通過對NDK的研究和JNI技術(shù)的了解,本文選擇用標(biāo)準(zhǔn)C++解析000文件讀進(jìn)內(nèi)存,利用JNI技術(shù),然后用Java進(jìn)行繪制的模式進(jìn)行矢量海圖的繪制顯示,簡單的基本流程如下圖4所示。這么做的好處就是文件的解析部分是可以跨平臺運(yùn)行的,以后如果要在其他平臺上布設(shè)移動海圖系統(tǒng)就可以直接使用這里的解析模塊而不用重新解析從頭開始。繪制的部分由于要考慮到不同操作平臺的繪制環(huán)境,故沒有必要做成跨平臺的通用模塊,這樣還可以利用不同平臺對自有繪制引擎的加速功能,從而使繪制更加高效。

圖4矢量海圖繪制流程

(3)ArcGIS Runtime SDK for Android介紹

ArcGIS Runtime SDK for Android為Android平臺上開發(fā)地理信息系統(tǒng)產(chǎn)品提供了最基本的地理信息系統(tǒng)相關(guān)功能的開發(fā)框架,本文選擇ArcGIS Runtime SDK for Android作為系統(tǒng)開發(fā)的技術(shù)框架,可以充分利用其API在地圖應(yīng)用層面目前已具備的成熟的技術(shù)支持。其主要功能包括:數(shù)據(jù)加載、地圖查詢、數(shù)據(jù)展示、外業(yè)數(shù)據(jù)采集、數(shù)據(jù)編輯、數(shù)據(jù)同步。

基于ArcGIS Runtime SDK for Android進(jìn)行二次開發(fā),能夠大大改善之前海圖系統(tǒng)零起步自主研發(fā)導(dǎo)致的系統(tǒng)不穩(wěn)定性,而且對于后期的系統(tǒng)可拓展性可以提供很好的支持。

3.2 矢量海圖繪制

ArcGIS for AndroidSDK提供各種類型的圖層類,各圖層類繼承關(guān)系如圖5所示。其中,DynamicLayer提供自定義矢量繪制接口,對于000矢量電子海圖的繪制,通過繼承DynamicLayer自定義圖層來實現(xiàn),做到對ArcGIS for Android框架的無縫對接。

圖5 圖層類繼承關(guān)系圖

為了實現(xiàn)矢量電子海圖解析的跨平臺性,提高整個海圖系統(tǒng)在平臺間的可移植性,提高代碼的使用率,000矢量海圖的解析部分采用標(biāo)準(zhǔn)C++來完成,NDK環(huán)境和JNI技術(shù)的引入,使得Android開發(fā)環(huán)境對于標(biāo)準(zhǔn)C++具有比較良好的兼容性,不僅支持調(diào)用C++封裝的底層庫,而且支持Java和C++混編,最終將解析的部分打包成so動態(tài)庫供上層繪制模塊調(diào)用。解析模塊整體上分為兩個部分,對000海圖文件和符號庫進(jìn)行分離解析。

不同平臺具有各自不同的繪制引擎,同時不同的操作平臺對于自身繪制引擎的支持性也相對較好,并且調(diào)用起來也更加方便;本文000矢量海圖的具體繪制,采用Android自帶的繪制引擎Skia進(jìn)行。Skia Graphics Library(SGL)是一個由C++編寫的開放源代碼圖形庫,最初由Skia公司開發(fā),后由Google收購,搭配OpenGL ES,成為Android的專屬繪制引擎庫[5]。Skia主要有以下幾個特點[9]:

①高度優(yōu)化的軟件rasteriser(module sgl/);

②選擇性透過OpenGL ES,加速特定操作,如shader與textures(module gl/);

③較強(qiáng)的動畫處理能力(module animator/);

④內(nèi)建SVG支援(module svg/);

⑤內(nèi)建若干image codec,如PNG,JPEG,GIF,BMP(modules images/);

⑥具有一定的文字處理功能,但對于不太常見的文字的處理相對不足;

Android對Skia的調(diào)用是一個比較經(jīng)典JNI式的調(diào)用過程,這與下面矢量繪制的調(diào)用過程有異曲同工之處;JNI放在框架的JNI目錄下面的Graphic目錄;Skia以第三方組件的身份,放在external目錄下面。Android對Skia的調(diào)用流程如圖6所示。

圖6 Android調(diào)用Skia流程圖

海圖適量繪制的過程總體思想就是解析、繪制、顯示三過程上下層環(huán)境的分離、開發(fā)語言Java/C++的交互;最后形成獨立的視圖控件。實現(xiàn)解析過程的可移植性、跨平臺性;利用JNI實現(xiàn)上下層環(huán)境Java/C++語言的交互、海圖的繪制;通過自定義開發(fā)ArcGIS for Android View圖層類,實現(xiàn)海圖顯示圖層的模塊化、獨立性。整個調(diào)用繪制過程如圖7所示。

圖7 海圖矢量繪制圖

海圖矢量繪制具體步驟如下:

(1)首先是海圖000文件和符號庫文件的解析。該過程發(fā)生在C++底層,這是一個可移植的過程,桌面版、IOS平臺均可適用;

(2)將解析結(jié)果內(nèi)存塊轉(zhuǎn)化為bitmap。解析結(jié)果內(nèi)存對象ENCProject到海圖bitmap圖像的過程發(fā)生在Android NDK環(huán)境下的C++底層,利用Android的Skia圖形庫方法DrawMap方法將內(nèi)存塊ENCProject繪制出bitmap;

(3)利用JNI將C++底層bitmap上傳到Android應(yīng)用層java類。該過程符合Android對Skia JNI式的調(diào)用過程,將結(jié)果返回到上層Java層。

(4)自定義新的View圖層類TeleSeaMapServiceLayer。通過覆寫繼承自DynamicLayer的TeleSeaMapServiceLayer的getImage方法,接收底層傳出的bitmap。

(5)采用ArcGISAPI類MapView加載地圖場景方法addLayer,實現(xiàn)S-57海圖圖層的顯示。

4 可視化效果展示

(1)開發(fā)環(huán)境

海圖系統(tǒng)采用AndroidStudio作為開發(fā)平臺,開發(fā)語言使用Java和標(biāo)準(zhǔn)C++,采用ArcGIS for Android作為開發(fā)接口,數(shù)據(jù)庫使用Sqlite。

測試環(huán)境

主要測試設(shè)備包括Galaxy Note Ⅱ和Galaxy Tab Pro T320。各項參數(shù)指標(biāo)如表2所示。

測試參數(shù) 表2

(2)效果展示

S-52標(biāo)準(zhǔn)對海圖的顯示做了基準(zhǔn)規(guī)范,將航道圖顯示分類為以下三種:

①基礎(chǔ)顯示:指不能從顯示中刪除的,由那些在任何情況下都需要的信息所組成的SENC信息層。基礎(chǔ)顯示作為標(biāo)準(zhǔn)顯示的一部分,并不能滿足安全航行的需要。

②標(biāo)準(zhǔn)顯示:指當(dāng)航道圖默認(rèn)情況下在電子海圖顯示與信息系統(tǒng)上顯示時所展示出的系統(tǒng)電子航海圖(SENC)信息。在實際航海應(yīng)用時,相關(guān)工作人員可根據(jù)需要選擇性顯示系統(tǒng)航道圖的信息,同時可以進(jìn)行相關(guān)修改。

③所有其他信息:指不包含在標(biāo)準(zhǔn)顯示中的航道圖信息、它僅在需要時才顯示[10]。

實驗結(jié)果表明,矢量電子海圖的顯示達(dá)到預(yù)定目標(biāo),尤其是對精細(xì)化海圖符號的顯示非常成功,如圖8所示。

圖8矢量海圖顯示效果圖

相比傳統(tǒng)tpk瓦片柵格海圖,矢量電子海圖所占存儲空間更小,大大提高了移動端海圖顯示的應(yīng)用范圍。矢量電子海圖的顯示質(zhì)量更好,海圖縮放不失真;同時,從圖8可以看出,矢量電子海圖實現(xiàn)了對海圖符號顯示精度和顯示質(zhì)量的雙重保障,解決了瓦片柵格海圖符號標(biāo)識模糊、位置不明確的問題;并且,本文實現(xiàn)可以隨意切換實時渲染顯示不同專題的海圖符號,相比柵格海圖“一個專題符號海圖就需要重新打包一份對應(yīng)的GB級別的柵格瓦片”,這完全是跨越式的進(jìn)步。

5 總 結(jié)

海洋地理空間的發(fā)展是這個時代的主旋律。電子海圖作為海上作業(yè)的必備工具,智能移動設(shè)備的發(fā)展推動,對矢量電子海圖的需求越來越大。本文提出通過繼承ArcGIS DynamicLayer,自定義海圖圖層TeleSeaMapServiceLayer,實現(xiàn)了ArcGIS for Android下的矢量電子海圖的可視化,可視化效果顯著。同時,基于ArcGIS for Android的二次開發(fā),有助于后期可視化系統(tǒng)的維護(hù)和可拓展性。對于系統(tǒng)的優(yōu)化和相關(guān)功能的開發(fā),有待于后期進(jìn)一步開發(fā)。

[1] 齊勝利. 基于Android的移動電子海圖平臺研究[D]. 大連:大連海事大學(xué),2012.

[2] 李超,潘明陽,李邵喜等. 基于Android的電子海圖顯示系統(tǒng)研究與實現(xiàn)[J]. 大連海事大學(xué)學(xué)報,2013,39(4):55~58.

[3] 陳輝. Web方式下電子海圖的顯示技術(shù)研究與應(yīng)用[D]. 武漢:武漢理工大學(xué),2011.

[4] 董才華,秦臻. 電子海圖數(shù)據(jù)讀取與顯示技術(shù)[J]. 中國航海,2012,35(4):22~25.

[5] 徐鐵.電子海圖數(shù)據(jù)庫及其索引技術(shù)研究[D]. 上海海運(yùn)學(xué)院,2003.

[6] 徐永峰.基于分層動態(tài)網(wǎng)格的電子海圖顯示技術(shù)研究[D]. 上海:上海海事大學(xué),2006.

[7] 董曉光,李樹軍,李改肖等. 移動平臺下電子海圖矢量數(shù)據(jù)訪問優(yōu)化方法[J]. 海洋測繪,2015,35(4):57~59.

[8] 王有祿,李代平. Android系統(tǒng)下基于NDK方式的圖形開發(fā)[J]. 計算機(jī)系統(tǒng)應(yīng)用,2013(12):56~59.

[9] 邵哲平,孫騰達(dá),潘家財?shù)? 基于ECDIS和AIS的船舶綜合信息服務(wù)系統(tǒng)的開發(fā)[J]. 中國航海,2007,2:7.

猜你喜歡
系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機(jī)系統(tǒng)
ZC系列無人機(jī)遙感系統(tǒng)
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統(tǒng)
基于UG的發(fā)射箱自動化虛擬裝配系統(tǒng)開發(fā)
半沸制皂系統(tǒng)(下)
FAO系統(tǒng)特有功能分析及互聯(lián)互通探討
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
一德系統(tǒng) 德行天下
PLC在多段調(diào)速系統(tǒng)中的應(yīng)用
主站蜘蛛池模板: 日韩少妇激情一区二区| 日本a级免费| 26uuu国产精品视频| 久久久久久久久久国产精品| 国产乱子伦无码精品小说| 999精品色在线观看| 青青草91视频| 国产精品亚洲一区二区在线观看| 中文字幕欧美日韩| 国产亚洲精品无码专| 久久久久久国产精品mv| 欧美不卡视频一区发布| 67194亚洲无码| 高清免费毛片| 伊人激情久久综合中文字幕| 波多野结衣无码视频在线观看| 中文字幕免费在线视频| 香蕉在线视频网站| 国产迷奸在线看| 天天躁狠狠躁| 毛片三级在线观看| 久久毛片网| 免费视频在线2021入口| 国产欧美日本在线观看| 国产精品尤物在线| 日本黄色不卡视频| 一级毛片在线播放免费| 午夜小视频在线| 久久精品免费国产大片| 欧美自慰一级看片免费| 亚洲成人播放| 亚洲丝袜第一页| 中国毛片网| 久草热视频在线| 久久国产精品无码hdav| 欧美成人一区午夜福利在线| 91www在线观看| 久久国产毛片| 亚洲成A人V欧美综合天堂| 国产成人精品视频一区视频二区| 欧美亚洲国产日韩电影在线| 99国产在线视频| 国产精品女熟高潮视频| 激情乱人伦| 国产免费精彩视频| 精品亚洲欧美中文字幕在线看| 亚洲区第一页| 久久夜色精品国产嚕嚕亚洲av| 国产成人精品日本亚洲77美色| 色播五月婷婷| 精品一区二区无码av| 国产一区二区免费播放| 欧美成人综合视频| 亚洲欧洲自拍拍偷午夜色| 久久a级片| 91精品国产一区自在线拍| 老司机午夜精品视频你懂的| 一本大道东京热无码av| 免费人欧美成又黄又爽的视频| 国产91在线|日本| 欧美午夜在线观看| 乱人伦视频中文字幕在线| 毛片视频网| 日韩国产无码一区| 精品夜恋影院亚洲欧洲| 爆乳熟妇一区二区三区| 免费日韩在线视频| 国产一区二区三区视频| 亚洲男人的天堂久久香蕉网| 国产精品亚洲专区一区| 亚洲—日韩aV在线| 欧美一级高清免费a| 久久99蜜桃精品久久久久小说| 99久久精品视香蕉蕉| 国产精品私拍在线爆乳| 色综合中文综合网| 亚洲视频色图| a亚洲视频| 欧美第二区| 在线亚洲精品自拍| 国产毛片基地| 色噜噜综合网|