Label | Explanation | Data Type |
Input Surface Raster | The input elevation surface raster. | Raster Layer |
Input Point or Polygon Features | The input features (point or polygon) that represent a location or engineered surface to calculate the amount of solar radiation received. | Feature Layer |
Unique ID Field | The field that contains the values that define each feature. It can be an integer or a string field of the input features. | Field |
Output table | The output table that will contain the summary of the amount of solar radiation received by the input features The format of the table is determined by the output location and path. By default, the output will be a geodatabase table if in a geodatabase workspace, or a dBASE table if in a file workspace. | Table |
Start Date and Time | The start date and time for the analysis. | Date |
End Date and Time | The end date and time for the analysis. | Date |
Time Zone (Optional) | The time zone that will be used for the start and end time. The default is coordinated universal time (UTC).
| String |
Adjust times for daylight saving time (Optional) | Specifies whether the input time configuration will be adjusted for daylight saving time. This parameter is not applicable for analysis on the Moon.
| Boolean |
Calculate insolation for time intervals (Optional) | Specifies whether a single total insolation value will be calculated for the entire time configuration or multiple radiation values will be calculated for the specified interval.
| Boolean |
Time Interval Unit (Optional) | Specifies the time unit that will be used for calculating solar radiation values over the entire time configuration. This parameter is only available when the Calculate insolation for time intervals parameter is checked.
| String |
Time Interval (Optional) | The value of the duration or time between intervals. The default value is dependent on the interval unit specified. The default value for each of the available units are listed below.
| Long |
Feature Offset (Optional) | A vertical distance that will be added to the raster surface for analysis. It must be a positive integer or floating-point value. You can select a field from the input features dataset, or you can provide a numerical value. For example, if the object is a panel, provide the height of the panel. If a value is provided for this parameter, that value will be used by all features. To specify different values for each individual feature, select a field from the input features dataset. The default value is 0. | Double; Field |
Feature Area (Optional) | The area associated with the input features. It must be a positive integer or floating-point value. You can select a field from the input features dataset, or you can provide a numerical value. For example, if the object is a panel, provide the area of the panel. If a value is provided for this parameter, that value will be used by all features. To specify different values for each individual feature, select a field from the input features dataset. By default, the area is obtained from the input features. For point features, the default area is 0. | Double; Field |
Feature Slope (Optional) | The relative slope or incline associated with the input features. It must be a positive integer or floating-point value. You can select a field from the input features dataset, or you can provide a numerical value. For example, if the object is a panel, provide the incline of the panel. If a value is provided for this parameter, that value will be used by all features. To specify different values for each individual feature, select a field from the input features dataset. Slope is expressed in degrees from 0 to 90. The default values for analysis are calculated from the underlying values of the input surface raster. | Double; Field |
Feature Aspect (Optional) | The relative aspect or direction associated with the input features. It must be a positive integer or floating-point value. You can select a field from the input features dataset, or you can provide a numerical value. For example, if the object is a panel, provide the direction of the panel face. If a value is provided for this parameter, that value will be used by all features. To specify different values for each individual feature, select a field from the input features dataset. Aspect is expressed in degrees from 0 to 360. The default values for analysis area calculated from the underlying values of the input surface raster. | Double; Field |
Neighborhood Distance (Optional) | The distance from the target cell center for which the output insolation value will be calculated. It determines the size of the neighborhood. The default value is the input surface raster cell size, resulting in a 3 by 3 neighborhood. | Linear Unit |
Use Adaptive Neighborhood (Optional) | Specifies whether neighborhood distance will vary with landscape changes (adaptive). The maximum distance is determined by the neighborhood distance. The minimum distance is the input raster cell size.
| Boolean |
Diffuse Model Type (Optional) | Specifies the type of diffuse radiation model that will be used.
| String |
Diffuse Proportion (Optional) | The proportion of global normal radiation flux that is diffuse. Values range from 0 to 1. Set this value according to atmospheric conditions. The default value is 0.3 for generally clear sky conditions. | Double |
Transmittivity (Optional) | The fraction of radiation that passes through the atmosphere (averaged overall wavelengths). Values range from 0 (no transmission) to 1 (all transmission). The default is 0.5 for a generally clear sky. | Double |
Target Device for Analysis (Optional) | Specifies the device that will be used to perform the calculation.
| String |
Output Join Layer (Optional) | The output layer that will be created by joining the output table to the input feature class. This is an optional output. | Feature Layer |
Sun Map Grid Level (Optional) |
The resolution that will be used to generate the H3 hexagonal grid cells used for internal calculations. A lower grid level value creates fewer, larger sun map areas and decreases tool run time. A higher grid level creates more smaller sun maps improving the accuracy of the result. Valid values of the sun map grid level for Earth range from 5 to 7. For the Moon, the valid value range is from 4 to 6. By default, the grid level is determined by the input surface raster. When analyzing surface data on Earth, if the analysis cell size is less than or equal to 4 meters, the default grid level is 6. If the analysis cell size is greater than 4 meters, the default grid level is 5. For analyzing surface data on the Moon, the default grid level is 6. | Long |
Summary
Calculates the incoming solar insolation for input points or polygon features relative to the surface (ground) on Earth or the Moon.
The input features can represent locations or engineered surfaces by specifying attributes to define size, height, and orientation for analysis relative to the ground. Solar insolation is calculated as the amount of solar radiation energy received during an amount of time for each feature. Values are represented as totals and averages for the area of the feature and have units, kilowatt hours (kWh) and kilowatt hours per square meter (kWh/m2), respectively.
Usage
The defined spatial reference of the Input surface raster parameter specifies whether the analysis will be for Earth or the Moon.
The solar radiation computation requires the Output Coordinate System environment value to be in a projected coordinate system (PCS). It is recommended that the data be in a PCS with units of meters. If you run the analysis with a spherical coordinate system, you must set the Output Coordinate System environment to a valid PCS.
The input features must be point or polygon feature data. Analysis on 3D or multipatch are not supported.
You can include additional details to represent engineered surfaces using the input feature parameters by specifying direction, tilt, area, and offset for all or individual features, for example, to represent a set of points as solar panel arrays on the ground or building rooftop.
It is recommended that you specify the output table format as geodatabase. This allows for increased performance and greater functionality. Tables in dBase file format (.dbf) have known limitations in precision, field name lengths, and date and time formatting.
The calculated solar insolation values for total, direct, diffuse, and direct duration are added as attributes to the output table. These include values for total insolation (across the entire area) and average insolation (per unit area) of each feature. The units are kilowatt hours (kWh) and kilowatt hours per meter squared (kwh/m2), respectively. Duration units are hours.
The total insolation is calculated by analyzing each cell location of the input surface raster that intersects the feature (or part thereof) and multiplying it by that feature's area. It is not calculated for a single central location of the feature.
If you are running an analysis for large extents with few or highly dispersed polygon features, the process may take additional time due to the resolution required for rasterization.
The Feature Slope, Feature Aspect, Feature Area, and Feature Offset parameters can be used to provide additional details to represent engineered surfaces that may intercept the incoming solar radiation, such as direction, tilt, area, and offset. These may be static or changing position and orientation in time. For example, a set of points that represent solar panel arrays on the ground or building rooftop, or a panel on a moving vehicle.
If the feature parameters are not specified, the values are calculated from the input surface raster or the individual features by default. Points have an area of zero unless otherwise specified.
If you provide a value for any of these parameters, it will be applied to all input features. Alternatively, you can provide an input field attribute from the input features to analyze each feature individually. If a field is specified and a value is missing (Null), the value will be set as zero.
Daylight saving time is supported for Earth only. For the Moon, times must be specified in UTC.
The End date and time parameter value must be equal to or greater than the start date. The total span of time must not be greater than one year. The start and end date times can cross the calendar year.
Output radiation values will be calculated for each respective time interval. If no solar radiation was received for a time interval, the result for that location will have a value of zero.
If the total time specified between the start and end times is not equally divisible by the time interval, the total duration will be extended internally to provide the required number of time slices. For example, if the Time Interval parameter is set to cover three days but the difference between the specified start and end times covers eight days, the time interval will be extended to nine days. No partial results for times will be returned.
The minimum time interval for Earth data is 30 minutes and must be proportional to 30. The minimum time interval for Moon data is two hours and must be proportional to 2.
The Neighborhood Distance (neighborhood_distance in Python) parameter determines the neighborhood size and calculates the surface parameter over this distance from the target cell center. The value cannot be less than the input raster cell size.
A small neighborhood distance captures more local variability in the landscape, such as characteristics of smaller landscape features. With high-resolution elevation data, larger distances may be more appropriate.
If the Use adaptive neighborhood parameter is checked (use_adaptive_neighborhood = "ADAPTIVE_NEIGHBORHOOD" in Python), the neighborhood distance will change with variability in the terrain. The neighborhood distance will shrink if there is too much variability in the calculation window.
Earth's Moon does not have an atmosphere; the radiation parameters diffuse proportion and transmittivity are not relevant during analysis. As a result, the incoming diffuse solar radiation is zero and the total radiation is equal to direct solar radiation.
The diffuse proportion is the fraction of global normal radiation flux that is diffuse. Values range from 0 to 1. Set this value according to atmospheric conditions. Typical values are 0.2 for very clear sky conditions and 0.3 for generally clear sky conditions.
Transmittivity is the ratio of the energy reaching Earth's surface to that which is received at the upper limit of the atmosphere. Values range from 0 (no transmission) to 1 (complete transmission). Typically observed values are 0.6 or 0.7 for very clear sky conditions and 0.5 for a generally clear sky.
Transmittivity has an inverse relationship with the diffuse proportion parameter. Altering these values may affect the model result. Identifying the best values for the area of interest depends on several variables (such as location and time). You can change these values to compare how they affect the result.
-
The Sun Map Grid Level parameter controls the speed and accuracy of the computation. It adjusts the resolution of the hexagonal grid cells that will be used for the internal calculations, based on the H3 geospatial indexing system.
A lower grid level creates fewer larger sun map areas and decreases tool run time. A higher grid level creates more smaller sun maps, improving the accuracy of the result.
Valid values of the sun map grid level for Earth range from 5 to 7. For the Moon, the valid value range is from 4 to 6.
The default level is determined by the input surface raster. When analyzing surface data on Earth, if the analysis cell size is less than or equal to 4 meters, the default grid level is 6. If the cell size is greater than 4 meters, the default grid level is 5. For analyzing surface data on the Moon, the default level is 6.
The following table shows the average area of the hexagon grid cells for each sun map level, in units of square kilometers:
Level Earth Moon 4
Not applicable
131.6
5
252.9 (default > 4m)
18.8
6
36.1 (default < 4m)
2.69 (default)
7
5.16
Not applicable
This tool can be GPU accelerated, which means that if a compatible graphics processing unit (GPU) is available on your system, it will be used to enhance the performance of the tool. Use the Target device for analysis (analysis_target_device in Python) parameter to control whether the GPU or CPU will be used to run the tool.
See GPU processing with Spatial Analyst for more details on compatible GPUs, configuring and working with GPU devices, as well as troubleshooting tips.
See Analysis environments and Spatial Analyst for additional details on the geoprocessing environments that apply to this tool.
Additional resources:
Acton, C. A. "Ancillary data services of NASA's Navigation and Ancillary Information Facility". Planetary and Space Science. Vol. 44, Issue 1, January 1996, 65-70. https://doi.org/10.1016/0032-0633(95)00107-7
Acton, C, Bachman, Semenov, B., and Wright, E. "A look towards the future in the handling of space science mission geometry". Planetary and Space Science. Volume 150, January 2018, 9-12. https://doi.org/10.1016/j.pss.2017.02.013
Brodsky, I., "Uber’s Hexagonal Hierarchical Spatial Index H3", Engineering (blog), June 27, 2018, https://www.uber.com/blog/h3/
Parameters
FeatureSolarRadiation(in_surface_raster, in_features, unique_id_field, out_table, start_date_time, end_date_time, {time_zone}, {adjust_DST}, {use_time_interval}, {interval_unit}, {interval}, {feature_offset}, {feature_area}, {feature_slope}, {feature_aspect}, {neighborhood_distance}, {use_adaptive_neighborhood}, {diffuse_model_type}, {diffuse_proportion}, {transmittivity}, {analysis_target_device}, {out_join_layer}, {sunmap_grid_level})
Name | Explanation | Data Type |
in_surface_raster | The input elevation surface raster. | Raster Layer |
in_features | The input features (point or polygon) that represent a location or engineered surface to calculate the amount of solar radiation received. | Feature Layer |
unique_id_field | The field that contains the values that define each feature. It can be an integer or a string field of the input features. | Field |
out_table | The output table that will contain the summary of the amount of solar radiation received by the input features The format of the table is determined by the output location and path. By default, the output will be a geodatabase table if in a geodatabase workspace, or a dBASE table if in a file workspace. | Table |
start_date_time | The start date and time for the analysis. | Date |
end_date_time | The end date and time for the analysis. | Date |
time_zone (Optional) | The time zone that will be used for the start and end time. The default is coordinated universal time (UTC).
| String |
adjust_DST (Optional) | Specifies whether the input time configuration will be adjusted for daylight saving time. This parameter is not applicable for analysis on the Moon.
| Boolean |
use_time_interval (Optional) | Specifies whether a single total insolation value will be calculated for the entire time configuration or multiple radiation values will be calculated for the specified interval.
| Boolean |
interval_unit (Optional) | Specifies the time unit that will be used for calculating solar radiation values over the entire time configuration. This parameter is only supported when the use_time_interval parameter is set to INTERVAL.
| String |
interval (Optional) | The value of the duration or time between intervals. The default value is dependent on the interval unit specified. The default value for each of the available units are listed below.
| Long |
feature_offset (Optional) | A vertical distance that will be added to the raster surface for analysis. It must be a positive integer or floating-point value. You can select a field from the input features dataset, or you can provide a numerical value. For example, if the object is a panel, provide the height of the panel. If a value is provided for this parameter, that value will be used by all features. To specify different values for each individual feature, select a field from the input features dataset. The default value is 0. | Double; Field |
feature_area (Optional) | The area associated with the input features. It must be a positive integer or floating-point value. You can select a field from the input features dataset, or you can provide a numerical value. For example, if the object is a panel, provide the area of the panel. If a value is provided for this parameter, that value will be used by all features. To specify different values for each individual feature, select a field from the input features dataset. By default, the area is obtained from the input features. For point features, the default area is 0. | Double; Field |
feature_slope (Optional) | The relative slope or incline associated with the input features. It must be a positive integer or floating-point value. You can select a field from the input features dataset, or you can provide a numerical value. For example, if the object is a panel, provide the incline of the panel. If a value is provided for this parameter, that value will be used by all features. To specify different values for each individual feature, select a field from the input features dataset. Slope is expressed in degrees from 0 to 90. The default values for analysis are calculated from the underlying values of the input surface raster. | Double; Field |
feature_aspect (Optional) | The relative aspect or direction associated with the input features. It must be a positive integer or floating-point value. You can select a field from the input features dataset, or you can provide a numerical value. For example, if the object is a panel, provide the direction of the panel face. If a value is provided for this parameter, that value will be used by all features. To specify different values for each individual feature, select a field from the input features dataset. Aspect is expressed in degrees from 0 to 360. The default values for analysis area calculated from the underlying values of the input surface raster. | Double; Field |
neighborhood_distance (Optional) | The distance from the target cell center for which the output insolation value will be calculated. It determines the size of the neighborhood. The default value is the input surface raster cell size, resulting in a 3 by 3 neighborhood. | Linear Unit |
use_adaptive_neighborhood (Optional) | Specifies whether neighborhood distance will vary with landscape changes (adaptive). The maximum distance is determined by the neighborhood distance. The minimum distance is the input raster cell size.
| Boolean |
diffuse_model_type (Optional) | Specifies the type of diffuse radiation model that will be used.
| String |
diffuse_proportion (Optional) | The proportion of global normal radiation flux that is diffuse. Values range from 0 to 1. Set this value according to atmospheric conditions. The default value is 0.3 for generally clear sky conditions. | Double |
transmittivity (Optional) | The fraction of radiation that passes through the atmosphere (averaged overall wavelengths). Values range from 0 (no transmission) to 1 (all transmission). The default is 0.5 for a generally clear sky. | Double |
analysis_target_device (Optional) | Specifies the device that will be used to perform the calculation.
| String |
out_join_layer (Optional) | The output layer that will be created by joining the output table to the input feature class. This is an optional output. | Feature Layer |
sunmap_grid_level (Optional) |
The resolution that will be used to generate the H3 hexagonal grid cells used for internal calculations. A lower grid level value creates fewer, larger sun map areas and decreases tool run time. A higher grid level creates more smaller sun maps improving the accuracy of the result. Valid values of the sun map grid level for Earth range from 5 to 7. For the Moon, the valid value range is from 4 to 6. By default, the grid level is determined by the input surface raster. When analyzing surface data on Earth, if the analysis cell size is less than or equal to 4 meters, the default grid level is 6. If the analysis cell size is greater than 4 meters, the default grid level is 5. For analyzing surface data on the Moon, the default grid level is 6. | Long |
Code sample
The following Python window script demonstrates how to use the FeatureSolarRadiation function.
import arcpy
from arcpy.sa import *
from arcpy import env
env.workspace = "C:/sapyexamples/solardata.gdb"
env.scratchWorkspace = "C:/sapyexamples/outfile.gdb"
#Run FeatureSolarRadiation
arcpy.sa.FeatureSolarRadiation("dem30m.tif","solar_pnts","pntID","SolarPnts_radiation_092023",
"9/1/2023 06:30:00 AM","10/1/2023 6:30:00 PM","Pacific_Standard_Time")
Calculates the solar insolation for the whole year 2023 at one week intervals for engineered features represented by point features.
# Name: FeatureSolarRadiation_standalone.py
# Description: Calculate the solar insolation for the whole year 2023 at one week
# intervals for engineered features represented by point features.
# Requirements: Spatial Analyst Extension
# Import system modules
import arcpy
from arcpy.sa import *
# Set environment settings
arcpy.env.workspace = "C:/sapyexamples/solardata.gdb"
arcpy.env.scratchWorkspace = "C:/sapyexamples/outfile.gdb"
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# Run FeatureSolarRadiation
arcpy.sa.FeatureSolarRadiation(
in_surface_raster="dem30m.tif",
in_features="solar_pnts",
unique_id_field="pntID",
out_table=r"SolarPnts_radiation_092023",
start_date_time="1/1/2023",
end_date_time="12/31/2023",
time_zone="Mountain_Standard_Time",
adjust_DST="ADJUSTED_FOR_DST",
use_time_interval="NO_INTERVAL",
interval_unit="WEEK",
interval=1,
feature_offset=2.5,
feature_area="Area_FLD",
feature_slope="Slope_FLD",
feature_aspect="Aspect_FLD",
neighborhood_distance="",
use_adaptive_neighborhood="",
diffuse_model_type="UNIFORM_SKY",
diffuse_proportion=0.3,
transmittivity=0.5,
analysis_target_device="GPU_THEN_CPU",
out_join_layer=None
)