• 
    

    
    

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

      基于ODM和Cesium的無人機傾斜攝影建模及可視化

      2020-05-16 09:15:40左小清
      軟件 2020年4期
      關鍵詞:數據處理可視化框架

      王 旭,左小清

      (昆明理工大學 國土資源工程學院,云南省 昆明市 650093)

      0 引言

      ODM(OpenDroneMap)是一個基于 Linux平臺的用于處理空中無人機圖像的開源工具包,用于處理原始UAS(Unmanned Aerial Vehicle)圖像到點云、數字表面模型、紋理數字表面模型、正射成像、分類點云、數字高程模型等[1]數據,其成果數據包含真實地理坐標(依據源數據坐標系),且可通過提供飛行位置姿態(tài)以及GCP(Ground Control Point)提高精度。

      Cesium是一個用于開發(fā)三維WebGIS客戶端的開源JavaScript開發(fā)包。采用 Cesium作為客戶端不存在瀏覽器依賴性,其源碼采用ES6語法進行模塊化,渲染采用OpenGL規(guī)范的shader文件進行渲染,支持對js源碼和shader進行更改。在GIS方面,其支持OGC標準的服務,支持多種通用三維數據,且提出了目前通用格式中唯一支持大量地理 3D數據流式傳輸和海量渲染的三維模型切片格式3DTiles。

      兩者結合可以完成無人機傾斜數據的處理到可視化的整體流程。

      1 系統總體框架

      ODM(OpenDroneMap)和Cesium分別負責數據處理和可視化,但數據存儲、功能調度、服務發(fā)布等業(yè)務流程需要借助Java Spring、Docker、GDAL、PostGIS等技術,因此需要對系統的整體框架進行設計開發(fā)。

      Cesium結合 ODM進行三維WebGIS開發(fā)的系統架構設計主要是依據系統的功能需求對軟件設計進行建模,側重于軟件用例實現和分層架構表達。從軟件業(yè)務設計、公共組件設計、軟件集成和部署等多個方面進行設計工作,完成基于架構的軟件概要設計。本研究中系統總體架構由如下四個層次構成,如圖1中所示。

      圖1 無人機數據處理系統架構Fig.1 UAV data processing system architecture

      (1)數據存儲:影像處理前后主要以文件形式存儲無人機的柵格數據及其他成果數據,以postgis存儲空間信息和對應文件路徑。文件式存儲方便操作源柵格進行科學計算,但對于柵格數據的信息在數據庫層運用極少。因此系統存儲主要包括兩部分,無人機數據存儲、無人機數據處理結果數據、三維模型轉換后的數據這類非結構數據在文件中存儲與組織。數據的元數據、用戶數據,系統日志信息存儲在Postgis數據庫中。緩存信息由redis數據庫處理。

      (2)系統支撐:根據業(yè)務功能,提供數據的存儲與傳輸,包含sql處理、數據緩存、文件IO,主要由Jva Spring 的MyBatis做ORM。

      (3)業(yè)務應用層:包含無人機數據處理,服務器監(jiān)測、權限管理、靜態(tài)資源解析,主要模塊為封裝 ODM進行無人機數據處理。其中數據傳輸處理與轉換依據功能需求和業(yè)務層基于 JAVA spring框架設計并封裝restful風格接口。

      (4)前端交互與可視化:采用 VUE框架結合Cesium將上層業(yè)務平臺中的各個業(yè)務模塊進行聚合進行前端搭建。Vue組件式開發(fā)登陸認證、上傳下載表單、獲取數據信息等界面,結合Cesium做三維前端可視化。

      本文中無人機數據處理系統主要為 WebGIS系統和傳統C/S結構相比,要充分發(fā)揮Web應用的內在潛力,挖掘應用深度和擴大適應能力,需要采用先進的應用架構和以實用為根本準則,使得系統既能滿足業(yè)務需求,又能適應將來發(fā)展需要[2]。

      2 基于ODM的無人機數據處理開發(fā)

      本文無人機數據處理系統是以Web開發(fā)技術和三維 GIS技術為研究支撐,以上一節(jié)中軟件系統總體架構的基礎上,切分成多個微服務進行實現的。在主要業(yè)務服務中,通過http請求在服務之間進行通信。

      2.1 影像數據處理服務

      影像數據處理服務包含所有涉及無人機傾斜數據處理、轉換、提取元數據的功能聚合為一個服務,有著完整的的日志記錄和本地數據庫,其中負責傾斜數據處理的ODM、成果數據轉換的obtTo3D-tiles為微服務在框架中 service層進行微服務控制與調用,提取元數據的GDAL作為開發(fā)庫直接在service層中開發(fā)調用,主要UML框架如圖2所示。

      ODM官方支持 linuix下docker的封裝,數據處理前后通過訪問數據存儲服務記錄元數據。當有新的計算請求時,訪問服務器和Docker容器監(jiān)測服務來進行業(yè)務判斷,如果服務器壓力過大則進行消息和任務隊列。數據處理主要依靠docker-java創(chuàng)建Docker鏡像,推送命令到Docker內封裝的ODM計算模塊執(zhí)行運算, 依靠docker-java管理整個Docker容器的生命周期。以此實現了后端進行無人機數據處理的功能并發(fā)布服務。

      2.2 ODM數據處理和格式轉換

      圖2 數據處理UMLFig.2 Data processing UML

      通過docker pull opendronemap/opendronemap安裝在docker安裝ODM的鏡像,通過Maven在Java工程中引入Java-docker包,通過createContainer、startContainer等進行容器的控制,通過 Java的Process在docker具體容器中調用ODM命令進行數據處理,根據原始無人機數據目錄在Process中執(zhí)行本地命令:

      docker run -it --rm

      -v $(pwd)/images:/code/images

      -v $(pwd)/odm_orthophoto:/code/odm_orthophoto

      -v $(pwd)/odm_texturing:/code/odm_texturing

      opendronemap/opendronemap

      指令的作用是通過 OpenDronMap 對 odm_test_1/images目錄下的圖像文件同時進行正射影像(odm_orthophoto)和紋理網面建模(odm_texturing)的圖像處理,opendronemap/opendronemap是指明需要調用的鏡像,這里是調用Repository為opendronemap/opendronemap的鏡像,可以用該鏡像的 tag(如果有設置的話)和鏡像ID替代。產生數據如圖3所示。

      圖3 正射影像和傾斜模型Fig.3 Orthophoto and oblique photogrammetric model

      執(zhí)行過程中會返回處理狀態(tài)信息如圖4所示,通過 Process讀取信息并進行正則分析提取進度百分比,以服務方式發(fā)布json數據在前端展示進度。

      圖4 數據處理狀態(tài)Fig.4 Data processing status

      成果三維模型數據為.obj格式,為支持前端大數據量三維可視化需求,需要對數據進行三維切片。此功能通過部署單獨的 nodejs微服務集成obtTo3D-tiles開源工具做轉換。

      3 數據組織管理

      3.1 三維模型數據

      目前三維數據主要以非結構化數據形式生產和應用,無人機數據處理主要涉及三維模型、點云等數據。涉及文件格式種類繁多,包括.pcd、.obj、.stl、.3Ds、3Dtiles等。

      obj文件是一種標準的3D模型文件格式,很適合用于 3D軟件模型之間的互導[3]。obj文件包含.obj、.mtl和紋理圖片,其中.obj文件提供幾何信息,.mtl文件定義材質信息;

      3D Tiles是一種三位瓦片技術,在gltf的基礎上加入了分層LOD的結構,是專門為大量地理3D數據流式傳輸和海量渲染而設計的一種格式,也開源WebGL框架Cesium的官方格式。其用于流式傳輸和渲染大量 3D地理空間內容,例如攝影測量,3D建筑,BIM/CAD,實例化特征和點云。它定義了分層數據結構和一組可交付內容的圖塊格式。在3D Tiles中,tileset是按空間數據結構(即tree)組織的一組tile。至少一個tileet JSON文件描述了tileet,其中該JSON文件包含tileet元數據和tile對象樹,其中每個對象都可以引用表1中的格式對應的可渲染內容。

      表1 Tile引用格式Tab.1 Tile reference format

      tile的內容除了以上的渲染內容,還包括特定格式的二進制塊,包含特征表和批處理表。上述的批量3D模型(b3Dm)和實例3D模型(i3Dm)是基于glTF構建的,點云格式不嵌入gltf中。tile如圖5所示以樹的結構來組織,其結合了層次LOD的概念,優(yōu)化渲染空間數據。在樹結構中,每個 tile都有一個邊界包圍盒在空間中完全包圍該 tile和子節(jié)點的數據。其中,樹的組織結構可以是kd樹,四叉樹或者grid。

      圖5 Tileset樹Fig.5 Tileset tree

      3.2 數據存儲

      數據存儲是指對空間數據邏輯模型描述的數據組織關系和編排方式,對地理信息系統中數據存儲、查詢檢索和應用分析等操作處理的效率有著至關重要的影響。本方案同時同一空間數據邏輯模型采用了多種空間數據結構[4],針對標準和協議的不同存在著不同的數據格式。其中正射影像、3DTiles等ODM的成果數據采用文件格式進行非結構化存儲,通過GDAL庫和其他技術提取的文件的元數據及矢量信息通過數據庫進行存儲,最后通過數據庫中存儲文件地址與非結構化文件系統進行關聯。

      (1)非結構化數據存儲

      通過 ODM進行無人機數據處理后,可獲得點云、數字表面模型、紋理數字表面模型、正射成像、分類點云、數字高程模型[1]。其與原始數據都以文件形式存儲,為支持Cesium.js的前端可視化,格式轉換后的 3DTiles等數據以文件格式存儲,具體轉換前后文件組織如圖6所示。數據庫里只存放地址、鏈接、元數據信息和用戶信息進行關聯。

      圖6 用戶文件和轉換數據用戶文件組織Fig.6 User file organization and transform data user file organization

      做非結構化數據存儲和數據處理時,需盡可能使用單獨的服務器,原因如下:多種格式數據內容,且需要數據處理時需要依據文件處理,沒必要放數據庫;數據處理和傳輸時占用帶寬和計算資源,如果數據庫和應用分離(即不再同一臺服務器),那么取得一個圖片需要從客戶端到應用端取數據,應用又需要從數據庫去取,這樣會占用大量的帶寬,同時這也會在數據庫服務器和應用服務器兩處 IO上形成瓶頸;如果圖片單獨放在服務器上,取圖片的時候,則只需要客戶端通過HTTP協議去圖片服務器上取,減少帶寬占用。并且,這里的IO瓶頸只存在圖片服務器上,會快很多。

      (2)數據庫設計

      數據庫內數據為用戶數據、部分osm的矢量數據和提取的無人機的元數據,其中元數據主要為柵格數據的地理元數據(空間坐標)。連接系統部分為Spring mybatis框架,在實際開發(fā)的時將其作為持久層框架簡化sql操作。

      數據庫管理系統為Postgis,可以通過存儲的空間數據建立空間索引并集成部分空間運算,其優(yōu)勢是既可以方便數據統計和監(jiān)測,又可以在大量地理信息數據中快速查詢符合條件的非結構化數據文件地址,通過傳文件地址方便前端進行快速可視化,其具體組織如圖7。

      圖7 數據庫設計Fig.7 Database design

      需要動態(tài)展示和處理部分矢量數據,由于 shp格式數據處理和查詢較慢(一定條件下Postgis的表查詢不建立索引比shp格式的數據存儲快125倍,建立索引快338倍),因此按照osm格式在Postgis中建表,存儲矢量數據。圖8為具體表結構。

      4 基于Cesium的前端可視化

      數據處理后產生多種格式文件,其中正射影像和傾斜模型帶有地理信息,可以直接應用于GIS系統中。數據處理轉換后的 3DTiles發(fā)布為靜態(tài)數據,前端使用 Vue.js集成 Cecium進行三維數據展示。

      Vue是目前流行的前端三大框架之一,其異步批處理方式更新 DOM加速運行。提供組件開發(fā)用于解耦,將可復用的組件組合入應用程序。緊湊且無依賴。具有表達式無需聲明依賴的可推導屬性(computed properties)。Cesium源碼使用ES6的模塊化方式開發(fā),通過gulp進行構建和封裝,VueCli3版本后直接將Cesium打包后的文件直接放在public下,部署時直接復制到發(fā)布包的根目錄相應文件夾下,不進行后續(xù)的webpack處理。

      在VueCli中由于組件間數據傳輸通過data直接綁定數據,部分場景下,例如Cesium加載大量數據渲染情況下,會導致框架本身對數據持續(xù)進行監(jiān)測影響渲染效率,因此需要將含有大量數據變化的對象提升為全局對象,不在data中綁定。因此在引入Cesium時,在main.js中全局引用:

      import Cesium from "cesium/Cesium";

      import"../node_modules/cesium/Source/Widgets/

      widgets.css";

      //全局注冊變量

      Vue.prototype.Cesium=Cesium;

      //將viewer放到全局對象當中;

      let viewer = new Cesium.Viewer('container');

      window.earth = viewer;

      通過 new Cesium.Cesium3DTileset({url: '3DTiles的json索引文件的url'})創(chuàng)建三維模型,viewer.scene.primitives.add函數添加進場景中,完成三維可視化。開發(fā)測試時使用nodejs環(huán)境提供的server運行,通過webpack技術進行打包優(yōu)化。

      圖8 數據表Fig.8 Data table

      5 運行效果

      處理后數據雖然自帶地理信息,但是由于系統本身未加載地形,所以需要設置模型貼地。直接調用函數進行設置,調整高度,height表示物體離地面的高度,偏移矩陣 modelMatrix可以由一個 translation來確定,通過調整height來獲得不同的modelMatrix,視角縮放到瓦片集的時候調用changeHeight函數,加載處理后的3DTiles效果如圖9所示。

      圖9 Cesium加載3DTilesFig.9 Cesium load 3DTiles

      6 結論

      本文通過研究Web應用系統和三維GIS技術,結合三維GIS集成無人機數據處理的需求,對無人機數據處理和可視化系統進行研究與設計。本文提出的系統方案釆用當前前沿的三維WebGIS技術,該結構各部分組件之間配合良好,功能強大,主要數據處理部分ODM通過docker-java封裝,單獨與Java Spring框架結合劃分微服務,方便開發(fā)調用和擴展?;贘ava Spring框架與開源WebGIS技術結合起來,在 Web應用系統通用功能方面釆用 Springboot+Mybatis+Vuejs的架構確保了平臺的安全性,完整性、可移植性和可擴展性。在GIS特有功能實現上采用PostGIS作為空間數據庫,GeoServer作為地圖應用服務器,采用 GeoWebCache為地圖緩存[5],以Cesium為客戶端。以Tomcat為Web服務器搭建完成了無人機數據處理系統。

      系統所使用的開發(fā)庫均為開源軟件,降低了開發(fā)成本,也使將來系統升級和功能擴展有了保障。在下一步的學習過程中將后端數據處理通過k8s技術,重新拆分微服務并進行 Docker容器的封裝來集成大規(guī)模服務器集群下的容器擴展。

      猜你喜歡
      數據處理可視化框架
      基于CiteSpace的足三里穴研究可視化分析
      認知診斷缺失數據處理方法的比較:零替換、多重插補與極大似然估計法*
      心理學報(2022年4期)2022-04-12 07:38:02
      框架
      基于Power BI的油田注水運行動態(tài)分析與可視化展示
      云南化工(2021年8期)2021-12-21 06:37:54
      ILWT-EEMD數據處理的ELM滾動軸承故障診斷
      水泵技術(2021年3期)2021-08-14 02:09:20
      廣義框架的不相交性
      基于CGAL和OpenGL的海底地形三維可視化
      “融評”:黨媒評論的可視化創(chuàng)新
      傳媒評論(2019年4期)2019-07-13 05:49:14
      WTO框架下
      法大研究生(2017年1期)2017-04-10 08:55:06
      基于希爾伯特- 黃變換的去噪法在外測數據處理中的應用
      庐江县| 南充市| 卓资县| 宿松县| 且末县| 石棉县| 讷河市| 互助| 昌宁县| 永宁县| 中西区| 于都县| 利川市| 甘南县| 启东市| 徐汇区| 丰镇市| 迭部县| 张掖市| 米林县| 八宿县| 马尔康县| 红原县| 微山县| 固镇县| 桂林市| 三门县| 峨边| 丰都县| 烟台市| 凤城市| 林西县| 姚安县| 南阳市| 闻喜县| 宁明县| 垣曲县| 铜陵市| 宜黄县| 昭苏县| 辉县市|