測点を折れ線状に配置し、各測点における隣接点間の交角(夾角)と距離を
測定して、測点の位置を定める測量をトラバース測量といいます。
一昔前までは距離はテープ、角度はトランシットという器械で測定していました
が、電子機器の発達にともない、距離を測定する器械として光波測距儀が普
及してきました。最近では光波測距儀とトランシットが一体になったトータルス
テーションという器械も使われています。
トラバース測量の種類は網の形や精度により、いろんな種類がありますが、
ここでは次の3つの種類について考えます。
(1)開放トラバース
基準点を出発して、最後の測点がどの基準点とも結合しない測量です。各測
点に誤差があってもその誤差を発見できないので、最も簡易な測量に限られ
ます。
(2)閉合トラバース
基準点を出発して、最後の測点が出発点に結合する測量です。最後の測点
が出発点に一致するという条件で測量の誤差がわかり、その誤差を各点に
補正することができます。しかし、図形的に相似な場合など、距離測定に誤差
があってもその誤差を発見できないという欠点があります。
(3)結合トラバース
基準点を出発して、最後の測点が出発点以外の他の基準点に結合する測量
です。これは、他の2つの測量より確実な測量です。
===================================================
プログラム例題23
トラバース測量の入力画面を作成せよ。
=========================================================
複雑なプログラムを作成する場合、
(1)入力画面のデザイン
(2)計算はどのようにするか
(3)どのように出力するか
などについて、考えなければなりません。ここでは(1)について、あまり欲を出
さず必要最小限の画面を作成します。
入力データは、初点名とその座標、初点方向角、終点名とその座標、終点方
向角、各測点名、各水平角、各距離とします。
また、データ数が多くなると途中で入力ミスをした場合、最初から入力し直す
のはたいへんですので、データの入力の修正ができるようにします。
<HTML>
<HEAD>
<TITLE>例題23</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 '測点数
'
'
'
'クリアボタンをクリック
'
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
'
'
'計算ボタンをクリック
'
Sub CAL_OnClick
Dim i
'
'初点データ
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
'
'
' *** 計算部 ***
' ここに、計算部を記述します
'
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>
実行画面は、つぎのようになります。
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 '測点数
入力中のデータは、各プロシージャで使われるので、グローバル変数にします。
変数 ii は、入力中の測点番号です。変数 n は、入力測点数で、測点名に"E"
が入力されたときの測点番号 -1 です。
'クリアボタンをクリック
'
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
クリアボタンをクリックしたとき、実行されます。テキストエリアに未入力の部分
があると、数学関数にその未入力のテキストのデータを渡すとエラーが発生す
るので、各テキストエリアと変数を初期化します。数値の場合 0 を、文字の場
合ヌル "" を代入します。また、測点数は 50 個まで(終了判定の "E" を除く
と 49 )です。
入力開始のときは、まず、クリアボタンをクリックして初期化します。初期化しな
いで、前進ボタンなどをクリックすると、エラーになります。
'後退ボタン(<)をクリック
'
Sub
BCK_OnClick
na(ii)
= document.Form1.NA.value @
bt(ii)
= CDbl(document.Form1.BT.value) A
ds(ii) = CDbl(document.Form1.DS.value) B
'
ii =
ii-1 C
If ii
<= 0 Then ii=1 D
document.Form1.NO.value
= ii E
document.Form1.NA.value
= na(ii) F
document.Form1.BT.value
= bt(ii) G
document.Form1.DS.value
= ds(ii) H
End
Sub
後退ボタンをクリックしたとき、実行されます。
@〜Bで、現在表示されているデータを変数にセットします。 na(ii) は測点
名、 bt(ii) は夾角、 ds(ii) は距離です。
Cは、測点番号を前に戻します。
Dは、測点番号に0以下はありえないので、最小の番号を1にします。
E〜Hで、前の観測データを表示します。
次の、前進ボタンをクリックしたときの処理もCとDの部分以外は同じです。
'計算ボタンをクリック
'
Sub
CAL_OnClick
Dim i
'
'初点データ @
an = document.Form1.AN.value
xa = CDbl(document.Form1.XA.value)
ya = CDbl(document.Form1.YA.value)
alpa = CDbl(document.Form1.AA.value)
'
'終点データ A
bn = document.Form1.BN.value
xb = CDbl(document.Form1.XB.value)
yb = CDbl(document.Form1.YB.value)
alpb = CDbl(document.Form1.AB.value)
'
'測点データ B
na(ii)
= document.Form1.NA.value
bt(ii)
= CDbl(document.Form1.BT.value)
ds(ii) = CDbl(document.Form1.DS.value)
'
'測点数のカウント C
n = 0
For
i = 1 To 50
If na(i)="E" Then Exit For D
n = n +
1
Next
'
'
'
' *** 計算部 *** E
' ここに、計算部を記述します
'
End
Sub
計算ボタンをクリックしたとき、実行されます。
@からBは、画面上のデータを変数に読み込みます。
Cの部分は、測点名が "E" になる前までの測点数をカウントします。
Dは、na(i) が "E" のとき、For 〜 Next のループを抜け出ます。
E以下に、計算と出力のルーチンを記述します。
<FORM
NAME="Form1">
・
・
・
</FORM>
入力画面(フォーム)を作成するブロックです。 <HR> タグは、水平線を入れ
るタグで、終了タグはいりません。
タグの前後のスペースや、改行タグ <BR> を入れる箇所を調整して、見やす
い画面を作ってみて下さい。