向量轉檔視窗程式


建立專案檔

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

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

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

PluginSample

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

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

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

VectorFileConversionApp

編寫轉檔程式

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

VectorFileConversionApp

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

public Form1() {
    InitializeComponent();

    // 加入功能列表
     List<string> featureNames = new List<string>();
    featureNames.Add("基本");
    comboBox_Features.Items.AddRange(featureNames.ToArray());
    comboBox_Features.SelectedIndex = 0;
}

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

private void button_Start_Click(object sender, EventArgs e) {
    EnableUI(false);
     // 生成一向量圖層(來源為shp)
     System.Environment.CurrentDirectory = @"C:\ProgramFiles\PilotGaea\TileMap"; // 為了順利存取安裝目錄下的相關DLL
    CVectorMaker maker = new CVectorMaker();
    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_CreateLayerCompleted(string LayerName, bool Success, string ErrorMessage)
{
    m_Stopwatch.Stop();
    string message = string.Format("CreateCompleted{0}", (Success ? "成功" : "失敗"));
    listBox_Main.Items.Add(message);
    message = string.Format("耗時{0}分。", m_Stopwatch.Elapsed.TotalMinutes.ToString("0.00"));
    listBox_Main.Items.Add(message);
}

進度訊息回傳設定:

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. DBFileName 為目標檔案的DB路徑。
  3. TerrainDBName 為來源地形DB路徑,
  4. TerrainLayerName 為來源地形的圖層名稱,請確認資料庫中的地形高程名稱。
  5. ShpFileName 為檔案來源 SHP 檔路徑。
  6. TextFieldIndex 為顯示文字欄位編號。
  7. SymbolFieldIndex 為顯示圖標欄位編號。可利用SymbolFieldValueImagePath參數做進一步設定。
  8. SrcEPSG 為來源 EPSG。
  9. UseCluster 為是否使用叢集,將其參數設為 true 即可使用叢集模型。
  10. UseSimplePoint 為是否使用簡約化。
  11. MaxClusterDistance 為群集點的最大合併距離。
  12. UseHeight 為是否使用欄位高度值,若將其參數設為 false 時,則永遠取用地形高度。
  13. HeightIndex 為高度欄位編號。當 UseHeight 為 false 時則無意義。
  14. IsAbsoluteHeight 為高度欄位值是否為絕對高。當 UseHeight 為 false 時則無意義。。
  15. SymbolFieldValue 為與ImagePath參數相對應,當設定的顯示圖標欄位中的值存在於此參數陣列中時,則將該點圖標設為編號對應於 ImagePath 陣列中的圖形檔。
  16. ImagePath 為與SymbolFieldValue參數相對應,記錄圖形檔完整路徑,根據SymbolFieldValue參數將圖素的圖標設為對應的圖形檔。
  17. TextSet 為顯示文字字體設定,陣列長度固定為9,參數分別代表 { 字型名稱、字型顏色R、G、B、字型邊界顏色R、G、B、字型大小,字型邊界大小 } ,預設值為 { 微軟正黑體, 255, 255, 255, 0, 0, 0, 16, 3 }
// 設定必要參數
string DBFileName = string.Format(@"{0}\..\output\vector_maker.DB", Application.StartupPath);
string TerrainDBName = string.Format(@"{0}\..\data\terrain_maker\terrain.DB", Application.StartupPath);
string TerrainLayerName = "terrain";
string LayerName = "test";
string ShpFileName = string.Format(@"{0}\..\data\vector_maker\gis_osm_places_free_1.shp", Application.StartupPath);
int TextFieldIndex = 0;
int SymbolFieldIndex = 1;
int SrcEPSG = 4326;
bool UseCluster = true;
bool UseSimplePoint = false;
double MaxClusterDistance = 200;
bool UseHeight = false;
int HeightIndex = 0;
bool IsAbsoluteHeight = false;
string[] SymbolFieldValue = null;
string[] ImagePath = null;
string[] TextSet = null;
// 設定進階參數
switch (comboBox_Features.SelectedIndex)
{
    case 0: // 基本
        break;
}

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

m_Stopwatch.Restart();
// 開始非同步轉檔
bool ret = m_Maker.Create(DBFileName, TerrainDBName, TerrainLayerName, ShpFileName, TextFieldIndex, SymbolFieldIndex, LayerName, SrcEPSG, UseCluster, UseSimplePoint, MaxClusterDistance, UseHeight, HeightIndex, IsAbsoluteHeight,
SymbolFieldValue, ImagePath, TextSet);
string message = string.Format("Create檢查{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