• 
    

    
    

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

      ?

      基于CesiumJS的實景三維數(shù)據(jù)可視化實現(xiàn)

      2024-06-19 11:05:09李金亮廖菊燕楊紹興楊平
      科技資訊 2024年6期

      李金亮 廖菊燕 楊紹興 楊平

      開放科學(資源服務)標識碼(OSID):DOI:10.16661/j.cnki.1672-3791.2312-5042-9706

      通信作者:李金亮(1985—),男,碩士,工程師,研究方向為測繪和地理信息應用技術研究。E-mail:394506964@qq.com。

      摘要:為達到節(jié)約Web GIS設計和使用成本的目的,通過一套開源軟件的解決方案,重點研究基于CesiumJS將實景三維數(shù)據(jù)在Web端實現(xiàn)可視化,體現(xiàn)實景三維數(shù)據(jù)真實、立體、時序化反映和表達的特點,前端利用Vue3框架,用TypeScript語言快速構建基于網頁的Web GIS應用,并在三維場景中探索屬性查詢、空間分析等技術應用。該研究表明利用CesiumJS將實景三維數(shù)據(jù)在Web端可視化和空間分析的方案完全可行。

      關鍵詞:實景三維 Vue3?TypeScript CesiumJS Web GIS

      中圖分類號:P208

      該研究利用Vue3易學易用,性能出色,適用場景豐富的特點同時結合Typescript語言探索構建實用的Web GIS應用,使用CesiumJS加載豐富的實景三維數(shù)據(jù)和OGC服務后融入Vue3頁面,使數(shù)據(jù)、圖形相得益彰。

      1?重要概念

      1.1 實景三維

      實景三維(3D Real Scene)是對人類生產、生活和生態(tài)空間進行真實、立體、時序化反映和表達的數(shù)字虛擬空間,是新型基礎測繪標準化產品,是國家新型基礎設施建設的重要組成部分,為經濟社會發(fā)展和各部門信息化提供統(tǒng)一的空間基底。實景三維通過在三維地理場景上承載結構化、語義化、支持人機兼容理解和物聯(lián)實時感知的地理實體進行構建。按照表達內容通常分為地形級、城市級和部件級[1]。

      1.2 Vue3

      Vue3是一款用于構建用戶界面的 JavaScript 框架,它是Vue.js的最新版本,有更好的Typescript支持,基于標準 HTML、CSS 和 JavaScript/Typescript 構建,并提供了一套聲明式的、組件化的編程模型,能夠高效地開發(fā)用戶界面。

      1.3 TypeScript

      TypeScript是微軟開發(fā)的一個開源的編程語言,通過在JavaScript的基礎上添加靜態(tài)類型定義構建而成。TypeScript通過TypeScript編譯器或Babel轉譯為JavaScript代碼,可運行在任何瀏覽器,任何操作系統(tǒng)。

      1.4 CesiumJS

      CesiumJS是一個開源的JavaScript庫,用于在Web上創(chuàng)建三維地球和地圖。它提供了一個平臺,可以在瀏覽器環(huán)境中可視化地理空間數(shù)據(jù),讓開發(fā)人員構建交互式和動態(tài)的3D應用程序。CesiumJS支持許多功能,包括地形渲染、圖像圖層、矢量數(shù)據(jù)可視化、相機控制以及各種地理空間分析能力。在地理空間可視化、虛擬地球和地球科學等領域得到廣泛應用。CesiumJS提供了一個強大而靈活的框架,用于創(chuàng)建豐富的基于Web的三維地理空間應用程序。

      1.5 Web GIS

      Web GIS(網絡地理信息系統(tǒng))是指工作在Web網上的GIS,是傳統(tǒng)的GIS在網絡上的延伸和發(fā)展,具有傳統(tǒng)GIS的特點,可以實現(xiàn)空間數(shù)據(jù)的檢索、查詢、制圖輸出、編輯等基本功能,同時也是Internet上地理信息發(fā)布、共享和交流協(xié)作的基礎。

      2?實驗前準備

      首先在計算機中安裝NodeJS,可以利用nodeJS打包工具和命令來安裝、管理和發(fā)布JavaScript模塊以及管理項目的依賴關系。之后用vue craete?[options]?命令創(chuàng)建Vue3項目,項目選擇typescript語言,并使用vite構建。選用typescript語言能夠和element plus無縫集成,vite構建能夠顯著縮短項目生成時間。生成項目以后在其根目錄下打開命令窗口,使用npm install命令依次安裝cesiumjs、element Plus等類庫及相應的依賴。在項目的mian.ts文件中使用import語法引入全局性的類庫依賴。最后根據(jù)實際需求在vite.config.ts中進行跨域設置以便于項目進行運行調試,主要解決加載其他地圖引擎提供的地圖地址和服務存在跨域問題,例如項目的地址是localhost:5137,需要加載localhost:8080上的資源,需要在vite.config.ts中進行跨域設置,把請求地址轉發(fā)到localhost:8080,在項目部署階段一般用nginx實現(xiàn)跨域轉發(fā)[2]。

      3?加載多源異構實景三維數(shù)據(jù)

      Vue3項目創(chuàng)建完成以后就可以在vue頁面中將實景三維數(shù)據(jù)可視化了。首先根據(jù)實際需求分類創(chuàng)建vue頁面,在App.vue中利用組件設置頁面跳轉入口,并設置全局頁面的樣式。Vue3項目既可以構建單頁面應用,也能夠構建多頁面應用,本文采用多頁面應用進行實驗。然后在router.ts中設置路由,具體通過path和component的值將跳轉路徑和應用頁面一一對應起來,路由模式采用歷史模式(History Mode):歷史模式使用HTML5 History API來管理路由,可以去掉URL中的哈希值,使URL不帶有“#”,用戶體驗更加友好。

      CesiumJS可以加載的GIS數(shù)據(jù)類型非常豐富,特別是在加載海量三維數(shù)據(jù)方面具有獨特的優(yōu)勢,在本文中實驗加載了3Dtiles、WMS/WMTS、GeoJson、自繪圖形、CZML、I3S等數(shù)據(jù)資源。通用的前端類庫threejs也能夠加載三維數(shù)據(jù),但通常用于處理單個三維對象。CesiumJS對WebGL進行了更好的封裝[3],降低了學習難度,并且CesiumJS包含了大量的針對處理二維和三維的GIS數(shù)據(jù)的內置類,基本上不需要做復雜的擴展和計算就能夠實現(xiàn)豐富的應用。

      3.1加載3Dtiles數(shù)據(jù)

      3D?Tiles是用于大規(guī)模、異構的三維地理空間數(shù)據(jù)集(如點云、建筑物、攝影測量和矢量數(shù)據(jù))的開放標準?;趃lTF和其他三維數(shù)據(jù)類型,3D Tiles是一種可流式傳輸、經過優(yōu)化的格式,旨在充分利用當今不斷增長的三維地理空間數(shù)據(jù)的潛力,可交互、可樣式化、適應性強、靈活性高;設計精確,支持最苛刻的分析需求;支持時間動態(tài),可以可視化或模擬展示隨時間變化的情況;支持各種不同用途的數(shù)據(jù)類型。3D Tiles是開放地理空間聯(lián)盟(OGC)的社區(qū)標準。這些特性使得3D Tiles成為處理和展示三維地理空間數(shù)據(jù)的理想選擇[4]。

      實際應用中首先通過語句viewer = new Cesium.Viewer("cesiumContainer", {terrainProvider: Cesium.createWorldTerrain(),timeline: false,animation: false});創(chuàng)建視圖,然后通過視圖加載其他類型的數(shù)據(jù)。3Dtiles數(shù)據(jù)對象(數(shù)據(jù)集)通過Cesium.Cesium3DTileset方法來創(chuàng)建,數(shù)據(jù)源既可以是本地文件也可以是遠程數(shù)據(jù)服務,本文采用Ceiusm ION云平臺上的數(shù)據(jù)資源。最后通過viewer.scene.primitives.add加載數(shù)據(jù)集。在實際生產中,通過傾斜攝影的方法來生產三維數(shù)據(jù)是一種常見的生產模式,而CesiumJS目前還不能直接加載OSGB格式的三維數(shù)據(jù),但是可以通過開源軟件cesiumlab把OSGB,OBJ等格式轉成3Dtiles然后加載[5]。

      CesiumJS在加載3D Tiles數(shù)據(jù)時,默認情況下只會加載可視域(屏幕窗口范圍)內的數(shù)據(jù)。這種方式稱為動態(tài)加載(Dynamic Loading),它是CesiumJS的一個重要特性,旨在提高性能和效率。動態(tài)加載的原理是根據(jù)當前視圖的位置和范圍,只加載和渲染可見的3D Tiles數(shù)據(jù)。當視圖發(fā)生變化時,CesiumJS會自動加載和卸載適應新視圖的瓦片數(shù)據(jù)。這樣可以有效降低數(shù)據(jù)傳輸和渲染的開銷,提高應用程序的加載速度和性能。除了動態(tài)加載可視域內的數(shù)據(jù),CesiumJS還支持預加載(Preloading)和懶加載(Lazy Loading)的方式。預加載允許在可視域之外的區(qū)域提前加載一些數(shù)據(jù),以提供更流暢的用戶體驗。懶加載允許延遲加載某些數(shù)據(jù),直到用戶需要查看或交互時再進行加載。CesiumJS的加載行為可以通過配置選項進行調整和定制。根據(jù)具體需求和應用場景,選擇合適的加載策略和參數(shù),以達到最佳的性能和用戶體驗。

      3Dtiles數(shù)據(jù)加載成功后,充分利用地理實體單體化的優(yōu)勢,利用Cesium.ScreenSpaceEventType事件來提取和展示單體的屬性,對象隱藏、動畫展示等效果(如圖1所示)。

      3.2 加載WMS/WMTS/I3s

      CesiumJS不僅能加載和展示三維數(shù)據(jù),還能夠像openlayers/leaflet一樣非常流暢地加載WMS、WMTS等標準OGC服務,也就是說僅依靠CesiumJS開源引擎就能輕松實現(xiàn)二三維一體化[6]。依托WMS數(shù)據(jù)源,利用Cesium.ImageryLayer創(chuàng)建圖層,最后通過viewer.imageryLayers.add添加創(chuàng)建好的圖層。WMTS通過Cesium.WebMapTileServiceImageryProvider來創(chuàng)建圖層,然后通過視圖來添加圖層。

      I3s(Indexed 3D Scene Layer)是一種用于存儲和呈現(xiàn)大規(guī)模三維地理空間數(shù)據(jù)的格式和規(guī)范。I3s由Esri(Environmental Systems Research Institute)開發(fā),用于在地理信息系統(tǒng)(Geographic Information System,GIS)中處理和共享三維數(shù)據(jù)。I3s格式通過使用基于Web的服務和數(shù)據(jù)傳輸技術,提供了一種高效的方式來存儲和傳輸三維場景數(shù)據(jù)。它可以包含地形、建筑物、植被和其他物體等各種類型的數(shù)據(jù)。I3s使用索引和級別(LOD)來組織數(shù)據(jù),使得用戶可以以自適應的方式加載和渲染不同細節(jié)級別的場景數(shù)據(jù)。使用I3s,用戶可以通過Web瀏覽器或GIS應用程序訪問和瀏覽三維地理空間數(shù)據(jù)。

      這使得用戶可以進行交互式的場景探索、空間分析和可視化,同時支持與其他GIS工作流程的集成。通過Cesium.I3SDataProvider來創(chuàng)建數(shù)據(jù)集,然后通過viewer.scene.primitives.add添加數(shù)據(jù)集(如圖2所示)。

      I3s服務能夠使用quick_slpk_server來發(fā)布(如圖3所示),這是用Python語言寫的開源軟件。使用也很簡單,只要把slpk文件放在指定的目錄下,直接運行軟件就能發(fā)布。

      3.3 加載GeoJson矢量數(shù)據(jù)

      GeoJSON是一種用于表示地理空間數(shù)據(jù)的開放標準的格式,基于JSON(JavaScript Object Notation)。它提供了一種簡單而靈活的方式來存儲、傳輸和共享地理特征,如點、線、面以及它們的屬性數(shù)據(jù)。GeoJSON可以通過編寫或生成JSON數(shù)據(jù)來創(chuàng)建和解析。它可以用于存儲和交換各種地理空間數(shù)據(jù),例如地圖特征、地理標記、地理邊界等。許多地圖庫和GIS軟件都提供了對GeoJSON的支持,使其成為地理數(shù)據(jù)交換和可視化的常用格式。

      GeoJson數(shù)據(jù)既可以是本地數(shù)據(jù),也可以是遠程服務提供的數(shù)據(jù)資源,本實驗加載CesiumJS示例數(shù)據(jù)(本地),加載GeoJson數(shù)據(jù)的語句十分簡單,使用viewer.dataSources.add(dataSource);dataSource.load("/path/**");實現(xiàn)加載。

      3.4 加載自繪圖形

      3.5 加載CZML數(shù)據(jù)

      CZML(Cesium Language)是一種用于描述Cesium場景的JSON格式。它是CesiumJS的一部分,用于定義和傳輸場景的動態(tài)內容,例如實體(entities)、位置、姿態(tài)、屬性和事件等。CZML提供了一種簡單而靈活的方式來創(chuàng)建和修改Cesium場景。通過使用CZML,可以輕松定義和更新場景中的實體和屬性,以實現(xiàn)動畫效果和交互性。CZML是一個可擴展的格式,使用CZML可以通過編寫和解析JSON數(shù)據(jù)來創(chuàng)建和修改Cesium場景。CZML文件可以直接加載到CesiumJS的Viewer中,或者通過Cesium的API動態(tài)創(chuàng)建和更新場景。CZML格式的數(shù)據(jù)能夠很好呈現(xiàn)實景三維時序化的要求,使用方法非常簡單,用Cesium.CzmlDataSource.load來加載。

      4?空間分析

      CesiumJS提供了許多內置功能,包括距離量測、體積計算等空間分析。使用這些功能可以輕松實現(xiàn)各種三維場景中的測量和分析操作。

      4.1 距離和面積量測

      首先在Vue3中繪制幾何圖形時,應該將屏幕坐標轉動態(tài)換為大地坐標,才能確保繪圖和計算的準確性。本文中測量的幾何圖形的高度參考模式都是CLAMP_TO_GROUND,即不管計算長度還是面積都需要考慮地形的影響因素,更加符合實際生產的需求。計算多段線長度時,利用Cesium.sampleTerrainMostDetailed方法進行地形采樣,充分考慮地形對長度的影響,然后將點位的大地坐標轉換為三維直角坐標進行長度的計算。計算多邊形面積時也需要先采樣地形,加入地形影響因素。面積計算使用向量叉乘的方法用于計算多邊形的面積。對于平面上的多邊形,我們可以使用以下公式計算其面積:面積 = 0.5 × Σ(邊向量的叉乘),其中,Σ表示對所有邊向量的叉乘進行求和,邊向量的叉乘可以通過向量的坐標計算得到。具體將其兩個頂點視為向量的起點和終點,然后計算這兩個向量的叉乘,即可得到該邊的貢獻面積。最后將所有邊的貢獻面積相加,即可得到多邊形的總面積。CesiumJS利用這種向量叉乘的方法,根據(jù)地球表面上的點坐標計算多邊形的面積,可以準確計算多邊形在地球表面上的實際面積,考慮到地球的曲率和投影效果(如圖5所示)。

      4.2 屬性拉伸

      對二維矢量數(shù)據(jù)的某一屬性進行拉伸能夠呈現(xiàn)三維的效果(又被稱為“假三維”或者2.5維),這是一種非常靈活且成本又很低的三維實現(xiàn)方式,?具體通過entity.polygon.extrudedHeight來實現(xiàn),理論上被縱向拉伸的屬性可以根據(jù)需要任意選擇,只要該屬性的值具有可量化的特點,最好是數(shù)值類型。

      4.3 限高分析

      限高分析的主要思路就是利用Cesium.ClippingPlaneCollection來創(chuàng)建限高平面,然后通過循環(huán)語句來量化加載每個限高平面,用限高平面去檢驗三維實體的高度,如果限高平面和被檢驗實體的高度發(fā)生沖突就產生明顯的視覺反饋,從未達到限高分析的目的(如圖6所示)。

      4.4 二三維場景對比分析

      二三維場景對比分析的用戶體驗感優(yōu)于二維場景中的分屏對比,對比效果更加直觀。實現(xiàn)原理也非常簡單,思路也非常清晰,就是Vue3窗口中利用CesiumJS分別創(chuàng)建三維視圖容器和二維視圖容器,三維視圖容器中加載三維數(shù)據(jù)集,二維視圖容器中加載二維數(shù)據(jù)集,然后通過相機設置使兩邊的數(shù)據(jù)集產生聯(lián)動,從而達到分析對比的目的(如圖7所示)。

      4.5 透視分析

      透視分析通過射線穿越法實現(xiàn),首先確定觀測點和目標點的三維坐標后,利用Cesium.Cartesian3.subtract來計算兩個點之間的坐標差,然后把坐標差作為入?yún)魅隒esium.Cartesian3.normalize方法中對向量進行歸一化處理,再把歸一化處理的結果作為入?yún)?,利用Cesium.Ray創(chuàng)建射線,最后用射線與觀測點和目標點之間的三維實體進行相交分析,從而判斷兩點之間是否通視(如圖8所示)。

      4.6 路徑動態(tài)分析

      動態(tài)分析很好地迎合了實景三維對空間表達時序化的要求,在三維場景中添加了時間影響因素。它的實現(xiàn)非常簡單,不需要設計很復雜的邏輯,直接利用CesiumJS中支持的CZML格式數(shù)據(jù)就能達到效果。為了避免程序冗長,CZML中的位置信息,可以單獨存儲一個Json文件,然后通過axios.get方法進行讀取,然后進行計算(如圖9所示)。

      5?存在的問題

      生成OGC I3s所需的slpk文件還需要借助ArcGIS Pro、FME等商業(yè)軟件,目前作者還沒有成功用開源軟件很方便得生成slpk文件。由于個人水平有限,使用CesiumJS內置類進行空間分析的探索還非常的淺顯,需要進一步挖掘以實現(xiàn)更復雜的空間分析。

      6?結語

      整個實驗操作下來,大概寫了2000行代碼,數(shù)據(jù)來源部分采用了Cesium ION云平臺上的數(shù)據(jù)和示例數(shù)據(jù),基本達到了預期的效果?;贑esiumJS將實景三維數(shù)據(jù)在Web端實現(xiàn)了可視化,體現(xiàn)了實景三維數(shù)據(jù)真實、立體、時序化反映和表達的特點,并在三維場景中實現(xiàn)了屬性查詢、空間分析等技術應用。充分體現(xiàn)了利用開源引擎應用實景三維的技術可行性。

      參考文獻

      [1] 自然資源部辦公廳關于印發(fā)《實景三維中國建設技術大綱(2021版)》的通知[R/OL].(2021-08-11)[2023-12-12].http://gi.mnr.gov.cn/202108/t20210816_2676831.html.

      [2] 羅小飛,銀霞.基于Cesium和傾斜實景數(shù)據(jù)的三維規(guī)劃輔助決策系統(tǒng)實現(xiàn)[J].測繪與空間地理信息,2022,45(11):116-118.

      [3] 任晨宇,臧永立,劉珍珍.基于Cesium引擎鐵路信號運維平臺的可視化研究[J].鐵道標準設計,2021,65(7):172-178.

      [4] The open specification for 3D data[EB/OL].[2023-12-12].https://cesium.com/why-cesium/3d-tiles/

      [5] 李相迎,王建民,馮興浩,等.基于Cesium的空間目標觀測三維可視化平臺.計算機系統(tǒng)應用,2022,31(8):108–114.

      [6] 黃欣然,江文萍,劉一飛,等.Cesium環(huán)境中三維場景數(shù)據(jù)的加載優(yōu)化策略[J].測繪地理信息,2022,47(S1):94-98.

      全南县| 旬邑县| 会东县| 阳西县| 寻乌县| 喀喇沁旗| 陇川县| 安溪县| 定西市| 缙云县| 玛沁县| 汝阳县| 平乡县| 梓潼县| 六安市| 延庆县| 江门市| 临猗县| 夏津县| 个旧市| 临汾市| 滕州市| 龙门县| 海晏县| 云霄县| 靖西县| 左贡县| 巍山| 朝阳县| 太和县| 长沙县| 阳朔县| 弥渡县| 白沙| 阿合奇县| 拜泉县| 麻城市| 连平县| 彰化县| 沙雅县| 凤庆县|