?? frmsinglelevel.vb
字號:
Public Class frmSingleLevel
Private Sub btnCompute_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCompute.Click
Dim hObs() As Double '高差觀測值
Dim dObs() As Double '水準路線長度
Dim Ha, Hb As Double '已知點高程
Dim LevelType As Short '單一水準類型
Dim strAllInput As String '觀測數據
Dim strLines() As String '字符串數組,一個元素表示一行
Dim nObsCount As Short '觀測值個數
Dim strTmp() As String '字符串數組
'strAllInput = txtInput.Text '獲得輸入數據
'strLines = Split(strAllInput, Chr(13) & Chr(10)) '按行分離輸入數據
'If UBound(strLines) = 0 Then '輸入數據為空
' MsgBox("請輸入數據")
'End If
LevelType = Val(strLines(0)) '第一行為單一水準類型
If LevelType = 1 Then '附合水準
strTmp = Split(strLines(1), ",")
Ha = Val(strTmp(1)) '獲取起始點高程
strTmp = Split(strLines(2), ",")
Hb = Val(strTmp(1)) '獲取終點高程
nObsCount = strLines.GetLength(0) - 3 '獲得觀測值個數
Else
strTmp = Split(strLines(1), ",")
Ha = Val(strTmp(1))
Hb = Ha '閉合水準可看成起點和終點為同一點的附合水準
nObsCount = strLines.GetLength(0) - 2
End If
ReDim hObs(nObsCount) '根據實際個數調整觀測數據數組的大小
ReDim dObs(nObsCount)
Dim i As Integer
'逐行用Split函數分離,獲取觀測數據
For i = 0 To nObsCount - 1
If LevelType = 0 Then
strTmp = Split(strLines(i + 2), ",")
Else
strTmp = Split(strLines(i + 3), ",")
End If
hObs(i) = Val(strTmp(1))
dObs(i) = Val(strTmp(2))
Next i
Dim dblFh, dblSumD As Double
dblFh = 0
dblSumD = 0
For i = 0 To nObsCount - 1
dblFh = dblFh + hObs(i) '計算高差閉合差
dblSumD = dblSumD + dObs(i) '計算水準路線總長度
Next i
dblFh = dblFh - (Hb - Ha) '計算高差閉合差
For i = 0 To nObsCount - 1 '按路線長度分配閉合差
hObs(i) = hObs(i) - dblFh * dObs(i) / dblSumD
Next i
Dim dblH() As Double
ReDim dblH(nObsCount)
'推算未知點高程
dblH(0) = Ha + hObs(0)
For i = 0 To nObsCount - 2
dblH(i + 1) = dblH(i) + hObs(i + 1)
Next i
'輸出結果
Dim strOutput As String
strOutput = "閉合差:" & Format(dblFh * 1000, "####.0") & " mm" & Chr(13) & Chr(10) _
& "水準路線總長度:" & Str(dblSumD) & " km" & Chr(13) & Chr(10) _
& "每公里高差改正數:" & Format(dblFh / dblSumD * 1000, "####.0") & " mm" & Chr(13) & Chr(10) & Chr(13) & Chr(10) _
& "序號 " & "改正后h " & "調整后H (m) " & Chr(13) & Chr(10)
For i = 0 To nObsCount - 1
strOutput = strOutput & Str(i + 1) & Chr(9) & Str(hObs(i)) & Chr(9) & Str(dblH(i)) & Chr(13) & Chr(10)
Next i
txtResult.Text = strOutput
End Sub
Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
txtInput.Text = ""
txtResult.Text = ""
End Sub
Private Sub frmSingleLevel_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'數據格式:
'第一行:單水準類型,1=附合,0=閉合
'第二行:起點高程,"點號,高程"
'第三行:終點高程,"點號,高程"(附合水準才有,閉合水準則開始觀測數據)
'第四行:觀測數據,"序號,高差觀測值m,水準路線長度km"
'......
txtInput.Text = "1" & Chr(13) & Chr(10) _
& "A, 45.286" & Chr(13) & Chr(10) _
& "B, 49.579" & Chr(13) & Chr(10) _
& "1,2.331,1.6" & Chr(13) & Chr(10) _
& "2,2.813,2.1" & Chr(13) & Chr(10) _
& "3,-2.244,1.7" & Chr(13) & Chr(10) _
& "4,1.430,2.0"
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim hObs() As Double '高差觀測值
Dim dObs() As Double '水準路線長度
Dim Ha, Hb As Double '已知點高程
Dim LevelType As Short '單一水準類型
Dim strAllInput As String '觀測數據
Dim strLines() As String '字符串數組,一個元素表示一行
Dim nObsCount As Short '觀測值個數
Dim strTmp() As String '字符串數組
'strAllInput = txtInput.Text '獲得輸入數據
'strLines = Split(strAllInput, Chr(13) & Chr(10)) '按行分離輸入數據
'If UBound(strLines) = 0 Then '輸入數據為空
' MsgBox("請輸入數據")
'End If
If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.Cancel Then
Exit Sub
End If
Dim strFileName As String
Dim strLine As String
strFileName = OpenFileDialog1.FileName
FileOpen(1, strFileName, OpenMode.Input)
strLine = LineInput(1)
LevelType = Val(strLine) '第一行為單一水準類型
If LevelType = 1 Then '附合水準
strLine = LineInput(1)
strTmp = Split(strLine, ",")
Ha = Val(strTmp(1)) '獲取起始點高程
strLine = LineInput(1)
strTmp = Split(strLine, ",")
Hb = Val(strTmp(1)) '獲取終點高程
' nObsCount = strLines.GetLength(0) - 3 '獲得觀測值個數
Else
strLine = LineInput(1)
strTmp = Split(strLine, ",")
Ha = Val(strTmp(1))
Hb = Ha '閉合水準可看成起點和終點為同一點的附合水準
' nObsCount = strLines.GetLength(0) - 2
End If
nObsCount = 0
Do While Not EOF(1)
strLine = LineInput(1)
nObsCount = nObsCount + 1
ReDim Preserve hObs(nObsCount - 1) '根據實際個數調整觀測數據數組的大小
ReDim Preserve dObs(nObsCount - 1)
strTmp = Split(strLine, ",")
hObs(nObsCount - 1) = Val(strTmp(1))
dObs(nObsCount - 1) = Val(strTmp(2))
Loop
FileClose(1)
Dim i As Integer
Dim dblFh, dblSumD As Double
dblFh = 0
dblSumD = 0
For i = 0 To nObsCount - 1
dblFh = dblFh + hObs(i) '計算高差閉合差
dblSumD = dblSumD + dObs(i) '計算水準路線總長度
Next i
dblFh = dblFh - (Hb - Ha) '計算高差閉合差
For i = 0 To nObsCount - 1 '按路線長度分配閉合差
hObs(i) = hObs(i) - dblFh * dObs(i) / dblSumD
Next i
Dim dblH() As Double
ReDim dblH(nObsCount)
'推算未知點高程
dblH(0) = Ha + hObs(0)
For i = 0 To nObsCount - 2
dblH(i + 1) = dblH(i) + hObs(i + 1)
Next i
'輸出結果
Dim strOutput As String
strOutput = "閉合差:" & Format(dblFh * 1000, "####.0") & " mm" & Chr(13) & Chr(10) _
& "水準路線總長度:" & Str(dblSumD) & " km" & Chr(13) & Chr(10) _
& "每公里高差改正數:" & Format(dblFh / dblSumD * 1000, "####.0") & " mm" & Chr(13) & Chr(10) & Chr(13) & Chr(10) _
& "序號 " & "改正后h " & "調整后H (m) " & Chr(13) & Chr(10)
For i = 0 To nObsCount - 1
strOutput = strOutput & Str(i + 1) & Chr(9) & Str(hObs(i)) & Chr(9) & Str(dblH(i)) & Chr(13) & Chr(10)
Next i
txtResult.Text = strOutput
SaveFileDialog1.DefaultExt = "txt"
If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.Cancel Then
Exit Sub
End If
strFileName = SaveFileDialog1.FileName
FileOpen(1, strFileName, OpenMode.Output)
PrintLine(1, "閉合差:" & Format(dblFh * 1000, "####.0") & " mm")
PrintLine(1, "水準路線總長度:" & Str(dblSumD) & " km")
PrintLine(1, "每公里高差改正數:" & Format(dblFh / dblSumD * 1000, "####.0") & " mm")
PrintLine(1)
PrintLine(1, "序號 " & "改正后h " & "調整后H (m) ")
For i = 0 To nObsCount - 1
PrintLine(1, Str(i + 1) & Chr(9) & Str(hObs(i)) & Chr(9) & Str(dblH(i)))
Next i
FileClose(1)
End Sub
End Class
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -