国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于UNIAPP 的安卓離線矢量瓦片應(yīng)用技術(shù)研究

2023-01-03 11:44郭杰凱楊翠媛鄧振民馬麗娜安效國
地理空間信息 2022年12期
關(guān)鍵詞:跨平臺瓦片離線

郭杰凱,劉 冰,楊翠媛,鄧振民,馬麗娜,安效國

(1. 山東中基地理信息科技有限公司,山東 濟南 250000;2. 山東科技大學測繪與空間信息學院,山東 青島 266590;3. 山東科技大學網(wǎng)絡(luò)安全與信息化辦公室,山東 青島 266590)

WebGIS 領(lǐng)域已形成一套成熟的開源技術(shù)體系,在地圖服務(wù)方面有WMS、WFS、WMTS 等相關(guān)規(guī)范[1-6],在服務(wù)實現(xiàn)方面有Geoserver,在可視化方面有Openlayers、Mapbox 等,而且對矢量瓦片也有很好的支持,已經(jīng)得到大量應(yīng)用[7-8]。最大化利用現(xiàn)有技術(shù)體系可顯著降低技術(shù)難度與風險,所以本文基于開源WebGIS 技術(shù)路線,對移動端離線環(huán)境下矢量瓦片展示技術(shù)方案進行了研究,并通過實驗進行了驗證。

1 關(guān)鍵技術(shù)

1.1 離線環(huán)境的GIS服務(wù)

由于WebGIS本質(zhì)是B/S架構(gòu),可視化前端需要通過http 網(wǎng)絡(luò)請求向GIS 服務(wù)獲取數(shù)據(jù),要求客戶端和服務(wù)端存在網(wǎng)絡(luò)連接。在移動端離線環(huán)境下,可通過回環(huán)網(wǎng)絡(luò)機制解決網(wǎng)絡(luò)連接問題。發(fā)送到回環(huán)地址的任何數(shù)據(jù)包的處理都在TCP/IP 堆棧的鏈路層中實現(xiàn),這些數(shù)據(jù)包不需要網(wǎng)絡(luò)硬件設(shè)備處理,訪問運行在本機上的網(wǎng)絡(luò)服務(wù),不需要物理網(wǎng)絡(luò)接口,也不需要從計算機連接的網(wǎng)絡(luò)中訪問。IPv4網(wǎng)絡(luò)標準為了回送目的保留整個127.0.0.0/8 地址塊。因此,在移動端應(yīng)用中嵌入GIS 服務(wù),并設(shè)置服務(wù)地址為回環(huán)地址(例如127.0.0.1),可實現(xiàn)WebGIS體系的應(yīng)用。

1.2 矢量瓦片存儲

矢量瓦片的核心思想是將矢量數(shù)據(jù)切分到按照選定的瓦片網(wǎng)格方案規(guī)則分布的若干瓦片中。瓦片網(wǎng)格方案用于將投影后的全球范圍分割成多級別的瓦片格網(wǎng),在0 級別中使用1 個瓦片覆蓋投影后的全球范圍,在1 級別中,將0 級別的唯一瓦片進行四等分,以此類推,將某一級別內(nèi)的各瓦片進行四等分即得到下一級別的瓦片,每一個瓦片都對應(yīng)著一個實際的投影坐標范圍。瓦片按照選定的編號起點和行列方向進行編號,使用由行號和列號組成的瓦片坐標將每一個瓦片進行標識,如圖1所示。

圖1 瓦片網(wǎng)格方案示意圖

矢量瓦片生成總體流程是按照瓦片網(wǎng)格方案確定每一層級的瓦片編號與瓦片范圍,對每一個瓦片通過空間范圍條件篩選確定其包含的矢量要素,通過裁剪、簡化等處理后,使用選定的編碼方案將瓦片內(nèi)的矢量要素幾何信息和屬性信息進行編碼,進而存儲到特定格式的文件中,矢量瓦片生成的算法邏輯如圖2所示。

圖2 矢量瓦片生成算法邏輯流程圖

在數(shù)據(jù)編碼和存儲格式方面,目前還未形成統(tǒng)一的標準,比較常用的是Mapbox 制定的矢量瓦片規(guī)范(簡稱為MVT)。Google Protocol Buffers(簡稱Proto?buf)是Google 開源的一種數(shù)據(jù)序列化方法,相比較一些其他的如XML 技術(shù)而言,該技術(shù)更加節(jié)省空間(以二進制流存儲)、速度更快,也更加靈活[9]。MVT基于Protobuf 將編碼后的矢量數(shù)據(jù)序列化為擴展名為.mvt的瓦片文件。MVT對單個瓦片內(nèi)數(shù)據(jù)如何組織進行了描述,但并未包括多層級的瓦片文件如何組織,傳統(tǒng)方法是按照瓦片層級和瓦片編號的列號進行文件夾劃分,使用瓦片編號的行號作為瓦片文件名,最終形成散列形式的瓦片數(shù)據(jù)集,如圖3 所示。這種形式的數(shù)據(jù)集的缺點是文件數(shù)量大,不便于數(shù)據(jù)遷移。MBTiles 規(guī)范最初用于在SQLite 數(shù)據(jù)庫中存儲柵格瓦片數(shù)據(jù),規(guī)范要求tiles 表包含zoom_level、tile_column、tile_row和tile_data4個字段,其中tile_da?ta 字段存儲圖像二進制數(shù)據(jù)。將MBTiles 規(guī)范應(yīng)用到矢量瓦片上,把mvt 瓦片文件以二進制形式寫入tile_data 字段,可將矢量瓦片數(shù)據(jù)集組織到SQLite 數(shù)據(jù)庫中,實現(xiàn)數(shù)據(jù)文件的高效遷移。

圖3 瓦片數(shù)據(jù)集散列文件存儲結(jié)構(gòu)示意圖

1.3 混合開發(fā)技術(shù)

矢量瓦片數(shù)據(jù)在HTML 頁面中渲染,安卓環(huán)境承載HTML 頁面通常是使用Webview 組件,該組件提供loadUrl方法,支持加載本地頁面和網(wǎng)絡(luò)地址。移動端的突出優(yōu)勢是具有衛(wèi)星定位、攝像頭、錄音等豐富的硬件功能,可以在移動端應(yīng)用中使用原生開發(fā)方式調(diào)用硬件功能,對HTML 頁面進行增強。這種HTML 頁面和原生開發(fā)相結(jié)合的方式稱為混合開發(fā)技術(shù),HT?ML 頁面使用這些硬件功能需要調(diào)用安卓原生能力,即需要JavaScript和安卓(稱為Native)進行通信,JS?Bridge技術(shù)為兩者提供了雙向的消息通信通道。Native調(diào)用JavaScript 的方法直接將JavaScript 代碼放入Web?view組件中執(zhí)行。而JavaScript 調(diào)用Native,則需要通過WebView 提供的接口,向JavaScript 的運行時上下文(window)中注入對象或者方法,讓JavaScript調(diào)用時,直接執(zhí)行相應(yīng)的Native 代碼邏輯。直接使用JS?Bridge實現(xiàn)JavaScript和安卓的通信,在實際編碼中是非常繁瑣的。HTML5中國產(chǎn)業(yè)聯(lián)盟推出的HTML5+規(guī)范將常用擴展能力進行了封裝,并且通過Native.js 技術(shù)使JavaScript 可以直接調(diào)IOS 和Android 的原生API。目前流行的UNIAPP 跨平臺開發(fā)框架對HTML5+進行了集成,基于此框架進行混合開發(fā)可以在HTML頁面中簡潔地實現(xiàn)JavaScript和Android原生的交互。

UNIAPP 開發(fā)框架具有跨平臺性和混合開發(fā)支持兩大突出功能特性,能夠極大提升開發(fā)效率。跨平臺性是指基于該框架所開發(fā)的應(yīng)用僅編碼一次,便可編譯成Android、IOS、Web、小程序等多種平臺下的應(yīng)用程序。UNIAPP 開發(fā)框架為組件化開發(fā)模式,該框架提供了常用的基本組件和擴展組件,以及頁面跳轉(zhuǎn)、網(wǎng)絡(luò)通信等各種API,另外支持自定義組件來保證擴展性。UNIAPP混合開發(fā)(指使用UNIAPP框架開發(fā)移動端應(yīng)用的場景)有多種途徑,常用的為3種。

1)僅使用UNIAPP 開發(fā)框架提供的組件與API。該框架最基礎(chǔ)的功能就是將開發(fā)者編寫的頁面編譯成HTML 頁面,然后使用Webview 渲染引擎進行呈現(xiàn),這本身就是混合開發(fā)模式。框架將常用的文件操作、陀螺儀、WiFi 等各種移動端設(shè)備能力調(diào)用進行了封裝,可以在頁面中直接使用相應(yīng)的API。

2)在應(yīng)用中直接使用通用的Web 開發(fā)方式編寫HTML 頁面,使用框架提供的Web-view 組件來加載。編譯時框架對該類頁面不做處理。在HTML頁面中使用框架集成的HTML5+來完成與原生的交互。

3)按照框架的原生組件規(guī)范,使用原生開發(fā)語言實現(xiàn)原生擴展組件,然后在頁面中調(diào)用。

本文總體上是基于第2種模式實現(xiàn)的。

2 實驗驗證

2.1 數(shù)據(jù)準備

實驗數(shù)據(jù)為某鎮(zhèn)行政范圍內(nèi)的三調(diào)地類圖斑矢量數(shù)據(jù),圖斑數(shù)量為11 815 個,總面積約為75.22 km2。數(shù)據(jù)處理流程為:

1)通過坐標轉(zhuǎn)換工具將坐標系轉(zhuǎn)為WGS84。

2)使用OGR2OGR將原始shapefile格式的數(shù)據(jù)轉(zhuǎn)換為GEOJSON文件。

3)使用Tippecanoe制作矢量切片,輸出為mbtiles數(shù)據(jù)集。

2.2 嵌入式GIS服務(wù)

實驗程序采用UNIAPP跨平臺開發(fā)框架,UNIAPP應(yīng)用由PandoraEntryActivity 組件來承載,該組件是由入口組件PandoraEntry 通過startActivity 方法調(diào)起的,GIS 服務(wù)是在PandoraEntryActivity 中嵌入,具體實現(xiàn)步驟為:

1) 創(chuàng)建自定義入口組件(命名為MapPan?doraEntry)繼承PandoraEntry,并在配置文件中將其設(shè)置為入口。

2)創(chuàng)建自定義主組件(MapPandoraEntryActivi?ty)繼承PandoraEntryActivity,并在MapPandoraEntry?Activity的初始化方法中啟動GIS服務(wù)。

3)在自定義入口組件MapPandoraEntry的startAc?tivity方法中啟動自定義主組件MapPandoraEntryActivity。

2.3 矢量瓦片渲染

WebGL(Web 圖形庫)是在瀏覽器中以JavaS?cript API 為開發(fā)語言進行高性能3D 和2D 圖形渲染的技術(shù),不依賴其他插件,而且移動端瀏覽器也已支持WebGL。MapLibre-GL-JS 是Mapbox-GL-JS 的一個開源分支,基于WebGL 技術(shù)實現(xiàn)矢量瓦片的快速渲染。實驗程序開發(fā)的HTML頁面引入MapLibre GL JS,使用其提供的API初始化地圖容器并添加圖層,能夠高幀率地展示矢量數(shù)據(jù),并且可以便捷地進行屬性查詢操作。

3 結(jié) 語

本文基于UNIAPP跨平臺開發(fā)框架,在應(yīng)用中嵌入GIS服務(wù),在HTML頁面中使用WebGL展示矢量瓦片數(shù)據(jù),同時在UNIAPP 框架支持下,可在HTML 頁面中便捷地調(diào)用衛(wèi)星定位等設(shè)備功能,并且該方案均采用開源庫,成本低,為離線環(huán)境下矢量瓦片應(yīng)用提供了可借鑒的技術(shù)方案,可在野外調(diào)查等業(yè)務(wù)中推廣應(yīng)用。

猜你喜歡
跨平臺瓦片離線
跨層級網(wǎng)絡(luò)、跨架構(gòu)、跨平臺的數(shù)據(jù)共享交換關(guān)鍵技術(shù)研究與系統(tǒng)建設(shè)
打水漂
異步電機離線參數(shù)辨識方法
一款游戲怎么掙到全平臺的錢?
淺談ATC離線基礎(chǔ)數(shù)據(jù)的準備
一種基于主題時空價值的服務(wù)器端瓦片緩存算法
互聯(lián)互通車載控制器離線數(shù)據(jù)自動生成方法研究
慣性
基于C++語言的跨平臺軟件開發(fā)的設(shè)計
基于離線狀態(tài)監(jiān)測的復(fù)雜裝備預(yù)知維修決策及優(yōu)化
亚东县| 云霄县| 沙雅县| 马关县| 佛坪县| 凌云县| 新乡县| 南康市| 马边| 三穗县| 长丰县| 云南省| 芮城县| 望城县| 耿马| 芷江| 图木舒克市| 曲松县| 图片| 拜城县| 涞水县| 平阴县| 崇明县| 健康| 五指山市| 惠东县| 南陵县| 正蓝旗| 涟水县| 高雄市| 贵定县| 桐城市| 尼木县| 临沂市| 轮台县| 怀来县| 花垣县| 雅江县| 太白县| 高雄县| 深泽县|