visibility op• 数据种类:depth → image2d
• 调用: import fullseye as fs; fs.ledger.dem_viewshed(dem, cell_size, observer_rc, observer_height_m=1.7, target_height_m=0.0, max_distance_m=None)(要直接调用实现,import demops; demops.dem_viewshed(dem, cell_size, observer_rc, observer_height_m=1.7, target_height_m=0.0, max_distance_m=None);从台账取用则 opsdem.get("dem_viewshed"))
从 1 个点出发的可视区域(1 = 可见)。判定视线是否被地形遮挡。
observer_rc 为 (row, col)。观测点本身始终可见。
步骤:眼睛高度 eye = z[observer] + observer_height_m。将到各单元格的视线 ceil(hypot(H, W)) 等分,若途中地形的仰角 (z_mid - eye) / d_mid 有超过目标仰角 (z + target_height_m - eye) / d 的单元格,则为遮挡(0)。途中的点舍入到最近邻单元格,因此斜向视线含有网格误差。不考虑地球曲率与大气折射(超过数 km 时另行修正)。
• dem:(H, W) [m],3x3 以上,拒绝哨兵值(与 dem_slope 相同的约定)。nan 单元格因比较为假,既不遮挡也不被遮挡,保持为 1。
• cell_size:[m],正值。用于距离判定。
• observer_rc:网格内的 (row, col) 整数。超出范围或不是 pair 则为 ValueError。
• observer_height_m / target_height_m:离地高度 [m]。默认为眼睛高度 1.7 m 与地表 0 m。若求铁塔的可视域,则调高 observer_height_m。
• max_distance_m:比这更远的单元格为 0(省略时无限制)。
• 返回值:(H, W) float64 的 1 / 0。观测点始终为 1。
• 计算量:整个网格 × ceil(hypot(H, W)) 次向量运算。
dem_horizon_angle / dem_sky_view_factor 则反过来给出“从各单元格能看到多少天空”。
• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。
• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。
• 算法的正典(作者、年份)与用途见上面的族使用指南。
• dem_terrain_analysis_tour — py -3.11 examples/dem_terrain_analysis_tour.py
• poc_stockpile_volume — py -3.11 examples/poc_stockpile_volume.py
image2d 作为输入)—
visibility)dem_horizon_angle · dem_sky_view_factor
*Provenance: demops.py — DEM 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.