Cesium 集成超圖IServer 發布的S3M數據服務


        去年在跟一個行業單位在對接模型數據的時候,發現他們用cesium 來加載超圖的S3M服務,需要我們來提供S3M服務地址。當時覺得他們挺厲害的,以為是他們做了什么轉換能夠接上超圖的服務。

       在git 上發現超圖開源了S3M轉換的庫(git 地址:https://github.com/SuperMap/s3m-spec),去嘗試了下,發現了一些問題,主要如下:

1、可以加載本地相對路徑下的人工建模的樣例數據,自己處理的人工建模數據部分可以加載,部分無法加載,而且存在黑色線框、模型丟失問題;無法加載Iserver 上發布的人工建模數據。如下圖

 

 

 2、不管是本地的相對路徑下傾斜攝影緩存還是IServer 發布的傾斜攝影緩存都無法加載

針對人工模型有些可以加載,有些不能加載的問題,嘗試過對模型不進行烘焙,或者進行lightingmap 、completemap 烘焙,不能加載的模型還是無法加載,當時就放棄了深入的研究。

       最近有接觸到需要Cesium 接入超圖數據的的需求(現在很多國產化的GIS平台都選擇了超圖平台),剛好有點時間,又重新打開了超圖的git 開源庫,發現更新了許多代碼,心里在想是不是有了改進呢?經過測試

1、人工建模:相對路徑下的人工建模樣例數據可以加載。自己處理的人工建模部分可以加載,部分無法加載,不會存在貼圖問題,模型沒有丟失。IServer上發布的人工建模數據也可以加載了

 

 

2、不管是本地的相對路徑下傾斜攝影緩存還是IServer 發布的傾斜攝影緩存都無法加載

       抱着研究一番的心態,對上面的問題做了一些追蹤,下面是自己的一個分析思路,整理出來方便后續自己回憶思路,也可以給大家做一些參考

1、人工建模數據有些無法加載的問題

1.1 在瀏覽器上查看報錯信息,明顯的提示json 轉換失敗

 

1.2 找到可以加載的模型數據的索引文件.scp 以及不可以加載的模型數據的.scp 文件進行比較

 

經過與數據組溝通,這兩份數據,json格式的是SuperMapDesktop 10版本以上生成的緩存數據,而xml 格式的是SuperMapDesktop 9D版本生成的緩存數據,進一步發現json格式的scp 文件對應的是.s3mb后綴模型文件。

Xml 格式對應的是.s3m后綴的模型文件。.S3MB 是超圖桌面版10i 才有的緩存格式。而在github 上超圖並沒有說明這個庫只針對s3mb格式緩存數據。既然找到數據原因,進一步去代碼驗證出錯位置。

 

 

1.3 代碼調試

 

 

報錯具體是在S3MTileLayer 異步的時候

 

找到對應的S3MTIleLayer.js。具體報錯代碼在Cesium.Resource.fetchJson(),既然不是json 格式,在這里就報錯了,沒有繼續往下執行

 

  

1.4 結論:人工建模無法加載的原因就是.scp文件的內容不是json 格式,導致代碼解析失敗。實際上是生成的緩存格式不是S3MB 格式。可以用超圖desktop 10i以上的版本生成S3MB格式緩存,就能解決不能加載的問題。

2、傾斜數據無法加載

2.1 傾斜數據無法加載,在瀏覽器中並未報任何錯誤,在網絡請求中也有請求對應的的模型文件,而且模型格式也是.S3MB

 

2.2  無法看出錯誤信息,只能一步一步調試,對比人工建模與傾斜數據的差別

 

最終找到這個S3MContentParser.js 這個js 是用於做S3MB 內容轉換的。順着這個js 往下找

 

 

 

發現加載傾斜數據的時候並未往下執行,而人工建模數據是往下執行的。如果把這個屏蔽掉,人工建模數據也無法渲染出來。人工建模數據和傾斜數據這個參數的區別是

 

人工建模 fileType:OSGBCachFile,傾斜攝影 fileType:OSGBFile

這個參數是通過scp 文件的解析獲取的,打開對應scp 文件來比較

 

OSGBFileType導致無法渲染傾斜的數據,因為數據請求了,沒做轉換。那如果在這里把OSGBFile 也作為參數,是不是可以進行數據轉換了呢?

S3MContenFactory.js 改為如下截圖

 

 

 

期望很美好,現實很骨感,着色器報錯了

 

 

基本可以判斷是超圖並未支持傾斜轉換后的S3M數據支持。但是傾斜數據格式更加透明,不存在屬性、貼圖的相關問題,應該更加容易支持才是。繼續往下調試代碼

 

在這個S3MCashFileRenderEntity 當中使用了頂點着色器和片段着色器,而這兩個着色器附加到着色器程序,把模型渲染出來。按照這個思路是不是針對傾斜數據的OSGBFile 編寫對應的頂點着色器和片段着色器,那就可以渲染出傾斜模型?這個需要后續去驗證

2.3 結論:超圖開源的庫並未支持scp 文件中fileType===OSGBFile的傾斜模型數據,所以無法加載。想要實現傾斜數據的加載需要自定義頂點着色器和片段着色器。

   后續問題,通過Cesium 加載S3MB的模型數據,集成到現有框架中,所有涉及到后期處理的分析功能對S3MB數據都無效,甚至基本的量測功能都需要對S3MB圖層進行兼容,這就導致加載S3MB格式的數據似乎只存在瀏覽的意義。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM