高さ格子(DEM)から、傾斜・斜面方位・可視領域・流向を出します。いずれも閉形式と突き合わせられる量なので、実装の誤りを数字で捕まえられます。
From a height grid: slope, aspect, viewshed and flow direction. Each has a closed form to check against, so an implementation error shows up as a number.
向く: 測量・防災・インフラ点検・ロボットの通行判定。
向かない: 格子の刻みより細かい地形。★可視領域は 1 観測点ぶんしか出せません(複数点の和や走査計画は未実装)。★見かけの傾斜は、測線の継ぎ目で地形に無い崖を作ります ——poc_stockpile_volume で継ぎ目なし 2.99 度に対し継ぎ目あり 49.4 度。
import fullseye as fs
import numpy as np
dem = np.zeros((41, 41))
dem[20, 30] = 10.0 # 平地に立つ柱
vis = fs.ledger.dem_viewshed(dem, 1.0, (20, 5), observer_height_m=2.0)
print('柱は見えるか:', vis[20, 30] == 1.0)
dem_fill_sinks → dem_slope → dem_aspect → dem_flow_direction → dem_viewshed
dem_fill_sinks で窪地を埋め → dem_slope / dem_aspect で傾斜と方位 → dem_flow_direction で流向 → dem_viewshed で観測点からの可視領域。
見せるなら dem_hillshade、集水量は dem_flow_accumulation、測地座標の格子なら dem_geodetic_slope。
格子の刻みより細かい地形は出ない。可視領域は 1 観測点ぶん。測線の継ぎ目が地形に無い崖を作る(2.99 度 → 49.4 度、poc_stockpile_volume)。
cell_size [m] を渡す —— 傾斜は高さと格子間隔の比なので、単位が揃っていないと角度が全部ずれる。
dem_slope / dem_aspect / dem_viewshed / dem_flow_directionpoc_dem_terrain、dem_terrain_analysis_tour