13.トラバース測量            [もくじへ] [トップページへ]

13.1 トラバース測量とは

測点を折れ線状に配置し、各測点における隣接点間の交角(夾角)と距離を

測定して、測点の位置を定める測量をトラバース測量といいます。

一昔前までは距離はテープ、角度はトランシットという器械で測定していました

が、電子機器の発達にともない、距離を測定する器械として光波測距儀が普

及してきました。最近では光波測距儀とトランシットが一体になったトータルス

テーションという器械も使われています。

トラバース測量の種類は網の形や精度により、いろんな種類がありますが、

ここでは次の3つの種類について考えます。

(1)開放トラバース

基準点を出発して、最後の測点がどの基準点とも結合しない測量です。各測

点に誤差があってもその誤差を発見できないので、最も簡易な測量に限られ

ます。

      

(2)閉合トラバース

基準点を出発して、最後の測点が出発点に結合する測量です。最後の測点

が出発点に一致するという条件で測量の誤差がわかり、その誤差を各点に

補正することができます。しかし、図形的に相似な場合など、距離測定に誤差

があってもその誤差を発見できないという欠点があります。

     

(3)結合トラバース

基準点を出発して、最後の測点が出発点以外の他の基準点に結合する測量

です。これは、他の2つの測量より確実な測量です。

     

 

 


13.2 データ入力画面          [もくじへ] [トップページへ]

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

プログラム例題23

トラバース測量の入力画面を作成せよ。

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

複雑なプログラムを作成する場合、

(1)入力画面のデザイン

(2)計算はどのようにするか

(3)どのように出力するか

などについて、考えなければなりません。ここでは(1)について、あまり欲を出

さず必要最小限の画面を作成します。

入力データは、初点名とその座標、初点方向角、終点名とその座標、終点方

向角、各測点名、各水平角、各距離とします。

また、データ数が多くなると途中で入力ミスをした場合、最初から入力し直す

のはたいへんですので、データの入力の修正ができるようにします。

 

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

<SCRIPT LANGUAGE="JavaScript">
<!--
//
        
var an, xa, ya, alpa;                                // 初点名,X,Y,方向角
        
var bn, xb, yb, alpb;                                // 終点名,X,Y,方向角
        
var ii;
        
ii = 1;                                                           // 測点番号
        
na = new Array(50);                                // 測点名,夾角,距離
        
bt = new Array(50);                                 // 測点名,夾角,距離
        
ds = new Array(50);                                // 測点名,夾角,距離
        
var n;                                                          // 測点数
//
//
//
                
// クリアボタンをクリック
//
        function onINI( ) {
                
var 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; i<=50; i++) {
                       na[i] = "";
                       bt[i] = 0;
                       
ds[i] = 0;
                
}
//
                document.Form1.NO.value = ii;
                document.Form1.NA.value = na[ii];
                document.Form1.BT.value = bt[ii];
                document.Form1.DS.value = ds[ii];
        
}
//
//
                
// 後退ボタン(<)をクリック
//
        function onBCK( ) {
                na[ii] = document.Form1.NA.value;
                bt[ii] = eval(document.Form1.BT.value);
                
ds[ii] = eval(document.Form1.DS.value);
//
                
ii--;
                
if (ii <= 0) 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];
        
}
//
//
                
// 前進ボタン(>)をクリック
//
        
function onFRD( ) {
                na[ii] = document.Form1.NA.value;
                bt[ii] = eval(document.Form1.BT.value);
                
ds[ii] = eval(document.Form1.DS.value);
//
                
ii++;
                
if (ii > 50) 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];
        
}
//
//
                
// 計算ボタンをクリック
//
        function onCAL( ) {
                
var i;
//
                // 初点データ
                
an = document.Form1.AN.value;
                
xa = eval(document.Form1.XA.value);
                
ya = eval(document.Form1.YA.value);
                
alpa = eval(document.Form1.AA.value);
//
                
// 終点データ
                
bn = document.Form1.BN.value;
                
xb = eval(document.Form1.XB.value);
                
yb = eval(document.Form1.YB.value);
                
alpb = eval(document.Form1.AB.value);
//
                
// 測点データ
                na[ii] = document.Form1.NA.value;
                bt[ii] = eval(document.Form1.BT.value);
                
ds[ii] = eval(document.Form1.DS.value);
//
                
// 測点数のカウント
                
n = 0;
                
for (i = 1; i<=50; i++) {
                        
if (na[i] == "E") break;
                             
n++;
                
}
//
//
//   *** 計算部 ***
//   ここに、計算部を記述します
//
        
}
//
// -->
</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=" < " onClick="onBCK( )">
<INPUT TYPE="button" NAME="FRD" VALUE=" > " onClick="onFRD( )">
      <INPUT TYPE="button" NAME="INI" VALUE="クリア" onClick="onINI( )">
<INPUT TYPE="button" NAME="CAL" VALUE="計 算" onClick="onCAL( )">
<HR>

</FORM>



</BODY>
</HTML>

 

実行画面は、つぎのようになります。

 

 

 

        var an, xa, ya, alpa;                                // 初点名,X,Y,方向角
        
var bn, xb, yb, alpb;                                // 終点名,X,Y,方向角
        
var ii;
        
ii = 1;                                                           // 測点番号
        
na = new Array(50);                                // 測点名,夾角,距離
        
bt = new Array(50);                                 // 測点名,夾角,距離
        
ds = new Array(50);                                // 測点名,夾角,距離
        
var n;                                                          // 測点数

入力中のデータは、各プロシージャで使われるので、グローバル変数にします。

変数 ii は、入力中の測点番号です。変数 n は、入力測点数で、測点名に"E"

が入力されたときの測点番号 -1 です。

 

                // クリアボタンをクリック
//
        function onINI( ) {
                
var 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; i<=50; i++) {
                       na[i] = "";
                       bt[i] = 0;
                       
ds[i] = 0;
                
}
//
                document.Form1.NO.value = ii;
                document.Form1.NA.value = na[ii];
                document.Form1.BT.value = bt[ii];
                document.Form1.DS.value = ds[ii];
        
}

クリアボタンをクリックしたとき、実行されます。テキストエリアに未入力の部分

があると、数学関数にその未入力のテキストのデータを渡すとエラーが発生す

るので、各テキストエリアと変数を初期化します。数値の場合 0 を、文字の場

合ヌル "" を代入します。また、測点数は 50 個まで(終了判定の "E" を除く

49 )です。

入力開始のときは、まず、クリアボタンをクリックして初期化します。初期化しな

いで、前進ボタンなどをクリックすると、エラーになります。

 

                // 後退ボタン(<)をクリック
//

        function onBCK( ) {
                na[ii] = document.Form1.NA.value;
  @
                bt[ii] = eval(document.Form1.BT.value);  
A
                
ds[ii] = eval(document.Form1.DS.value);  B
//
                
ii--;  C
                
if (ii <= 0) 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
        
}

後退ボタンをクリックしたとき、実行されます。

@〜Bで、現在表示されているデータを変数にセットします。 na(ii) は測点

名、 bt(ii) は夾角、 ds(ii) は距離です。

Cは、測点番号を前に戻します。ii-- i = i - 1 と同じです。

Dは、測点番号に0以下はありえないので、最小の番号を1にします。

E〜Hで、前の観測データを表示します。

次の、前進ボタンをクリックしたときの処理もCDの部分以外は同じです。

ii++ i = i + 1 と同じです。

 

                // 計算ボタンをクリック
//
        
function onCAL( ) {
                
var i;
//
                // 初点データ  
@
                
an = document.Form1.AN.value;
                
xa = eval(document.Form1.XA.value);
                
ya = eval(document.Form1.YA.value);
                
alpa = eval(document.Form1.AA.value);
//
                
// 終点データ  A
                
bn = document.Form1.BN.value;
                
xb = eval(document.Form1.XB.value);
                
yb = eval(document.Form1.YB.value);
                
alpb = eval(document.Form1.AB.value);
//
                
// 測点データ  B
                na[ii] = document.Form1.NA.value;
                bt[ii] = eval(document.Form1.BT.value);
                
ds[ii] = eval(document.Form1.DS.value);
//
                
// 測点数のカウント  C
                
n = 0;
                
for (i = 1; i<=50; i++) {
                        
if (na[i] == "E") break;  D
                             
n++;
                
}
//
//
//   *** 計算部 ***  
E
//   ここに、計算部を記述します
//
        
}

計算ボタンをクリックしたとき、実行されます。

@からBは、画面上のデータを変数に読み込みます。

Cの部分は、測点名が "E" になる前までの測点数をカウントします。

Dは、na(i)"E" のとき、for のループを抜け出ます。

E以下に、計算と出力のルーチンを記述します。

 

 

<FORM NAME="Form1">
   ・
   ・
   ・
</FORM>

入力画面(フォーム)を作成するブロックです。 <HR> タグは、水平線を入れ

るタグで、終了タグはいりません。

タグの前後のスペースや、改行タグ <BR> を入れる箇所を調整して、見やす

い画面を作ってみて下さい。

 

 


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