太阳辐射图 (空间分析)
摘要
获得用于计算直接太阳辐射、散射太阳辐射和整体太阳辐射的半球视域、太阳图和星空图的栅格表达。
用法
-
太阳辐射图工具的输出是与太阳辐射区域分析或太阳辐射点分析的输出相对应的栅格表达,而不是地图。更确切地说,这些输出是从给定位置仰视的方向半球中各方向的栅格表达。在半球投影中,中心是天顶,圆形“地图”的边是地平线,相对于天顶的角度与半径成比例。半球投影没有地理坐标系,其左下角为 (0,0)。
-
将所有位置的视域存储在 DEM 中是不可行的,所以在未指定输入位置时,仅为输入表面栅格的中心创建一个视域。指定输入点要素或位置文件时,将为每个输入位置创建多个视域栅格。指定多个位置时,默认输出格式为 ESRI GRID 堆栈,其中包含与每个位置的视域对应的多个波段。
-
输入位置表可以是 INFO 表、.dbf 文件、Access 表或文本文件。
-
输出图形显示栅格不支持范围或像元大小环境设置。输出范围始终与星空大小/分辨率有关,而像元大小等于一。但是,基础分析将使用环境设置,因此可能影响视域结果。
-
系统可能生成一两个太阳图栅格,具体情况取决于时间配置在一年中是否包括叠置的太阳位置。创建两个太阳图时,其中一个太阳图表示冬至到夏至之间的期间(12 月 22 日到 6 月 22 日),另一个太阳图则表示夏至到冬至之间的期间(6 月 22 日到 12 月 22 日)。创建多个太阳图时,默认输出是 ESRI GRID 堆栈。当该输出被添加到 ArcMap 时,将仅显示第一个波段。
-
太阳赤纬和太阳位置等计算中使用位置区域的纬度(单位:十进制度,北半球为正,南半球为负)。
分析仅针对局部景观尺度,因此,通常可以为整个 DEM 使用一个纬度值。对于更大的数据集(如州、国家或大洲),不同纬度(大于 1 度)处的日照结果将明显不同。要对更广的地理区域进行分析,有必要将研究区域按纬度分割为不同的区。
-
对于包含空间参考的输入表面栅格数据,会自动计算平均纬度;否则,纬度将默认为 45 度。使用输入图层时,将使用数据框的空间参考。
-
天空大小是辐射计算中使用的视域、天空图和太阳图栅格数据的分辨率(单位:每边像元数)。这些是天空的仰视半球栅格表示,没有地理坐标系。这些格网为正方形(行和列数相等)。
增加天空大小会提高计算精度,但也会显著增加计算时间。
-
如果“间隔天数”的设置较小(例如,< 14 天),则应使用较大的天空大小。分析期间,太阳图(取决于天空大小)用于表示特定时间段的太阳位置(轨迹)以计算直接辐射。对于更小的间隔天数,如果天空大小分辨率不是足够大,太阳轨迹可能重叠,从而导致该轨迹的辐射值为零或更低。增加分辨率可获得更精确的结果。
-
最大天空大小值为 4000,默认值为 200。对于具有大间隔天数(例如 > 14 天)的整个 DEM 而言,默认值已经足够。如果某点位置处的计算无需考虑计算时间,512 的天空大小值便以足够。对于更小的间隔天数(例如 < 14 天),建议使用更大的值。例如,要以间隔天数 1 计算赤道上某一位置的日照,建议使用 2800 或更大的天空大小。
-
建议间隔天数大于 3,因为三天内的太阳轨迹通常会重叠,具体取决于天空大小和年中的时间。使用月间隔计算整年的数据时,日间隔将被禁用,并且程序在内部使用日历月间隔。默认值为 14。
-
因为视域计算可能极为耗时,因此只针对指定的计算方向数跟踪视角。有效值必须是 8 的倍数(8、16、24、32,依此类推)。通常,值 8 或 16 适合于地形平缓的区域,而值 32 适合于复杂地形。默认值为 32。
-
所需的计算方向数与输入 DEM 的分辨率有关。分辨率为 30m 的自然地形通常相当平滑,因此多数情况下较小的方向数就足够了(16 或 32)。对于更精细的 DEM,尤其是当 DEM 中合并有人造建筑时,需要增加方向数。增加方向数会提升精度,但也会增加计算时间。
语法
参数 | 说明 | 数据类型 |
in_surface_raster |
输入高程面栅格数据。 | Raster Layer |
in_points_feature_or_table (可选) |
指定位置以分析太阳辐射的输入点要素类或表。 | Feature Layer | Table View |
sky_size (可选) |
视域、天空图和太阳图格网的分辨率或天空大小。单位为像元。 默认情况下会创建 200 x 200 像元的栅格。 | Long |
height_offset (可选) |
要执行计算的 DEM 表面之上的高度(以米为单位)。 高度偏差将应用到所有输入位置。 | Double |
calculation_directions (可选) |
计算视域时使用的方位角方向数。 有效值必须是 8 的倍数(8、16、24、32,依此类推)。默认值为 32 个方向,该值适用于复杂地形。 | Long |
latitude (可选) |
位置区域的纬度。单位为十进制度,北半球为正值,南半球为负值。 对于包含空间参考的输入表面栅格数据,会自动计算平均纬度;否则,纬度将默认为 45 度。 | Double |
time_configuration (可选) |
指定用于计算太阳辐射的时间配置(时段)。 时间类对象用于指定时间配置。 可用的不同类型的时间配置为:TimeWithinDay、TimeMultiDays、TimeSpecialDays 和 TimeWholeYear。 格式如下:
默认时间配置为 TimeMultiDays,其中 start_day 为 5 且 end_day 为 160(当前儒略年)。 | Time configuration |
day_interval (可选) |
用于为太阳图计算天空分区的一年中的时间间隔(单位:天)。 默认值为 14(两周)。 | Long |
hour_interval (可选) |
用于为太阳图计算天空分区的一天中的时间间隔(单位:小时)。 默认值为 0.5。 | Double |
out_sunmap_raster (可选) |
输出太阳图栅格。 该输出是指定太阳轨迹(即,太阳随着时间的推移而发生变化时所处的明显位置)的栅格表达。该输出的分辨率与视域和星空图相同。 | Raster Dataset |
zenith_divisions (可选) |
用于创建天空图中的天空分区的分割数。 默认值为八个分割(相对于天顶)。值必须大于零并且小于天空大小值的一半。 | Long |
azimuth_divisions (可选) |
用于创建天空图中的天空分区的分割数。 默认值为八个分割(相对于北方)。有效值必须是 8 的倍数。值必须大于零并且小于 160。 | Long |
out_skymap_raster (可选) |
输出星空图栅格。 可通过将整个星空分成一系列由天顶分割和方位角分割定义的天空扇区来构造输出。该输出的分辨率与视域和太阳图相同。 | Raster Dataset |
返回值
名称 | 说明 | 数据类型 |
out_viewshed_raster |
输出视域栅格。 生成的某一位置的视域表示哪些星空方向可见,哪些星空方向模糊不清。这与通过仰视半球(“鱼眼镜头”)照片提供的视角类似。 | Raster |
代码示例
以下 Python 窗口脚本演示了 SolarRadiationGraphics 工具的使用方法。
import arcpy from arcpy import env from arcpy.sa import * env.workspace = "C:/sapyexamples/data" outViewshedMap = SolarRadiationGraphics("elevation", "observers.shp", 200, 2, 32, 52, TimeMultipleDays(2009, 91, 212), 14, 0.5, "c:/sapyexamples/output/sunmap", 8, 8, "c:/sapyexamples/output/skymap") outViewshedMap.save("c:/sapyexamples/output/viewmap")
创建用于太阳辐射分析的视域、太阳图和星空图。
# Name: SolarRadiationGraphics_Ex_02.py # Description: Derives raster representations of a hemispherical viewshed, # sunmap, and skymap, which are used in the calculation of direct, diffuse, # and global solar radiation. # Requirements: Spatial Analyst Extension # Import system modules import arcpy from arcpy import env from arcpy.sa import * # Set environment settings env.workspace = "C:/sapyexamples/data" # Set local variables inRaster = "elevation" pntFC = "observers.shp" skySize = 200 zOffset = 2 directions = 32 latitude = 52 timeConfig = TimeMultipleDays(2009, 91, 212) dayInterval = 14 hourInterval = 0.5 outSunMap = "c:/sapyexamples/output/sunmap" zenDivisions = 8 aziDivisions = 8 outSkyMap = "c:/sapyexamples/output/skymap" # Check out the ArcGIS Spatial Analyst extension license arcpy.CheckOutExtension("Spatial") # Execute SolarRadiationGraphics outViewshedMap = SolarRadiationGraphics(inRaster, pntFC, skySize, zOffset, directions, latitude, timeConfig, dayInterval, hourInterval, outSunMap, zenDivisions, aziDivisions, outSkyMap) # Save the output outViewshedMap.save("c:/sapyexamples/output/viewmap")