13.4 閉合トラバース          [もくじへ] [トップページへ] [前ページへ]

===================================================

プログラム例題25

閉合トラバースのプログラムを作成せよ。

=========================================================

考え方

        

観測データには、いろいろな原因による誤差が含まれます。したがって、それ

から求められた方向角や座標には当然誤差を生じます。閉合トラバースが開

放トラバースと違う点は、この誤差を補正するか、補正しないかという点です。

閉合トラバースでは、方向角の誤差と、座標の誤差の2つに分けて処理します。

(1)方向角の誤差(閉合差)の処理

開放トラバースと同じように、点まで方向角を計算します。

   α1 = αA + β1       ( α1 が360°を超えたら360°を減ずる )

   αn-1 = αn-2 + βn-1 + 180° αn が360°を超えたら360°を減ずる )

閉合トラバースでは、さらに初点(点)に戻り、 βn を測定します。

そして、

   αn = αn-1 + βn + 180°

により、 αn を求め、αA との閉合差 ω を求めます。ω を測角数 n で除し

て各観測角に補正します。

もし閉合差が整除できない場合、つぎのように補正します。

        ω = 9″を n = 7 で配布する場合

        ω/n ≒ 1.3″

        累加補正数     各角への補正数

         1.3 ≒ 1              = 1″    

         2.6 ≒ 3         3 - 1 = 2″

         3.9 ≒ 4         4 - 3 = 1″

         5.2 ≒ 5         5 - 4 = 1″

         6.5 ≒ 7         7 - 5 = 2″

         7.8 ≒ 8         8 - 7 = 1″

         9.1 ≒ 9         9 - 8 = 1″

 

このようにして、観測角の補正をしたあと、ふたたび方向角の計算をやり直し

ます。

(2)座標の誤差(閉合差)の処理

方向角の補正計算の後、各点の座標を次式により計算します。

   Xi = Xi-1 + Sicos(αi)

   Yi = Yi-1 + Sisin(αi)

最後の測点の座標と、初点座標との座標閉合差を求めます。

   Ex = Xn-1 - XA

   Ey = Yn-1 - YA

この座標閉合差を、各測線長(観測距離)に比例して配布します。

   X座標に対する補正数 = Ex × Si /ΣS

   Y座標に対する補正数 = Ey × Si /ΣS

この場合の端数は、最後の点に配布します。

このような、座標に対する閉合差の配布法をコンパス法といいます。

閉合差 ds は、

   

で求められます。

また、精度 h は、

    h = ds / ΣS

で求められます。

 

 

プログラム

 

<HTML>
<HEAD>
   <TITLE>例題25</TITLE>

<SCRIPT LANGUAGE="VBScript">
<!--
'
        Dim an, xa, ya, alpa                          '初点名,X,Y,方向角
        Dim bn, xb, yb, alpb                          '終点名,X,Y,方向角
        Dim ii
        ii = 1                                        '測点番号
        Dim na(50), bt(50), ds(50)                    '測点名,夾角,距離
        Dim n                                         '測点数
'
        Dim ai(50), x(50), y(50)                      '方向角,X座標,Y座標
        Dim dx(50), dy(50)                            'X座標差,Y座標差
        Dim PI
        PI = 3.141592653589793
'
        Dim w                                         '測角誤差
        Dim et(50)                                    '夾角への補正数
        Dim sex, sey                                  'X、Y座標誤差
        Dim delts, ss                                 '閉合差、距離合計
        Dim ex(50), ey(50)                            'X、Y座標への補正数
        Dim seido                                     '精度
'
'
                'クリアボタンをクリック
'
        Sub INI_OnClick
                Dim i
                '
                document.Form1.AN.value = ""
                document.Form1.XA.value = 0
                document.Form1.YA.value = 0
                document.Form1.AA.value = 0
'
                '
                document.Form1.BN.value = ""
                document.Form1.XB.value = 0
                document.Form1.YB.value = 0
                document.Form1.AB.value = 0
'
                ii = 1
                For i=1 To 50
                       na(i) = ""
                       bt(i) = 0
                       ds(i) = 0
                Next
'
                document.Form1.NO.value = ii
                document.Form1.NA.value = na(ii)
                document.Form1.BT.value = bt(ii)
                document.Form1.DS.value = ds(ii)
        End Sub
'
'
                '後退ボタン(<)をクリック
'
        Sub BCK_OnClick
                na(ii) = document.Form1.NA.value
                bt(ii) = CDbl(document.Form1.BT.value)
                ds(ii) = CDbl(document.Form1.DS.value)
'
                ii = ii-1
                If ii <= 0 Then ii=1
                document.Form1.NO.value = ii
                document.Form1.NA.value = na(ii)
                document.Form1.BT.value = bt(ii)
                document.Form1.DS.value = ds(ii)
        End Sub
'
'
                '前進ボタン(>)をクリック
'
        Sub FRD_OnClick
                na(ii) = document.Form1.NA.value
                bt(ii) = CDbl(document.Form1.BT.value)
                ds(ii) = CDbl(document.Form1.DS.value)
'
                ii = ii+1
                If ii > 50 Then ii=50
                document.Form1.NO.value = ii
                document.Form1.NA.value = na(ii)
                document.Form1.BT.value = bt(ii)
                document.Form1.DS.value = ds(ii)
        End Sub
'
'
'  角度の変換(度を秒に)
'
        Function Dobyo( x )
                Dim d, f, b
                d = Int(x)
                f = Int((x - d)*100)
                b = Int(((x - d)*100 - f)*100 + 0.5)
                Dobyo = d*3600 + f*60 + b
        End Function
'
'
'  角度の変換(秒を度分秒に)
'
        Function Byodfb( x, doo, fun, byo )
       IF x<0 Then x = x + 1296000
                doo = Int(x/3600)
                fun = Int((x - doo*3600)/60)
                byo = x - doo*3600 - fun*60
                IF byo<0 Then byo = 0
        End Function
'
'
'  四捨五入
'
        Function Rund(x,y)
                Dim sg
                IF x>=0 Then sg = 1 Else sg =-1
                Rund = sg*Int(abs(x)*10^y + 0.5)/10^y
        End Function
'
'
                '計算ボタンをクリック
'
        Sub CAL_OnClick
                Dim i
                Dim ew, sg                           '測角誤差w/n、その符号
                Dim exs, eys                         'X、Yの累加補正数
'
                '初点データ
                an = document.Form1.AN.value
                xa = CDbl(document.Form1.XA.value)
                ya = CDbl(document.Form1.YA.value)
                alpa = CDbl(document.Form1.AA.value)
'
                '終点データ
                bn = document.Form1.BN.value
                xb = CDbl(document.Form1.XB.value)
                yb = CDbl(document.Form1.YB.value)
                alpb = CDbl(document.Form1.AB.value)
'
                '測点データ
                na(ii) = document.Form1.NA.value
                bt(ii) = CDbl(document.Form1.BT.value)
                ds(ii) = CDbl(document.Form1.DS.value)
'
                '測点数のカウント
                n = 0
                For i = 1 To 50
                        If na(i)="E" Then Exit For
                             n = n + 1
                Next
'
'
'   *** 計算部 ***
'   角度を秒に変換
                alpa = Dobyo(alpa)
                For i = 1 To n
                        bt(i) = Dobyo(bt(i))
                Next
'
                ai(1) = alpa + bt(1)
                Do While ai(1)>=1296000
                      ai(1) = ai(1) - 1296000
                Loop
                For i = 2 To n
                        ai(i) = ai(i-1) + bt(i) + 648000
                        Do While ai(i)>=1296000
                              ai(i) = ai(i) - 1296000
                        Loop
                Next
'
                w = ai(n) - alpa
                ew = w/n
                IF ew>=0 Then sg = 1 Else sg = -1
                ew = abs(ew)
                For i = 1 To n
                        sewb = Int(ew*(i-1)+0.5)               '前の累加補正数
                        sewf = Int(ew*i+0.5)                   '後の累加補正数
                        et(i) = sg*(sewf - sewb)
                Next
                ai(1) = alpa + bt(1) - et(1)
                Do While ai(1)>=1296000
                      ai(1) = ai(1) - 1296000
                Loop
                For i = 2 To n
                        ai(i) = ai(i-1) + bt(i)- et(i) + 648000
                        Do While ai(i)>=1296000
                              ai(i) = ai(i) - 1296000
                        Loop
                Next
'
                ss = 0
                For i = 1 To n-1
                        ss = ss + ds(i)
                Next
'
                dx(1) = Rund(ds(1)*cos(ai(1)/648000*PI),3)
                dy(1) = Rund(ds(1)*sin(ai(1)/648000*PI),3)
                x(1) = xa + dx(1)
                y(1) = ya + dy(1)
                For i = 2 To n-1
                        dx(i) = Rund(ds(i)*cos(ai(i)/648000*PI),3)
                        dy(i) = Rund(ds(i)*sin(ai(i)/648000*PI),3)
                        x(i) = x(i-1) + dx(i)
                        y(i) = y(i-1) + dy(i)
                Next
'
                sex = Rund(x(n-1) - xa,3)
                sey = Rund(y(n-1) - ya,3)
                exs = 0
                eys = 0
                ex(1) = Rund(sex*ds(1)/ss,3)
                exs = exs + ex(1)
                ey(1) = Rund(sey*ds(1)/ss,3)
                eys = eys + ey(1)
                x(1) = xa + dx(1) - ex(1)
                y(1) = ya + dy(1) - ey(1)
                For i = 2 To n-2
                        ex(i) = Rund(sex*ds(i)/ss,3)
                        exs = exs + ex(i)
                        ey(i) = Rund(sey*ds(i)/ss,3)
                        eys = eys + ey(i)
                        x(i) = x(i-1) + dx(i) - ex(i)
                        y(i) = y(i-1) + dy(i) - ey(i)
                Next
                ex(n-1) = Rund(sex - exs,3)
                ey(n-1) = Rund(sey - eys,3)
                x(n-1) = x(n-2) + dx(n-1) - ex(n-1)
                y(n-1) = y(n-2) + dy(n-1) - ey(n-1)
'
                delts=Rund(Sqr(sex^2 + sey^2),3)
                IF delts<>0 Then
                      seido=Rund(ss/delts,0)
                Else
                      seido=0
                End IF
                Heigo
'
        End Sub
'
'
                '閉合トラバース計算結果出力
'
Sub Heigo
        Dim i, r
'
        document.write "<CENTER>","*** 閉合トラバース計算 ***","</CENTER><BR>"
'
        document.write"<CENTER><TABLE BORDER='1'>"
        document.write"<TR ALIGN='CENTER'><TD ALIGN='left'>","測点 ","</TD>"
        document.write"<TD ALIGN='right'>","   夾角  ","</TD>"
        document.write"<TD ALIGN='right'>","  方向角  ","</TD>"
        document.write"<TD ALIGN='right'>","  距離  ","</TD>"
        document.write"<TD ALIGN='right'>","   X   ","</TD>"
        document.write"<TD ALIGN='right'>","   Y   ","</TD></TR>"
        document.write"<TR ALIGN='CENTER'><TD ALIGN='center' ></TD>"
        document.write"<TD ALIGN='right'>","   β  ","</TD>"
        document.write"<TD ALIGN='right'>","   α  ","</TD>"
        document.write"<TD ALIGN='right'>","   S  ","</TD>"
        document.write"<TD ALIGN='right'>","   ΔX   ","</TD>"
        document.write"<TD ALIGN='right'>","   ΔY   ","</TD></TR>"
        document.write"<TR ALIGN='CENTER'><TD ALIGN='center' ></TD>"
        document.write"<TD ALIGN='right'>","   δβ  ","</TD>"
        document.write"<TD ALIGN='right'>"," ","</TD>"
        document.write"<TD ALIGN='right'>"," ","</TD>"
        document.write"<TD ALIGN='right'>","   δX   ","</TD>"
        document.write"<TD ALIGN='right'>","   δY   ","</TD></TR>"
'
        '1行目
        document.write"<TR ALIGN='CENTER'><TD ALIGN='left' >",an,"</TD>"
        r = Byodfb(bt(1),doo,fun,byo)
        document.write"<TD ALIGN='right'>",doo & "-" & fun & "-" & byo,"</TD>"
        r = Byodfb(alpa,doo,fun,byo)
        document.write"<TD ALIGN='right'>",doo & "-" & fun & "-" & byo,"</TD>"
        document.write"<TD ALIGN='right'>"," ","</TD>"
        document.write"<TD ALIGN='right'>",xa,"</TD>"
        document.write"<TD ALIGN='right'>",ya,"</TD></TR>"
        '2行目
        document.write"<TR ALIGN='CENTER'><TD ALIGN='left' ></TD>"
        document.write"<TD ALIGN='right'>",-et(1),"</TD>"
        r = Byodfb(ai(1),doo,fun,byo)
        document.write"<TD ALIGN='right'>",doo & "-" & fun & "-" & byo,"</TD>"
        document.write"<TD ALIGN='right'>",ds(1),"</TD>"
        document.write"<TD ALIGN='right'>",dx(1),"</TD>"
        document.write"<TD ALIGN='right'>",dy(1),"</TD></TR>"
        '3行目
        document.write"<TR ALIGN='CENTER'><TD ALIGN='left' ></TD>"
        document.write"<TD ALIGN='right'>"," ","</TD>"
        document.write"<TD ALIGN='right'>"," ","</TD>"
        document.write"<TD ALIGN='right'>"," ","</TD>"
        document.write"<TD ALIGN='right'>",-ex(1),"</TD>"
        document.write"<TD ALIGN='right'>",-ey(1),"</TD></TR>"
        'i
        For i=1 to n-2
                'iの1行目
                document.write"<TR ALIGN='CENTER'><TD ALIGN='left' >",na(i),"</TD>"
                r = Byodfb(bt(i+1),doo,fun,byo)
                document.write"<TD ALIGN='right'>",doo & "-" & fun & "-" & byo,"</TD>"
                document.write"<TD ALIGN='right'>"," ","</TD>"
                document.write"<TD ALIGN='right'>"," ","</TD>"
                document.write"<TD ALIGN='right'>",x(i),"</TD>"
                document.write"<TD ALIGN='right'>",y(i),"</TD></TR>"
                'iの2行目
                document.write"<TR ALIGN='CENTER'><TD ALIGN='left' ></TD>"
                document.write"<TD ALIGN='right'>",-et(i+1),"</TD>"
                r = Byodfb(ai(i+1),doo,fun,byo)
                document.write"<TD ALIGN='right'>",doo & "-" & fun & "-" & byo,"</TD>"
                document.write"<TD ALIGN='right'>",ds(i+1),"</TD>"
                document.write"<TD ALIGN='right'>",dx(i+1),"</TD>"
                document.write"<TD ALIGN='right'>",dy(i+1),"</TD></TR>"
                'iの3行目
                document.write"<TR ALIGN='CENTER'><TD ALIGN='left' ></TD>"
                document.write"<TD ALIGN='right'>"," ","</TD>"
                document.write"<TD ALIGN='right'>"," ","</TD>"
                document.write"<TD ALIGN='right'>"," ","</TD>"
                document.write"<TD ALIGN='right'>",-ex(i+1),"</TD>"
                document.write"<TD ALIGN='right'>",-ey(i+1),"</TD></TR>"
        Next
        'n-1行目
        document.write"<TR ALIGN='CENTER'><TD ALIGN='left' >",na(n-1),"</TD>"
        r = Byodfb(bt(n),doo,fun,byo)
        document.write"<TD ALIGN='right'>",doo & "-" & fun & "-" & byo,"</TD>"
        document.write"<TD ALIGN='right'>"," ","</TD>"
        document.write"<TD ALIGN='right'>"," ","</TD>"
        document.write"<TD ALIGN='right'>",x(n-1),"</TD>"
        document.write"<TD ALIGN='right'>",y(n-1),"</TD></TR>"
        'n行目
        document.write"<TR ALIGN='CENTER'><TD ALIGN='left' ></TD>"
        document.write"<TD ALIGN='right'>",-et(n),"</TD>"
        r = Byodfb(ai(n),doo,fun,byo)
        document.write"<TD ALIGN='right'>",doo & "-" & fun & "-" & byo,"</TD>"
        document.write"<TD ALIGN='right'>"," ","</TD>"
        document.write"<TD ALIGN='right'>"," ","</TD>"
        document.write"<TD ALIGN='right'>"," ","</TD></TR>"
        'n+1行目
        document.write"<TR ALIGN='CENTER'><TD ALIGN='right' ></TD></TR>"
        'n+2行目
        document.write"<TR ALIGN='CENTER'><TD ALIGN='right' >","測角誤差 =","</TD>"
        document.write"<TD ALIGN='right'>",w,"</TD>"
        document.write"<TD ALIGN='right'>","ΔX=","</TD>"
        document.write"<TD ALIGN='right'>",sex,"</TD>"
        document.write"<TD ALIGN='right'>","ΔY=","</TD>"
        document.write"<TD ALIGN='right'>",sey,"</TD></TR>"
        'n+3行目
        document.write"<TR ALIGN='CENTER'><TD ALIGN='right' >","ΣS =","</TD>"
        document.write"<TD ALIGN='right'>",ss,"</TD>"
        document.write"<TD ALIGN='right'>","閉合差 =","</TD>"
        document.write"<TD ALIGN='right'>",delts,"</TD>"
        document.write"<TD ALIGN='right'>","精度 = ","</TD>"
        document.write"<TD ALIGN='right'>","1/",seido,"</TD></TR>"
        document.write"</TABLE>"
End Sub
'
-->
</SCRIPT>

</HEAD>


<BODY>


<FORM NAME="Form1">
 *** トラバース計算 ***<BR>
<BR>
初点名= <INPUT TYPE="text" NAME="AN" size=15>
   XA= <INPUT TYPE="text" NAME="XA" size=15>
   YA= <INPUT TYPE="text" NAME="YA" size=15>
  αA= <INPUT TYPE="text" NAME="AA" size=15>
<BR>
終点名= <INPUT TYPE="text" NAME="BN" size=15>
   XB= <INPUT TYPE="text" NAME="XB" size=15>
   YB= <INPUT TYPE="text" NAME="YB" size=15>
  αB= <INPUT TYPE="text" NAME="AB" size=15>
<BR>
  番号= <INPUT TYPE="text" NAME="NO" size=15>
  点名= <INPUT TYPE="text" NAME="NA" size=15>
  測角= <INPUT TYPE="text" NAME="BT" size=15>
  距離= <INPUT TYPE="text" NAME="DS" size=15>
<BR>
<BR>
      <INPUT TYPE="button" NAME="BCK" VALUE=" < ">
<INPUT TYPE="button" NAME="FRD" VALUE=" > ">
      <INPUT TYPE="button" NAME="INI" VALUE="クリア">
<INPUT TYPE="button" NAME="CAL" VALUE="計 算">
<HR>

</FORM>



</BODY>
</HTML>

 

 

入力データと実行結果

 

        

         XA=100.00m, YA=100.00m, αA=300°0′0″
        点名=1, β1=180°0′ 0″,   S1=100.00m
        点名=2, β2= 60°0′ 0″,   S2=100.00m
        点名=A, β3= 60°0′ 0″,   S3=100.00m
        点名=B, β4=240°0′20″

     ※4点目の入力は、点名= B、夾角= 240.0020、距離= なし

     ※必ずクリアボタンをクリックしてから入力します。

     ※入力終了は、点名に E を入力して、計算ボタンをクリックします。

 

 

 

プログラムの説明

        Dim w                                                        '測角誤差
        
Dim et(50)                                               '夾角への補正数
        Dim sex, sey                                           
'X、Y座標誤差
        Dim delts, ss                                           
'閉合差、距離合計
        
Dim ex(50), ey(50)                                'X、Y座標への補正数
        Dim seido                                                 
'精度

開放トラバースのプログラムに、追加したグローバル変数です。計算結果出

力のプロシージャ Heigo でも使うので、グローバル変数にします。

 

        Sub CAL_OnClick
                
Dim i, r
                Dim ew, sg                             '
測角誤差w/n、その符号  @
                Dim exs, eys                         
'X、Yの累加補正数  A
'
                '初点データ
                
an = document.Form1.AN.value
                
xa = CDbl(document.Form1.XA.value)
                
ya = CDbl(document.Form1.YA.value)
                
alpa = CDbl(document.Form1.AA.value)
'
                '終点データ
                
bn = document.Form1.BN.value
                
xb = CDbl(document.Form1.XB.value)
                
yb = CDbl(document.Form1.YB.value)
                
alpb = CDbl(document.Form1.AB.value)
'
                '測点データ
                
na(ii) = document.Form1.NA.value
                bt(ii) = CDbl(document.Form1.BT.value)
                
ds(ii) = CDbl(document.Form1.DS.value)
'
                '測点数のカウント
                
n = 0
                For i = 1 To 50
                        
If na(i)="E" Then Exit For
                             
n = n + 1
                
Next
'
'
'   *** 計算部 ***
'   角度を秒に変換
                
alpa = Dobyo(alpa)
                For i = 1 To n
                        
bt(i) = Dobyo(bt(i))
                
Next
'
                
ai(1) = alpa + bt(1)
                
Do While ai(1)>=1296000
                      ai(1) = ai(1) - 1296000
                
Loop
                For i = 2 To n
                        ai(i) = ai(i-1) + bt(i) + 648000
                        
Do While ai(i)>=1296000
                              ai(i) = ai(i) - 1296000
                        
Loop
                
Next
'
                
w = ai(n) - alpa  
B
                ew = w/n  
C
                
IF ew>=0 Then sg = 1 Else sg = -1  D
                
ew = abs(ew)  E
                For i = 1 To n  
F
                        
sewb = Int(ew*(i-1)+0.5)               '前の累加補正数
                        
sewf = Int(ew*i+0.5)                       '後の累加補正数
                        et(i) = sg*(sewf - sewb)
                
Next
                ai(1) = alpa + bt(1) - et(1)  
G
                
Do While ai(1)>=1296000
                      ai(1) = ai(1) - 1296000
                
Loop
                For i = 2 To n  
H
                        ai(i) = ai(i-1) + bt(i)- et(i) + 648000
                        
Do While ai(i)>=1296000
                              ai(i) = ai(i) - 1296000
                        
Loop
                
Next
'
                
ss = 0
                For i = 1 To n-1  
I
                        ss = ss + ds(i)
                
Next
'
                
dx(1) = Rund(ds(1)*cos(ai(1)/648000*PI),3)  J
                d
y(1) = Rund(ds(1)*sin(ai(1)/648000*PI),3)
                
x(1) = xa + dx(1)
                
y(1) = ya + dy(1)
                For i = 2 To n-1
                        dx(i) = Rund(ds(i)*cos(ai(i)/648000*PI),3)
                        d
y(i) = Rund(ds(i)*sin(ai(i)/648000*PI),3)
                        x(i) = x(i-1) + dx(i)
                        
y(i) = y(i-1) + dy(i)
                
Next  K
'
                
sex = Rund(x(n-1) - xa,3)  L
                
sey = Rund(y(n-1) - ya,3)  M
                
exs = 0
                
eys = 0
                
ex(1) = Rund(sex*ds(1)/ss,3)  N
                exs = exs +
ex(1)
                
ey(1) = Rund(sey*ds(1)/ss,3)
                
eys = eys + ey(1)
                x(1) = xa + dx(1) - ex(1)
                
y(1) = ya + dy(1) - ey(1)
                For i = 2 To n-2
                        
ex(i) = Rund(sex*ds(i)/ss,3)
                        exs = exs +
ex(i)
                        
ey(i) = Rund(sey*ds(i)/ss,3)
                        
eys = eys + ey(i)
                        x(i) = x(i-1) + dx(i) - ex(i)
                        
y(i) = y(i-1) + dy(i) - ey(i)
                
Next
                
ex(n-1) = Rund(sex - exs,3)
                
ey(n-1) = Rund(sey - eys,3)
                x(n-1) = x(n-2) + dx(n-1) - ex(n-1)
                
y(n-1) = y(n-2) + dy(n-1) - ey(n-1)  O
'
                
delts=Rund(Sqr(sex^2 + sey^2),3)  P
                
IF delts<>0 Then
                      seido=Rund(ss/delts,0)  Q
                Else
                      seido=0
                End IF
                
Heigo  R
'
        
End Sub

計算の中心になる部分です。

@A  開放トラバースに追加したローカル変数です。このプロシージャの

中だけしか使わない変数ですから、プロシージャ内で宣言するローカル変数

にします。

B    これより前の部分は、開放トラバースと同じです。閉合トラバースで

は、「終点の方向角と初点の方向角が同じ」という条件がありますので、その

差をとり測角誤差を求めます。

C    1点当たりの測角誤差を求めています。

DE  測角誤差の符号を取り、その絶対値を求めます。四捨五入しながら、

各点に配布する誤差(これを補正値といいます)を求めるので、プラスの値で

計算し後で元の符号に戻すようにしてあります。

F    このループで各点に配布する補正値を求めます。その点までの累加

補正数から、1つ前までの累加補正数を減じて、その点に対する配布補正値

を求めます。

GH  このループで、方向角を補正します。

I    距離の合計を求めます。ss = 0 のように、まず合計する変数をクリ

アした方が安全です。

JK 開放トラバースと同じで補正する前のXY座標を求めます。

LM  閉合トラバースでは、「終点の座標と初点の座標が同じ」という条件

がありますので、その差をとり閉合差を求めます。ここで、終点の番号は n-1

である点に注意してください。

NO  各座標に対する補正値を計算しながら、補正した座標を求めます。

変数 exseys は、それぞれ最後のX座標とY座標の1つ前の点までの配

布量を合計する変数です。これを求めると、最後の点にのこりの補正値をす

べて配布できます。

P    閉合差を求めます。

Q    精度の分母数を求めます。

R    計算結果出力のプロシージャに飛びます。

 

Sub Heigo
  ・
  ・
  ・
End Sub

計算結果出力のプロシージャです。開放トラバースのプログラムに角度と座

標の補正値を追加しています。また、測角誤差、ΔX、ΔY、ΣS、閉合差、

精度を表示できるように、プログラムを追加してあります。

 

 


[もくじへ] [トップページへ]

 りょうかんのアドバイス

プログラミングが初めてという方には、閉合トラバースはちょっと難しくなりまし

たね。角度誤差とXY座標誤差の補正を取り入れるだけで、こんなに複雑にな

りました。

「プログラムなんて、やーめた。りょうかんは、よくこんなに難しいプログラムが

作れるもんだ。おれには無理だ。」なんて言わないでくださいね。

実は、このプログラムを作るのに3日かかりました。ずぅーと考え続けて3日で

す。測点の番号と観測データとの関係がややっこしくて、何回も図を画いてみ

たり、プログラムを書き換えてみたり、そりゃー大変な無駄な?苦労をしたの

ですよ。最初からスラスラとできたのではないのです。

難しい数学の問題が解けなかったとき、参考書の似たような問題の解説を見

ますね。しかし、またその解説が分からなくてイライラするということがありませ

んでしたか。りょうかんのプログラムは、初めてプログラムを作る人にとって、

そんな参考書の解説のように見えるかもしれません。でも、そこであきらめたら

いけません。では、どうするか? 自分で、最初から作ってみるのです。動くよ

うになるまで。

一度自分の力で作ってしまうと、あとは面白くなってプログラム作りにはまるは

ずです。こんなに楽しいあそびがあったのかと・・・。がんばってくださいね。

 

さて、ここでプログラムを作る時、りょうかんが気を付けていることを2、3挙げた

いと思います。

1.データは、何回も入力するのはたいへんなので、最初は代入文にする。完

全に動くのを確めたら、入力フォームを接続する。

2.最初から何でも欲張らない。あれも、これもできるようにと欲を出すとプログ

ラミングの効率が悪くなる。

3.コメント(注釈)を多く入れる。後で見た時、分かるように。

4.いろんなデータでチェックする。面倒がらずに。

   ・
   ・
   ・

次回は、『結合トラバース』の予定です。(10月5日ごろ)

この講座に対する、ご意見やご要望はメール掲示板・伝言板でお願

いします。

『VBScriptによる測量計算プログラミング入門』 

講師 大愚良寛


[もくじへ] [トップページへ] [次ページへ]