什么是可视率?
可视率是指在给定位置观察时能够看到的地形或景观的程度。在地理信息系统 (GIS) 和地理空间分析中,可视率通常是指从一个特定点观察周围地形时,所能观察到的区域的百分比或比例。
在数字高程模型 (DEM) 中,可视率通常用于确定地形的视域范围。较高的可视率意味着观察点能够看到更广阔的地形,而较低的可视率则表示有更多的地形被其他地形或障碍物所遮挡,观察者无法看到。
计算可视率通常涉及分析数字高程模型以确定从观察点向各个方向的地形高度。任何被周围地形或物体遮挡的地区都会减少可视率。这种分析对于城市规划、环境评估、通讯信号覆盖分析等领域都非常重要,因为它可以帮助确定最佳观察点、通信塔位置等。
使用【ArcMap】-【3D Analyst工具】,可以对数据进行通视分析。
图中绿色区域就是可视部分。
形象一点就是这样:
在ArcMap里只能实现一条视线上的通视,代码可以实现一整片区域的通视。
以下是使用python实现通视分析的代码,在使用时记得修改观察者高度。
from osgeo import gdal
def calculate_sky_visibility(dem_path, observer_height):
# 打开 DEM 文件
dem_dataset = gdal.Open(dem_path)
if dem_dataset is None:
print("无法打开 DEM 文件")
return
# 读取 DEM 数据
dem_array = dem_dataset.ReadAsArray()
# 获取 DEM 的地理转换信息
transform = dem_dataset.GetGeoTransform()
cell_size_x = transform[1]
cell_size_y = transform[5]
# 计算 DEM 的宽度和高度
cols = dem_dataset.RasterXSize
rows = dem_dataset.RasterYSize
# 计算观察者在 DEM 上的位置
observer_row = int((observer_height - transform[3]) / cell_size_y)
# 计算可见天空的像素数
visible_pixels = 0
for row in range(rows):
for col in range(cols):
# 跳过观察者位置以下的像素
if row >= observer_row:
break
# 检查当前像素是否被 DEM 遮挡
if dem_array[row][col] < observer_height:
visible_pixels += 1
# 计算可视率
total_pixels = rows * cols
visibility_percentage = (visible_pixels / total_pixels) * 100
return visibility_percentage
# DEM 文件路径
dem_path = "path/to/your/dem.tif"
# 观察者高度(以米为单位)
observer_height = 2.0 # 例如,2 米高的观察者
# 计算可视率
visibility = calculate_sky_visibility(dem_path, observer_height)
print("天空的可视率为: {:.2f}%".format(visibility))
还有 可见性分析 visibility
和之前可视域分析不同的地方在于,它可以输出所有的可视区域,而不只是一条视线上的可视区域
大家到官网看,官网说得更清楚