⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmmain.frm

📁 实现对导线测量数据的自动计算和导线图形的显示
💻 FRM
📖 第 1 页 / 共 5 页
字号:
         Begin VB.Label lblCoY 
            Alignment       =   2  'Center
            Appearance      =   0  'Flat
            BackColor       =   &H80000005&
            BorderStyle     =   1  'Fixed Single
            Caption         =   "Y坐标(m)"
            BeginProperty Font 
               Name            =   "黑体"
               Size            =   10.5
               Charset         =   134
               Weight          =   400
               Underline       =   0   'False
               Italic          =   0   'False
               Strikethrough   =   0   'False
            EndProperty
            ForeColor       =   &H00FF0000&
            Height          =   300
            Index           =   0
            Left            =   9240
            TabIndex        =   14
            Top             =   0
            Width           =   1095
         End
         Begin VB.Label lblBottom 
            Appearance      =   0  'Flat
            BackColor       =   &H80000005&
            BorderStyle     =   1  'Fixed Single
            Caption         =   "限差说明:"
            BeginProperty Font 
               Name            =   "黑体"
               Size            =   10.5
               Charset         =   134
               Weight          =   400
               Underline       =   0   'False
               Italic          =   0   'False
               Strikethrough   =   0   'False
            EndProperty
            ForeColor       =   &H00000000&
            Height          =   300
            Left            =   0
            TabIndex        =   13
            Top             =   960
            Visible         =   0   'False
            Width           =   9615
         End
      End
   End
   Begin VB.HScrollBar HScroll1 
      Height          =   255
      Left            =   120
      TabIndex        =   4
      Top             =   8400
      Visible         =   0   'False
      Width           =   9255
   End
   Begin VB.CommandButton CmdGetForm 
      Caption         =   "生成表格"
      Height          =   375
      Left            =   10080
      TabIndex        =   2
      Top             =   8040
      Width           =   1455
   End
   Begin MSComDlg.CommonDialog CommonDg1 
      Left            =   0
      Top             =   0
      _ExtentX        =   847
      _ExtentY        =   847
      _Version        =   393216
      CancelError     =   -1  'True
   End
   Begin MSComctlLib.StatusBar StatusBar1 
      Align           =   2  'Align Bottom
      Height          =   375
      Left            =   0
      TabIndex        =   1
      Top             =   8790
      Width           =   11685
      _ExtentX        =   20611
      _ExtentY        =   661
      _Version        =   393216
      BeginProperty Panels {8E3867A5-8586-11D1-B16A-00C0F0283628} 
         NumPanels       =   4
         BeginProperty Panel1 {8E3867AB-8586-11D1-B16A-00C0F0283628} 
            Object.Width           =   6615
            MinWidth        =   6615
         EndProperty
         BeginProperty Panel2 {8E3867AB-8586-11D1-B16A-00C0F0283628} 
         EndProperty
         BeginProperty Panel3 {8E3867AB-8586-11D1-B16A-00C0F0283628} 
         EndProperty
         BeginProperty Panel4 {8E3867AB-8586-11D1-B16A-00C0F0283628} 
            AutoSize        =   1
            Object.Width           =   8334
         EndProperty
      EndProperty
   End
   Begin VB.PictureBox PictureMap 
      AutoRedraw      =   -1  'True
      Height          =   5055
      Left            =   120
      ScaleHeight     =   4995
      ScaleWidth      =   9435
      TabIndex        =   0
      Top             =   120
      Width           =   9495
   End
   Begin VB.Label Label2 
      BackColor       =   &H8000000E&
      Height          =   255
      Left            =   120
      TabIndex        =   31
      Top             =   8400
      Width           =   9255
   End
   Begin VB.Label Label1 
      BackColor       =   &H8000000E&
      Height          =   3255
      Left            =   9360
      TabIndex        =   30
      Top             =   5400
      Width           =   255
   End
   Begin VB.Line Line1 
      X1              =   0
      X2              =   776
      Y1              =   352
      Y2              =   352
   End
   Begin VB.Label lblStationNum 
      AutoSize        =   -1  'True
      Caption         =   "测站点个数"
      Height          =   195
      Left            =   10080
      TabIndex        =   3
      Top             =   7080
      Width           =   900
   End
   Begin VB.Menu MnuFile 
      Caption         =   "文件(&F)"
      Begin VB.Menu MnuNewDataFile 
         Caption         =   "新建数据文件..."
      End
      Begin VB.Menu MnuImportDataFile 
         Caption         =   "导入数据文件..."
      End
      Begin VB.Menu MnuInputData 
         Caption         =   "输入数据..."
      End
      Begin VB.Menu deilp 
         Caption         =   "-"
      End
      Begin VB.Menu MnuExit 
         Caption         =   "退出"
      End
   End
   Begin VB.Menu MnuSurvey 
      Caption         =   "测量(&S)"
      Begin VB.Menu MnuAngleHorizontal 
         Caption         =   "转折角方向"
         Begin VB.Menu MnuAngles 
            Caption         =   "右角"
            Checked         =   -1  'True
            Index           =   1
         End
         Begin VB.Menu MnuAngles 
            Caption         =   "左角"
            Index           =   2
         End
      End
      Begin VB.Menu puirfdew 
         Caption         =   "-"
      End
      Begin VB.Menu MnuTraverseCalculate 
         Caption         =   "导线计算"
      End
   End
   Begin VB.Menu MnuResultManager 
      Caption         =   "成果管理(&M)"
      Begin VB.Menu MnuPrecision 
         Caption         =   "测量精度..."
      End
      Begin VB.Menu MnuResultInfo 
         Caption         =   "成果表信息"
      End
      Begin VB.Menu MnuDistQuery 
         Caption         =   "边长查询"
      End
      Begin VB.Menu MnuCoQuery 
         Caption         =   "坐标查询"
      End
   End
   Begin VB.Menu MnuOutput 
      Caption         =   "输出(&O)"
      Begin VB.Menu MnuFigureCopy 
         Caption         =   "图形复制"
      End
      Begin VB.Menu TableCopy 
         Caption         =   "表格复制"
         Visible         =   0   'False
      End
      Begin VB.Menu MnuFigureSave 
         Caption         =   "图形保存..."
      End
      Begin VB.Menu TableSave 
         Caption         =   "表格保存..."
      End
      Begin VB.Menu MnuTableOutput 
         Caption         =   "表格输出..."
      End
   End
   Begin VB.Menu MnuTool 
      Caption         =   "工具(&T)"
      Begin VB.Menu MnuCoordinateChange 
         Caption         =   "坐标换算..."
      End
      Begin VB.Menu MnuAngleChange 
         Caption         =   "角度换算..."
      End
      Begin VB.Menu kuewwqafdg 
         Caption         =   "-"
      End
      Begin VB.Menu MnuOption 
         Caption         =   "选项..."
      End
   End
   Begin VB.Menu MnuHelp 
      Caption         =   "帮助(&H)"
      Begin VB.Menu MnuHelpContent 
         Caption         =   "内容..."
      End
      Begin VB.Menu MnuHelpAbout 
         Caption         =   "关于..."
      End
   End
End
Attribute VB_Name = "FrmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
'导线控制点的总点数
Dim PointNum As Integer


'已知数据
Dim StartAzimuth As Double
Dim EndAzimuth As Double
Dim Angles() As Double
Dim StartX As Double
Dim StartY As Double
Dim EndX As Double
Dim EndY As Double
Dim Distances() As Double

''最后得到的坐标
'Public ResultX() As Double
'Public ResultY() As Double

Dim ErrorSec As Double
Dim RectifyAngle() As Double
Dim Azimuth() As Double
Dim DeltaX() As Double
Dim DeltaY() As Double
Dim ErrorT As Double
Dim ErrorDist As Double

Dim RectifyDeltaX() As Double
Dim RectifyDeltaY() As Double

'是否进行过选项设置
Public IfOptionSet As Boolean

'是否进行过导线计算
Public IfCalculate As Boolean

'导线类型
'ClosedTraverse     '闭合导线
'ConnectingTraverse '附合导线
'OpenTraverse       '支导线
Public TraverseType As String

'转折角的方向(true为右角,false为左角)
Dim AngleDirection As Boolean


'*************************
'附合导线测量函数
'*************************
'
'1、原始数据输入(必选项)
'Angle()输入的原始转折角--注意:是以度分秒形式输入(12.5632表示12度56分32秒)
'Distance()输入的原始边长
'StartAzimuth输入的起始边坐标方位角,以度分秒形式输入
'EndAzimuth输入的终止边坐标方位角,以度分秒形式输入
'StartX为起算点X坐标
'StartY为起算点Y坐标
'EndX为起算点X坐标
'EndY为起算点Y坐标

'AngleDirection为转折角方向

'2、导线坐标输出(必选项)
'CoX()导线点X坐标
'CoY()导线点Y坐标

'3、中间过程输出
'ErrorSec为角度闭合差
'RectifyAngle()改正后转折角-用度分秒形式
'Azimuth()各边的坐标方位角
'DeltaX()X的增量
'DeltaY()Y的增量
'ErrorDist导线全长闭合差
'RectifyDeltaX()改正后X的增量
'RectifyDeltaY()改正后Y的增量
'T导线全长相对闭合差

Sub ConnectingTraverse(Angle() As Double, Distance() As Double, _
                    ByVal StartAzimuth As Double, ByVal StartX As Double, ByVal StartY As Double, _
                    ByVal EndAzimuth As Double, ByVal EndX As Double, ByVal EndY As Double, _
                    ByVal AngleDirection As Boolean, ByRef ErrorSec As Double, _
                    RectifyAngle() As Double, Azimuth() As Double, _
                    DeltaX() As Double, DeltaY() As Double, ByRef ErrorDist As Double, _
                    RectifyDeltaX() As Double, RectifyDeltaY() As Double, _
                    CoX() As Double, CoY() As Double, _
                    Optional ByRef ErrorT As Double)


'获取测站点个数
Dim PointNum As Integer
Dim PointDistance As Integer
Dim i As Integer
PointNum = UBound(Angle, 1) - LBound(Angle, 1) + 1
PointDistance = UBound(Distance, 1) - LBound(Distance, 1) + 1

If PointNum <> PointDistance Then
    MsgBox "输入转折角的个数与边长的个数不对应。", vbInformation, "提示"
    Exit Sub
End If


'一、角度闭合差的调整

Dim EndAzimuthSurvey As Double '终止边方位角的观测值
ReDim RectifyAngle(1 To PointNum)
ReDim Azimuth(1 To PointNum + 1)
ReDim DeltaX(1 To PointNum - 1)
ReDim DeltaY(1 To PointNum - 1)
ReDim RectifyDeltaX(1 To PointNum - 1)
ReDim RectifyDeltaY(1 To PointNum - 1)
ReDim CoX(1 To PointNum + 2)
ReDim CoY(1 To PointNum + 2)

'For i = 1 To PointNum
'    If AngleDirection = True Then '转折角为右角
'        Azimuth(i + 1) = Azimuth(i) + 180 - DMSToDegree(RectifyAngle(i))
'    Else
'        Azimuth(i + 1) = Azimuth(i) + DMSToDegree(RectifyAngle(i)) - 180
'    End If
'    If Azimuth(i + 1) > 360 Then Azimuth(i + 1) = Azimuth(i + 1) - 360
'    If Azimuth(i + 1) < 0 Then Azimuth(i + 1) = Azimuth(i + 1) + 360
'Next

EndAzimuthSurvey = DMSToDegree(StartAzimuth)
If AngleDirection = True Then '右角
    For i = 1 To PointNum
        EndAzimuthSurvey = EndAzimuthSurvey + 180 - DMSToDegree(Angle(i))
        If EndAzimuthSurvey > 360 Then EndAzimuthSurvey = EndAzimuthSurvey - 360
        If EndAzimuthSurvey < 0 Then EndAzimuthSurvey = EndAzimuthSurvey + 360
    Next
Else    '左角
    For i = 1 To PointNum
        EndAzimuthSurvey = EndAzimuthSurvey - 180 + DMSToDegree(Angle(i))
        If EndAzimuthSurvey > 360 Then EndAzimuthSurvey = EndAzimuthSurvey - 360
        If EndAzimuthSurvey < 0 Then EndAzimuthSurvey = EndAzimuthSurvey + 360
    Next

End If

'角度闭合差,用度(十进制)表示
'当用左角计算终止方位角时,改正数与ErrorAngle反号
'当用右角计算终止方位角时,改正数与ErrorAngle同号
Dim ErrorAngle As Double
If AngleDirection = True Then '右角
    ErrorAngle = EndAzimuthSurvey - DMSToDegree(EndAzimuth)
    ErrorAngle = -ErrorAngle
Else
    ErrorAngle = EndAzimuthSurvey - DMSToDegree(EndAzimuth)
End If
'度(十进制)转化为秒(十进制)
ErrorSec = DegreeToSecond(ErrorAngle)

'检核角度闭合差是否超出限差
If Abs(ErrorSec) > 60 * Sqr(PointNum) Then
    MsgBox "角度闭合差超限!", vbCritical, "错误"
    Exit Sub
End If


'处理角度闭合差分配时四舍五入产生误差的情况

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -