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

安卓平臺背景下三維實景展示動態緩存技術研究

2022-05-31 23:09:04王浩翔王春宋宏利趙昕
河南科技 2022年9期

王浩翔 王春 宋宏利 趙昕

摘 要:隨著移動設備的普及,實景三維技術在移動端的應用場景愈加豐富的同時,也因內存與網絡的限制帶來了一些問題。因此,探尋移動端加載大規模實景數據的方法至關重要。本研究選取安徽省滁州市某一地區的實景三維模型,該區域面積為9.14 km2,使用ArcGIS Pro軟件將OSGB傾斜攝影數據轉換為SLPK格式,以適配移動端,并構建相關APP,在此基礎上采用視錐體計算、空間索引等方法,對大體量實景數據在移動設備上的調度進行優化,通過監聽攝像機在場景中的空間位置,對當前屏幕可視域內外的模型數據進行動態緩存與釋放,以此實現加載大規模實景數據的目的。經試驗測試,能夠在華為平板上流暢調度近30 GB的模型數據并顯示。

關鍵詞:實景三維;視錐體;空間索引;動態緩存

中圖分類號:P208;TP391.41? ? 文獻標志碼:A ? 文章編號:1003-5168(2022)9-0007-07

DOI:10.19968/j.cnki.hnkj.1003-5168.2022.09.001

Research on Dynamic Cache Technology for 3D Real Scene Display on Android Platform

WANG Haoxiang1? ? WANG Chun1,2? ? SONG Hongli1? ? ZHAO Xin1

(1.School of Earth Science and Engineering,Hebei University of Engineering,Handan 056038,China;

2.College of Geographic Information and Tourism,Chuzhou University,Chuzhou 239000,China)

Abstract: With the popularity of mobile devices,the application scenario of 3D Real Scene in the mobile terminal is becoming more and more abundant.At the same time, it also brings some problems due to the restriction of memory and network.Therefore,it is very important to explore the method of loading large-scale real scene data on the mobile terminal.The article selects the real scene data of a certain area in Chuzhou City,Anhui Province,the constituency covers an area of 9.14 square kilometers,uses ArcGIS Pro to convert its type to SLPK to adapt to the mobile terminal.Uses frustum calculation,spatial index,and other methods to optimize the scheduling of large-scale real scene data on mobile devices.By monitoring the spatial position of the camera in the scene,the model data inside and outside the current screen's visual field is dynamically cached and released,achieve the purpose of loading large-scale real scene data.After testing,it can smoothly schedule and display nearly 30 GB model data on the Huawei tablet.

Keywords:3D real scene;view frustum;spatial index;dynamic cache

0 引言

實景三維(3D Real Scene)是對人類生產、生活和生態空間進行真實、立體、時序化反映和表達的數字化虛擬空間,為經濟社會發展和各部門信息化建設提供統一的空間基底。

在移動終端領域,實景三維的應用場景越來越多[1]。國內外GIS企業紛紛推出了適應于不同應用場景的移動端應用程序編程接口(API),如Esri公司的ArcGIS Runtime SDK for Android、北京超圖的SuperMap iMoble for Android等,使開發人員能夠在移動終端對實景三維模型和GIS數據進行訪問、展示、分析與管理。在應用方面,谷歌公司于2007年在谷歌地圖的基礎上推出了谷歌街景,通過街景車拍攝的不同方向上的照片,為使用者提供實地景象[2],實現實景漫游功能,率先將“實景”這一概念通過移動終端呈現給廣大用戶。

隨著移動設備硬件性能的提升,移動互聯時代對GIS的應用要求越來越高[3],信息來源從單一到全信息要素結合,視角從傳統實景漫游的固定位置視角到基于球面場景的自由視角,對三維模型的精細程度、操作自由度、地理數據豐富度有了更高的要求。但越精細的模型對設備性能的要求就越高,而如何有效地解決移動設備緩存大體量的實景三維數據具有重要意義。羅安平等[4]利用金字塔模型分層分塊管理影像、高程、地形數據,采用OSGearth 引擎構建出三維場景,并成功移植到Android平臺,實現地理信息的三維顯示。路廣[5]利用金字塔模型對三維校園地圖瓦片進行存儲,從而提高了瓦片的渲染效率。

目前,對移動設備的三維應用研究存在三維模型精細程度有限,視角操作多局限于平移、旋轉、縮放基礎操作等問題。對此,本研究提出一種基于自由視角的實景模型緩存方法,在原有視角操作的基礎上增加環繞目標點的選項,根據當前攝像機的位置,對視野內外的實景模型瓦片動態進行緩存與釋放,避免內存占用量過高,從而實現動態緩存大規模實景數據的目的,并支撐基于多源數據聚合的全信息實景地理環境安卓服務平臺的建設。

1 大規模實景數據動態緩存與釋放的設計思路

由于受內存與網絡的限制,移動端無法實現加載大規模實景三維數據,本研究在索引法的基礎上,通過改進客戶端索引法,配合移動端進行實時監聽接口,監控相機位置與屏幕可視域,只緩存可視域及緩沖區內的實景模型數據,對可視域外的實景數據進行動態釋放,避免一次性載入過量數據導致系統崩潰。綜上所述,本研究設計一種大規模實景數據緩存實現思路(見圖1),具體實現步驟如下所示。

①動態獲取當前攝像機的視線方向。

②獲取移動設備的屏幕參數。

③根據視線方向與屏幕參數計算出視野范圍。

④計算出視野范圍的最小外接矩形(矩形邊與經緯線平行)。

⑤計算出最小外接矩形在地圖網格中的位置與矩形包含的地圖瓦片集合。

⑥計算矩形瓦片集合內每個瓦片與視野范圍的空間關系,得到視野內瓦片的集合。

⑦將瓦片集合內的位置編號與模型文件名進行匹配。

⑧緩存(釋放)視野內(外)的模型文件。

2 相關技術

2.1 ArcGIS Runtime SDK for Android

ArcGIS Runtime SDK for Android包括一個用于Android Studio的lib-project和用于eclipse等環境的jar函數庫,其提供了豐富的工具、文檔和示例,用戶能夠使用Java語言構建移動應用程序,這些應用程序可運用ArcGIS for Server提供的制圖、地理編碼、地理處理和自定義功能,并可將其部署到基于Android系統的智能手機和平板上[6-7]。

在三維數據顯示上,ArcGIS Runtime SDK for Android提供場景(Scene)、場景視圖(SceneView)以三維方式顯示的地理內容,分別負責控制邏輯與處理視圖。場景包含多個來源于在線或本地的數據圖層,可通過底圖圖層(BasemapLayer)構建一個基礎地理環境。場景同時支持二維圖層與三維圖層,二維圖層按照添加順序來顯示,對于要顯示的數據類型需要創建圖層,如Feature類數據的要素圖層FeatureLayer;三維圖層則通過圖層的高程信息來顯示。ArcGIS Runtime SDK for Android還可通過Portal API訪問ArcGIS Online和Portal for ArcGIS上的資源,即可與云端建立密切的聯系,被多數用戶和開發者所關注。

2.2 ArcGIS Pro

ArcGIS Pro可將OSGB傾斜攝影模型轉換為ArcGIS Runtime SDK for Android支持的三維數據類型SLPK,可通過Create Intergrated Mesh Scene Layer Package工具對數據進行轉換。SLPK(SceneLayer Package)是Esri發起的I3S標準規范的三維數據格式,已被OGC采納為新的國際三維標準,在移動端可通過場景圖層直接實例化SLPK三維場景文件路徑指向的對象,從而達到顯示實景三維模型的目的。

3 傾斜視角下的實景模型緩存

3.1 傾斜視角下的視野中心

在實景三維應用中,由于相機的視角是不固定的,多數情況下為傾斜視角,傾斜視角下的參數除攝像機所在位置的經度X、維度Y和高度Z之外,還包含攝像機朝向Heading、傾角Pitch和橫滾Roll等參數。其中,朝向Heading表示水平方向上攝像機朝向與以正北方向為起始軸的夾角,范圍為0°~360°;傾角Pitch表示垂直方向上攝像機朝向與垂直地面朝向地心的起始射線的夾角,范圍為0°~180°,0°表示朝向地心,180°表示背向地心;橫滾Roll表示模型與場景視角固定的情況下,設備視窗與水平方向的夾角,實際應用情況下多數為0°,可暫不考慮。

在獲取X、Y、Z、Heading、Pitch以及設備屏幕大小等參數后,可獲取設備可視域內模型信息。首先要獲取當前攝像機視野中心在模型上的位置,即攝像機視線與地面模型相交的核心點。核心點的計算方法如下。

核心點與攝像機正射投影點之間的距離為distance。

[distance=Z×tan(Pitch)]? ? (1)

經度圈上1°對應長Dlang為:

[Dlang=CE/360=111 000 m]? ?(2)

則經度變化量[ΔY]為:

[ΔY=distance×cos(Heading)/Dlang] (3)

緯度圈上1°對應長Dla與所在的緯度圈相關:

[Dla=(2π×RE×cosX)/360]? ? (4)

則經度變化量[Δ]X:

[ΔX=distance×sin(Heading)/Dla]? (5)

得出中心點經緯度坐標:

[(CenterX,CenterY)=(X+ΔX,Y+ΔY)]? (6)

其中,CenterX為核心點的緯度;CenterY為核心點的經度;RE為地球半徑;CE為地球周長。

3.2 視錐、視野和縮放

視錐體是相機可能看到的空間體積,其形狀類似于被剪掉了尖端的金字塔(見圖2),根據中心視線向外延展出最大距離的固定視錐體,視錐體與地圖瓦片層的切面即為相機可視域,視錐大小可根據移動設備的型號進行動態調整,以獲取不同方向上的視野參數。

視野(Field of View,FOV)是視錐體的截取角度。由于視錐體是由6個面組成的三維體,故所需的視野參數由垂直視野和水平視野組成,分別對應水平與垂直方向上的視錐體橫截面。

縮放(Zoom)測量的是對象的表現相對于90°視野的比率,即縮放值為α時,對象在屏幕上顯示的大小是90°視野下的α倍。

視野與縮放的幾何解釋如圖3所示,通過三角函數換算得到視野fov和縮放zoom之間的關系為式(7)。

[zoom=1tan(fov2)]? ? ? (7)

從式(7)可以看出縮放與視野呈反比關系,與視野有水平垂直之分類似,縮放也有垂直水平之分。對于不同型號的移動設備,受分辨率、屏幕大小、窗口占比等因素的影響,水平與垂直方向上的縮放也有不同,其比值為式(8)。

[zoomyzoomx=winPhysxwinPhysy=winResxwinResy×devPhysxdevPhysy×devResydevResx]

(8)

式中,winPhys指應用窗口的物理大小;winRes指應用窗口的分辨率;devPhys指輸出設備的物理尺寸;devRes指輸出設備的分辨率。在應用窗口占據整個設備屏幕的情況下,窗口分辨率與設備分辨率比例相同,則縮放比例等同于設備物理尺寸比例,在公式(7)的基礎上可得到橫向視野[fovx]、縱向視野[fovy]及其關系為式(9)。

[fovx=2arctan(tanfovy2×devPhysxdevPhysy)]? ?(9)

由于本研究只需要橫縱方向上視野的比例,可設[fovy]為[π2],結合公式(9),得到視野比例[fov_scale]為式(10)。

[fov_scale=fovyfovx=π4arctandevPhysxdevPhysy] (10)

在獲取到視野比例后,可通過SceneView.getFieldOfView()方法來獲取設備當前視角下視錐的水平視野,并通過式(10)計算出視錐的垂直視野,同時可通過設置maxDistance來確定視錐的最遠范圍,即遠截面至相機的距離,避免因視線趨向水平時視野太大導致緩存過量。

經此即可獲得基于不同型號移動設備的自適應性視野范圍。圖4為兩種不同設備型號移動設備(智能手機和平板電腦)在同一位置朝向正北方向,且與地心射線夾角為30°狀態下的視野。該圖中視錐體與地面截面覆蓋部分即為設備屏幕可見區域,相關比例參數見表1。

3.3 視野包圍

經過前文的計算,可以得到當前設備的視野中心在地圖上的坐標(CenterX,CenterY)(視線方向)、視錐傾角(視野),根據這些參數計算出可視域,即視錐與地面的截面,獲取該截面四個角的坐標信息,以確定被包含在視野內的模型瓦片情況。

視錐與地面的截面可視作由四個點組成的凸四邊形,模型瓦片所在的位置可由瓦片中心點的坐標來表示,即判斷某個點與多邊形的拓撲關系,可用的方法有矢量叉積法、射線交點法、面積判斷法等[8-9]。其中,矢量叉積法的原理為:凸多邊形內任一點都在邊向量的同一側(邊向量同為順時針或逆時針),則連接各角與內部點的矢量均處在與其具有相同起點的邊矢量的同一側。對于矢量與位置的關系,若有矢量P和Q,且P×Q>0,則P在Q的順時針方向,反之則在逆時針方向。以圖5為例,若點M在多邊形ABCD內部,則有如下關系。

[AB×AM>0],[BC][×BM>0],[DA×DM>0]

其中,[AB×AM=x-x1? ?y-y1x2-x1? ?y2-y1=(x-x1)(y2-y1)-(x2-x1)(y-y1)] 。同理可得到其余的矢量叉積,若以下叉積同號,則表達如下。

[(x-x1)(y2-y1)-(x2-x1)(y-y1)(x-x2)(y3-y2)-(x3-x2)(y-y2)(x-x3)(y4-y3)-(x4-x3)(y-y3)(x-x4)(y1-y4)-(x1-x4)(y-y4)]

則說明點M(x,y)在凸四邊形ABCD內部,將此算法封裝至isPointInPolygon(List<Point> pointList,Point targetPoint)方法內,傳入參數即可返回得到目標點targetPoint與pointList四個點組成的凸四邊形的包含關系。

3.4 空間索引

空間索引是指根據空間對象的位置和形狀或空間對象之間的某種空間關系按一定的順序排列的一種數據結構[10],其中包含空間對象的概要信息,如對象的標識、外接矩形及指向空間對象實體的指針。目前,國內外對空間數據庫的索引結構大多采用網格空間索引、四叉樹空間索引、R樹系列空間索引。

在確定好視野范圍后(圖6所示的視錐體與地面截面覆蓋部分),需要通過空間索引來確定被包含在視野范圍內的地圖瓦片,從而實現動態緩存。試驗用的三維實景模型為OSGB格式的數據,處理后分為283塊模型瓦片,由于各瓦片之間權重值一致,適用于網格空間索引。

在直接計算視野內包含的瓦片數量前,先通過計算視野中最小外接矩形來縮小檢索范圍,避免計算量過大,空間索引網格如圖7所示。

圖7中每個小正方形代表一個模型瓦片,其長、寬分別為Tile_X與Tile_Y。圖7中梯形表示視野范圍,梯形外的矩形rangleLT-rangleRT-rangleRB-rangleLB表示視野最小的外接矩形。在獲取到外接矩形四角坐標的情況下,即可得到被該外接矩形包含的完整瓦片集,該瓦片集在網格空間中的相對位置可根據其主對角線兩端的瓦片位置來確定,即target LT、target RT、target RB與target LB,其計算關系如下所示。

targetL=

Math.ceil[(rangleLT.getX-gridLT.getX)/Tile_X]

targetR=

Math.floor[(rangleRT.getX-gridLT.getX)/Tile_X]

targetT=

Math.ceil[(rangleLT.getY-gridLT.getY)/Tile_Y]

targetB=

Math.floor[(rangleLB.getY-gridLT.getY)/Tile_Y]

(11)

其中,Math.ceil與Math.floor分別表示向上取整與向下取整,通過取得targetL與targetR、targetT與targetB之間的整數集,并對其進行排列組合,即可檢索得到外接矩形內所有瓦片的位置與文件名,將這些瓦片位置通過isPointInPolygon方法與視野范圍對包含關系進行判斷,即可得到視野內的所有模型瓦片。

4 動態監聽

要想實現實時獲取用戶操作對實景三維模型進行動態釋放與緩存的目的,須通過ArcGIS Runtime SDK的SceneView.setOnTouchListener()方法對用戶在移動設備屏幕上的觸摸操作進行監聽,Android.view.MotionEvent定義了用戶手指在屏幕上滑動時產生的一系列事件。其中,ACTION_DOWN、ACTION_MOVE、ACTION_UP分別代表手指在屏幕上按下、按住滑動、抬起動作,當用戶在屏幕上做出相應動作時,系統會調用為該動作設置的方法,從而實現通過監聽用戶手勢來達到動態緩存與釋放模型的目的,相關代碼如下。

ACTION_DOWN:

this.lastInVisionPoint = inVisionPoint;

/*獲取上一次抬起手勢時緩存的模型列表*/

ACTION_MOVE:

SceneView.getCurrentViewpointCamera();

/*實時獲取當前攝像機的位置*/

List<Point> targetPoint =getTargetModelCenterPoint(getTargetRange(pointList));

/*實時獲取視野外接矩形內所有模型瓦片的中心點位置*/

ACTION_UP:

for (Point point : targetPoint){

Boolean isInVision? = ToolUtils.isPointInPolygon(pointList, point) ;

If(isInVision) inVisionPoint.add(point);}

/*循環遍歷瓦片中心點列表,判斷中心點是否在視野內,是則使其加入緩存列表*/

clearModelNumber = ModelUtils.getClearModel(lastInVisionPoint, inVisionPoint);

for(Integer i: clearModelNumber)

scene.getOperationalLayers().get(i).cancelLoad();

inVisionPoint = ModelUtils.getNonExistentModel(lastInVisionPoint, inVisionPoint);

/*與上一次緩存的模型列表進行對比,刪除不在視野內的模型,在此次緩存列表中只保留上一次緩存列表未緩存過的模型*/

for(Point point : inVisionPoint){

String name = FileUtils.getModelFileName();

ArcGISSceneLayer sceneLayer = new ArcGISSceneLayer

(FileUtils.getMobileFilePath(this,“slpks”+File.separator + name));

scene.getOperationalLayers().add(sceneLayer);}

/*循環遍歷緩存列表,緩存列表中的模型*/

5 系統界面

本研究設計的APP是基于華為Matepad Pro安卓平板開發設計的,且運行流暢。圖8為基于三維實景動態緩存技術開發的全信息實景地理平臺界面,在三維實景的基礎上,結合多源數據在移動端進行豐富的地理信息表達。

圖9為APP在運行過程中,由Android Studio提供的監控工具Android Profiler顯示的內存占用情況,上方圓點與圓點的滯留線分別表示用戶在屏幕上進行單點與持續觸碰的手勢操作,其下為APP各模塊占用內存情況。平板設備總內存為8 GB,APP占用總內存為600~700 MB,多數用于處理圖形,程序運行情況流暢穩定。

6 結語

實景三維的應用建設對地理信息表達能力的提升具有重要意義。本研究提出了一種在移動端對實景模型瓦片進行優化調度的方法,實現了在移動設備上動態緩存并可顯示大規模的實景數據,解決了大體量精細模型在移動端應用時由內存等條件限制帶來的一系列問題,將程序占用內存帶來的問題限制在一定范圍內,保障程序運行流暢穩定。基于三維實景動態緩存技術,能夠以實景三維為基礎,結合遙感影像、土地利用、房地一體等多源數據,完善全信息實景地理環境服務平臺建設,為實景三維在移動端上的應用提供有力的技術支持。

參考文獻:

[1] 周烽松,敖敏思,楚彬,等.融合CORS的自然資源移動調繪系統設計與實現[J].測繪地理信息,2021(6):142-145.

[2] 孟慶巖,汪雪淼,孫云曉,等.基于街景數據的綠視率模型構建及其影響因子研究[J].生態科學,2020(1):146-155.

[3] 劉先林.移動互聯時代的GIS[J].遙感信息,2017(1):1-4.

[4] 羅安平,魏斌,楊春成,等.Android平臺的多尺度地理信息三維顯示技術[J].測繪科學技術學報,2014(1):107-110.

[5] 路廣.基于移動端的三維虛擬校園系統的設計與實現[D].廊坊:北華航天工業學院,2018.

[6] 楊陽,曲平,楊愛玲,等.基于Android平臺的基礎測繪外業調繪核查系統的研究與開發[J].測繪與空間地理信息,2016(12):122-123,126.

[7] 任思思,張禹,鄭磊,等.基于ArcGIS Runtime SDK for Android離線編輯關鍵技術應用研究[J].測繪與空間地理信息,2017(7):123-125.

[8] 王燕平,劉永和.射線法判斷平面中的點在多邊形內外的算法[J].山西建筑,2007(33):364-365.

[9] 王群,王恒升.平面內判斷點與封閉區域關系的快速算法[J].數學的實踐與認識,2021(6):137-143.

[10] 孫卓成.GIS中幾種空間數據索引方法探究[J].科協論壇(下半月),2008(2):97-98.

主站蜘蛛池模板: 欧美黄网在线| 婷婷六月天激情| 日韩av无码精品专区| 欧美综合区自拍亚洲综合天堂| 欧美午夜精品| 夜夜拍夜夜爽| 国产男女免费视频| 夜夜拍夜夜爽| 久久亚洲高清国产| 蜜臀AVWWW国产天堂| 精品综合久久久久久97超人该| 欧美色综合久久| 欧美日韩动态图| 在线无码九区| 成人看片欧美一区二区| 国产成人精彩在线视频50| 午夜视频日本| 中文字幕伦视频| 欧美亚洲另类在线观看| 日韩免费毛片| 国产在线观看第二页| 国产欧美视频在线| 日韩无码真实干出血视频| 91精品最新国内在线播放| 久久免费精品琪琪| 久久一日本道色综合久久 | 日韩在线观看网站| 香蕉综合在线视频91| 国产凹凸视频在线观看| 国产成人精品第一区二区| 亚洲成a人片| 最近最新中文字幕在线第一页| 日本午夜在线视频| 亚洲清纯自偷自拍另类专区| 亚洲午夜片| 亚洲精品视频在线观看视频| 国产乱人伦精品一区二区| 亚洲女同欧美在线| 亚洲午夜国产精品无卡| 久久一级电影| 国产男女免费完整版视频| 欧美在线综合视频| 欧洲熟妇精品视频| 国产精品专区第1页| 亚洲男人天堂久久| 亚洲天堂日本| 91小视频在线播放| 伊人婷婷色香五月综合缴缴情| 国产欧美在线观看一区| 无码中字出轨中文人妻中文中| 亚洲A∨无码精品午夜在线观看| 97成人在线视频| 无码区日韩专区免费系列| 国产精品视频久| 日本久久网站| 国产新AV天堂| 国产福利在线观看精品| 99久久精品国产自免费| 都市激情亚洲综合久久| 国产成人h在线观看网站站| 亚洲日本精品一区二区| 久久久久中文字幕精品视频| 日本免费福利视频| 91视频日本| 日韩精品无码不卡无码| 国产午夜看片| 播五月综合| 国产精品福利导航| 色偷偷综合网| 99激情网| 丰满的少妇人妻无码区| 欧美一区福利| 2048国产精品原创综合在线| 国产主播在线一区| 久久精品国产亚洲AV忘忧草18| 在线无码九区| 97国产精品视频人人做人人爱| 99re精彩视频| 亚洲国产天堂久久九九九| aaa国产一级毛片| 免费中文字幕在在线不卡| 不卡无码网|