【前言】
數值地形模型(DTM)的處理是空間資訊科學的基礎。在本系列課程中,我們已經陸續介紹了不同語言的處理方法。最後一課,我們將實測如何使用 VB.NET 來達成與第二課(VB6)相同的任務。
本系列涵蓋內容:
- 如何用 FORTRAN 讀取 DTM 資料檔案? (Visual FORTRAN)
- 如何用 Visual Basic 讀取 DTM 資料檔案? (VB6)
- 讀取和寫入二進位檔案 (VB.NET)
- 如何用 Visual Basic 讀取 DTM 資料檔案? (VB.NET)
(4) 如何用 Visual Basic 讀取 DTM 資料檔案?(VB.NET)
在之前的課程中,我們討論過 VB6 的讀取方式。現在,我們使用 VB.NET 來處理同樣的問題。
資料規格假設:
- 格式:二進位 (Binary) 整數矩陣。
- 矩陣大小:477 (欄/Column) × 512 (列/Row)。
- 資料型態:2-byte 短整數 (在 .NET 中對應為
Int16)。
程式實作邏輯:
- 開啟檔案流:宣告一個
FileStream,設定模式為Open與Read。 - 建立讀取器:宣告
BinaryReader來解析二進位資料。 - 建立寫入器:宣告
StreamWriter用於將結果輸出為純文字檔。 - 巢狀迴圈讀取:外層迴圈跑 512 列,內層迴圈跑 477 欄。
- 輸出資料:每讀取一個
Int16數值,即刻寫入文字檔中。 - 資源關閉:完成後關閉所有 Reader、Writer 與 Stream。
【VB.NET 範例原始碼:ReadDTM】
Imports System
Imports System.IO
Private Sub ReadDTM()
Dim i As Integer ' 欄索引
Dim j As Integer ' 列索引
' 1. 宣告一個 FileStream,設定其讀取模式為 Open 與 Read
Dim fs As New FileStream("D:\dtm\ldrelev.dat", FileMode.Open, FileAccess.Read)
' 2. 宣告一個新的二進位資料讀取器 (BinaryReader)
Dim r As New BinaryReader(fs)
' 3. 宣告一個新的 StreamWriter,準備輸出文字檔
Dim sw As StreamWriter = New StreamWriter("D:\dtm\ldrelev.txt")
' 4. 開始掃描矩陣資料 (Row: 512, Column: 477)
For j = 1 To 512
For i = 1 To 477
' 讀取一個 2-byte 整數 (ReadInt16) 並寫入文字檔
' 格式:列索引, 欄索引, 高程值
sw.WriteLine(j.ToString() & "," & i.ToString() & "," & r.ReadInt16())
Next i
Next j
' 5. 關閉所有資源
r.Close()
fs.Close()
sw.Close()
End Sub
整理說明:
- 技術演進:在 VB6 中,我們可以使用
Get指令直接將一整列讀入陣列;而在 VB.NET 的範例中,作者展示了更直觀的ReadInt16()逐點讀取法。雖然效率上可能略有差異,但在代碼邏輯上更符合物件導向的規範。 - 型別對應:特別注意
.NET的Int16準確對應了傳統二進位 DTM 檔案中的 2-byte integer。





















