Cesium4--地形(OSGB到3DTiles)

1 OSBG

OSGB(OpenSceneGraph Binary)是基于 OpenSceneGraph(OSG) 三維渲染引擎的二進制三維場景數據格式,廣泛用于存儲和傳輸傾斜攝影測量、BIM、點云等大規模三維模型,尤其在國產地理信息與智慧城市項目中應用普遍。

這個格式是國產的,涉及到的軟件就有點尷尬,國產軟件的德行都知道,難用還很多坑。。。

幾個免費的可以下載練手OSBG的地方。

來源內容類型下載方式適用練習
GitCode 武漢景點傾斜攝影模型城市 / 景區實景三維項目頁?下載加載、瀏覽、簡單分析
GitCode 通用傾斜攝影數據城市 / 建筑模型項目頁?下載(密碼:123321)格式測試、性能驗證
GitCode 傾斜攝影示例數據小范圍示例場景項目頁?下載教學演示、功能測試
GitCode 三維山地模型(含 3DTiles)山地河谷、村落、BIM項目頁?下載多格式兼容、場景分析
GitCode 城市級傾斜攝影數據大規模城市模型項目頁?下載性能測試、城市級渲染
百度網盤 臺北市傾斜模型城市級傾斜模型網盤(提取碼:ae9w)城市建模、地形分析

2 格式轉換

目前基本上就幾個軟件能弄,一個是CesiumLab,一個是SuperMap iDesktop。剩下還有很多不知名的軟件。。。

2.1?CesiumLab

CesiumLab聽著像官方產品,實際不是,是北京一個公司。而且還不能單獨裝,先要裝一個他們的全家桶“地球可視化實驗室”,然后在里面安裝這個CesiumLab。

安裝了之后點運行,15分鐘都沒能啟動起來。看了一下changelog,居然還有用戶名是中文就異常的BUG。。。

好不容易啟動了找到怎么轉換,研究了半天參數準備轉換。結果彈出來。。。讓去新地方注冊。

看了一下。

真實姓名,電話號碼,工作單位全部都要填進去,就差沒弄個戶口本進去。折騰完了終于看可以轉換了,一點開始轉換。直接沒了。。。

又看了一下。

貌似還得上傳工牌,公司蓋章。。。

算了,放棄治療了。。

2.2 SuperMap iDesktop

下載之后又是要授權。。

我看我這邊全是否,估計著是要錢才行。算了吧。。。

2.3 老子云

這個是B站看到的,名字確實有點點霸氣。網址是:https://www.laozicloud.com/

也是要注冊一大堆,估計以后也是要收費的,不過確實還能免費用。

轉換的時間很長,110MB的數據就差不多半個小時。

3 3Dtiles

轉換出來的數據大概是這樣的。

每個tile里面是這樣。一個json和一堆glb

3.1?rootTileset.json

{"asset": {"gltfUpAxis": "Z","version": "1.0"},"extensionsUsed": ["3DTILES_content_gltf"],"geometricError": 2000,"root": {"boundingVolume": {"box": [-74.0523910522461,22.896909713745117,309.3908233642578,85.72734832763672,0.0,0.0,0.0,112.13745307922363,0.0,0.0,0.0,56.62489318847656]},"children": [{"boundingVolume": {"box": [-109.0,-44.450782775878906,296.45343017578125,43.68748474121094,0,0,0,43.6874885559082,0,0,0,43.6875]},"content": {"uri": "./Tile_+001_+000/tileset.json"},"geometricError": 4.36875},{"boundingVolume": {"box": [-95.49225616455078,16.0,304.4522705078125,42.26628875732422,0,0,0,42.266265869140625,0,0,0,42.266265869140625]},"content": {"uri": "./Tile_+001_+001/tileset.json"},"geometricError": 4.226628875732422},{"boundingVolume": {"box": [-109.0,84.25462341308594,310.2703857421875,50.77973937988281,0,0,0,50.77973937988281,0,0,0,50.77972412109375]},"content": {"uri": "./Tile_+001_+002/tileset.json"},"geometricError": 5.077973937988282},{"boundingVolume": {"box": [-39.0,-41.21886444091797,299.5376281738281,44.396854400634766,0,0,0,48.02167892456055,0,0,0,44.3968505859375]},"content": {"uri": "./Tile_+002_+000/tileset.json"},"geometricError": 4.802167892456055},{"boundingVolume": {"box": [-39.81702423095703,16.0,314.52374267578125,51.491981506347656,0,0,0,51.491981506347656,0,0,0,51.491973876953125]},"content": {"uri": "./Tile_+002_+001/tileset.json"},"geometricError": 5.149198150634766},{"boundingVolume": {"box": [-39.81702423095703,69.45303344726563,304.82012939453125,39.80249786376953,0,0,0,39.80249786376953,0,0,0,40.469970703125]},"content": {"uri": "./Tile_+002_+002/tileset.json"},"geometricError": 4.0469970703125}],"geometricError": 11.213745307922364,"transform": [-0.0,1.0,0.0,0.0,0.0,-0.0,1.0,0.0,1.0,0.0,0.0,0.0,6378137.0,0.0,0.0,1.0]}
}
  • asset
    數據集的基本信息,版本、坐標軸方向等。

  • geometricError
    頂層誤差閾值,控制LOD(細節層級)切換。

  • root
    根瓦片(root tile),定義了整個模型的范圍和第一個瓦片。

    • boundingVolume:瓦片的空間范圍(box / region / sphere)。

    • geometricError:當前瓦片的最大幾何誤差,決定是否繼續向下加載子瓦片。

    • refineREPLACEADD,決定加載子瓦片時是替換父瓦片,還是疊加細節。

    • children:子瓦片信息。

  • content
    指向實際的模型文件(如 .b3dm.glb.pnts)。

3.2?tileset.json

格式和root幾乎大同小異。

實在太長,就簡單摘抄一部分吧。

{"asset": {"extensionsUsed": ["3DTILES_content_gltf"],"gltfUpAxis": "Z","version": "1.0"},"geometricError": 1000,"root": {"boundingVolume": {"box": [-109.0,-44.450782775878906,296.45343017578125,43.68748474121094,0,0,0,43.6874885559082,0,0,0,43.6875]},"children": [{"boundingVolume": {"box": [-109.0,-44.529869079589844,296.2623291015625,43.747650146484375,0,0,0,43.747650146484375,0,0,0,43.747650146484375]},"children": [{"boundingVolume": {"box": [-109.0,-44.41993713378906,296.2623291015625,43.68302917480469,0,0,0,43.68303298950195,0,0,0,43.68304443359375]},"children": [{"boundingVolume": {"box": [-108.79536437988281,-31.627532958984375,297.58258056640625,39.55524444580078,0,0,0,39.55524444580078,0,0,0,39.55523681640625]},"children": [{"boundingVolume": {"box": [-117.75,-31.122161865234375,296.3058776855469,17.014083862304688,0,0,0,17.01408576965332,0,0,0,17.01409912109375]},"children": [{"boundingVolume": {"box": [-117.72776794433594,-37.15178680419922,296.82281494140625,10.89080810546875,0,0,0,10.868576049804688,0,0,0,10.868560791015625]},"children": [{"boundingVolume": {"box": [-117.72532653808594,-37.15178680419922,296.8204345703125,10.850723266601563,0,0,0,10.826057434082031,0,0,0,10.8260498046875]},"content": {"boundingVolume": {"box": [-117.72532653808594,-37.15178680419922,296.8204345703125,10.850723266601563,0,0,0,10.826057434082031,0,0,0,10.8260498046875]},"uri": "./Tile_+001_+000_L22_001200.glb"},"geometricError": 1.0850723266601563,"name": "Tile_+001_+000_L22_001200.osgb"}],

可以看到,root里面的uri是下層的json。這里則是對應的glb文件。

3.3?Tile_+001_+000_L17_0.glb

沒啥好多說的,就是切小了的glb文件。關于glb在前面寫過了。。。

3.4 小節

從上面可以看出。Cesium 的 3D Tiles(比如 3DTileset)本質上就是:

把一個很大的 3D 模型(GLB/OBJ/las 點云等)切分成多個小塊,再通過一個 JSON 索引文件(tileset.json) 來描述這些小塊的層級、邊界和加載邏輯。這樣 Cesium 在瀏覽時就可以做到 按需加載、分層細節(LOD)管理,避免一次性加載超大模型。

4 Cesium加載

最后還是能加載了。只是問題很多,主要是方向。

代碼如下:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Cesium基礎地球</title><script src="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Cesium.js"></script><link href="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Widgets/widgets.css" rel="stylesheet"><style>#cesiumContainer { width: 100%; height: 100vh; }</style>
</head>
<body><div id="cesiumContainer"></div>
<script>// 初始化 Cesium ViewerCesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzYjVkMmRhYy03OGMxLTQwM2EtYWY0Ny00MDM4YjhjZmVkNzIiLCJpZCI6MzA0Mzc4LCJpYXQiOjE3NDc3MzE5NDN9.kzP84v1ibzx6iJP_ESqc-PiJ6-fTbHQvCR2KMc9lvws';const viewer = new Cesium.Viewer("cesiumContainer", {terrainProvider: new Cesium.EllipsoidTerrainProvider()});// 加載 3D Tiles (指向 rootTileset.json)const tileset = new Cesium.Cesium3DTileset({url: "data/rootTileset.json"   // 相對路徑,index.html 同級目錄下的 data 文件夾});viewer.scene.primitives.add(tileset);tileset.readyPromise.then(function() {const longitude = 139.7101;const latitude = 35.6852;const height = 50.0;const position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);// 設置旋轉角度(弧度制)const heading = Cesium.Math.toRadians(90); // 水平方向const pitch   = Cesium.Math.toRadians(0);   // 上下傾斜const roll    = Cesium.Math.toRadians(300);   // 翻滾const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);const modelMatrix = Cesium.Transforms.headingPitchRollToFixedFrame(position, hpr);// 如果需要縮放,可以加這一句(比如縮小 0.1 倍)const scale = 0.1;tileset.modelMatrix = Cesium.Matrix4.multiplyByUniformScale(modelMatrix, scale, new Cesium.Matrix4());// 相機飛過去viewer.zoomTo(tileset);
});</script></body>
</html>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96638.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96638.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96638.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多語言共享販賣機投資理財共享售賣機投資理財系統

多語言共享販賣機投資理財/共享售賣機分紅/充電寶/充電樁投資理財系統 采用thinkphp內核開發&#xff0c;支持注冊贈金、多級分銷&#xff0c;功能很基礎 修復后臺用戶列表管理 可自定義理財商品 多種語言還可以添加任意語言 源碼開源 多級分銷 注冊贈金等

[Windows] PDF 專業壓縮工具 v3.0

[Windows] PDF 專業壓縮工具 v3.0 鏈接&#xff1a;https://pan.xunlei.com/s/VOZwtC_5lCF-UF6gkoHuxWMoA1?pwdchg8# PDF 壓縮工具 3.0 新版功能特點 - 不受頁數限制&#xff01; 一、核心壓縮功能 1.多模式智能壓縮 支持 4 種壓縮模式&#xff1a;平衡模式&#xff08…

SHEIN 希音 2026 校招 內推 查進度

SHEIN 希音 2026 校招 內推 查進度 &#x1f3e2;公司名稱&#xff1a;SHEIN 希音 &#x1f4bb;招聘崗位&#xff1a;前端、后端、測試、產品、安全、運維、APP 研發、數據分析、設計師、買手、企劃、招商、管培生 &#x1f31f;內推碼&#xff1a;NTA2SdK &#x1f4b0;福利待…

ARM (6) - I.MX6ULL 匯編點燈遷移至 C 語言 + SDK 移植與 BSP 工程搭建

回顧一、核心關鍵字&#xff1a;volatile1.1 作用告訴編譯器&#xff1a;被修飾的變量會被 “意外修改”&#xff08;如硬件寄存器的值可能被外設自動更新&#xff09;&#xff0c;禁止編譯器對該變量進行優化&#xff08;如緩存到寄存器、刪除未顯式修改的代碼&#xff09;。本…

Vue中使用keep-alive實現頁面前進刷新、后退緩存的完整方案

Vue中使用keep-alive實現頁面前進刷新、后退緩存的完整方案 在Vue單頁應用中&#xff0c;路由切換時組件默認會經歷完整的銷毀-重建流程&#xff0c;這會導致兩個典型問題&#xff1a;從搜索頁跳轉到列表頁需要重新加載數據&#xff0c;而從詳情頁返回列表頁又希望保留滾動位置…

Visual Studio Code 安裝與更新故障排除:從“拒絕訪問”到成功恢復

Visual Studio Code 安裝與更新故障排除&#xff1a;從“拒絕訪問”到成功恢復的實踐分析 摘要&#xff1a; 本文旨在探討 Visual Studio Code (VS Code) 在安裝與更新過程中常見的故障&#xff0c;特別是涉及“拒絕訪問”錯誤、文件缺失以及快捷方式和任務欄圖標異常等問題。…

簡單UDP網絡程序

目錄 UDP網絡程序服務端 封裝 UdpSocket 服務端創建套接字 服務端綁定 運行服務器 UDP網絡程序客戶端 客戶端創建套接字 客戶端綁定 運行客戶端 通過上篇文章的學習&#xff0c;我們已經對網絡套接字有了一定的了解。在本篇文章中&#xff0c;我們將基于之前掌握的知識…

如何解決 pip install 安裝報錯 ModuleNotFoundError: No module named ‘requests’ 問題

Python系列Bug修復PyCharm控制臺pip install報錯&#xff1a;如何解決 pip install 安裝報錯 ModuleNotFoundError: No module named ‘requests’ 問題 摘要 在日常Python開發過程中&#xff0c;pip install 是我們最常用的依賴安裝命令之一。然而很多開發者在 PyCharm 控制臺…

解釋 ICT, Web2.0, Web3.0 這些術語的中文含義

要理解“ICT Web2.0”術語的中文含義&#xff0c;需先拆解為 ICT 和 Web2.0 兩個核心概念分別解析&#xff0c;再結合二者的關聯明確整體指向&#xff1a; 1. 核心術語拆解&#xff1a;中文含義與核心定義 &#xff08;1&#xff09;ICT&#xff1a;信息與通信技術 中文全稱&am…

IDEA版本控制管理之使用Gitee

使用Gitee如果之前沒用過Gitee&#xff0c;那么IDEA中應該長這樣&#xff08;第一次使用&#xff09;如果之前使用過Gitee&#xff0c;那么IDEA中應該長這樣這種情況&#xff0c;可以先退出Gitee&#xff0c;再拉取Gitee&#xff0c;退出Gitee方法見文章底部好&#xff0c;那么…

NLP(自然語言處理, Natural Language Processing)

讓計算機能夠理解、解釋、操縱和生成人類語言&#xff0c;從而執行有價值的任務。 關注社區&#xff1a;Hugging Face、Papers With Code、GitHub 是現代NLP學習不可或缺的資源。許多最新模型和代碼都在這里開源。 ①、安裝庫 pip install numpy pandas matplotlib nltk scikit…

后端json數據反序列化枚舉類型不匹配的錯誤

后端json數據反序列化枚舉類型不匹配的錯誤后端返回的json格式在前端反序列化報錯System.Text.Json.JsonException:“The JSON value could not be converted to TodoReminderApp.Models.Priorityen. Path: $.Data.Items.$values[0].Priority | LineNumber: 0 | BytePositionIn…

市面上主流接口測試工具對比

公司計劃系統的開展接口自動化測試&#xff0c;需要我這邊調研一下主流的接口測試框架給后端測試&#xff08;主要測試接口&#xff09;的同事介紹一下每個框架的特定和使用方式。后端同事根據他們接口的特點提出一下需求&#xff0c;看哪個框架更適合我們。 2025最新Jmeter接口…

2025.2.4 更新 AI繪畫秋葉aaaki整合包 Stable Diffusion整合包v4.10 +ComfyUI 整合包下載地址

2025.2.4 更新 AI繪畫秋葉aaaki整合包 Stable Diffusion整合包v4.10 ComfyUI 整合包下載地址Stable Diffusion整合包【下載鏈接】ComfyUI整合包【下載鏈接】【報錯解決】Stable Diffusion整合包 【下載鏈接】 下載地址 https://uwtxfkm78ne.feishu.cn/wiki/GHgVwA2LPiE9x2kj4W…

Nginx優化與 SSL/TLS配置

1、隱藏版本號可以使用Fiddler工具抓取數據包&#xff0c;查看Nginx版本&#xff0c;也可以在CentOS中使用命令curl -I http://192.168.10.23 顯示響應報文首部信息。方法一&#xff1a;方法一&#xff1a;修改配置文件方式 vim /usr/local/nginx/conf/nginx.conf http {includ…

JavaWeb05

一、Listener監聽器1、簡介Listener是Servlet規范中的一員在Servlet中&#xff0c;所有的監聽器接口都是以Listener結尾監聽器實際上是Servlet規范留給JavaWeb程序員的一些特殊時機當在某些時機需要執行一段Java代碼時&#xff0c;可以用對應的監聽器2、常用的監聽器接口&#…

科普:在Windows個人電腦上使用Docker的極簡指南

在Windows個人電腦上使用Docker的極簡指南&#xff1a; 1. 快速安裝 下載安裝包&#xff08;若進不了官網&#xff0c;則可能要科學上網&#xff09; 訪問Docker Desktop官方下載頁 訪問Docker官網 選擇Windows及&#xff08;AMD64 也稱為 x86-64&#xff0c;是目前主流 PC的…

【開題答辯全過程】以 “居逸”民宿預訂微信小程序為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

LeetCode 2565.最少得分子序列

給你兩個字符串 s 和 t 。 你可以從字符串 t 中刪除任意數目的字符。 如果沒有從字符串 t 中刪除字符&#xff0c;那么得分為 0 &#xff0c;否則&#xff1a; 令 left 為刪除字符中的最小下標。 令 right 為刪除字符中的最大下標。 字符串的得分為 right - left 1 。 請你返回…

【文獻筆記】PointWeb

參考筆記: https://blog.csdn.net/m0_69412369/article/details/143106494 https://www.cnblogs.com/A-FM/p/PointWeb.html 注:本文的大部分內容是轉載而來 CVPR 2019:PointWeb: Enhancing Local Neighborhood Features for Point Cloud Processing 論文:https://ieeex…