説明

地形データ処理プログラム

【課題】数値化された等高線データを用いて、従来、人間が等高線図を用いて手作業で行ってきた地形特徴を得るための手段を再現する。
【解決手段】コンピュータに、等高線の形状により決定させた谷頭の候補としての情報を持ち、三次元座標の情報を持つ等高線データを記憶手段から読み込ませ、前記読み込んだ等高線データの谷頭の候補点が、標高が1ランク下位の谷頭の候補点に向かって結合線分が生成されていないとき、結合線分を順次下方に向かって生成させ、前記生成された結合線分からなる各ラインの始点を谷頭と決定させ、決定結果を記憶又は出力させるための谷頭決定プログラムである。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、数値化した等高線を用いて、等高線に含まれる情報(標高及び地形の形状)を最大限に利用することにより、コンピュータ上にて、地形分類を行うための様々な情報を抽出、あるいは、計算するためのプログラムである。
本発明により、等高線図を用いて、技術者が手動で行っている作業(例えば、谷頭の抽出や谷線図の作成など)を、自動的に行うことが可能になる。
本発明により得られる谷頭や谷線や谷次数などの情報は、土砂災害の発生位置や被害範囲の予測に役立ち、特に、豪雨による災害に有効である。また、本発明により得られる尾根線は、雪崩の災害についての重要な情報である。さらに、本発明により得られる、斜面型(図1)や勾配や斜面方位や谷次数などは、地形の特徴を把握するための基礎資料である。
具体的には、地形分類の情報は、近年、地方自治体等が整備を進めている、住民の防災意識を高め、自然災害時における住民の避難活動を支援するハザードマップの作成に活用できる。また、近年、環境問題が重視され、地域の自然環境に目が向けられることが多くなり、各地で、自然環境を紹介するためのビジターセンターの建設が進められている。地形は、自然環境を構成する要素であり、生態系(植生含む)に深く関わっている。本発明で得られる地形情報の出力図は、ビジターセンターのような施設で展示するのに適した資料となる。さらに、林学(林業)の分野では、高精度な土壌図が必要とされ、そのための高精度な地形分類手法が要求される。この分野でも、最近は、コンピュータを用いた手法を模索している。本発明は、精度の高い数値等高線データを用いることにより、この要求に応えることが可能である。
【背景技術】
【0002】
地形分類図は、伝統的に、地形図(等高線図)をベースにして、写真判読などをはじめとする手作業で作成されてきた。このため、写真等を正確に判読・解析するためには多大の労力と時間を要し、膨大なコストがかかるという問題があった。また、人間による手作業のため、個人差や見落としなどが存在した。
この解決策として、日本全国をカバーする標高グリッドデータ、例えば数値地図50mメッシュ(標高)などを用いて、地形特徴の把握、数値地形計測及び流域解析等をコンピュータ上で行う手法が開発されている。均一に配置された標高グリッドデータを使用し、同一の手法を用いて計算を行うことにより、客観的、かつ、広範囲の地形解析を、自動的に短時間に行うことが可能である。標高グリッドデータは、日本において、最も一般的に使われるDEM(Digital Elevation model)(数値標高モデル)である。
DEMを得るための最新技術として、代表的なものに、レーザースキャナ、あるいは、人工衛星を用いて、地表面の位置情報(ランダムなポイントデータ)を得る手法の開発も進んでいる。レーザースキャナを用いることにより、1〜2[m]間隔の、高密度のポイントデータを得ることが可能であるが、広域のデータ取得については、費用の面で問題がある。
また、地表面の位置情報を、はじめからグリッドデータの形式で得る手法は実用化されていないことから、数値等高線データやランダムなポイントデータなどから、標高グリッドデータを作成するために、様々なアルゴリズム(spline、kriging、idw、trend、TOPOGRIDなど)が開発されている。元の地形をできるだけ正確に再現した標高グリッドデータを作成するためには、使用するアルゴリズムの検討、および、各アルゴリズム毎に設定する計算の条件の値などの検討を十分に行う必要がある。
標高グリッドデータは規則的な配置を持つことから、DEMを一度、標高グリッドデータにしてしまえば、1)崩壊前後の標高グリッドデータの差から、崩壊や堆積の差分量を計算することは容易であり、2)標高グリッドデータから勾配や斜面方位などを計算する手法については、多くの手法が開発・紹介されており、3)各種グリッドデータを用いた地形の統計解析手法も、学会誌や書籍などで紹介されている。つまり、標高グリッドデータは、コンピュータ処理に適していて処理速度を格段に向上できる。
【発明の開示】
【発明が解決しようとする課題】
【0003】
しかしながら、上記標高グリッドデータは、取得されたDEMから、どのアルゴリズムや設定値を用いるかにより、得られる標高値が異なる。また、得られた標高グリッドデータを用いて計算された勾配などについても、どの計算方法を用いるかにより、結果が変化する。加えて、標高グリッドデータから、各種のアルゴリズムを用いて得られる地形特徴を、従来の等高線図などを用いて手作業で得られる特徴に一致させることは難しい。
数値化された等高線データは、その不規則なデータ配置から、地形特徴の算出のために直接使用されることはほとんど無く、もっぱら、標高グリッドデータ取得のための基データとして使われることが多かった。
【0004】
しかし、本発明は、数値化された等高線データを用いて、従来、人間が等高線図を用いて、手作業で行ってきた地形特徴を得るための手段を、再現することを可能にした。
本発明では、手作業のごとく、等高線や等高線から得られる落水線などに沿って、斜面の形状に関する情報の計算や判断を行い、その方法は一通りである。したがって、標高グリッドデータを用いた各種地形情報の計算のように、様々な方法があり、方法により得られる結果が異なるということは無い。また、コンピュータが普及する以前から、等高線を基にした各種の分類図(地すべり、地質、土壌、崩壊、活断層など)が作成されており、これは、貴重な情報である。等高線データをベースに出力される本発明の結果(出力図)は、これらの図や写真などとの比較が、グリッドデータの場合に比べて、はるかに容易である。また、本発明では、結果として得られる、地形情報に関する属性付のラインデータをグリッドデータに変換する手法も含んでいることから、数値データとして普及している各種グリッドデータとの組み合わせも可能であり、応用できる範囲が広い。
これまで、標高グリッドデータは、等高線データを基に作成されることが多く、その場合はグリッド化する方法による誤差が生じる。また、グリッド化によりデータが等間隔に分断されてしまうため、谷線や尾根線のような斜面の境界、さらに山頂や凹地、鞍部といった地形の特徴を考慮した計算を行うことが難しい。しかし、等高線データをそのまま使用することにより、等高線が持つ情報にしたがって忠実に斜面を分類することが可能であり、等高線で表現された谷や尾根、山頂、凹地、鞍部等を考慮して行う手作業による分類を再現することができる。
【0005】
本発明は、上記従来の実情に鑑みてなされたもので、その目的は、従来手作業でのみ実現していた専門家レベルの判読・解析精度を維持しつつ、コンピュータ処理可能な新規の地形データ処理方法及びその装置を提供すること、具体的にはデジタル化した等高線データから落水線データおよび最急登線データを生成し、これらのデータに基づいたコンピュータ処理可能な地形分類のプログラムを提供することにある。これらのプログラムにより、地形分類図作成作業工程のほとんどの部分が自動化され、作成作業の飛躍的な効率化が図られるものである。
【課題を解決するための手段】
【0006】
本発明の谷線を生成、記憶又は出力させる地形データ処理プログラムは、コンピュータに、谷頭を含む等高線データの1ランク下位の等高線データ上のデータ点が前記起点である谷頭から所定距離内に存在するとき、該データ点を起点との結合線分の到達点の選択点とし、該選択点を含む等高線の線分を仮線分として選び、前記起点と前記各選択点とを結ぶ選択線分の中で前記仮線分と交差しないものが存在するとき、仮線分と交差しない選択線分の中で長さが最小となる選択点を到達点として谷線データを生成させ、以後前記到達点を始点として前記線分を生成するステップを繰り返し実行させ、順次谷線データを生成させることを特徴とする。
【0007】
[データ構造]
本発明は、等高線データに基づいて各種のデータ処理を行うものである。
そこで先ず、等高線データのデータ構造について説明する。
図2(A)は、等高線データのイメージ図である。この図において、等高線の四角内の数字はライン番号を、同じく円内の数字はポイント番号を示している。
図2(B)は、データ構造を示すもので、ファイルは、x座標とy座標のデータを格納するxyファイルと、z座標のデータを格納するzファイルに分けられており、各ファイルには、前記ライン番号、ポイント番号、END記号が格納されている。
本発明は、等高線データを基に、水平断面形を分類するプログラム、落水線を生成するプログラム及び最急登線を生成するプログラムを基本プログラムとし、各種の応用的なデータ処理を行う応用プログラムとから構成されている。本発明は、該応用プログラムのうちの谷線生成プログラムであり、詳細は段落0048〜0058において説明する。
【0008】
前記水平断面形の分類プログラムは、選択された等高線データが隣接する等高線データの左右どちらの側に位置しているかを判別する等高線位置判別サブプログラムと、当該等高線のデータ点は尾根型斜面上に位置するか、谷型斜面上に位置するか、直線斜面上に位置するかを判定する水平断面形判定サブプログラムとから成っている。詳しくは後述する。
【0009】
また、前記最急登線生成プログラムは、斜面下方から上方に向かって、先に生成された最急登線データの到達点を、次に生成する最急登線データの起点とするデータ処理を繰り返すことにより、等高線データの全ての線分データの任意の点を起点とし、隣接する高位の等高線の全ての線分データの任意の点を到達点として、個々の最急登線線分データを生成して、等高線から隣接する高位の等高線に対して最大傾斜で登る最急登線を生成するものである。これについても段落0020〜0031において詳述する。
【0010】
さらにまた、前記落水線生成プログラムは、最急登線生成プログラムとは逆に、斜面上方から下方に向かって、先に生成された落水線データの到達点を、次に生成する落水線データの起点とするデータ処理を繰り返すことにより、等高線データの全ての線分データの任意の点を起点とし、隣接する低位の等高線の全ての線分データの任意の点を到達点として、個々の落水線線分データを生成して、等高線から隣接する低位の等高線に対して最大傾斜で下る落水線を生成するものである。これについても段落0050〜0058において詳述する。
【0011】
以下、前記水平断面形の分類プログラムについて、図19〜21を参照して詳細に説明する。
斜面の水平断面形の分類を行うためには、任意の等高線が、標高の高い等高線と低い等高線のどちらに向かって曲がっているのかを知る必要がある。
このため先ず、等高線データMの左右どちらの側に、標高の低いあるいは高い隣の等高線データが存在するのかを判別しなければならない。
さらに、斜面の水平断面形は、等高線の形状によって分類されることから、曲線の変曲点が、水平断面形を分ける点になる。
【0012】
[水平断面形分類プログラム]
この水平断面形分類プログラムは、選択した等高線データの線分データの任意のデータ点を最短距離線生成の参照点として選定するステップと、前記選択した等高線データに隣接する高位又は低位の等高線の線分データの任意のデータ点のうち、前記参照点から所定半径以内に存在する任意のデータ点を選択点として選定するステップと、前記選択点と前記参照点の距離を演算し、最も距離が短い選択点を到達点の候補として、仮線分を選定し、前記起点と前記到達点の候補を結ぶ線分であり、かつ、前記仮線分と交差しない線分を選定し、該選定した線分を含む等高線は前記選択した等高線に隣接する高位又は低位の等高線であると判断するステップと、前記参照点から隣接する高位又は低位の等高線であると判断された等高線データの各線分の任意の点に延ばされた線が前記仮線分と交差しないとき、前記等高線データの各線分の任意の点を落水線作成の先端点の候補とするステップと、全ての先端点の候補の中から参照点に最も近い候補を先端点として決定するステップと、前記参照点から前記先端点に向かって最短距離線を生成するステップと、前記参照点を始点とし、1つ前のデータ点を終点とするベクターと同じ向きを持ち、大きさが任意のベクターと、前記参照点を始点とし、前記先端点を終点とするベクターと同じ向きを持ち、大きさが任意のベクターとの外積及び前記参照点を始点とし、前記先端点を終点とするベクターと同じ向きを持ち、大きさが任意のベクターと、前記参照点を始点とし、1つ後のデータ点を終点とするベクターと同じ向きを持ち、大きさが任意のベクターとの外積の符号を演算し、前記両ベクターの外積が正であるとき、前記先端点は参照等高線データの右側に位置し、前記両ベクターの外積が負であるとき、前記先端点は参照等高線データの左側に位置すると判断するステップと、前記参照点の1つ前のデータ点から参照点までのベクターと前記参照点から1つ後のデータ点までのベクターとが成す角度が所定値以下である場合、等斉斜面であると判定し、該角度が所定値を超過する場合においては、前記先端点が参照等高線データの左右いずれの側に位置するか、前記参照点の1つ前のデータ点を始点とし、参照点を終点とするベクターと同じ向きを持ち、大きさが任意のベクターと、前記参照点を始点とし、1つ後のデータ点を終点とするベクターと同じ向きを持ち、大きさが任意のベクターとの外積の符号が正負いずれかによって、参照等高線データに隣接する隣接等高線データが参照等高線データの左右どちら側に位置し、左右どちら側が高いか、斜面が直線状か谷型か尾根型か、によって斜面の水平断面形を分類するステップとを含み、前記参照点が選択した等高線データの終点の1つ前に達するまで前記各ステップを繰り返し実行し、前記参照点が選択した等高線データの終点の1つ前に達したとき、次の等高線データを選択して前記各ステップを繰り返し実行することにより、等高線データの始点と終点を除く全データ点について斜面の水平断面形を分類し、該分類データを記憶、出力又は送信を実行するものである。
【0013】
以下、具体的に説明する。
[等高線位置判別サブプログラム]
先ず、1ランク低い等高線データとの位置関係をチェックするチェック1について、図19,20に基づいて説明する。
ステップ101において、等高線データを読み込み、等高線データM(ライン番号i)のj番目のデータ点をm、その前後をmj−1、mj+1とおく。このとき、カウンタの値、count=0とする。
次にステップ103で、参照等高線データMの参照点mにおいて、Mの隣に位置し、かつ、Mより標高が低い等高線データKを捜す。
先ず、等高線データMが1ランク低い等高線データKの左右どちらの側に位置するかを調べ次いで、等高線データMが1ランク高い等高線データHの左右どちらの側に位置するかを調べる。以下、具体的に説明する。
【0014】
ステップ104において、参照点mから等高線データKへの最短距離の線を引き、この線とKとの交点をkとする。もし、点kが存在しない場合は、kの位置を判断できないため、ステップ117へ進む(ステップ105)。
参照点mからmj+1、mj−1、kまでのベクターをそれぞれα、γ、βとし(図5)、等高線データのx座標とy座標の値のみを用いて(Z=0とし)、外積γ×βとβ×αを計算する(ステップ106)。γ×β>0、かつ、β×α>0であるとき、点kは等高線データMの右側に位置(ステップ108)し、図5のように、等高線データMの右側が低いことになる。また、もし、γ×β<0、かつ、β×α<0であるとき、点kは等高線データMの左側に位置し、等高線データMの左側が低いことになる(ステップ112)。(γ×β>0、かつ、β×α<0)、あるいは、(γ×β<0、かつ、β×α>0)、あるいは、γ×β=0あるいは、β×α=0であるとき、点kは判断には適さない点であるので、ステップ117へジャンプする。
【0015】
次いで、1ランク高い等高線データとの位置関係についてチェックするチェック2について説明する。
Mの隣に位置し、かつ、Mより標高が高い等高線データ(等高線データをH、データ点をhとする)を使用することを除き、1ランク低い等高線データとの位置関係のチェックと同じ処理を行う。すなわち、ステップ117〜129において、等高線データHがMの左右どちらの側に位置するかを調べる。
参照点mからhまでのベクターをβ’とし、等高線データのx座標とy座標の値のみを用いて(Z=0とし)、外積γ×β’とβ’×αを計算する(図5)。
γ×β’<0、かつ、β’×α<0であるとき、点hは等高線データMの左側に位置し、図5のように、等高線データMの左側が高いことになる。
また、もし、γ×β’>0、かつ、β’×α>0であるとき、点hは等高線データMの右側に位置し、等高線データMの右側が高いことになる。
(γ×β’>0、かつ、β’×α<0)、あるいは、(γ×β’<0、かつ、β’×α>0)、あるいは、γ×β’=0あるいは、β’×α=0であるとき、点hは判断には適さない点であるので、次のデータ点mj+1を用いるためにステップ130へジャンプする。
等高線データMと隣の等高線データとのトポロジー的関係を確認するために、参照点(m=mj+1,mj+2,・・)を変えながら、上記チェック1と上記チェック2の処理を3回繰り返す。このとき、チェック回数は前記カウンタの値として記録される。
【0016】
その後、前記3回のチェックの結果得られた等高線位置データJ[1]、J[2]、J[3]の値が、全て一致しているとき、これを等高線データのデータ領域に位置情報についての属性として書き出す。一致しないときは、データ点が等高線データの終点に到達するまでに一定数確保できる場合は、前記チェック1、2を最初からやり直す。
【0017】
なおこの例では、データ点が等高線データの終点に到達するまでに一定数確保できない場合は、一致するデータを1、2番目のカウンタの等高線位置データJ[1]、J[2]とし、J[3]のデータを取り直す。また、次のデータ点が等高線データの終点である場合は、前記3回のチェックの結果得られた等高線位置データJ[1]、J[2]、J[3]の値のうち一致するものを、等高線データファイルに、属性として位置情報を書き出すこととしている。
また、前記位置情報の内容は、等高線の右側が低いか、左側が高いとき、1、等高線の右側が高いか、左側が低いとき、2としている。
この具体例では、各等高線データの二番目のデータ点からチェックが開始され、参照点を変えながら、3回同じ位置関係が認められたとき、その位置関係を正として受け入れるようにしているが、チェック開始データ点、実施回数は特にこれに限定されず、適宜回数実施すればよい。
【0018】
[水平断面形の判定サブプログラム]
図21のステップ161において、前記等高線位置判別サブプログラムで作成された、等高線データと各等高線データの位置情報Jの値、すなわち、1か2を読み込む。
次のステップ162で、直線斜面を定義するγを入力する。この例ではγを5°としている。
次のステップ164で、等高線データMのデータ点mにおいて、データ点mからデータ点mj+1へ向かうベクターをαとおくとき、等高線データMの全てのデータ点において、αj−1とαの成す角θと、外積αj−1×αを計算する(図7参照)。但し、Mの始点と終点では計算しない。
もし、点mj+1での外積の符号が、点mでの外積の符号と異なる場合は、点mとmj+1との中点を変曲点とし、等高線データMに新たなデータ点として加える。
【0019】
次いで、元の等高線データMの全てのデータ点において、斜面の水平断面形を判定する。
等高線データMの両側に、等高線データHとKが存在するとき、等高線データH、M、Kの標高をそれぞれ、E、E、Eとする(E≧E≧E。ただし、E=E=Eである場合は除く。)。このとき、αj−1×α<0であれば、ラインmj−1j+1は等高線データMの左側に突き出る(図7A)。また、αj−1×α>0であれば、ラインmj−1j+1は等高線データMの右側に突き出る(図7B)。
もし、外積αj−1×α=0である場合は、mj−1j+1は直線であり、ベクターαj−1とαの角θは0°に等しい(0°≦θ<180°)。
点mにおける斜面の水平断面形は、下記の要領で分類される。
ケース1.αj−1×α=0(θ=0°):直線斜面(ステップ166)
ケース2.αj−1×α<0 かつ 等高線データH(K)が等高線データMの左(右)側に位置する: 集水(谷型)斜面(図7A、ステップ169)
ケース3.αj−1×α<0 かつ 等高線データH(K)が等高線データMの右(左)側に位置する: 発散(尾根型)斜面(図7A、ステップ170)
ケース4.αj−1×α>0 かつ 等高線データH(K)が等高線データMの左(右)側に位置する: 発散(尾根型)斜面(図7B、ステップ173)
ケース5.αj−1×α>0 かつ 等高線データH(K)が等高線データMの右(左)側に位置する: 集水斜面(図7B、ステップ174)
計算上、θ=0°となることはまれであるから、直線斜面を定義するγに対して、幅を持たせる必要がある。このため、本例では、γを±5°で計算している。
以上で水平断面形分類プログラムについての説明を終了し、次いで最急登線プログラムについて説明する。
【0020】
[最急登線生成プログラム]
このプログラムは、任意の等高線データのデータ点から、1ランク上の等高線データのうち最も近いデータ点に対し最急登線を生成するプログラムである。
この発明は、コンピュータに、先に生成された最急登線データの到達点を次に生成する最急登線データの起点とするデータ処理を繰り返すことにより、等高線データの全ての線分データの任意の点を起点とし、隣接する高位の等高線の全ての線分データの任意の点を到達点として、個々の最急登線線分データを生成させて、等高線から隣接する高位の等高線に対して最大傾斜で登る最急登線を生成させる地形データ処理プログラムであって、該地形データプログラムは、任意の等高線データの線分データの任意のデータ点を最急登線生成の起点として選定する第1のステップと、上記選択した等高線データに隣接する高位の等高線の線分データの任意のデータ点のうち、前記起点からの距離が短いものが優先的に選ばれた任意のデータ点を選択点として選定する第2のステップと、前記選択点と前記起点の距離を演算し、最も距離が短い選択点を到達点の候補として、前記優先的に選ばれた任意のデータ点を含む等高線の線分である仮線分を選定し、前記起点と前記到達点の候補を結ぶ線分であり、かつ、前記仮線分と交差しない線分を選定し、該選定した線分の到達点を含む等高線は前記選択した等高線に隣接する高位の等高線であると判断する第3のステップと、前記起点から隣接する高位の等高線であると判断された等高線データの各線分の任意の点に引かれた線が前記仮線分と交差しないとき、前記等高線データの各線分の任意の点を最急登線作成の到達点の候補とする第4のステップと、全ての到達点の候補の中から起点に最も近い候補を到達点として決定する第5のステップと、前記起点から前記到達点に向かって最急登線線分データを生成する第6のステップとを含み、コンピュータに、前記決定した到達点を次に生成する最急登線線分データの起点として、前記第2乃至第6のステップを順次繰り返し実行させ、上記到達点の候補が全く存在せず最急登線の終点に到達したと判断されたとき、任意のデータ点を選択した後前記第1と第2のステップの間にジャンプして前記第2乃至第6のステップを繰り返し実行させ、前記選択した任意のデータ点が前記任意の等高線データの最後のデータであると判断されたとき、まだ始点とするために用いていない等高線データを選択して前記第1と第2のステップの間にジャンプして前記第2乃至第6のステップを繰り返し実行させ、始点とするために用いていない等高線データがないと判断されたとき処理を終了することにより、等高線から隣接する高位の等高線に対して最大傾斜で登る最急登線を生成させるための地形データ処理プログラムである。
【実施例1】
【0021】
本実施例は、等高線データの全データ点に、rise_i[等高線データのライン番号][等高線データのポイント番号]=−1(既成の最急登線が存在するときに、その最急登線番号を入れる)と、rise_j[等高線データのライン番号][等高線データのポイント番号]=−1(その点から最急登線を引けないときは−10,既成の最急登線が存在するときは、その点での既成の最急登線のポイント番号を入れる)という属性を与える(ステップ203)点に特徴がある。
このことにより、既に最急登線データを生成したか否か、又は、生成しようとして不可能であったか否かを判別できるようにする。
【0022】
図22、23のフローチャートを参照して、本実施例について説明する。
CPUは、ステップ201において等高線データ全てを読み込み、次のステップ202で最初にライン番号がnである等高線データをM、Mのnn番目のデータ点をmnn、作成する最急登線データの最急登線番号をs、最急登線番号sである最急登線データをW、Wのss番目の点をwssとする。
ステップ203では、等高線データの全データ点に上述の属性を与える。
次いで、n,s,nnに順次1をデータセットして起点m=mnnと定義したうえで、ss=1とデータセットする(ステップ205〜208)。
【0023】
本実施例の特徴的な部分として、ステップ209において、最急登線データのデータ点の属性rise_i[n][nn]が正であるか否か、そして、ステップ210において、最急登線データを生成しようとして不可能であったか否かを判断する。
このステップ209,210により、既に最急登線データが生成されているか否かが判断される。
このとき、当該データ点mを起点とする最急登線データが既に生成されていたら、新たに最急登線データを生成することなく、ステップ211、213に移り、最急登線データのポイント番号が1であるか否か、また、mがMの終点であるか否か判断し、終点でなければ、次のデータ点を選択(nn=nn+1)(ステップ214)してステップ207に戻る。mがMの終点であれば、Mがライン番号最大の等高線データか否か判断し、Mがライン番号最大の等高線データでなければ、次の等高線データを選択(n=n+1)(ステップ216)してステップ206に戻り、Mがライン番号最大の等高線データであれば、始点とするために用いていない等高線データがないと判断されるから、最急登線プログラム最急登線データの生成処理を終了する。
【0024】
前記ステップ210において、最急登線データのポイント番号が−10であるか否かを判断する。この属性−10については後述するが、既に、mから最急登線データを延長させようとして不可能であった、換言すれば、当該データ点は最急登線の終点であると判断されるので、mを始点とする最急登線線分データは発生させないで、次のステップ211に移る。
最急登線データのポイント番号が−10でないときは、mを最急登線データW(最急登線番号s)の発生点とする。このとき、mはWのss番目の点(初期値ss=0)となる(実際には、ステップ208にて、mはWの1番目の点とされる)。
【0025】
次いで、ステップ217において、当該等高線データMより標高が1ランク高い等高線データはあるか否か判断し、なければ、当該最急登線データの終点であると判断されるから、ステップ266において、−10という属性を付与して、ステップ211に戻る。
次いで、ステップ217〜218において、当該等高線データMより標高が1ランク高い等高線データがあり、かつ、Mより高い等高線データのデータ点が前記起点mの半径R以内にあるとき、標高が1ランク高い等高線データの全てのデータ点のうち、起点mから所定半径R以内に存在するデータ点を全て選択し、選択した全てのデータ点にフラグ1を立てる(ステップ219)。
ステップ217において、当該等高線データMより標高が1ランク高い等高線データがないとき、および、ステップ218において、Mより高い等高線データのデータ点が起点mの半径R以内にないときは、その起点は最急登線データの終点であって、mから最急登線の線分を上方へ引くことはできないから、そのデータ点に−10の属性を与えて、ステップ211に戻る。
上記の所定半径Rは、本実施例では、解析者が入力装置より設定可能とされている。
この所定半径Rは、解析対象地域に対して選定するものであり、等高線密度、得られたデータの精度等を考慮して選ぶ。山地地域を対象地域とする本実施例では、R=150mとした(1:25,000地形図上では6mmとなる)。Rの選択は、計算時間に影響するので重要である。
【0026】
CPUは、選択されたデータ点と前記起点mの距離を演算(ステップ220)し、最も距離が短い選択点をデータ点tとし、該データ点tを含む等高線の等高線データをTとする(ステップ221)とともに、起点mから半径R以内に存在する全てのデータ点を含む等高線のデータ線分(同じ等高線データ上の連続する二つのデータ点をつなぐ線分)を選択する(ステップ222)。
次いで、選択されたこれらの等高線データの線分(以下「仮線分」という。)を用いて、標高が1ランク高い等高線データTが選択された等高線データMの隣りに存在するかどうかを調べる。
がMの隣りの等高線データのデータ点であれば、線分mtはどの仮線分とも交差することはない(図3、A)。
しかし、tがMの隣りの等高線データのデータ点でないならば、線分mtは上記したいずれかの仮線分と交差する。
よって、ステップ223において、線分mtが仮線分と交差すると判断されたときは、tを選択点の中から除去(ステップ224)するため前記フラグを消去し、他に選択点がある限り(ステップ225)ステップ221に戻って起点mに最も近い点を演算により選んで、ステップ222、223に進んでこの処理を繰り返す。ステップ225において他に選択点がないときは、前述した手順でステップ211に戻る。
このとき、全ての選択点を用いても標高が1ランク高い等高線データを決定できない場合は、データ点mを最急登線データの終点とする。
【0027】
一方、線分mtが仮線分と交差しないと演算により判断されたときは、等高線データTは等高線データMの隣りに存在するものとして、
T=Q、t=qとする(qはQのj番目のデータ点)。
このとき、k=j,kk=jとし、データ点qの前後のデータ点についても、仮線分と交差するか否か調べるために、
min=j−5(但し、j−5<0ならmin=1)とし、
max=j+5(但し、j+5>[Qのポイント番号の最大値]なら、max=[Qのポイント番号の最大値])とする(ステップ226)。
次いで、起点mと標高が1ランク上の隣接する等高線データQのデータ点qの前後(この例では、前後5つずつ)のデータ点との線分(qj+5.... qj−5)は仮線分と交差するかについて調べ(ステップ227〜229,231〜233)、起点mと各データ点との線分が仮線分と交差しないものを最急登線作成の先端点wの候補とする(ステップ230.234)。
さらに、起点mから、qk+1とqを通る直線とqkk−1とqkkを通る直線に垂線をおろして交点をp、pkkとし(ステップ238.244)、p、pkkは線分qk+1、qkk+1kkの上にあり、かつ、mp、mpkkの線分は仮線分と交差しないものについて、最急登線作成の先端点wの候補とする(ステップ241.247)。
そして、すべての先端点の候補の中から起点mに最も近い点を最急登線作成の先端点wとして選び(図4参照)、mとwを結んで最急登線を生成し、生成した最急登線データは、最急登線データファイルに記憶される(ステップ250.251)。
【0028】
ここでさらに、1ランク上の隣接する等高線データへの最急登線を生成するために、等高線データQをMに、データ点wをmに置換し(ステップ252)、ssを1インクリメントしてステップ254に進み、mが等高線データのデータ点でないとき、ステップ217に戻って次の最急登線データの生成処理に入る。
一方、mが等高線データMのデータ点miiであるときは、rise_j[i][ii]が−10か、またrise_i[i][ii]が−1か否か判断し、−10であれば、mは終点であり、−1であれば、ステップ217に戻り最急登線データの生成処理に入る。
前記ステップ256において、rise_i[i][ii]が−1でないときは、miiを通る最急登線データが既に存在する。そして、miiはrise_i[i][ii]番目の最急登線データのrise_j[i][ii]番目の点である(ステップ258)。
【0029】
このときは、この最急登線データWに、当該データ点mから既に生成された最急登線データのrise_j[i][ii]+1番目の点から終点までのデータを接続する(ステップ258)。
次いでステップ259において、Wの始点からss−1番目の点(ss番目の点がmである)について調べる。
ライン番号rの等高線データMのrr番目のデータ点mrrと一致する点については、等高線データ点に、rise_i[r][rr]=Wのライン番号,rise_j[r][rr]=Wでのポイント番号、という属性を与える。
なお、ステップ248において、wの候補が全く存在しないときは、ステップ266の処理をした上で、ステップ211に戻る。
また、ステップ256において、最急登線データのライン番号が−1であるときは、最急登線データは存在しないのであるから、ステップ217に戻る。
さらに、ステップ255において、最急登線データのポイント番号が−10であるときは、mを最急登線データWの終点として、ステップ259〜264の処理をして、ステップ213に戻る。
【0030】
当該等高線データの最後のデータ点からの最急登線データの生成が終了したら、1ランク上の等高線データの最初のデータ点から最急登線データを生成し、順次この処理を実行し、ライン番号が最大の等高線データに到達したとき最急登線データの生成を終了する。
【0031】
なお、本実施例においては、ステップ203において等高線データの全データ点に、rise_i[等高線データのライン番号][等高線データのポイント番号]=−1と、rise_j[等高線データのライン番号][等高線データのポイント番号]=−1という属性を与えているが、このステップは省略することも可能である。
この場合のプログラムのフローチャートは、図41、42のようになる。
【0032】
[落水線生成プログラム]
次いで、落水線生成プログラムについて説明する。
前記最急登線生成プログラムが任意の等高線データのデータ点から、1ランク上の等高線データの最大傾斜で登るデータ点に対して、最急登線を生成するものであるのに対し、このプログラムは反対に、任意の等高線データのデータ点から、1ランク下の等高線データの最大傾斜で下るデータ点に対し、落水線を生成するものである。
そして、このプログラムについては、後述する谷線生成プログラムにおいて実際に使用しているので、その際に詳しく説明する。
以上、本発明の基本プログラムについて説明した。
次いで、各種の応用プログラムについて説明する。
本出願に係る応用プログラムは、要旨外の谷頭決定プログラム(段落0033〜0047参照)、請求項1に係る谷線生成プログラム(段落0048〜0058参照)、要旨外の尾根線生成プログラム(段落0059〜0067参照)、要旨外の谷次数計算プログラム(段落0081〜0090参照)、要旨外の谷次数と斜面の垂直断面形の組合せプログラム(段落0091〜0111参照)及び要旨外の属性をもったラインデータをグリッド化するプログラム(段落0112〜0132参照)である。以下、これら応用プログラムについて順に説明する。
【0033】
[谷頭の決定プログラム]
谷線や尾根線は、山地全体の形状を把握するために重要な情報である。特に谷頭は、山地における侵食の起源であり、谷の最上部であり、風化や重力などによって斜面の後退が起きる(谷頭侵食)。この谷頭の時間的経緯に伴う移動の速度、方向は、山地の侵食と地形変化およびその速度を予測する上で重要である。
本発明は、出来る限り伝統的な手作業に近い手順で、数値等高線データのデータ点の中から、谷頭に該当する点を選び出すものである。
ここでいう谷頭とは、山地において最初に谷型斜面が顕れた谷の最上部を意味する。
【実施例2】
【0034】
図26を参照して説明する。
このプログラムは、最初に谷型斜面であることを規定する上限角度を決定するために、その角度を入力して定義する。
そして、段落0012〜0019において既に述べた水平断面形分類プログラムを実行し、水平断面形の分類データを出力する。
次いで、この水平断面形の分類データを読み込んで1単位ラインの属性を解析する。
【0035】
本実施例は、前記水平断面形分類プログラムによって谷型斜面として分類された一単位のラインを用いることにより、谷線の始点となる谷頭の定義を行う。
本実施例では、θ<5°であるとき、データ点mにおける水平断面形は直線斜面として取り扱う。
谷頭を定義するための項目としては、本実施例では、谷型斜面の角度sPsを用いて谷頭を定義しているが、谷型斜面の幅(D)や谷型斜面の深さ(L/D)を用いて定義しても良いこと勿論である(図10参照)。
【0036】
[1単位ラインの属性解析プログラム]
図49を参照して説明する。
最初に、上述した基本プログラムである水平断面形分類プログラムの出力結果を読み込み、各等高線データを水平断面形によって分類し、分類したラインを一単位として、一単位ライン毎に書き出すラインファイルを作成する。分類したラインのライン番号をsとする(ステップ401)。
【0037】
次いで、読み込んだ等高線データをM(ライン番号i)とし、Mの始点をm、終点をm、j番目の点をmとする。このとき、ライン番号s=1とする。
そして、Mがポリゴンか否かを判断(ステップ403)し、ポリゴンであれば、データ点の始点と終点のフラグが同じであるか否か調べ(ステップ404)、同じでなければmとmn−1の中点を一単位の始点とし(ステップ405)、同じであればmを一単位の始点とする(ステップ406)。
ステップ403においてポリゴンでないと判断されたときは、mを一単位の始点とする(ステップ407)。
【0038】
次いで、次の点mを読み込んで、読み込んだ点が終点のひとつ手前であるか否か判断(ステップ409)し、読み込んだ点が終点のひとつ手前であるときは、n=3であるか判断し、n=3のときは、mを一単位の終点として(ステップ411)、次のステップ412でサブルーチンOption1(図50参照)に進む。
また、n=3でないときは、読み込んだ点とひとつ前の点のフラグが等しいかどうか調べ(ステップ413)、等しいときは読み込んだ点のひとつ先の点を一単位の終点とし(ステップ414)、等しくないときは読み込んだ点とひとつ前の点の中点を一単位の終点とする(ステップ416)して、それぞれ前記サブルーチンOption1に進む。
上述のステップ409において、今回読み込んだ点が終点のひとつ手前でないときは、今回読み込んだ点とひとつ前の点のフラグが等しいかどうか調べ(ステップ420)、等しくないときは読み込んだ点とひとつ前の点の中点を一単位の終点とし(ステップ421)て、サブルーチンOption1に進み、等しいときはさらに先のデータ点を読み込んで(ステップ424,408)、上記処理を繰り返す。
【0039】
サブルーチンOption1の処理内容の概要は、図10、11、50を参照して、上述の処理にて一単位の始点と終点が決定されたので、以後所定の谷の深さや尾根の突出があるか否かを判断し、所定の谷の深さや尾根の突出がある一単位のラインについて谷型または尾根型の属性を与え、それ以外のものには直線の属性を与える処理を実行するものである。
【0040】
先ず、一単位の始点と終点との直線距離Dを演算する(ステップ431)。
次いで、直線Dに対して一単位のライン上の始点と終点を除く各データ点から垂線を下ろし、それぞれの垂線長を求め、最長のものをL、Lの端点であるデータ点(ポイント番号b)を決定する(ステップ432)。このポイント番号bのデータ点を谷型斜面あるいは尾根型斜面の頂点とする。
そして、一単位の始点とポイント番号bのデータ点の長さ(sp)と、一単位の終点とポイント番号bのデータ点の長さ(sp)を計算し、線分sp,線分sp,線分Dを用いて谷型斜面、あるいは、尾根型斜面の角度ωを計算する(ステップ433)。
角度は、次式を用いて計算する。
【0041】
(式1)


始点、終点を除く一単位ライン上の全データ点での水平断面形は同じである。そこで一単位のライン毎に、直線:0、尾根型:1、谷型:−1の属性を付与する(ステップ434)。
一単位のライン毎に、水平断面形(r)という属性と共に、xy座標を書き出す(ステップ435)。
このとき、一単位の始点が連続する二つのデータ点(仮にmj−1とm)の中点であるときは、mから書き出す。同様に、一単位の終点が連続する二つのデータ点(仮にmj−1とm)の中点であるときは、mj−1まで書き出す
書き出されるファイルの内容は下表の通りとなる。このファイルをfile_xyr1とする。
【0042】
(表1の1)

file_xyr1の構造
(表1の2)

このとき、ω<aである谷型斜面の頂点(ポイント番号b)にあたるデータ点であるときは、r=−10、谷型斜面で頂点以外のデータ点であるときは、r=−1、ω<aである尾根型斜面の頂点(ポイント番号b)にあたるデータ点であるときは、r=10、尾根型斜面で頂点以外のデータ点であるときは、r=1、それ以外は、r=0の属性を与える(ステップ435)。
また、ラインの標高ファイルにs,Zも書き出す(Zは、番号sの水平断面形の一単位のラインの標高)。
次のステップ436において、sを1インクリメントして一単位の属性解析プログラムに戻る。
【0043】
このとき、ステップ417とステップ422にてサブルーチンOption1を実行して復帰してきたときは、今回読み込んだとひとつ前の点のフラグが等しくない、すなわち、mj−1とmの中点が変曲点であることが明らかであるから、次の一単位の始点をmj−1とmの中点とする(ステップ418,423)。
そして、ステップ418−1において、flag[m]=flag[mn−1]であるか調べ、そのいずれかにより、ステップ404において決定した始点を終点として、再度サブルーチンOption1を実行する(ステップ419)。Mがライン番号の最大の等高線データになるまで、以上の処理を繰り返し、Mがライン番号の最大の等高線データになったら、メインルーチンに復帰する。
【0044】
[谷頭決定プログラム]
図26のフローチャートを参照して説明する。
谷頭点を決定するために先ず、その候補の抽出を行う(図11_1)。
谷頭となるデータ点を見つけるために、前述の一単位ラインの属性解析プログラムでfile_xyr1に書き出したr=−10であるデータ点を結ぶライン(以下「ジグザグライン」という。)を引く処理を実行する。
最初に、file_xyr1とその標高ファイルを読み込み、標高の高い等高線から順番に並べ替える(ステップ441)。
次いでジグザグラインの線分の最大長Rを決める(ステップ443)。
全データ点に、fall_i(等高線データのライン番号,等高線データのポイント番号)=−1、fall_j(等高線データのライン番号,等高線データのポイント番号)=−1という属性を与える。等高線データには、読み込み順に、ライン番号n(1,2,3…,n_end)を与える。このとき、g=0とする(ステップ444)。
また、ライン番号nの等高線データをMとし、Mの各データ点に、ポイント番号nn(1,2,3…,nn_end)を与える(ステップ445)。
そして、Mのポイント番号nnのデータ点をmとする(ステップ446)。
次のステップ447で、mの属性rが−10であるか否か調べ、−10であればそのデータ点が谷頭の候補であるから、ステップ448に移ってfall_i(n,nn)>0かどうか判断する。
ここで、fall_i(n,nn)>0であればジグザグライン番号が既についていて、mを通るジグザグラインが既に存在するので、mを始点とするジグザグラインは発生させない。逆にfall_i(n,nn)>0でなければ、fall_j(n,nn)が−10であるか否か判断し、−10であれば、既に、mからジグザグラインを延長させようとして、不可能であったので、mを始点とするジグザグラインは発生させない。fall_j(n,nn)が−10でないときは、g=g+1として、mをジグザグラインW(ライン番号g)の発生点とする。このとき、mはWのgg番目の点(gg=1)となる(ステップ450)。
ここで、mからジグザグラインWの延長を試みる。このとき、mのWでのポイント番号はggである。
【0045】
そこで、Mより標高が1ランク低い等高線データが存在するとき、さらにMより低い等高線データのデータ点の中で、属性rが−10であるデータ点が、mの半径R以内に存在すれば(ステップ453)、上記の点を谷頭の選択点とする。また、mの半径R以内に存在するデータ点を含む等高線の線分を仮線分として選ぶ(ステップ454)。
ステップ455において、mと前記各選択点とを結ぶ各線分(選択線分)の中で前記仮線分と交差しないものが存在するとき、仮線分と交差しない選択線分の中で、長さが最小となる選択点を、mからの延長点wと決定する(ステップ456)。
そして、wを含む等高線データをM、wをmに置き換え(ステップ457)、次のステップ458に進む。ただし、このmをライン番号iiの等高線データMのポイント番号jjのデータ点とする。
ここで、fall_i(ii,jj)=−1であれば、ジグザグラインのポイント番号ggを1インクリメントして(ステップ459)、ステップ452へ戻る。
また、fall_i(ii,jj)=−1でないとき、fall_j(ii,jj)=−10か否か調べ(ステップ460)、−10であれば、mをWの終点とし(ステップ463)、−10でなければ、WにジグザグラインW’の[fall_j(ii,jj)+1]番目の点から終点までを接続する(ステップ462)。
次に、Wの始点からgg−1番目の点(gg番目の点がm)について調べる。等高線データ(仮にT,ライン番号aa)のデータ点(仮にt,ポイント番号bb)と一致する点については、等高線データのデータ点にfall_i(aa,bb)=g、fall_j(aa,bb)=Wでのポイント番号という属性を与えた(ステップ464)上で、ステップ467に戻る。
【0046】
前記ステップ452、453においてNoと判断されたときは、いずれもfall_i(n,nn)=−10の属性を与えて、mはWの終点であるとして扱い(ステップ471)、ステップ467に進んで、先にステップ445において付与されたポイント番号の最大値に達しているか否か調べ、達していなければポイント番号nnを1インクリメントしてステップ446へ戻る。
ステップ467においてポイント番号が最大値に達したと判断されたときは、先にステップ469において付与されたライン番号が最大値に達しているか否か調べ、達していなければライン番号nを1インクリメントしてステップ445へ戻り、以上の処理を繰り返し実行する。
処理が進んで全ての処理が実行され、ステップ469においてYesと判断されたときは、ジグザグラインの作成を終了し、作成されたジグザグラインの始点を谷頭と決定する(ステップ472)。
最終的な処理として、file_xyr1を再び呼び込み、読み込んだ(x,y)座標が、作成されたジグザグラインの始点の(x,y)座標と等しいとき、rの属性を−10とし、それ以外のときはr=0に変更し、file_xyr1と同じ形式で書き出す。これをfile_xyr2とする(ステップ474)。
以上から明らかなように、file_xyr2は、file_xyr1に比べて、属性rの値だけが変化していることとなる。
なお、谷頭のデータ点のみのポイントファイルを作成することも可能である。
【0047】
[谷線の生成]
谷線や尾根線は、山地全体の形状を把握するために重要な情報である。特に谷線は、水系の分類や水系領域の抽出や谷密度の計算等に不可欠の情報であり、地形の侵食、崩壊した物質の移動経路、地形の変化の過程の解明、更に、地殻運動や岩石構造によるリニアメントの抽出において利用されている。
本発明は、出来る限り伝統的な手作業に近い手順で谷線を生成することを目的とし、数値等高線データのデータ点の中から、谷頭に該当する点を選び出し、これらの点から谷線を発生させるものである。
ここでいう谷線とは、谷頭からのみ発生させた、最も急傾斜で下る落水線を意味する。
したがって、谷の最上部である谷の頂点以外のデータ点からは落水線は発生されない。この点で、等高線データの全てのデータ点から発生される落水線とは異なる。
【実施例3】
【0048】
この発明は、図44のフローチャートに示されるように、水平断面形分類プログラムの一部と1単位ラインの解析プログラムを利用する谷頭を決定するプログラムを実行して得た谷頭データを読み込み、次いで落水線生成プログラムの一部を利用する谷線を生成するプログラムを実行し、谷線を生成するものである。(図44)。
【0049】
最初に、前述したfile_xyr2とその標高ファイルを読み込み、r=−10であるデータ点、すなわち谷頭からのみ、落水線データを生成するために、図24、25に示す落水線生成プログラムのサブルーチンに入って、ステップ301をスキップしてステップ302から処理を開始する。
【0050】
[落水線生成プログラム]
この段階で、谷線の生成をする。
CPUは、ステップ302で最初にライン番号がnである等高線データをM、Mのnn番目のデータ点をmnn、作成する落水線データの落水線番号をs、落水線番号sである落水線データをW、Wのss番目の点をwssとする。
ステップ303では、等高線データの全データ点にrの属性を与える。すなわち、ライン番号n、ポイント番号nnであるデータ点mnnにおいて、fall_i[n][nn]=−1、fall_j[n][nn]=−1とする。
次のステップ304で、任意の点aから落水線の線分を下方に向けて引くとき、aを起点mとする。
次いで、n,s,nnに順次1をデータセットして起点m=mnnと定義したうえで、ss=1とデータセットする(ステップ305〜308)。
【0051】
本実施例の特徴的な部分として、ステップ309において、落水線データのデータ点の属性fall_i[n][nn]が正であるか否か、そして、ステップ310において、落水線データを生成しようとして不可能であったか否かを判断する。
このステップ309,310により、既に落水線データが生成されているか否かが判断される。
このとき、当該データ点mを起点とする落水線データが既に生成されていたら、新たに落水線データを生成することなく、ステップ311、313に移り、落水線データのポイント番号が1であるか否か、また、mがMの終点であるか否か判断し、終点でなければ、次のデータ点を選択(nn=nn+1)(ステップ314)してステップ307に戻る。mがMの終点であれば、Mがライン番号最大の等高線データか否か判断し、Mがライン番号最大の等高線データでなければ、次の等高線データを選択(n=n+1)(ステップ316)してステップ306に戻り、Mがライン番号最大の等高線データであれば、落水線データの生成処理を終了する。
【0052】
落水線データのポイント番号が−10でないときは、mを落水線データW(落水線番号s)の発生点とする。このとき、mはWのss番目の点となる(ステップ308)。
【0053】
次いで、ステップ317において、当該等高線データMより標高が1ランク低い等高線データはあるか否か判断し、なければ、当該落水線データの終点であると判断されるから、ステップ366において、落水線データのポイント番号として−10という属性を付与して、ステップ311に戻る。
次いで、ステップ317〜318において、当該等高線データMより標高が1ランク低い等高線データがあり、かつ、Mより低い等高線データのデータ点が前記起点mの半径R以内にあるとき、標高が1ランク低い等高線データの全てのデータ点のうち、起点mから所定半径R以内に存在するデータ点を全て選択し、選択した全てのデータ点にフラグ1を立てる(ステップ319)。
ステップ317において、当該等高線データMより標高が1ランク低い等高線データがないとき、および、ステップ318において、Mより低い等高線データのデータ点が起点mの半径R以内にないときは、その起点は落水線データの終点であって、mから落水線の線分を下方へ引くことはできないから、そのデータ点にfall_j[n][nn]=−10の属性を与えて、ステップ311に戻る。
上記の所定半径Rは、本実施例では、解析者が入力装置より設定可能とされている。
この所定半径Rは、解析対象地域に対して選定するものであり、等高線密度、得られたデータの精度等を考慮して選ぶ。山地地域を対象地域とする本実施例では、R=150mとした(1:25,000地形図上では6mmとなる)。Rの選択は、計算時間に影響するので重要である。
【0054】
CPUは、選択されたデータ点と前記起点mの距離を演算(ステップ320)し、最も距離が短い選択点をデータ点tとし、該データ点tを含む等高線の等高線データをTとする(ステップ321)とともに、起点mから半径R以内に存在する全てのデータ点を含む等高線のデータ線分(同じ等高線データ上の連続する二つのデータ点をつなぐ線分)を選択する(ステップ322)。
次いで、選択されたこれらの等高線データの線分(以下「仮線分」という。)を用いて、標高が1ランク低い等高線データTが選択された等高線データMの隣りに存在するかどうかを調べる。
がMの隣りの等高線データのデータ点であれば、線分mtはどの仮線分とも交差することはない(図3、A)。
しかし、tがMの隣りの等高線データのデータ点でないならば、線分mtは上記したいずれかの仮線分と交差する。
よって、ステップ323において、線分mtが仮線分と交差すると判断されたときは、tを選択点の中から除去(ステップ224)し、他に選択点がある限り(ステップ325)ステップ321に戻ってtの次に起点mに近い点tを選んで、ステップ322、323に進んでこの処理を繰り返す。ステップ325において他に選択点がないときは、前述した手順でステップ311に戻る。
このとき、全ての選択点を用いても標高が1ランク低い等高線データを決定できない場合は、データ点mを落水線データの終点とする。
【0055】
一方、線分mtが仮線分と交差しないと判断されたときは、等高線データTは等高線データMの隣りに存在するものとして、
T=Q、t=qとする(qはQのj番目のデータ点)。
このとき、k=j,kk=jとし、データ点qの前後のデータ点についても、仮線分と交差するか否か調べるために、
min=j−5(但し、j−5<0ならmin=1)とし、
max=j+5(但し、j+5>[Qのポイント番号の最大値]なら、max=[Qのポイント番号の最大値])とする(ステップ326)。
次いで、起点mと1ランク下の隣接する等高線データQのデータ点qの前後(この例では、前後5つずつ)のデータ点との線分(qj+5‥‥qj−5)は仮線分と交差するかについて調べ(ステップ327〜329,331〜333)、起点mと各データ点との線分が仮線分と交差しないものを落水線作成の先端点wの候補とする(ステップ330.334)。
さらに、起点mから、qk+1とqを通る直線とqkk−1とqkkを通る直線に垂線をおろして交点をp、pkkとし(ステップ338.344)、p、pkkは線分qk+1、qkk+1kkの上にあり、かつ、mp、mpkkの線分は仮線分と交差しないものについて、落水線作成の先端点wの候補とする(ステップ341.347)。
そして、すべての先端点wの候補の中から起点mに最も近い点を落水線作成の先端点wとして選び、mとwを結んで落水線を生成し、生成した落水線データは、落水線データファイルに記憶される(ステップ350.351)。
【0056】
ここでさらに、1ランク下に隣接していた等高線データから落水線を生成するために、等高線データQをMに、データ点wをmに置換し(ステップ352)、ssを1インクリメントしてステップ354に進み、mが等高線データのデータ点でないとき、ステップ317に戻って次の落水線データの生成処理に入る。
一方、mが等高線データMのデータ点miiであるときは、fall_j[i][ii]が−10か、また−1か否か判断し、−10であれば、mは終点(ステップ365)であり、−1であれば、ステップ317に戻り落水線データの生成処理に入る。
前記ステップ356において、fall_i[i][ii]が−1でないときは、miiを通る落水線データが既に存在する。そして、miiはfall_i[i][ii]番目の落水線データのfall_j[i][ii]番目の点である(ステップ358)。
【0057】
このときは、この落水線データWに、当該データ点mから既に生成された落水線データのfall_j[i][ii]+1番目の点から終点までを接続する(ステップ358)。
次いでステップ359において、Wの始点からss番目の点([ss+1]番目の点がmである)について調べる。
ライン番号rの等高線データMのrr番目のデータ点mrrと一致する点については、データ点mrrに、fall_i[r][rr]=Wのライン番号,fall_j[r][rr]=Wでのポイント番号、という属性を与える。
なお、ステップ348において、wの候補が全く存在しないときは、ステップ366の処理をした上で、ステップ311に戻る。
また、ステップ356において、落水線データのfall_i[i][ii]が−1であるときは、落水線データは存在しないのであるから、ステップ317に戻る。
さらに、ステップ355において、落水線データのポイント番号が−10であるときは、既にmから落水線データを延長させようとして不可能であったので、mを落水線データWの終点として、前述のステップ359の処理をする。
【0058】
ここでさらに、1ランク下に隣接していた等高線データから落水線を生成するために、等高線データQをMに、データ点wをmに置換し(ステップ352)、ステップ317に戻り、ステップ318からステップ353までの処理を繰り返し、落水線の終点に到達するまで落水線を生成し続ける。
そして落水線の終点まで到達したら、再度ステップ311に戻って、次のデータ点から終点に到達するまで落水線データを生成し続ける。
当該等高線データの最後のデータ点からの落水線データの生成が終了したら、1ランク下の等高線データの最初のデータ点から落水線データを生成し、順次この処理を実行し、ライン番号が最大の等高線データに到達したとき落水線データの生成を終了する。
【0059】
[尾根線の生成プログラム]
最急登線は、山地全体の形状を把握するために重要な情報である。特に尾根線は、特に雪崩との関係が深いことが指摘されており、雪崩のハザードマップ作成、それによる、災害防止に不可欠のものとなっている。
本発明は、出来る限り伝統的な手作業に近い手順で尾根線を生成することを目的とし、数値等高線データのデータ点の中から、尾根下端点に該当する点を選び出し、これらの点から尾根線を発生させるものである。
ここでいう尾根線とは、尾根下端点からのみ発生させた、最も急傾斜で登る最急登線を意味する。
したがって、最も突き出した点である尾根の尾根下端点以外のデータ点からは尾根線は発生されない。この点で、等高線データの全てのデータ点から発生される最急登線とは異なる。
【実施例4】
【0060】
このプログラム(図40参照)は、最初に尾根型斜面であることを規定する上限角度を決定するために、その角度の数値を入力して定義する。
そして、前述した水平断面形分類プログラム(図19〜21参照)を実行し、水平断面形の分類データを出力する。
ついで、この水平断面形の分類データを読み込んで1単位ラインの属性(図49参照)を解析する。
前記解析によって得られたデータに基づいて尾根下端点を決定するサブプログラム(図27参照)を実行し、次いで尾根線を生成するサブプログラムを実行し、尾根線を生成する。
【0061】
本実施例は、前記水平断面形分類プログラムによって尾根型斜面として分類された一単位のラインを用いることにより、尾根線の始点となる尾根下端点の定義を行う。
本実施例では、θ<5°であるとき、データ点mにおける水平断面形は直線斜面として取り扱う。
尾根下端点を定義するための項目としては、本実施例では、尾根型斜面の角度(∠sps)を用いて尾根下端点を定義しているが、尾根型斜面の幅(D)や尾根型斜面の深さ(L/D)を用いて定義しても良いこと勿論である(図10_2)。
【0062】
[1単位ラインの属性解析プログラム]
このプログラムについては、既に段落0036から段落0048にて説明した谷線生成プログラムの1単位ラインの属性解析プログラムと同一であるので、詳しい説明を省略する。
【0063】
[尾根下端点決定プログラム]
尾根下端点となるデータ点を見つけるため、前述の一単位ラインの属性解析プログラムでfile_xyr1に書き出したr=10であるデータ点を結ぶライン(以下「ジグザグライン」という。)を引く。
図27を参照して説明する。
尾根下端点を決定するために先ず、その候補の抽出を行う(図11_2)。
最初に、file_xyr1とその標高ファイルを読み込み、標高の低い等高線から順番に並べ替える(ステップ441−2)。
次いでジグザグラインの線分の最大長Rを決める(ステップ443−2)。
全データ点に、rise_i(等高線データのライン番号,等高線データのポイント番号)=−1、rise_j(等高線データのライン番号,等高線データのポイント番号)=−1という属性を与える。等高線データには、読み込み順に、ライン番号n(1,2,3…,n_end)を与える。このとき、g=0とする(ステップ444−2)。
また、ライン番号nの等高線データをMとし、Mの各データ点に、ポイント番号nn(1,2,3…,nn_end)を与える(ステップ445−2)。
そして、Mのポイント番号nnのデータ点をmとする(ステップ446−2)。次のステップ447−2で、mの属性rが10であるか否か調べ、10であればそのデータ点が尾根下端点の候補であるから、ステップ448−2に移ってrise_i(n,nn)>0かどうか判断する。
ここで、rise_i(n,nn)>0であればジグザグライン番号が既についていて、mを通るジグザグラインが既に存在するので、mを始点とするジグザグラインは発生させない。逆にrise_i(n,nn)>0でなければ、rise_j(n,nn)が−10であるか否か判断し、−10であれば、既に、mからジグザグラインを延長させようとして、不可能であったので、mを始点とするジグザグラインは発生させない。rise_j(n,nn)が−10でないときは、g=g+1として、mをジグザグラインW(ライン番号g)の発生点とする。このとき、mはWのgg番目の点(gg=1)となる(ステップ450−2)。ここで、mからジグザグラインWの延長を試みる。
【0064】
そこで、Mより標高が1ランク高い等高線データが存在するとき、さらにMより高い等高線データのデータ点の中で、属性rが10であるデータ点が、mの半径R以内に存在すれば(ステップ453−2)、上記の点を尾根下端点の選択点とする。また、mの半径R以内に存在するデータ点を含む等高線の線分を仮線分として選ぶ(ステップ454−2)。
ステップ455−2において、mと前記各選択点とを結ぶ各線分(選択線分)の中で前記仮線分と交差しないものが存在するとき、仮線分と交差しない選択線分の中で、長さが最小となる選択点を、mからの延長点wと決定する(ステップ456−2)。
そして、wを含む等高線データをM、wをmに置き換え(ステップ457−2)、次のステップ458−2に進む。ただし、このmを、ライン番号iiの等高線データMのポイント番号jjのデータ点とする。
ここで、rise_i(ii,jj)=−1であれば、ジグザグラインのポイント番号ggを1インクリメントして(ステップ459−2)、ステップ452−2へ戻る。
【0065】
前記ステップ452−2、453−2においてNoと判断されたときは、いずれもrise_j(n,nn)=−10の属性を与えて、mはWの終点であるとして扱い(ステップ471−2)、ステップ467−2に進んで、先にステップ445−2において付与されたポイント番号の最大値に達しているか否か調べ、達していなければポイント番号nnを1インクリメントしてステップ446−2へ戻る。
ステップ467−2においてポイント番号が最大値に達したと判断されたときは、先にステップ444−2において付与されたライン番号が最大値に達しているか否か調べ、達していなければライン番号nを1インクリメントしてステップ445−2へ戻り、以上の処理を繰り返し実行する。
【0066】
処理が進んで全ての処理が実行され、ステップ469−2においてYesと判断されたときは、ジグザグラインの作成を終了し、作成されたジグザグラインの始点を尾根下端点と決定する(ステップ473−2)。
最終的な処理として、file_xyr1を再び呼び込み、読み込んだ(x,y)座標が、作成されたジグザグラインの始点の(x,y)座標と等しいとき、rの属性として10を、それ以外ときはr=0に変更し、file_xyr1と同じ形式で書き出す。これをfile_xyr2とする(ステップ474−2)。以上から明らかなように、file_xyr2は、file_xyr1に比べて、属性rの値だけが変化していることとなる。
以上の処理が終了したところで、尾根線生成プログラムのメインルーチンに復帰する。
【0067】
[最急登線生成プログラム]
尾根線を生成する。
先ず、file_xyr2とその標高ファイルを読み込み、r=10であるデータ点、すなわち尾根下端点からのみ、尾根線データを生成するために、最急登線生成プログラムのサブルーチン(図22参照)に入って、ステップ201をスキップしてステップ202から処理を開始する。
以後の処理内容については、段落0022から段落0031において説明したことと同じであるので、説明を省略する。
【0068】
鞍部等において同じ高さの等高線データを結ぶ線を生成しようとするときは、次の処理をさらに行う。
以下に述べるプログラムは、任意の二つの等高線を結ぶ線分の数は1本とすることを前提としている。
一単位ラインの属性解析プログラムを再度実行する。その際に実行するオプションはOption1(図50参照)である。このときDは計算しない。また、変曲点については書き出さないので、読み込んだデータ点の数と書き出すデータ点の数は等しいこととなる。
一単位ラインの属性解析プログラムを終了したら、メインルーチンに戻って、同高等高線結合線分生成プログラムを実行する。
【0069】
[同高等高線結合線分生成プログラム]
図28乃至30を参照して説明する。
最初に、使用者が、等高線の全長max_length、結合する線分の最大長limit_lengthを入力して決定する。
全長がmax_lengthより短く、始点=終点である等高線データを開始ポリゴンとし、開始ポリゴンと同じ高さの等高線とを結ぶ線分を引く。この線分は、使用者が決定した最大長limit_lengthを越えることはない。
次いでfile_xyrを読み込み、読み込み順にライン番号i(1,2,3…)を与える。等高線の総数をsumとする。また、ライン番号iの等高線のデータ点の総数をP[i]とする(ステップ482)。
また、file_Zを読み込み、各等高線の標高をZ[i]とする(ステップ483)。
次のステップ484において、各等高線について、ライン番号がiであるとき、(1)始点=終点である等高線データには、poly[i]=1という属性を与え、
それ以外の場合はpoly[i]=0という属性を与えるとともに、
(2)全長を計算し、ライン番号line_i[i]と全長line_l[i]を保存一時記憶する。次いで、s=1,i=1とする(ステップ485〜486)。次のステップ487において、poly[i]=1であり、かつ、全長<max_length以下であり、かつ、標高が0より上であれば、ライン番号(poly_i[s]=i)と全長(poly_l[s]=line_l[i])を保存一時記憶して、sを1インクリメントして、ステップ490に進む(ステップ487〜489)。
一方、ステップ487において、poly[i]=1の全長<max_lengthである、標高が0より上である、の条件のいずれかを満たさないときは、同じくステップ490に進む。
ステップ490では、ライン番号iが等高線データの総数sumと等しいか否か判断し、等しくなければ、ライン番号iを1インクリメントして、ステップ487へ戻って処理を繰り返し実行する。
一方、ライン番号iが等高線データの総数sumと等しいと判断されたときは、開始ポリゴンの総数p_numをsとして、開始ポリゴン選択処理を終了する(ステップ492)。
【0070】
次のステップ493で、poly_i[s]とpoly_l[s]をpoly_l[s]が短い順に並べ替える。この処理により、poly_l[1](等高線番号poly_i[1])が、全長が最も短い開始ポリゴンとなるとともに、poly_l[p_sum](等高線番号poly_i[p_sum])が、全長が最も長い開始ポリゴンとなる。
次いで、line_i[i]とline_l[i]をline_l[i]が長い順に並べ替える。
この処理により、line_l[1](等高線番号line_l[1])が、全長が最も長い等高線となり、line_l[sum](等高線番号line_l[sum])が、全長が最も短い等高線となる(ステップ494)。
【0071】
次のステップ495において、開始ポリゴンと等高線を結ぶ線分を書き出す。
書き出される線分の番号を、number=0とする。また、ii=1と置く(ステップ496)。
次いで、線分を結べるかどうかの検討を行う開始ポリゴンである等高線のライン番号iをpoly_i[ii]とする(ステップ497)。
また、hh=1とした上で、開始ポリゴン(ライン番号i)との線分を結べるかどうかを検討する等高線のライン番号hをline_i[hh]とする(ステップ498〜499)。
そして、標高は0である、開始ポリゴンと開始ポリゴンとの線分を結べるかどうかを検討する等高線の標高が等しくない、開始ポリゴンである等高線のライン番号と開始ポリゴン(ライン番号i)との線分を結べるかどうかを検討する等高線のライン番号hとが等しい、の3条件のいずれかを満たす場合、等高線番号hhが等高線の総数sumと等しくないとき、hhを1インクリメントし(ステップ504)、等しいときは、開始ポリゴンの総数に至っていないとき次の開始ポリゴンを選択し(ステップ506)、開始ポリゴンの総数に至ったとき線分の作成を終了して(ステップ507)、線分を書き出す(ステップ508)。
このときt=1からt=書き出す線分番号の最大値まで、出力ファイルへの書き出しを繰り返し実行する(ステップ509〜511のサイクル)。このときの出力データの形式は、次の表のとおりである。
【0072】
(表2)

tの値が書き出す線分番号の最大値まで達したとき、出力ファイルへの書き出しを停止する(ステップ511)。
【0073】
一方、ステップ500〜502において、標高は0である、開始ポリゴンと開始ポリゴンとの線分を結べるかどうかを検討する等高線の標高が等しくない、開始ポリゴンである等高線のライン番号と開始ポリゴン(ライン番号)との線分を結べるかどうかを検討する等高線のライン番号とが等しい、の3条件のいずれをも満たさないとき、ステップ514以降において、開始ポリゴン(ライン番号i)と等高線(ライン番号h)を結ぶラインが存在するかどうかを調べる。そして、二つの等高線を最短距離で結ぶデータ点の組合せを捜す。
【0074】
ステップ514で、tmp_j=−1,tmp_g=−1,ll=100000[m]とおき、次に、j=1とおく。このjは、開始ポリゴンのポイント番号である(ステップ515)。そして、この点jが尾根型斜面(r=1)であるデータ点であるか否か判断し、Yesであれば、g=1とおく。gは開始ポリゴンとの線分を結べるかどうかを検討する等高線hのポイント番号である。
そして、点gが尾根型斜面(r=1)であるデータ点あれば(ステップ518)、poly[h]=1かつg=p[h]でなければ、点jと点gの距離lを計算し(ステップ520)、llがlより大きいとき、tmp_j=j,tmp_g=g,ll=lとして、ステップ523へ進む。また、llが1より小さいときは、直接ステップ523へ進む。
ステップ523において、開始ポリゴンとの線分を結べるかどうかを検討する等高線hのポイント番号の総数でないとき、gを1インクリメントして、ステップ518に戻り、開始ポリゴンとの線分を結べるかどうかを検討する等高線hのポイント番号の総数であるときは、ステップ525へ進む。そして、jの値が開始ポリゴンのポイント数の総数に達していないときは、jを1インクリメントして(ステップ526)、ステップ516へ戻る。
ステップ525において、jの値が開始ポリゴンのポイント数の総数に達していれば、ステップ527に進んで、tmp_jが−1であるか否か調べ、−1であれば、再度ステップ503に戻る。
【0075】
一方、ステップ527においてtmp_jが−1でないときは、j=tmp_j,g=tmp_gとおき、以下のステップを実行することにより点jに最も近い、h上の点を捜す。
ステップ530において、times=1,tt=0,x1=x[i][j],y1=y[i][j]とおく。ここで、(x[i][j],y[i][j])はライン番号iの等高線のポイント番号jのデータ点の(x,y)座標である。
次にステップ531において、開始ポリゴンとの線分を結べるかどうかを検討する等高線hのポイント番号の総数が5以下であれば、ステップ532へ進んでstart1=l,end1=P[h]とする。
また、hのポイント番号の総数が5を越えるときは、当該ポイント番号が1であるとき、start1=l,end1=3とし、ポリゴンであればさらに、times=2,start2=p[h]−2,end2=p[h]とする(ステップ536)。
また、当該ポイント番号が2であるとき、start1=l,end1=4とし、ポリゴンであればさらに、times=2,start2=p[h]−1,end2=p[h]とする(ステップ540)。
当該ポイント番号がポイント番号の総数と等しいとき、start1=p[h]−3,end1=p[h]とする(ステップ542)。
当該ポイント番号が(ポイント番号の総数−1)と等しいとき、start1=p[h]−3,end1=p[h]とし、ポリゴンであればさらに、times=2,start2=1,end2=2とする(ステップ546)。
そして、ステップ531、533、537、541、543における判断がいずれもNoであるとき、start1=g−2,end1=g+2として(ステップ547)、ステップ548に進む。
また、ステップ531、533、537、541、543における判断がYesであったとき、次の処理を実行した後も、ステップ548へ進む。
【0076】
このステップ548以降の処理により、点jと、h上のstart1からend1までのデータ点との線分について検討する。
先ず、k=start1とする(ステップ549)。
つぎのステップ550で、x2=x[h][k],y2=y[h][k]とおく。
以下のステップを実行することにより、(x1,y1)と(x2,y2)を端点とする線分tmp_segmentが、等高線と交差するかどうか調べる。この際、標高がZ[i]、および、Z[i]より1ランク低い標高の等高線についてのみ調べればよい。
ステップ552において、(x1,y1)と(x2,y2)を端点とする線分tmp_segmentが、等高線と交差するか否か判断する。
次のステップ553にて、tmp_segmentの長さlについて、limit_lengthが1以上であるか調べ、1以上であるときx2,y2,1を保存する。また、tt=tt+1 tmp_x[tt]=x2,tmp_y[tt]=y2,tmp_l[tt]=lとして(ステップ554)、次のステップ555に進み、k=end1か否かを判断する。Noと判断されたときkを1インクリメントしてステップ550へ戻り、以上の処理を繰り返す。
ステップ552において、(x1,y1)と(x2,y2)を端点とする線分tmp_segmentが、等高線と交差すると判断されたときは、データを保存することなく、ステップ555へ進む。
ステップ555において、kの値がend1に達したとき、ステップ557以降の処理により、等高線のデータ点start1からend1までの各線分について、ある程度長いものについては、線分上の中間点(線分をn等分(nは整数)する点)についても調べる。
このとき、n等分された線分のそれぞれの長さはmin_lengthより長いものとする。このmin_lengthは使用者が入力して決定する。
ステップ559にてkの値をstart1とする。
(x[h][k],y[h][k])と(x[h][k+1],y[h][k+1])を端点とする等高線の線分の長さ12が、min_length×2以上のとき、_nを12/min_lengthの商に決定する。
次のステップ562で、Sign=1とする。
す560において、x[h][k],y[h][k]とx[h][k+1],y[h][k+1]を端点とする等高線の線分の長さ12が、min_length×2未満のときは、kの値がend1−1か否か調べ、Noであればkを1インクリメントして(ステップ569)ステップ560へ戻り、Yesであればステップ572へジャンプする。
ステップ563に進んで、x2とy2の座標の演算を行う。
【0077】
(式2)


【0078】
次のステップ564以降の処理で、(x1,y1)と(x2,y2)を端点とする線分tmp_segmentが、等高線と交差するかどうか調べる。標高がZ[i]、および、Z[i]より1ランク低い標高の等高線についてのみ調べればよい。
(x1,y1)と(x2,y2)を端点とする線分tmp_segmentが、等高線と交差するときは、sign=n−1であるかどうか調べ、sign=n−1でないときは、signを1インクリメントしてステップ563へ戻って以上の処理を繰り返し実行する。sign=n−1であるときは、ステップ571に進んでkの値がendi−1より大きいか否か判断する。kの値がendi−1より等しくないときは、kを1インクリメントして、S563へジャンプする。
kの値がendi−1に等しいときはtimesが2であるか否か判断し、2であれば、start1=start2、end1=end2、times=1とした(ステップ573)上で、ステップ548へ戻る。timesが2でないときは、ttが0か否か判断し、ttが0のときはステップ503に戻り、ttが0でないときは、ttが2以上か否か判断する。そして、2以上であれば、tmp_1[tt]が小さい順に、tmp_x[tt]=x2とtmp_y[tt]=y2とともに並べかえ(ステップ576)、次のステップ577でnumberを1インクリメントする(ステップ577)。
そして、次のステップ578で、二つの等高線をつなぐ新しい線分new_segmentとして、下記の情報を保存する。
【0079】
(表3)


【0080】
次いで、new_segmentが、これまでに作成した線分segmentと交差するか否か調べる。
ステップ581において、numberが1であるか否か調べ、1であればステップ503へ戻り、1でなければtを1とし(ステップ582)て、(one_x[t],one_y[t])と(two_x[t],two_y[t])を端点とする線分pre_segment[t]とnew_segmentが交差するかどうか調べる。
これらが交差するときは、final_l[t]がfinal[number]より小さいとき、pre_segment[t]とnew_segmentの情報を入れかえ(ステップ586)、ステップ587へ進んで、number=number−1として、ステップ503へ戻る。
また、final_l[t]がfinal[number]より小さくないとき、ステップ587へジャンプしてnumber=number−1として、ステップ503へ戻る。
さらに、(one_x[t],one−y[t])と(two−x[t],two−y[t])を端点とする線分pre_segment[t]とnew_segmentが交差しない場合は、tがnumber−1と等しくないときtを1インクリメントし、tがnumber−1と等しいときpre_segment[t]とnew_segmentのとの関係を調べる。
ステップ591にてtを1として、次のステップ592において、new_segmentがつなぐ二つの等高線について、pre_segment[t]が、既に、つないでいるか否か判断する。
判断の結果、Noのときは、new_segmentがつなぐ二つの等高線(ライン番号iとh)のうちの一方の等高線(仮にM)の1点が、pre_segment[t]の端点であるか否かさらに判断し(ステップ593)、new_segmentとpre_segment[t]の、M上の端点2点の距離l3を計算する(ステップ594)。その結果、l3が1000を越えないとき、new_segmentとpre_segment[t]を、それぞれ、M上の1点を始点とするベクターと考え、二つのベクターが成す角θを計算し(ステップ596)、θ<45°かつl3<500であるかどうか判断した後、さらにfinal_l[t]<final_l[number]であるかどうか判断し(ステップ597〜598)、いずれもYesのときpre_segment[t]とnew_segmentの情報を入れ替えた後、number=number−1の処理をしてから(ステップ599)、ステップ503へ戻る。ステップ598の判断結果がNoのときはステップ600の処理をしてステップ503へ戻る。
また、ステップ592の判断結果がYesのときは、final_l[t]<final_l[number]であるとき、pre_segment[t]とnew_segmentの情報を入れかえた後、number=number−1の処理をしてステップ503に戻る(ステップ601〜603)。
さらに、ステップ593の判断結果がNo、ステップ595の判断結果がYesのときは、ステップ503へ戻る。
【0081】
[谷次数の計算]
斜面崩壊の発生場所が、特定の谷次数nの位置に集中していれば、まだ崩壊が起きていない谷次数nの部分は、他と比べ、崩壊の危険が高い。したがって、谷線に沿って得られる谷次数は、侵食の進み具合や、崩壊の傾向や危険度を把握するために重要な情報である。このプログラムは、最初に谷線生成プログラムを実行して谷線を生成し、次いで前記生成した谷線を水系毎に分類する水系分類プログラムを実行して得られた水系分類データを読み込んで、谷次数の計算を行うものである。勿論、落水線を用いてもよい(図45)。
【0082】
谷線生成プログラムについては前述したので、水系分類プログラム(図43)について以下詳しく説明する。
前提として、標高が同じ二つの谷線(落水線)データのデータ点(終点)の距離がd[m]以内(デフォルトは0.5[m])であるとき、二つの谷線(落水線)データは合流するとする。
本発明の落水線作成手法は、隣り合う等高線、したがって標高の異なる等高線を直線でつなげることから、屈曲の激しい部分では、落水線は途切れる。
このような部分は、全体からみるとわずかな数なので、現在、途切れた部分については、手作業でつなぐのが最も実用的である。
そこで、作成された落水線の中で、途切れている部分があれば、その部分を手作業でつないで落水線データを補正し、当該補正した落水線データを解析対象とする。
【0083】
[水系分類プログラム]
水系については、本発明で、同一の終点に収束する谷線(落水線)データは、同じ水系であると定義している。
実際には、標高が同一の2つの谷線(落水線)の終点の平面距離がd[m]以内であるとき、この2つの谷線(落水線)は同一の終点に収束する、というように処理している。
この実施例では、デフォルトはd=0.0[m]としている。例えば、元データが縮尺1:25,000の等高線であり、図上0.1[mm]しか離れていない終点を同一としたいときは、d=2.5[m]となる。このdは、本発明では解析者が目的に応じて入力するようにしてある。
また、最低f本以上の谷線(落水線)が同一の終点を持つとき、これらの谷線(落水線)が水系を形成する、としている。このfは、本発明を使って解析する人が目的に応じて入力するようにしてある。
図43のステップ611において、上記補正済みの谷線(落水線)データを読み込み、全ての谷線(落水線)データに水系番号−1という属性を与える。
次のステップ612でk=1、s=1とおく。次のステップ613で、Wの終点をwとし、sより谷線(落水線)番号が大きい谷線(落水線)データの中から、終点の標高がwと同じであり、水平距離がd(使用者が決定)以内である谷線(落水線)データを選ぶ。これらの谷線(落水線)の総数が、f以上であるとき(ステップ614)、選ばれた谷線(落水線)それぞれに水系番号kを与える(ステップ615)(図12_1_B)。また、総数がfより小さい場合は、選ばれた谷線(落水線)それぞれに水系番号−10という属性を与える(ステップ616)(図12_1_A)。sが最大の谷線(落水線)番号(ステップ617)であればメインルーチンに復帰終了し、でなければ谷線(落水線)番号に+1をする(ステップ618)、Wの属性が−10(ステップ619)であればステップ617へジャンプする。Wの属性が−10でない場合、ステップ620においてWの属性>0のときは同様にステップ617へジャンプする。満たさないものは、水系番号に+1を与えステップ613へジャンプする。
以上の処理にて、谷線(落水線)は水系毎に分類される。
なお、水系番号毎(例えば、1,2,3,…)に、谷線(落水線)の色を変えることにより、谷線(落水線)をベースにして、分類された水系を表示、印刷することができ、視覚的に理解し易い水系図を作成することができる。
【0084】
次いで図46、47を参照して谷次数計算プログラムについて説明する。
先ず、水系分類を行った谷線データを読み込み(ステップ631)、次のステップ632にて、α=等高線の標高間隔(デフォルトは、α=10[m])とする。また、s=1とする。
以後、水系毎に谷次数を計算する。ここでk=1とする。このkは水系毎に付与される水系番号(1,2,3,…,k_end)である。
次のステップ634において、水系番号kである谷線データを始点の標高が高い順に並べ替え、仮番号h(1,2,3,…,h_end)を与える。仮番号1の谷線データWの始点の標高をmax_Z,終点の標高をmin_Zとする(図13)。
本実施例では、谷次数の計算の基になるデータを谷線としているが、落水線であってもよい。
仮番号hの谷線データWのg番目のデータ点をwh,gとするとき、Wのデータ点の総数をP[h]個とする。線分のwh,gh,g+1の起点をwh,g、先端点をwh,g+1とする。
このとき、wh,gの標高は、wh,g+1の標高より高い。
先ず、起点が谷線データの始点にあたる線分wh,1h,2の谷次数には、あらかじめ0を与える。
【0085】
ステップ636において、E=max_Zとし、次のステップにおいてh=1とする。その次に、Count=0とする(ステップ638)。
次いで、Wのデータ点の総数P[h]が0であるか否か判断する。
のデータ点の総数が0でないとき、Wのデータ点について、ポイント番号が小さい順にデータ点の標高がEと等しい点を捜す。ここでg=1とおく。
次に、[wh,gの標高]がEであるか否か判断する(ステップ641)。[wh,gの標高]がEであるとき、Countが0であれば、i=h、j=gとするとともに、線分wi,ji,j+1を基準線分とする。このとき、tmp=−1、count=1、order=−1として(ステップ643)、ステップ647へ戻って、仮番号hが最終の番号であるか否か判断し、次のステップに移行する。
【0086】
一方、[wh,gの標高]がEより大きいとき、wh,g+1がWの終点であるか否か判断し(ステップ645)、終点でなければgを1インクリメントして、ステップ641に戻る。
ステップ645においてwh,g+1がWの終点であるとき、ステップ644において[wh,gの標高]がEより小さいとき、及びステップ649において線分wi,ji,j+1と線分wh,gh,g+1がwi,j+1で合流しないと判断されたときは、いずれもステップ647へ進む。
ステップ647において、仮番号hが最終の番号であるか否か判断し、最終の番号でないとき、hを1インクリメントして(ステップ648)、ステップ639に戻る。
【0087】
ステップ649において線分wi,ji,j+1と線分wh,gh,g+1がwi,j+1で合流すると判断されたときは、谷次数の計算を実行するため、ステップ650へ進む。
ステップ650では、hとgを保存し、P[h]=0とする。これは、wi,j+1より下流において、WとWの重複をさけるために行うものである(図17、18)。
そして、ステップ651において、tmpが負か否かチェックし(tmpの意味は段落0098参照)、負の数であれば、線分wi,ji,j+1の谷次数が線分wh,gh,g+1の谷次数と等しいとき、ステップ653において、tmp=5、order=(wi,ji,j+1の谷次数)+1の処理を行う。また、線分wi,ji,j+1の谷次数が線分wh,gh,g+1の谷次数より大きいとき、ステップ655において、tmp=1、order=(wi,ji,j+1の谷次数)とする。
さらに、線分wi,ji,j+1の谷次数が線分wh,gh,g+1の谷次数より小さいとき、ステップ656において、tmp=10、order=(線分wh,gh,g+1の谷次数)とする。
【0088】
以上の処理が終了したら、ステップ647に戻る。
ステップ647において、仮番号hが最終の番号h_endでないとき、hを1インクリメントしてステップ639へ戻る。
仮番号hが最終の番号h_endであるときは、ステップ657へ進み、orderが負の数であれば、線分wi,j+1i,j+2の谷次数を線分wi,ji,j+1の谷次数と同一にし(ステップ658)、orderが0以上の数であれば、wi,j+1i,j+2の谷次数をorderの数とする(ステップ659)。
【0089】
ステップ651において、tmpが0以上であるとき、Option−v1(図47)のサブルーチンに入る。
このサブルーチンは、三本以上の谷線データが、1点で合流する場合に実行されるものである(tmpの意味は段落0098参照)。
ステップ671において、wi,ji,j+1の谷次数がwh,gh,g+1の谷次数と等しく、かつ、tmp=1であるとき、tmp=5とするとともに、order=(wi,ji,j+1の谷次数)+1とする(ステップ672)。
また、ステップ671において、wi,ji,j+1の谷次数がwh,gh,g+1の谷次数と等しくないか、またはtmp=1でないとき、wi,ji,j+1の谷次数がwh,gh,g+1の谷次数より小さいか否か判断する。判断結果がYesであれば、tmpが1か、5か、10か、15かがチェックされ(ステップ674、676、678、683)、ステップ674とステップ676においてYesのとき、tmp=10、order=(wh,gh,g+1の谷次数)の処理がされる。
また、ステップ678においてtmp=10であり、ステップ679においてwh,gh,g+1の谷次数がorderであるときは、tmp=15、order=wh,gh,g+1の谷次数+1の処理を行う(ステップ680)。
そして、ステップ679においてwh,gh,g+1の谷次数がorderでないときは、ステップ681に進んでwh,gh,g+1の谷次数がorderより大きいか否かを判断し、大きければtmp=10、order=wh,gh,g+1の谷次数の処理を行う(ステップ682)。
さらに、ステップ683において、tmp=15であるとき、order=wh,gh,g+1の谷次数が、order(以上あるか否か)の判断をして、Yesのとき、tmp=10、order=wh,gh,g+1の谷次数の処理を行い(ステップ685)、Noのとき、処理を終了してステップ647に戻る。
【0090】
谷次数についての計算が終了したら、計算結果をステップ660において書き出す。
次のステップ661にて、sを1インクリメントして、i=h_endでないとき、h=i+1、conut=0として、再度ステップ639に戻る。
i=h_endのとき、E>min_Z+αであれば、E=E−αの処理をし(ステップ664)て、ステップ638に戻る。
i=h_endのとき、E>min_Z+αでなければ、k=k_endを判断する。
k=k_endでなければ、kを1インクリメントしてステップ634に戻り、次の水系番号のデータについて処理を実行する。
全ての水系番号のデータを処理すれば、k=k_endとなるから、計算を終了する。
[谷次数と斜面の垂直断面形の組合せ]
【0091】
図31〜34を参照して説明する。
落水線データW、W、Wについて、それぞれ、j番目のデータ点をwi,j、g番目のデータ点をwh,g、q番目のデータ点をwp,qとする。また、wi,jとwi,j+1、wh,gとwh,g+1、wp,qとwp,q+1の中点を、それぞれ、ti,j、th,g、tp,qとする。本発明による斜面の垂直断面形は、落水線データのデータ点を中点とする二つの線分、つまり、3点から成るラインを一単位とする。一単位のラインの両端の点は、落水線データの線分の中点となる場合が多い(図15B))が、落水線データの始点や終点となる場合もある(図15A))。また、複数の落水線データが同じデータ点に合流する場合、その合流点を中点とする一単位のラインの垂直断面形は、それぞれ異なる場合がある(図15,B1),B2))。したがって、落水線データW、W、Wが、データ点wi,j+1において合流するとき、wi,j+1における斜面の垂直断面形(wi,j+1を中点とするライン)を、下記の手順によって、唯一つに定める。
先ず、落水線生成プログラムを実行して落水線を生成し(ステップ701)た後、次の702にて水系分類プログラムを実行する。本実施例は、落水線データを基に計算を行ったが、谷線データであってもよい。
そこで、水系分類データを読み込む(ステップ702の2)。続いて、水系番号を持たない、すなわち水系をなさない落水線についての計算を行うかどうか入力して決定する(ステップ703)。
水系番号を持たない落水線についての計算を行うと決定されたときは、Option−cのサブルーチンに進む。このサブルーチンは、付加的なものであるから、このサブルーチンについては後述することとする。
【0092】
このプログラムは、先ず水系毎に谷次数を計算し、さらに垂直断面形の分類を行うものである。そこで、この処理について詳しく説明する。
最初にステップ706にて等高線の標高間隔αを規定する。なお、デフォルトは、α=10[m]としてある。ここでs=1(ステップ765においてsが出てくるため)、k=1とする。sはデータ番号、kは水系毎に付与される水系番号(1,2,3,…,k_end)である。
ステップ708において、水系番号kの落水線データを、始点の標高が高い順に並べ替え、仮番号h(1,2,3,…,h_end)を与える。また、仮番号1の落水線データWの始点の標高をmax_Z、終点の標高をmin_Zとする。
次いで、仮番号hの落水線データWのg番目のデータ点をwh,gとし、Wのデータ点の総数をP[h]個とする。線分wh,gh,g+1の起点をwh,g、先端点をwh,g+1とする。このとき、wh,gの標高>wh,g+1の標高の関係にある。
そして起点が落水線データの始点にあたる線分wh,1h,2の谷次数を0とする。次にE=max_Z、h=1、count=0とおく。
【0093】
のデータ点の総数が0でないとき、Wのデータ点について、ポイント番号が小さい順にデータ点の標高がEと等しい点を捜す。ここでg=1とおく(ステップ714)。
次に、wh,gの標高がEであるか否か判断する(ステップ715)。wh,gの標高がEであるとき、Countが0であれば、i=h、j=gとするとともに、線分wi,ji,j+1を基準線分とする。このとき、tmp=−1、count=1、order=−1として(ステップ723)、ステップ719へ戻って、仮番号hが最終の番号であるか否か判断する。判断結果がNoのとき仮番号hを1繰り上げてステップ713に戻る。
【0094】
一方、wh,gの標高がEより高いとき、wh,g+1がWの終点であるか否か判断し(ステップ717)、終点でなければデータ番号gを+1してステップ715に戻る。
ステップ717においてwh,g+1がWの終点であるとき、ステップ716においてwh,gの標高がEより低いとき、及びステップ724においてwi,ji,j+1とwh,gh,g+1がwi,j+1で合流しないと判断されたときは、ステップ719へ進む。
ステップ719において、仮番号hが最終の番号であるか否か判断し、最終の番号でないとき、仮番号hを1インクリメントして(ステップ720)、ステップ713に戻る。
【0095】
ステップ724において線分wi,ji,j+1と線分wh,gh,g+1がwi,j+1で合流すると判断されたときは、谷次数の計算を実行するため、ステップ725へ進む。ステップ725では、hとgを保存する。
そして、ステップ726において、tmpが負か否かチェックし、負の数であれば、線分wi,ji,j+1の谷次数が線分wh,gh,g+1の谷次数と等しいとき、ステップ728において、tmp=5、order=( 線分wi,ji,j+1の谷次数)+1の処理を行う。
また、線分wi,ji,j+1の谷次数が線分wh,gh,g+1の谷次数より大きいとき、ステップ730において、tmp=1、order=( 線分wi,ji,j+1の谷次数)とする。
さらに、線分wi,ji,j+1の谷次数が線分wh,gh,g+1の谷次数より小さいとき、ステップ731において、tmp=10、order=(線分wh,gh,g+1の谷次数)とする。
【0096】
以上の処理が終了したら、ステップ719に戻る。
ステップ719において、仮番号hが最終の番号h_endでない場合、hを1インクリメントしてステップ713へ戻り、仮番号hが最終の番号に達するまで以上の処理を繰り返す。
また、仮番号hが最終の番号h_endに達したときは、Countが0であるか否か判断する。ステップ721にてCountが0と判断されたときは、ステップ790に進み、標高が終点の1つ手前の標高であるとき、落水線データの始点の標高を1つ下げてステップ713に戻る。
一方ステップ790で、標高が終点の1つ手前の標高ではない場合、水系番号kが最終のものでないとき、水系番号を1繰り上げてステップ708に戻り、次の水系番号のデータ処理に入る。また、水系番号kが最終のものであるときは、全ての対象について処理が終了しているので、この処理を終了する。
【0097】
ステップ726において、tmpが0以上である場合、ステップ732において、線分wi,ji,j+1の谷次数が線分wh,gh,g+1の谷次数と等しく、かつ、tmp=1であるとき、tmp=5とするとともに、order=(線分wi,ji,j+1の谷次数)+1とする(ステップ733)。
また、前記ステップ732において、線分wi,ji,j+1の谷次数が線分wh,gh,g+1の谷次数と等しくないか、またはtmp=1でないとき、線分wi,ji,j+1の谷次数が線分wh,gh,g+1の谷次数より小さいか否か判断する。
判断結果がYesであれば、tmpが1か、5か、10か、15かがチェックされ(ステップ735,736,738,743)、ステップ735とステップ736においてtmpが1か5のとき、tmp=10、order=(線分wh,gh,g+1の谷次数)の処理がされる(ステップ737)。
また、ステップ738においてtmp=10であり、ステップ739において線分wh,gh,g+1の谷次数がorderであるときは、tmp=15、order=線分wh,gh,g+1の谷次数+1の処理を行う(ステップ740)。
そして、ステップ739において線分wh,gh,g+1の谷次数がorderでないときは、ステップ741に進んで線分wh,gh,g+1の谷次数がorderより大きいか否かを判断し、大きければorder=線分wh,gh,g+1の谷次数の処理を行う(ステップ742)。
さらに、ステップ743において、tmp=15であるとき、線分wh,gh,g+1の谷次数≧orderの判断をして、Yesのとき、tmp=10、order=線分wh,gh,g+1の谷次数の処理を行い(ステップ745)、ステップ719に戻る。また、ステップ744の線分wh,gh,g+1の谷次数≧orderの判断かNoのとき、処理を終了してステップ719に戻る。
【0098】
ここで、tmpの値の持つ意味について整理しておく。
tmp=1:線分wi,ji,j+1のみが、最大の谷次数をもつ。
tmp=5:線分wi,ji,j+1とそれ以外(複数可)の線分wh,gh,g+1が、最大の谷次数をもつ。
tmp=10:単一の線分wh,gh,g+1(≠線分wi,ji,j+1)が、最大の谷次数をもつ。
tmp=15:複数の線分wh,gh,g+1(≠線分wi,ji,j+1)が、最大の谷次数をもつ。
【0099】
1つの水系に属する落水線データについての谷次数の計算が終了すると、前記ステップ719においてYesの判断がなされ、ステップ721に進んで、Countが0であるか否か判断する。Countが0と判断されたときはステップ790に進み、0でない場合さらにステップ746に進む。
該ステップ746において、orderが負か否か判断される。
負と判断されたときは、線分wi,j+1i,j+2の谷次数の値を線分wi,ji,j+1の谷次数の値とする。
また、負と判断されなかったときは、orderの値を線分wi,j+1i,j+2の谷次数の値とする。
【0100】
次いで、ステップ749とステップ750において、orderが負であるか、tmpが1であるときは、ii=i、jj=jとおく。
また、ステップ752においてtmpが10であるときは、データ点wi,j+1で合流する線分wh,gh,g+1(ただしh≠i)の中で最大の谷次数をもつ線分の(h,g)を用いてii=h、jj=gとおく。
上記の3つのステップにおいて、いずれにも該当しないときは、線分wi,ji,j+1と線分wh,gh,g+1が同じ谷次数を持っていて互いに流れとしての経歴は互角であるから、いずれの落水線が直線的に流れて行くことになるかを調べるために、線分wh,gh,g+1と線分wh,g+1h,g+2が水平面上でなす角δh,g+1(≦180°)を計算する(図16B)。ただし、このhにはiが含まれる、また、このgにはjが含まれる。
したがって、線分wi,ji,j+1と線分wi,j+1i,j+2が水平面上でなす上記角δh,g+1(≦180°)についても計算するものである。そして、計算されたδh,g+1の中で、最大であるδh,g+1のhとgについて、ii=h、jj=gとおく。すなわち、直線的に流れていくものを優先して基準線分として利用していくこととしている。
【0101】
ここで、データ構造及びその属性の計算方法及びその属性について説明する。
【0102】
(表4)



勾配θii,jj:tanθii,jj=α/lii,jjより計算
谷次数vii,jj−1:wii,jj−1ii,jjの谷次数
垂直断面形を決めるτii,jj=180°+θii,jj−1−θii,jj
水平面上での角δii,jj:lii,jj−1、lii,jj、wii,jj−1とwii,jj+1との水平面距離llから次式の計算により求まる。
【0103】
(式3)

【0104】
また、上から中点、データ点、中点のデータmii,jj−1ii,jjii,jj+1について属性ファイルに書き出す属性は、つぎのとおりである。
(1)線分番号:s(xyファイルのsに対応させる)
(2)中点の標高:zii,jj
(3)水系番号:k
(4)wii,jjの上流の線分の勾配:θii,jj−1
(5)wii,jjの下流の線分の勾配:θii,jj
(6)wii,jjでの、水平面での角:δii,jj
(7)垂直断面形を分けるための角:τii,jj
(8)谷次数vii,jj−1:線分wii,jj−1ii,jjの谷次数
以上みたように、例えば谷次数は、1つの落水線データの線分、したがって2つのデータ点に対し1つの属性を有するが、例えば垂直断面形を決める角は、連続する2つの落水線データの線分、したがって3つのデータ点に対し1つの属性を有する。
このため、最初の及び最後のものを除く落水線データは、典型的には下表のようなステップ807のデータ点を書き出すこととなる。
【0105】
(式4)

また、書き出す属性は下表のようになる。
【0106】
(表5)

【0107】
以下の処理を実行することにより、全ての線分について、xyファイル属性ファイルにデータを書き出す処理を実行する。
ii,jjの(x,y,z)座標をそれぞれ(xii,jjii,jj,zii,jj)、wh,gの(x,y,z)座標をそれぞれ(xh,g,yh,g,zh,g)とする(ステップ755)。
そして、線分wii,jjii,jj+1以外に、wi,j+1を先端点とする線分が存在するか否か判断し(ステップ756)、存在すれば、線分wii,jjii,jj+1を除く、wi,j+1を先端点とする複数の線分をwh,gh,g+1とする(ステップ757)。
【0108】
ステップ758からステップ766の処理により、今までの処理により取得したデータの全てをファイルに書き出す。
先ず、ステップ759とステップ761において、データポイント番号が1か2かそれ以外かを判別する。
そして、データポイント番号が1であれば、ステップ760において書き出しを行い、データポイント番号が2であるときは、ステップ762において書き出しを行う。
また、データポイント番号が1でも2でもないときは、ステップ763において書き出しを行う。
そして、ステップ764では、Wのデータ点の総数P[h]を0とおく。これは、以後の処理において重複する落水線データを排除するために行う処理である。
以上の処理により、全ての落水線データのxy座標データと属性データの書き出しを終了する。
【0109】
次に、線分wii,jjii,jj+1について書き出しを行う。
データポイント番号が1か、2かつWiiのデータ点の総数P[ii]の2つ手前か否かを調べ、それぞれ満足する条件にしたがって、データを書き出し(ステップ768〜778)、データ番号sを+1してステップ789へ進む。
一方ステップ756において、wii,jjii,jj+1以外に、wii,jj+1を先端点とする線分が存在しないときは、ステップ780に進んで、データポイント番号が1であるか否か判断し、1であればステップ789に進む。
また、データポイント番号が1以外である場合には、データポイント番号が2、データ点の総数が3、データ番号が2、データ番号がデータ点の総数の1つ手前、のいずれか条件を満たするか否かによって、4通りの形式でデータを書き出す(ステップ781〜787)。
しかる後に、データポイント番号sを+1して、ステップ789に進む。
【0110】
ステップ789においては、基準線分のライン番号が仮番号の総数に到達したか否かを判断する。
そして、到達していない場合は、h=i+1、count=0とおいて、ステップ713に戻る。
また、基準線分のライン番号が仮番号の総数に到達したと判断された場合は、E>min_Z+αのとき、標高を1ランク下げて(E=E−α)してステップ713に戻って以後の処理を実行する。
さらに、E>min_Z+αでないときは、水系番号の最終に到達していなければ、次の水系についての処理に移行する(ステップ794)。
ここで、水系番号の最終に到達したときは、全ての水系について処理が終了したので、プログラムの実行を終了する。
【0111】
ここであらためて、サブルーチンOption_c(図48)について説明する
次に、落水線Gの線分全てについて、谷次数0という属性を与える(ステップ796)。
書き出されていないGの落水線データWiiがあるとき(ステップ797の1)、wiiのjj番目(jj=1,2,3,…)のデータ点をwii,jjとする。このときjj=1とおく(ステップ797の2)。
次のステップ798ではデータ番号jjが1でないとき、jj=2かつP[ii]=3であるか、jj=2、jj=P[ii]−1であるか、のいずれかの条件を満たす場合、ステップ801、804、808を実行してそれぞれデータを書き出す。
また、これが最も一般的であるが、ステップ807を実行する。
そして、ステップ801とステップ808を実行後は、ステップ802にてsを+1してステップ797の1に戻って以後の処理を繰り返して実行する。
また、ステップ804とステップ807を実行後は、ステップ805にてsを+1した後、ステップ799にてjjを+1してステップ798に戻って以後の処理を繰り返す。
以上の処理の繰り返した結果、ステップ797の1において全てのGの落水線データwiiが書き出されたと判断されて処理を終了し、メインルーチンに戻ってステップ706以降の処理に入るものである。
【0112】
[等高線属性データのグリッド化プログラム1]
本発明は、等高線データを基に算出した各種の属性データ(線分)をグリッド化するときに用いるプログラムに関するものである。
一般に、値数統計解析手法では、規則正しい、格子状の配列を持つグリッドデータを用いる場合が多い。また、植生データ、地質データなどの多くのデータがグリッドデータとして整備されてきている。
一方、各種の情報を保有する線分データや(ランダムな)ポイントデータは、そのままでは、上記グリッドデータと結合して使用することは困難である。
そこで本発明は、取得された、地形属性を持つ線分データなどをグリッド化して、各種のグリッドデータとリンクさせ、活用の範囲を広げようとするものである。
グリッド化に用いる線分データは、線分の始点と終点の平面位置座標の情報を必ず持ち、勾配や斜面方位などの属性を一つ以上持つものとする。
そして例えば、落水線の線分データから、勾配と斜面方位と谷次数を同時に計算し、1)ライン番号,2)線分の始点のx座標,3)線分の始点のy座標,4)線分の終点のx座標,5)線分の終点のy座標,6)水系番号,7)勾配,8)斜面方位,9)谷次数を、各線分毎に書き出したファイルを作っておいて、必要に応じた属性だけを読み込んでもよい。
また、勾配グリッドデータを作りたいときは、上記2)〜5)と7)だけを書き出したファイルを作っても良い。
いずれにしても、グリッドデータ作成に用いる線分データの形成は、いろいろ考えられる。また、落水線だけでなく、最急登線、谷線、尾根線、属性付きのポイントデータを基に、グリッドデータを作成することが可能である。
【0113】
斜面の垂直断面形のように、落水線の2つの線分を単位とする場合は、2つの線分に分けて書き出す。
2つに分けられた線分は、始点と終点の(x,y)座標は異なるが、属性は同じとなる。
【0114】


【0115】
等高線に沿って分類された斜面の水平断面形の場合は、等高線の線分毎に書き出す。
(例)
1)ライン番号
2)線分の始点のx座標
3)線分の始点のy座標
4)線分の終点のx座標
5)線分の終点のy座標
6)水平断面形の種類(1:尾根型,−1:谷型,0:それ以外)
【0116】
まず、グリッドデータを作成するための作成範囲を決める。例として以下の2つの方法を挙げる。
方法1)図面等をみて、手作業で(x,y)座標の最大値と最小値(min_x,max_x,min_y,max_y)を決める。
方法2)グリッドデータの基になる線分データを読み込み、これらの線分データの始点と終点の中から(x,y)座標の最大値と最小値(min_x,max_x,min_y,max_y)を決める。ただし、分布するデータの範囲が常に長方形とは限らないので注意する必要がある。
次に、作成するグリッドデータのグリッド間隔dを決める。
更に、グリッド点の位置を決める(中心、あるいは、四隅のはずれた点)。
なお、グリッドデータは、実際は、点ではなく、広がりを持ったセルとして現される。
【0117】
(表6)

【0118】
従来多用されている標高グリッドデータを用いて、各種グリッドデータを計算する場合、下図のように行われる。
【0119】
(表7)

例えば、グリッド点gi,jでの勾配を計算したいとき、gi,jの標高のみを用いて、gi,jの勾配を計算することはできない。
このため、gi,jの周囲のグリッド点の標高も使う必要がある。
したがって、計算範囲が広くなることから、計算結果が緩やかになる傾向にある。
これに対して、本発明においては、属性まで計算した線分データを作り、計算範囲内に存在するデータのみを使う。
まさに当該グリッド内での値が求められるのが特徴である。
従来は、標高グリッドデータから、勾配などの各種グリッドデータを作るのが普通である。
【0120】
(表8)

【0121】
以下、属性を勾配とする実施例について詳しく説明する。
図35〜36を参照して説明する。
先ず使用する線分データと優先順位を決定する。
この優先順位は、パターン化されており、そのパターンは、
pattern1 [優先順位1:落水線データ ,優先順位2:最急登線データ]
pattern2 [優先順位1:最急登線データ,優先順位2:落水線データ]
pattern3 [優先順位1:落水線データ ,優先順位2: なし ]
pattern4 [優先順位1:最急登線データ,優先順位2: なし ]
の4種類である。
次いで、グリッドデータを作成する範囲を決定する。
このとき、min_x,max_x,min_y,max_yを入力するが、手入力による方法の他、グリッドデータの基になる線分データを読み込み、これらの線分データの始点と終点の中から(min_x,max_x,min_y,max_y)を計算により自動的に求める。ただし、分布するデータの範囲が常に長方形とは限らないので注意を要する。
【0122】
そして、使用者がグリッド間隔dを入力することにより、dを決定する。このことにより、計算範囲rが確定する。なお、この計算範囲rは、本実施例ではグリッドを中心とした半径rで定義されている。rのデフォルトは、d/√2としているが、使用者が変更可能にしてある。rを決める際には、グリッド化の基になるデータの精度を考慮する必要がある。また、上記グリッド間隔dの入力により各グリッドの位置(x,y)、総数(num_x,num_y)が確定する。
続いて、優先順位1のデータを読み込み、線分番号をs、線分の総数をsum_sとする(ステップ814)。
次のステップ815にて、使用者が入力して決定したパターンが、pattern=1 or pattern=2と判断されると、引き続き優先順位2のデータを読み込み、線分番号をss、線分の総数をsum_ssとする。
そして、グリッド点の行の値j=1,同じく列の値i=1,線分番号s=1とおく(ステップ817)。
以後の処理により、優先順位1のデータを用いて、グリッド点gi,jでの値を計算する。このとき保存データ番号n=0とおく。
そして、線分番号sの線分の始点をp=(x,y),終点をp=(x,y)とする。
【0123】
ステップ820、821、822、824及び825において、線分の始点、終点がともに1つのグリッドの範囲外にある、または、グリッド中心gi,jと、始点pと終点pを通る直線Tにグリッド中心gi,jから下ろした垂線とTとの交点t(以下単に「交点」という。)と、の距離が計算範囲rを越えると判断された場合、ステップ826に進み、線分番号が線分の総数に達していないときは、線分番号sを1インクリメントして再びステップ819からステップ825を実行する。その実行の結果、ステップ820、821、822、824及び825において全てNoと判断されると、ステップ828、830及び832において、
a)グリッド中心と交点との距離が計算範囲rを越えず、かつ、交点が線分p上の点である(ステップ828)、
b)グリッド中心と終点との距離がグリッド中心と始点との距離より短いか等しく、かつ、グリッド中心と終点との距離が計算範囲rを越えない(ステップ830)、
c)グリッド中心と始点との距離がグリッド中心と終点との距離より短かく、かつ、グリッド中心と始点との距離が計算範囲rを越えない(ステップ832)、のいずれかに該当するとき、線分番号sとそれらの距離lを保存し(ステップ833−2)、nを1インクリメントして(ステップ833−3)ステップ826へ戻る。
また、上記a)〜c)のいずれにも該当しないとき、線分番号sが線分の総数sum_sに達していないとき、sを1インクリメントしてステップ819へ戻る。
【0124】
ステップ835において、保存されたデータ番号nがあると判断された場合(n>0)、最近傍の線分データを用いて勾配のグリッドデータを生成するとの入力による指示があれば、ステップ837で保存したn個の線分を、距離lが小さい順に並べ替え、次いで、距離lが最も小さい線分の勾配の値を、グリッド点gi,jでの勾配の値として、書き出す(ステップ838)。
一方、ステップ836において、最近傍の線分データを用いて勾配のグリッドデータを作るとの指示がないときは、n個の線分の勾配の平均値を、グリッド点gi,jでの勾配の値として、書き出す(ステップ840)。
【0125】
一方、当該グリッド点の計算範囲r内に優先順位1のデータが存在しないときは、ステップ835においてYesと判断され、使用者がpattern1かpattern2を選択していた場合は、ステップ841においてYesと判断されるから、ステップ847に進んで優先順位2のデータを用いて、グリッド点gi,jでの値を計算する。
ステップ848以降ステップ870までの処理内容は、既に説明したステップ819からステップ840までの処理と同一であるので説明を省略する。
なお、ステップ841は、優先順位2のデータを処理するための固有のものである。
そして、上記処理を実行して優先順位2のデータについて処理した結果、当該グリッド点の計算範囲内に優先順位2のデータが存在すれば、ステップ865〜869を実行した後、ステップ843に戻って、継続して処理を実行する。
また、上記ステップ835にてn=0であり、かつ、選択したパターンがpattern=1でもpattern=2でもないときは、グリッド点gi,jでの値はないことから、−9999を書き出す(ステップ842)。
【0126】
その後、ステップ843において、グリッド点の列iが未だ総数num_xに達していないとき、次のグリッド点の列に進み(ステップ845)、ステップ818へ戻って、この循環を繰り返し実行する。
その結果、ステップ843において、グリッド点の列iが総数num_xに達したと判断されたとき、グリッド点の次の行に進み(ステップ846)、ステップ818へ戻り、グリッド点の列を1ずつ繰り上げ実行して、最終的に最後のグリッド点の処理が終了したとき、ステップ844においてYesと判断されて、グリッド化についての処理を終了する。
【0127】
[等高線属性データのグリッド化プログラム2]
このプログラムは、以前のグリッド点の処理において使用したデータについては、以後の処理においては使用しないことを特徴としており、その余の点においては、グリッド化プログラム1と同じである。
したがって、前記特徴点についてのみ、図37〜38を参照して説明することとする。
ステップ874において、全ての線分データに、used=−1という属性を与える。
そして、ステップ894において線分番号sと距離lを保存するときに、併せてusedの値を保存する。
このusedの値は、n個の線分が全てused=1である、すなわち当該全ての線分データは既に以前のデータ点においてデータとして使用済みのものである、と判断されたときは、使用可能なデータが皆無となるから、プログラム1と同様の処理を行う(ステップ903,907)。
反対の判断のときは、used=−1である線分のみを用いて、プログラム1と同様の処理を行うが、この時、計算に使用した線分に、used=1を付与することとしている(ステップ905,909)。
【0128】
一方、優先順位2のデータについては、もともとこのデータが使われることが少ないと想定されること、及び優先順位1のデータが皆無であるならば、優先順位2のデータもその数が少ないことが想定されることから、used=−1という属性は与えないこととしている。
【0129】
以上、勾配や斜面方位の計算プログラムについては、説明してこなかったが、ここで改めて説明することとする。
図39を参照して、最初にn本のラインデータをライン番号が小さい順に読み込む。ライン番号i(1,2,…,n)のラインデータをWとする。s=1とおく。
のj番目のデータ点をwi,jとする。Wのデータ点の総数をmとする。そして、j=1とおく。
ステップ955において、wi,jとwi,j+1を端点とする線分wi,ji,j+1について、勾配θと斜面方位δを計算する際に、wi,jの三次元座標を(xi,j,yi,j,zi,j)、wi,j+1の三次元座標を(xi,j+1,yi,j+1,zi,j+1)とする。
斜面勾配θと斜面方位δはそれぞれ次の[式A]と[式B]で計算される(ステップ956〜957)。
また、斜面方位δは、反時計回りで、東が0[°]として、wi,jとwi,j+1を比べて、標高(zi,jとzi,j+1)が、低い方の三次元座標を(x,y,z)、高い方の三次元座標を(x,y,z)とする。
1)x−x≧0かつy−y≧0 → δ=a[°]
2)x−x<0かつy−y≧0 → δ=180−a[°]
3)x−x<0かつy−y<0 → δ=180+a[°]
4)x−x≧0かつy−y<0→ δ=360−a[°]
【0130】
(式A)



(式B)

【0131】
ステップ958において、wi,jとwi,j+1の位置座標と勾配θと斜面方位δなどを、目的に応じた形で書き出す。このとき、線分番号はsである。
次のステップ960にて、データ番号jが総数mに達していなければ、jを1インクリメントして、次のデータについて計算し、当該ラインデータの総数を処理したら(ステップ962)、次のラインデータについて処理する(ステップ963)。
全てのデータについて処理が済んだら計算を終了する。
【0132】
本発明においては、属性まで計算した線分データを読み込み、計算範囲内に存在するデータのみを使用してグリッドデータに変換することから、当該グリッド内での値が求められるのが特徴である。
また、使用者が最近傍の線分データを用いて勾配のグリッドデータを生成するか、n個の線分の勾配の平均値を用いて勾配のグリッドデータを生成するかを選択可能としたので、具体的なアウトプットの性質に応じて使い分けすることができる。
さらに、同種の基礎データが複数存在する場合に、各種データを単独でまたは組合せて使用し、目的に応じて柔軟に対応することができる。
【図面の簡単な説明】
【0133】
【図1】斜面の形状(Dikau(1990)を変更)の分類図である。L,直線;V,凸;C,凹。太線はこれらの形状を三つのグループに分ける。(1)ともに直線;(2)一方が直線で、他方が曲線;(3)ともに曲線
【図2】等高線データ構造と形式を示す。
【図3】点qの決定と点qを見つけるときのエラーの例を示す。(A)tは選択点の中で最もmに近く、等高線データTは等高線データMの隣に位置し、仮線分mtはどの等高線とも交差しない。tとtは選択点ではない。B1)仮線分mtは等高線データMと交差する。このエラーは等高線データMが屈曲している部分で、しばしば発生する。
【図4】点wの候補を捜す手順を示す。
【図5】等高線データMとMの隣のH(あるいはK)の関係を表す。
【図6】斜面の水平断面形を分類する点を示す。
【図7】連続するベクターの外積によって得られる斜面の水平断面形を示す。
【図8】落水線データ・最急登線データのデータ形式を示す。
【図9】落水線データ・最急登線データを示す。
【図10】谷型斜面の角度と尾根型斜面の角度:ωを示す。
【図11】谷頭・尾根下端の検索を示す。
【図12】水系番号の付与を示す。
【図13】谷次数の計算の順番を示す。
【図14】落水線データに沿った組み合わせを示す。
【図15】垂直断面形の一単位を示す。
【図16】任意のデータ点における斜面の垂直断面形を、唯一つに決める手順を示す。
【図17】重複線分の削除を示す。
【図18】データ点wi,j+1における落水線(最急登線)データの合流を示す。
【図19】水平断面形のプログラム(その1)フローチャート
【図20】水平断面形のプログラム(その2)フローチャート
【図21】各データ点の斜面の水平断面形の判定のフローチャート
【図22】最急登線生成(その1)フローチャート
【図23】最急登線生成(その2)フローチャート
【図24】落水線線生成(その1)フローチャート
【図25】落水線線生成(その2)フローチャート
【図26】谷頭決定のプログラムフローチャート
【図27】尾根下端点の決定プログラムフローチャート
【図28】同高等高線結合線分作成(その1)のフローチャート
【図29】同高等高線結合線分作成(その2)のフローチャート
【図30】同高等高線結合線分作成(その3)のフローチャート
【図31】谷次数と垂直断面形の組み合わせプログラム(その1)フローチャート
【図32】谷次数と垂直断面形の組み合わせプログラム(その2)フローチャート
【図33】谷次数と垂直断面形の組み合わせプログラム(その3)フローチャート
【図34】谷次数と垂直断面形の組み合わせプログラム(その4)フローチャート
【図35】属性グリッドデータ作成1(その1)フローチャート
【図36】属性グリッドデータ作成1(その2)フローチャート
【図37】属性グリッドデータ作成2(その1)フローチャート
【図38】属性グリッドデータ作成2(その2)フローチャート
【図39】勾配と斜面方位の計算フローチャート
【図40】尾根線生成プログラムフローチャート
【図41】最急登線生成(参考)(その1)フローチャート
【図42】最急登線生成(参考)(その2)フローチャート
【図43】水系分類プログラムフローチャート
【図44】谷線生成プログラムフローチャート
【図45】谷次数の計算全体フローチャート
【図46】谷次数の計算フローチャート
【図47】Option_v1フローチャート
【図48】Option_cフローチャート
【図49】一単位ラインの属性解析プログラムフローチャート
【図50】Option1フローチャート

【特許請求の範囲】
【請求項1】
コンピュータに、
谷頭を含む等高線データの1ランク下位の等高線データ上のデータ点が前記起点である谷頭から所定距離内に存在するとき、該データ点を起点との結合線分の到達点の選択点とし、該選択点を含む等高線の線分を仮線分として選び、前記起点と前記各選択点とを結ぶ選択線分の中で前記仮線分と交差しないものが存在するとき、仮線分と交差しない選択線分の中で長さが最小となる選択点を到達点として谷線データを生成させ、以後前記到達点を始点として前記線分を生成するステップを繰り返し実行させ、順次谷線データを生成させることを特徴とする谷線を生成、記憶又は出力させる地形データ処理プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図20】
image rotate

【図30】
image rotate

【図34】
image rotate

【図35】
image rotate

【図36】
image rotate

【図37】
image rotate

【図38】
image rotate

【図42】
image rotate

【図43】
image rotate

【図45】
image rotate

【図47】
image rotate

【図49】
image rotate

【図13】
image rotate

【図19】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図31】
image rotate

【図32】
image rotate

【図33】
image rotate

【図39】
image rotate

【図40】
image rotate

【図41】
image rotate

【図44】
image rotate

【図46】
image rotate

【図48】
image rotate

【図50】
image rotate


【公開番号】特開2006−91907(P2006−91907A)
【公開日】平成18年4月6日(2006.4.6)
【国際特許分類】
【出願番号】特願2005−310574(P2005−310574)
【出願日】平成17年10月25日(2005.10.25)
【分割の表示】特願2002−320548(P2002−320548)の分割
【原出願日】平成14年9月27日(2002.9.27)
【新規性喪失の例外の表示】特許法第30条第1項適用申請有り  2002年3月28日〜29日 開催の「2002年度春季研究発表会」において文書をもって発表
【出願人】(301042480)国土交通省国土地理院長 (12)
【Fターム(参考)】