平らな土地の上で、HANDが8m近く跳んだ件
TL;DR
- HAND(Height Above Nearest Drainage)は標高ではなく「どの川に落ちるか」を測っている
- だから分水界をまたぐと不連続に跳ぶ。急斜面では分水界=尾根なので、これは自然なふるまい
- **合流部の平地では分水界が平らな所を通る。**そこでHANDが剥き出しに跳ぶ
- 実例:起伏2.4mしかない平地で、HANDが0.5m以下から10m近くまで跳んだ
- 同じ高さの477地点が、HANDの全6段階に散らばった
- これはバグではなく定義どおりの挙動。ただし地図にして人に見せると、ほぼ確実に誤読される
何をしていたか
ある自治体の内水・外水のリスクマップを作っていました。使ったのは公開されている航空レーザ測量の0.5mメッシュ標高と、そこから作った5m格子のDEM。外水側の指標として HAND を採用し、川からの高さを6段階(0.5m以下/1/2/3/5/10m)に段彩して地図に載せています。
HANDの計算は WhiteboxTools の定番の流れです。
breach_depressions_least_cost(dist=100, fill=True)
→ d8_flow_accumulation
→ streams = facc >= しきい値 # 集水面積で河道網を決める
→ elevation_above_stream # これがHAND
地図は動いていました。数字も出ていました。現地に行くまでは。
現地で気づいたこと
防災まち歩きの下見で、ある施設の敷地に立ちました。敷地を見る限り、ほぼ平坦です。
ところがリスクマップを見ると、同じ敷地の中でHANDが
- 西側:9m近く(いちばん薄い帯)
- 東側:1m前後(いちばん濃い帯)
に割れている。段彩の境界が、敷地の真ん中をギザギザに通っていました。
HANDという面そのものに段差がありました。
HANDは標高を測っていない
定義を確認します。
ある升のHAND=その升から水が流れ下って、最初にぶつかった河道升との標高差
測っているのは「海面からの高さ」でも「近くの川までの高さ」でもありません。D8の流路を辿った先にある河道升との差です。だから次の性質を持ちます。
- 同じ河道に落ちる範囲の中では、HANDは地形どおりに滑らかに変わる
- 分水界をまたぐと、2つの流下先の標高差のぶんだけ不連続に跳ぶ
左のような普通の地形では、分水界は尾根の上にあります。分水界の両側で地盤の高さも変わるので、HANDが跳んでも誰も不思議に思いません。むしろ自然に見えます。
問題は右です。支流と本川の合流部の平地では、分水界が平らな所を通ります。地盤は同じ高さなのに、HANDの値だけが跳ぶ。これが今回ぶつかったものでした。
実測1:断面で見る
施設を通る東西240mの断面を取りました。上が0.5mメッシュの地盤高、下がHANDの帯です。
**この240mで、地盤の起伏は1.6mしかありません。**それでもHANDの帯は階段状に動きます。
とくに分かりやすいのが西側です。
| 位置 | 地盤の高さ | HANDの帯 |
|---|---|---|
| x = 80 m | 3.20 m | 5〜10 m |
| x = 90 m | 3.10 m | 1〜2 m |
わずか10m隣。地盤の差は0.1m。それでHANDの帯が二段階飛んでいます。
断面の真ん中(x≈135m)に支流が流れていて、水面は周囲より1.4m低いだけです。その左右で帯が濃くなり、さらに離れると薄くなる。支流に落ちる範囲が細い筋になっているのが見えます。
実測2:平面で見る
同じ範囲を平面で並べます。上が地盤高、下がHAND。まったく同じ範囲、同じ縮尺です。
上の図はほぼ単色です。この260m×120mの範囲で、地盤の起伏は2.4mしかありません(1〜99パーセンタイル)。斜めに走る濃い線が支流の水面で、周囲より1〜1.5m低いだけです。
下の図はまったく違う絵になります。支流に沿って南北に細い濃い帯が走り、その両側が急に薄くなる。地形にはどこにも対応物がない境界線が、平地の上を通っています。
実測3:同じ高さの地点は、どの帯に入るか
いちばん端的な見方がこれです。10m格子で地点を拾い、地盤の高さ別に、HANDのどの帯に入っているかを数えました。
相対標高2.5mの地点が477ありました。その内訳は
0.5m以下 : 83
1m : 77
2m : 55
3m : 40
5m : 97
10m : 125
6段階すべてに散っています。
この範囲では、地盤の高さからHANDはほとんど予測できません。
流下先を逆算すると、答えが出る
ここで「地盤の高さ − HAND」を計算すると、その升が流れ込んだ河道升の標高が復元できます。敷地内の5点で計算したところ、流下先が2つしかありません。しかも 3点は3cm以内で一致しています。
距離を測ると意味が分かります。
| 支流 | 本川 | |
|---|---|---|
| 敷地内の5点 | 26〜104 m | 170〜224 m |
近くに支流、170〜220m先に本川がある。この2つの高さの差が 5.1m。
それがそのままHANDの段差になっています。
つまり西側の「9m」は「9m高い」という意味ではありません。「目の前の支流を素通りして、200m先の5m低い本川まで流れ下る」と計算された、という意味です。
なぜ分水界が、よりによってそこを通るのか
D8の向きを一本ずつ追ってはいませんが、分水界の線の位置に物理的な意味はほとんど無いと考えています。理由は3つ。
1. 平坦地のD8は、標高の最小単位で決まる
元データの標高は0.1m刻みです。平らな所では、隣接8方向のうちどれが「最も下る」かが0.1mの差で決まります。0.1mの差が、5m低い流下先への割り当てを決めてしまう。
2. 窪地処理が平坦地を掘り抜く
breach_depressions_least_cost は閉じた凹地や平坦地に水路を掘って流れを通します。その掘り抜きの経路が、そのまま分水界の位置になります。平地では経路の自由度が高く、わずかな数値差で動きます。
3. 支流が河道網に断続的にしか入っていない
HANDの濃い筋をよく見ると、途切れ途切れです。河道網は集水面積のしきい値で決めるので、支流が河道と判定される区間とされない区間が交互に現れます。河道でない区間のそばの升は、もっと遠くまで流れ下らないと河道に当たらない=HANDが大きく出ます。
何が困るのか
値が間違っているわけではありません。定義どおりに計算されています。再計算しても同じ値が出ます。
困るのは、地図にして人に見せたときの読まれ方です。
HANDの段彩は「濃いほど川に近い=危ない」という直感的な読み方をされます。すると薄い場所は「川から高い=安全」と読まれます。今回の敷地では、
- 薄い側(HAND 9m)の27m先に、1.4m下の支流がある
- 濃い側と薄い側で、現地のリスクは何も変わらない
「安全」と読める表示が、実際には何も保証していない。これは数字の問題ではなく、表示の問題です。
リスクマップの凡例には、「HANDは地形の指標で、浸水の深さでも範囲でもありません」と書いていました。でも「平坦地では隣り合う場所で数m跳ぶことがある」までは書いていなかったし、そもそも凡例の注意書きは読み飛ばされます。注記を増やす方向では解決しないと考えています。
どう扱うかの結論はまだ出ていません。
教訓
HANDは「谷の中かどうか」を見るには良い指標です。山がちな地形で、広域をざっと色分けするぶんには素直に効きます。
ただし平地では、隣接する升の値を比べてはいけません。HANDは連続的な場ではなく、流下先ごとの区分に値を貼ったものです。そのことは定義を読めば分かるのですが、地図にすると連続的な場に見えてしまう。
そして何より――
現地に行かないと、この種の誤りには気づけません。
数字は整合していました。再現もできました。統計的にもおかしな所はありませんでした。敷地に立ってリスクマップを見た瞬間に、初めておかしいと分かりました。



