• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      王浩翔 王春 宋宏利 趙昕

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

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

      中圖分類號: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)是對人類生產(chǎn)、生活和生態(tài)空間進行真實、立體、時序化反映和表達的數(shù)字化虛擬空間,為經(jīng)濟社會發(fā)展和各部門信息化建設提供統(tǒng)一的空間基底。

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

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

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

      1 大規(guī)模實景數(shù)據(jù)動態(tài)緩存與釋放的設計思路

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

      ①動態(tài)獲取當前攝像機的視線方向。

      ②獲取移動設備的屏幕參數(shù)。

      ③根據(jù)視線方向與屏幕參數(shù)計算出視野范圍。

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

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

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

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

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

      2 相關技術

      2.1 ArcGIS Runtime SDK for Android

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

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

      2.2 ArcGIS Pro

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

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

      3.1 傾斜視角下的視野中心

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

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

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

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

      經(jīng)度圈上1°對應長Dlang為:

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

      則經(jīng)度變化量[ΔY]為:

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

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

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

      則經(jīng)度變化量[Δ]X:

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

      得出中心點經(jīng)緯度坐標:

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

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

      3.2 視錐、視野和縮放

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

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

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

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

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

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

      [zoomyzoomx=winPhysxwinPhysy=winResxwinResy×devPhysxdevPhysy×devResydevResx]

      (8)

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

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

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

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

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

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

      3.3 視野包圍

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

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

      [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內(nèi)部,將此算法封裝至isPointInPolygon(List<Point> pointList,Point targetPoint)方法內(nèi),傳入?yún)?shù)即可返回得到目標點targetPoint與pointList四個點組成的凸四邊形的包含關系。

      3.4 空間索引

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

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

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

      圖7中每個小正方形代表一個模型瓦片,其長、寬分別為Tile_X與Tile_Y。圖7中梯形表示視野范圍,梯形外的矩形rangleLT-rangleRT-rangleRB-rangleLB表示視野最小的外接矩形。在獲取到外接矩形四角坐標的情況下,即可得到被該外接矩形包含的完整瓦片集,該瓦片集在網(wǎng)格空間中的相對位置可根據(jù)其主對角線兩端的瓦片位置來確定,即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之間的整數(shù)集,并對其進行排列組合,即可檢索得到外接矩形內(nèi)所有瓦片的位置與文件名,將這些瓦片位置通過isPointInPolygon方法與視野范圍對包含關系進行判斷,即可得到視野內(nèi)的所有模型瓦片。

      4 動態(tài)監(jiān)聽

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

      ACTION_DOWN:

      this.lastInVisionPoint = inVisionPoint;

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

      ACTION_MOVE:

      SceneView.getCurrentViewpointCamera();

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

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

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

      ACTION_UP:

      for (Point point : targetPoint){

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

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

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

      clearModelNumber = ModelUtils.getClearModel(lastInVisionPoint, inVisionPoint);

      for(Integer i: clearModelNumber)

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

      inVisionPoint = ModelUtils.getNonExistentModel(lastInVisionPoint, inVisionPoint);

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

      for(Point point : inVisionPoint){

      String name = FileUtils.getModelFileName();

      ArcGISSceneLayer sceneLayer = new ArcGISSceneLayer

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

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

      /*循環(huán)遍歷緩存列表,緩存列表中的模型*/

      5 系統(tǒng)界面

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

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

      6 結語

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

      參考文獻:

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

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

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

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

      [5] 路廣.基于移動端的三維虛擬校園系統(tǒng)的設計與實現(xiàn)[D].廊坊:北華航天工業(yè)學院,2018.

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

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

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

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

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

      汉沽区| 翼城县| 湖北省| 布尔津县| 宝丰县| 西和县| 达拉特旗| 长海县| 洛宁县| 永城市| 重庆市| 高青县| 平湖市| 武夷山市| 南安市| 宜兰县| 达日县| 乌兰浩特市| 康定县| 广饶县| 滕州市| 鹤山市| 汨罗市| 滁州市| 龙海市| 烟台市| 天气| 云梦县| 安陆市| 富蕴县| 东乌珠穆沁旗| 航空| 长岭县| 四子王旗| 大宁县| 浙江省| 南京市| 菏泽市| 长兴县| 黎平县| 麦盖提县|