傾斜攝影轉檔視窗程式


建立專案檔

[info] 小提示:
範例程式碼:Github
目標是使用 MicroSoft Visual Studio 2019(或以上之版本)建立一個名為 Windows Forms App 的應用程式。

步驟 1. 首先新增 Windows Forms App(.Net Framework)專案,在此請使用[.Net Framework 4.7.2](含)以上的版本,接著為專案命名。本範例命名為 PhotogrammetryConverterApp。

步驟 2. 請在右邊[方案總管]中找到[參考],點擊滑鼠右鍵後點選[加入參考…],視窗開啟後,選擇[瀏覽]頁籤,至安裝目錄下找到TMPEngine.dll檔案並按下[確定],即可將 TMPEngine.dll 加入參考。

PluginSample

步驟 3. 加入參考後請於 Form 的設計視窗點擊滑鼠右鍵,並按下[檢視程式碼]在上方加入以下程式碼:

using PilotGaea.Serialize;
using PilotGaea.TMPEngine;
using PilotGaea.Geometry;

步驟4. 請在組態管理員選擇適當的方案平台,設定為`x64執行模式,並選擇 Release 方案組態。

PhotogrammetryFileConversionApp

編寫轉檔程式

步驟 1. 建立 UI,於工具箱新增 ListBox、ProgressBar、ComboBox、Label、Button 控制項至表單中,將 ListBox 控制項的名稱設置為"listBox_Main",並雙擊 Button 控制項以建立按鈕點擊事件函式。

PhotogrammetryFileConversionApp

步驟 2. 於Form1()加入功能列表。

public Form1() {
    InitializeComponent();

    // 加入功能列表
    List<string> featureNames = new List<string>();
    featureNames.Add("基本");
    featureNames.Add("來源3MX");
    featureNames.Add("輸出OGC I3S");
    featureNames.Add("輸出OGC 3DTiles");
    featureNames.Add("變換-平移");
    featureNames.Add("變換-旋轉");
    featureNames.Add("變換-縮放");
    featureNames.Add("遮罩-內縮");
    featureNames.Add("遮罩-無內縮");
    featureNames.Add("刪除指定區域");
    featureNames.Add("添加額外模型");
    featureNames.Add("單緒");
    comboBox_Features.Items.AddRange(featureNames.ToArray());
    comboBox_Features.SelectedIndex = 0;
}

步驟 3. 在點擊事件函式中建立名為 maker 的 CPhotogrammetryMaker 物件,並將 UI 預設為關閉。

private void button_Start_Click(object sender, EventArgs e) {
    EnableUI(false);
    // 將來源資料輸出成PhotogrammetryModel圖層
    System.Environment.CurrentDirectory = @"C:\Program Files\PilotGaea\TileMap"; // 為了順利存取安裝目錄下的相關DLL
    CPhotogrammetryModelMaker m_Maker = null;
    Stopwatch m_Stopwatch = new Stopwatch();
}
private void EnableUI(bool enable)
{
    button_Start.Enabled = enable;
    comboBox_Features.Enabled = enable;
}

步驟 4. 為 maker 物件建立監聽事件,並於類別中新增以下三項事件函式。

m_Maker.CreateLayerCompleted += M_Maker_CreateLayerCompleted;
m_Maker.ProgressMessageChanged += M_Maker_ProgressMessageChanged;
m_Maker.ProgressPercentChanged += M_Maker_ProgressPercentChanged;

建立圖層完畢回傳設定:

private void M_Maker_ProgressMessageChanged(string message)
{
    listBox_Main.Items.Add(message);
}

進度回傳設定:

private void M_Maker_ProgressPercentChanged(double percent)
{
    progressBar_Main.Value = Convert.ToInt32(percent);
}

步驟 5. 新增圖層。

  1. LayerName 為目標圖層名稱,可隨意取名。若 EXPORT_TYPE 不為 LET_DB,則為輸出檔名。
  2. destPath 為指定執行 Create 的資料庫路徑。
  3. srcPath 為來源資料檔案路徑。
  4. terrainPath 為高程資料庫路徑。
  5. terrainName 為高程資料庫內指定的高程圖層名稱,請確認資料庫中的地形高程名稱。
  6. EXPORT_TYPE 為要輸出的類型,有 LET_DB、LET_OGCI3S、LET_OGC3DTILES。預設 LET_DB。
  7. offset 為圖層位移,透過 offset 參數指定對三軸(x,y,z)的位移量,單位為公尺。
  8. rotationAngle 為圖層對Z軸的旋轉角度 (角度範圍為0°~359°)。
  9. scale 為圖層放大比例,預設為1。
  10. isDoMaskLayer 為是否執行遮罩功能,將其參數設為true即可開啟遮罩。
  11. maskLayerOffsetting 為遮罩的縮放值,單位為公尺,僅開啟執行遮罩功能時有用。
  12. isDoExtrudeEdge 為模型邊緣拉伸功能,將其參數設為true即可開啟邊緣拉伸。
  13. attrSHPFileName 為添加屬性 SHP 檔的檔案路徑。
  14. attrSHPFileEPSG 為添加屬性 SHP 檔的 EPSG。
  15. removalPolygons 為指定 SHP 檔內的多邊形區域,在removalPolygons參數透過 SHP 檔指定要刪除的圖層區域。 shp檔SRS只支援4326。
  16. additionalModelFileNames 為額外模型的檔案路徑。如要添加額外模型功能,可透過additionalModel相關參數添加額外模型到圖層中。
  17. additionalModelPositions 為額外模型的插入點座標,以 EPSG4326 描述。
  18. additionalModelPositions 為額外模型對三軸的旋轉,單位為弧度。
  19. additionalModelScales 為額外模型的縮放值,預設為1,是為原始大小。
  20. maxThreadCount 為轉檔使用執行緒數量,負數為使用單緒,0為自動分配。
// 設定必要參數
EXPORT_TYPE exportType = EXPORT_TYPE.LET_DB;
string layerName = "test";
string destPath = string.Format(@"{0}\..\output\photogrammetrymodel_maker.DB", Application.StartupPath);
string srcPath = string.Format(@"{0}\..\data\photogrammetrymodel_maker\LOD\LODTreeExport.xml", Application.StartupPath);
string terrainPath = string.Format(@"{0}\..\data\terrain_maker\terrain.DB", Application.StartupPath);
string terrainName = "terrain";
// 設定進階參數 (可自行選擇是否加入)
GeoPoint offset = null;
double rotationAngle = 0;
double scale = 1;
bool isDoMaskLayer = false;
double maskLayerOffsetting = 0;
bool isDoExtrudeEdge = false;
string attrSHPFileName = "";
long attrSHPFileEPSG = 4326;
GeoPolygonSet[] removalPolygons = null;。
string[] additionalModelFileNames = null;
GeoPoint[] additionalModelPositions = null;
GeoPoint[] additionalModelRotations = null;
GeoPoint[] additionalModelScales = null;
int maxThreadCount = 0;

步驟 6. 開始執行非同步轉檔。

 m_Stopwatch.Restart();
// 開始非同步轉檔
bool ret = m_Maker.Create(exportType, layerName, destPath, srcPath, terrainPath, terrainName,offset, rotationAngle, scale,isDoMaskLayer, maskLayerOffsetting, isDoExtrudeEdge,attrSHPFileName, attrSHPFileEPSG,removalPolygons,additionalModelFileNames, additionalModelPositions, additionalModelRotations,additionalModelScales,maxThreadCount
);
string message = string.Format("參數檢查{0}", (ret ? "通過" : "失敗"));
listBox_Main.Items.Add(message);
Copyright © PilotGaea 2022 Version:13.0 all right reserved,powered by Gitbook修訂時間: 2024-01-31 10:01:42