傾斜攝影osgb格式檔案,進行座標轉換

等值面發表於2024-08-30

傾斜攝影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

相關文章