傾斜攝影OSGB格式的檔案,很棘手,今天需要把osgb放到UE中渲染。碰到的問題如下:
1、osgb檔案導進去後,Z軸不想上,是歪的,小人放進去後,就斜站在馬路上。
2、根本原因是座標系,UE的外掛cesium for UE支援WGS84座標(wkid:4326)。
怎麼解決問題呢?
1、當然是問GPT呀,搞搞問答,看它出什麼答案,結果,很拉跨。
2、直接轉換:透過osgbLab軟體進行osgb座標系變換,用了,能成功,但是,是假性的成功。用其他軟體開啟看,會發現轉換的根本不對,跟極座標似的。
3、GDAL,一個不錯的庫,然而,也不行。
問題來了:怎麼才行?
當然是間接投影呀!
1、轉換osgb為obj格式。使用osgbLab工具,把傾斜攝影的成功轉成一個obj,大幾百MB。
2、obj進行格式轉換,見程式碼。注意修改input.obj與output.obj。核心功能:找到obj程式碼裡的座標部分,進行座標系變換。
# -*- coding: utf-8 -*- import pyproj X0, Y0 = 1111111,111111111 #此處需要透過metadata.xml獲取,我發現obj裡的xy座標,與metadata.xml結合才能使用 # 初始化座標系轉換器 transformer = pyproj.Transformer.from_crs("EPSG:4528", "EPSG:4326", always_xy=True) with open('input.obj', 'r') as infile, open('output.obj', 'w') as outfile: for line in infile: if line.startswith('v '): # 處理頂點資訊 parts = line.split() x, y, z = map(float, parts[1:4]) # 執行座標系轉換
x, y = transformer.transform(x+X0, y+Y0)
# x, y = transformer.transform(x, y) outfile.write(f"v {x} {y} {z}\n") else: outfile.write(line)
3、使用osgbLab進行格式轉換,obj轉osgb。至此,曲線救國完成。
相關說明:
obj格式簡介 https://www.cnblogs.com/dzmsjs/p/18389082