雨水フロー追跡(river/waterarea停止 統合版)|説明書

生成日: 2026-01-29 / 対象ファイル: index.html / SHA-256: f79327a340202720e38601a830aeb1d153c664cf7fee361777a10213e5b8fccb
この説明書は、アップロードされた index.html の実装内容(関数 runFlow / WaterIndex / LineIndex / dijkstraPath 等)を読み取り、データ出典(一次情報)を付して整理したものです。

1. 概要

本ソフトは、Google Maps 上で起点をクリックすると、起点周辺の 道路中心線(GeoJSONタイル)をグラフ化し、 標高タイルを用いて「上りを避ける」コストで経路を探索し、水域面(waterarea)または 河川中心線に到達した地点で停止させる 1HTML アプリです。

重要:本ソフトは「実際の雨水排水(側溝・暗渠・下水・地形流向)」を厳密に再現するものではありません。
現行実装は「道路中心線ネットワーク上の経路探索」であり、地形の流向解析(D8等)は行っていません。

主な構成

  • ベース地図表示:Google Maps JavaScript API(表示・クリックUIのみ)
  • 道路中心線:experimental_rdcl(ズーム16の GeoJSON タイル)
  • 河川中心線:experimental_rvrcl(ズーム16の GeoJSON タイル)
  • 水域面:experimental_bvmap(MVT/PBF の waterarea などのポリゴンレイヤ)
  • 標高:PNG標高タイル(dem1a_png ほか、z=15→14の順で取得)

2. 使い方(最短)

  1. HTTPSで開く:Cloudflare Pages など https:// のURLで開いてください(file:// 直開きだと import() がブロックされます)。
  2. Google Maps API キーをHTMLに設定し、Google Cloud 側で HTTP referrer 制限Maps JavaScript API のみ許可を設定します。
  3. 画面左の「起点クリック(モードON)」を押す → 地図上をクリック。
  4. ログに「起点標高」「グラフ再構築」「経路計算」を出し、経路が青線で描画されます。
  5. 停止点(水域面/河川)に到達すると、停止理由がログに出ます。
よく使う設定(推奨)
stopMode=auto waterLayer=waterarea waterZ=14 riverSnapM=30 riverGateWaterM=20 uphillPenalty=15

3. ロジック(経路算定の仕組み)

3.1 入力→計算の全体フロー(runFlow)

処理内部の要点
1起点クリッククリックした経緯度(lon/lat)を起点として計算開始。
2タイル取得(道路/河川/水域) experimental_rdcl, experimental_rvrcl を起点周辺で取得(半径 tileRadius)。
水域は experimental_bvmap のPBFを waterZ で取得し、指定レイヤ(既定 waterarea)のポリゴンを抽出。
3道路グラフ構築 rdcl の LineString/MultiLineString を分解し、隣接点を辺(Edge)として登録。
ノードは座標(lon/lat)をそのままキー化して作成(交差点スナップの追加処理はなし)。
4起点スナップ起点に最も近いノードを探索し、開始ノードに設定。
5目標ノード選定(pickTargetNode) auto:水域面(優先)または河川中心線に最短距離のノードを候補に。
waterOnly:水域面のみ。riverOnly:河川中心線のみ。
6Dijkstra 探索(dijkstraPath) コスト:edgeCost = 距離(m) + uphillPenalty × max(0, 標高差)
標高は PNG標高タイル(z=15→14、dem1a_png→dem5a_png→...)で取得し、エッジ両端の標高差で加算。
7停止判定しながらトレース 経路ノード列を順に辿り、maxSteps 以内で停止条件を満たしたら停止。
水域停止:ポリゴン内ヒット(+近傍許容 waterSnapM)。
河川停止riverSnapM以内 かつ riverGateWaterM以内に水域面が存在(誤停止抑制)。

3.2 標高の取得(PNG標高タイル)

取得順:z=15z=14 の順、各ズームで dem1a_pngdem5a_pngdem5b_pngdem5c_pngdem10b_png の順でフォールバックします。
RGB→標高の変換は、国土地理院の仕様(0.01m単位、無効値 128,0,0)に従います。

3.3 停止条件(誤停止対策)

  • 水域面で停止waterLayer=waterarea のポリゴン内に入った時点で停止(waterSnapMで近傍許容)。
  • 河川中心線で停止:単に河川中心線に近いだけだと、用水路/誤差等で止まりやすいので、riverGateWaterMで「水域面が近くにある河川」だけを停止対象にします。
  • 線分交差での停止:経路線分が河川中心線と交差した場合、交点で停止(ただし水域ゲート条件を満たす場合)。
“川まで届かない”典型要因:
(1) maxSteps が小さい/(2) 目標ノード選定が近傍の水域/河川を拾えていない/(3) ゲート条件が厳しすぎる(riverGateWaterM小)/(4) 水域面のズームやタイル範囲不足。
対処は「7. トラブルシュート」「5. パラメータ」を参照。

4. 使用データと出典

4.1 本ソフトが参照するURL(テンプレ)

用途URLテンプレ備考
道路中心線(GeoJSON) https://cyberjapandata.gsi.go.jp/xyz/experimental_rdcl/{z}/{x}/{y}.geojson z=16固定(提供実験)
河川中心線(GeoJSON) https://cyberjapandata.gsi.go.jp/xyz/experimental_rvrcl/{z}/{x}/{y}.geojson z=16固定(提供実験)
水域面(MVT/PBF) https://cyberjapandata.gsi.go.jp/xyz/experimental_bvmap/{z}/{x}/{y}.pbf レイヤ名は waterarea 等(提供実験)
標高(PNG) https://cyberjapandata.gsi.go.jp/xyz/{layer}/{z}/{x}/{y}.png layerは dem1a_png 等

4.2 出典(一次情報)

資料名URL発行日/更新日(明記がある場合)
国土地理院 標高タイル(PNG標高タイル:RGB→標高値の算出) https://maps.gsi.go.jp/development/demtile.html 発行日記載なし(閲覧日: 2026-01-29)
国土地理院 地理院タイル一覧(タイル提供と出典明示の考え方) https://maps.gsi.go.jp/development/ichiran.html 発行日記載なし(閲覧日: 2026-01-29)
国土地理院ベクトルタイル提供実験(GeoJSONタイル:道路中心線/河川中心線 等) https://github.com/gsi-cyberjapan/vector-tile-experiment 提供開始: 2015-08-03(全国) ※README記載
experimental_rdcl(道路中心線 GeoJSONタイル) https://github.com/gsi-cyberjapan/experimental_rdcl 提供実験期間: 2014-08-01〜(README記載)
experimental_rvrcl(河川中心線 GeoJSONタイル) https://github.com/gsi-cyberjapan/experimental_rvrcl 履歴: 2015-08-03(全国提供開始)※README記載
地理院地図Vector提供実験(MVT/PBF: experimental_bvmap) https://github.com/gsi-cyberjapan/gsimaps-vector-experiment データ更新情報: 2025-10-01時点(README記載)
地理院地図 利用規約(免責・利用条件の入口) https://maps.gsi.go.jp/help/termsofuse.html 発行日記載なし(閲覧日: 2026-01-29)
Google Maps Platform APIキーの制限ベストプラクティス https://developers.google.com/maps/api-security-best-practices 発行日記載なし(閲覧日: 2026-01-29)
Maps JavaScript API エラーメッセージ一覧(RefererNotAllowed等) https://developers.google.com/maps/documentation/javascript/error-messages 発行日記載なし(閲覧日: 2026-01-29)
提供実験データの扱い:国土地理院のベクトルタイルは「提供実験中のデータであるため、URLやデータ構成が変わる可能性」が明記されています。運用時は、変更告知(例:公式アナウンス)を前提にしてください。

5. パラメータ一覧

画面左パネルの「パラメータ」に露出している項目の一覧です(既定値はHTMLの初期値)。

パラメータ(表示名) 既定値 意味 選択肢
道路/河川タイル半径(初期)
tileRadius
1 道路中心線(rdcl)・河川中心線(rvrcl)タイルを起点周辺で読む初期半径(タイル枚数の半径)。1なら(2*1+1)^2=9枚。
道路/河川タイル半径(最大)
maxTileRadius
3 上記の最大半径。現行コードは「経路が見つかった時点」で確定し、停止判定未検出でも半径拡張による再試行はしません(後述)。
水域PBFズーム(water)
waterZ
14 水域面(MVT/PBF: experimental_bvmap)を読むズーム。大きいほど詳細だがタイル数/デコード負荷が増えます。
水域レイヤー
waterLayer
waterarea experimental_bvmap 内の参照レイヤ名。現行実装は「ポリゴン(type=3)」のみ抽出するため、線レイヤは0件になり得ます。
  • waterarea:waterarea(水面ポリゴン)
  • river:river
  • lake:lake
  • coastline:coastline
水域停止距離(m)
waterSnapM
0 水域停止の“近傍許容(m)”。0なら「ポリゴン内に入った時のみ」停止(境界の誤差吸収をしたい場合は数m)。
河川近接距離(m)
riverSnapM
30 河川中心線(rvrcl)に近づいたら停止と見なす距離(m)。
河川停止ゲート(水域近傍m)
riverGateWaterM
20 河川停止を“水域面でゲート”する距離(m)。河川中心線に近くても、水域面(waterarea)が近傍になければ停止しない(誤停止抑制)。
上り罰則(標高差×係数)
uphillPenalty
15 Dijkstraのコストに上り勾配(正の標高差)を加算する重み。大きいほど“下り優先”になります。
最大ステップ数
maxSteps
2000 停止判定をしながら経路を辿る最大ステップ数。経路が長い場合、ここで打ち切られて「川まで到達しない」状態になります。
停止モード
stopMode
auto 停止条件モード。auto=水域優先+河川はゲート付き、水域面のみ、河川中心線のみ。
  • auto:auto(推奨:水域優先+河川はゲート付き)
  • waterOnly:水域面のみ(waterareaのみ)
  • riverOnly:河川中心線のみ(rvrcl)
水域デバッグ描画
waterDbg
OFF デバッグ描画。POLY=水域ポリゴン、BBOX=候補枠(端末が重い場合はOFF推奨)。
  • OFF:OFF
  • POLY:POLY(水域面)
  • BBOX:BBOX(候補枠)
水域デバッグ半径(m)
waterDbgRadiusM
800 デバッグ可視化の探索半径(m)。大きいほど候補が増えて重くなります。
水域デバッグ最大描画数
waterDbgMaxDraw
200 デバッグ描画の最大件数。
水域ログ
waterLog
stopOnly ログの詳細度。毎ステップはログ量が増えて端末が重くなります。
  • stopOnly:止点のみ詳細
  • all:毎ステップ
  • off:OFF

推奨調整例

  • 川まで届かない:まず maxSteps を増やす(例:2000→5000)。次に riverGateWaterM を少し緩める(20→40)。
  • 川でない場所で止まるriverGateWaterM を大きくしすぎない/stopMode=waterOnlyで水面ポリゴンに限定。
  • 水域面に入っているのに止まらないwaterSnapM を数m(例:5〜15)にする(境界誤差吸収)。
  • 重いtileRadiusを小さく、waterDbg=OFFwaterLog=stopOnly

6. 注意事項(精度・免責・運用)

6.1 精度・用途の限界

  • 道路中心線上の経路探索であり、側溝/暗渠/下水道網・敷地内の微地形・越流等はモデル化していません。
  • 標高は地理院のDEMに基づきますが、解像度や欠損(無効値)・更新タイミングの影響を受けます。
  • 提供実験データ(rdcl/rvrcl/bvmap)は、将来URLや属性が変更される可能性があります。

6.2 免責・利用条件

地理院タイルは「国土地理院コンテンツ利用規約」に従って利用する必要があります。
また地理院地図サービスには免責(損害について責任を負わない等)・負荷時のアクセス遮断等が明記されています。運用上はキャッシュ・過度な連続クリックの抑制を推奨します。

6.3 セキュリティ(APIキー)

  • Google Maps APIキーは HTTP referrer 制限(Pagesのドメイン許可)と API制限(Maps JavaScript APIのみ)を推奨します。
  • HTMLに埋め込む場合でも制限設定を前提にし、漏えい時はキーのローテーション手順を用意してください。

7. つまずきポイント(トラブルシュート)

症状原因候補対処
地図が「読込中」のまま/RefererNotAllowedMapError APIキーのHTTPリファラ許可にPagesのURLが入っていない Google Cloud Consoleで「アプリケーションの制限(HTTP referrers)」に https://<your-site>/* を追加
「依存モジュールが読めません」 esm.sh の import() が失敗(広告ブロッカー/社内NW/HTTPSでない) 広告ブロッカー停止、社内NWの許可、必ずHTTPSで開く
「川まで到達しない」 maxSteps不足/ゲート条件が厳しい/目標ノード選定不適 maxSteps増、riverGateWaterM緩和、stopMode切替(waterOnly/riverOnly)
「川じゃない所で止まる」 河川中心線の近傍判定が広い/水域ゲートが緩すぎる riverSnapMを小さく、riverGateWaterMを適正化、stopMode=waterOnlyで確認
動作が重い タイル数・デバッグ描画・ログ量が多い tileRadius↓、waterDbg=OFFwaterLog=stopOnly

8. 既知の制限と改善案

8.1 既知の制限(現行実装そのまま)

  • 交差点でのノード統合がない:rdclが交差で分割されていない箇所では、グラフが繋がらない可能性があります。
  • 半径拡張の再試行が限定的:現行は「経路が取れた時点」で確定し、停止未検出でも半径を上げて再探索しません。
  • “道路の無い敷地内”を横断するように見える:道路中心線は線データなので、実際の地物(敷地境界/私道/非道路空間)制約は持ちません。

8.2 改善案(次の改修で入れると効く)

  • 停止未検出の場合のみ、tileRadiusを段階的に増やして再試行する(到達率向上)。
  • rdclノードを「座標の丸め(例:1e-6)」で統合し、交差点の連結性を向上。
  • 水域面の候補タイルを経路沿いにも追随して追加ロード(現行は起点中心が主)。
  • DEM流向(D8等)を併用し、道路中心線に偏らない“地形流下”モードを追加。

付録:この説明書を同梱する運用

  • 本ファイル(説明書HTML)をアプリと同じディレクトリに置き、README.htmlとして配布すると、社内教育が楽です。
  • Cloudflare Pages 配布時は、/manual.html として同一サイトで公開すると、APIキーのリファラ許可範囲内で閲覧できます。