Provided by: grass-doc_8.4.1-1_all bug

NAME

       r.horizon  - Computes horizon angle height from a digital elevation model.
       The  module  has  two  different modes of operation: 1. Computes the entire horizon around a single point
       whose coordinates are given with the ’coord’ option. The horizon height (in radians). 2. Computes one  or
       more  raster  maps  of  the  horizon  height  in  a single direction. The input for this is the angle (in
       degrees), which is measured counterclockwise with east=0, north=90 etc. The output is the horizon  height
       in radians.

KEYWORDS

       raster, solar, sun position

SYNOPSIS

       r.horizon
       r.horizon --help
       r.horizon   [-ldc]   elevation=name    [direction=float]     [step=float]    [start=float]    [end=float]
       [bufferzone=float]       [e_buff=float]        [w_buff=float]        [n_buff=float]        [s_buff=float]
       [maxdistance=float]    [output=basename]    [coordinates=east,north[,east,north,...]]    [distance=float]
       format=name  [file=name]   [--overwrite]  [--help]  [--verbose]  [--quiet]  [--ui]

   Flags:
       -l
           Include horizon distance in the plain output

       -d
           Write output in degrees (default is radians)

       -c
           Write output in compass orientation (default is CCW, East=0)

       --overwrite
           Allow output files to overwrite existing files

       --help
           Print usage summary

       --verbose
           Verbose module output

       --quiet
           Quiet module output

       --ui
           Force launching GUI dialog

   Parameters:
       elevation=name [required]
           Name of input elevation raster map

       direction=float
           Direction in which you want to know the horizon height

       step=float
           Angle step size for multidirectional horizon [degrees]

       start=float
           Start angle for multidirectional horizon [degrees]
           Default: 0.0

       end=float
           End angle for multidirectional horizon [degrees]
           Default: 360.0

       bufferzone=float
           For horizon rasters, read from the DEM an extra buffer around the present region

           Options: 0-
       e_buff=float
           For horizon rasters, read from the DEM an extra buffer eastward the present region

           Options: 0-
       w_buff=float
           For horizon rasters, read from the DEM an extra buffer westward the present region

           Options: 0-
       n_buff=float
           For horizon rasters, read from the DEM an extra buffer northward the present region

           Options: 0-
       s_buff=float
           For horizon rasters, read from the DEM an extra buffer southward the present region

           Options: 0-
       maxdistance=float
           The maximum distance to consider when finding the horizon height

       output=basename
           Name for output basename raster map(s)

       coordinates=east,north[,east,north,...]
           Coordinate(s) for which you want to calculate the horizon

       distance=float
           Sampling distance step coefficient (0.5-1.5)
           Default: 1.0

       format=name [required]
           Output format
           Options: plain, json
           Default: plain
           plain: Plain text output
           json: JSON (JavaScript Object Notation)

       file=name
           Name of file for output (use output=- for stdout)
           Default: -

DESCRIPTION

       r.horizon computes the angular height of terrain horizon in radians. It reads a raster of elevation  data
       and outputs the horizon outline in one of two modes:

           •   point:  as  a  series of horizon heights in the specified directions from the given point(s). The
               results are written to the stdout.

           •   raster: in this case the output is one or more raster maps, with each point in  a  raster  giving
               the horizon height in a specific direction. One raster is created for each direction.

       The  directions  are  given as azimuthal angles (in degrees), with the angle starting with 0 towards East
       and moving counterclockwise  (North  is  90,  etc.).  The  calculation  takes  into  account  the  actual
       projection,  so the angles are corrected for direction distortions imposed by it. The directions are thus
       aligned to those of the geographic projection and not the coordinate system given by the rows and columns
       of the raster map. This  correction  implies  that  the  resulting  cardinal  directions  represent  true
       orientation towards the East, North, West and South. The only exception of this feature is x,y coordinate
       system, where this correction is not applied.

       Using the -c flag, the azimuthal angles will be printed in compass orientation (North=0, clockwise).

       Activating the -l flag allows additionally printing the distance to each horizon angle.

   Input parameters:
       The  elevation  parameter  is  an input elevation raster map. If the buffer options are used (see below),
       this raster should extend over the area that accommodate the presently defined region plus defined buffer
       zones.

       The step parameter gives the angle step (in degrees) between  successive  azimuthal  directions  for  the
       calculation  of the horizon. Thus, a value of 5 for the step will give a total of 360/5=72 directions (72
       raster maps if used in the raster map mode).

       The start parameter gives the angle start (in degrees) for the calculation of the  horizon.  The  default
       value is 0 (East with North being 90 etc.).

       The  end  parameter gives the angle end (in degrees) for the calculation of the horizon. The end point is
       omitted!  So for example if we run r.horizon with step=10, start=30 and end=70 the raster maps  generated
       by r.horizon will be only for angles: 30, 40, 50, 60. The default value is 360.

       The  direction  parameter  gives  the  initial  direction  of the first output. This parameter acts as an
       direction angle offset. For example, if you want to get horizon angles for directions 45 and 225 degrees,
       the direction should be set to 45 and step to 180. If you  only  want  one  single  direction,  use  this
       parameter  to  specify  desired direction of horizon angle, and set the step size to 0 degrees. Otherwise
       all angles for a given starting direction with step of step are calculated.

       The distance controls the sampling distance step size for the search for horizon along the line of sight.
       The default value is 1.0 meaning that the step size will be taken from the  raster  resolution.   Setting
       the  value  below  1.0  might  slightly  improve results for directions apart from the cardinal ones, but
       increasing the processing load of the search algorithm.

       The maxdistance value gives a maximum distance to move away from the origin along the line  of  sight  in
       order  to  search  for  the horizon height.  The default maxdistance is the full map extent.  The smaller
       this value the faster the calculation but the higher the risk that you may miss a  terrain  feature  that
       can  contribute  significantly  to  the  horizon  outline.  Note  that  a viewshed can be calculated with
       r.viewshed.

       The coordinate parameter takes one or multiple pairs of easting-northing values in the current coordinate
       system and calculates the values of angular height of the horizon  around  each  point.  To  achieve  the
       consistency  of  the  results,  the  point coordinate is aligned to the midpoint of the closest elevation
       raster cell.

       If an analyzed point (or raster cell) lies  close  to  the  edge  of  the  defined  region,  the  horizon
       calculation may not be realistic, since it may not see some significant terrain features which could have
       contributed  to  the  horizon, because these features are outside the region. There are to options how to
       set the size of the buffer that is used to increase the area of  the  horizon  analysis.  The  bufferzone
       parameter  allows  you  to specify the same size of buffer for all cardinal directions and the parameters
       e_buff, n_buff, s_buff, and w_buff allow you to specify a buffer size individually for each of  the  four
       directions.  The  buffer  parameters influence only size of the read elevation map, while the analysis in
       the raster mode will be done only for the area specified by the current region definition.

       The output parameter defines the basename of the output horizon raster maps.  The  raster  name  of  each
       horizon  direction raster will be constructed as basename_ANGLE, where ANGLE is the angle in degrees with
       the direction. If you use r.horizon in the point mode this option will be ignored.

       The file parameter allows saving the resulting horizon angles in a comma separated ASCII file with option
       format=plain or in a JSON file with option format=json (point mode only). If you  use  r.horizon  in  the
       raster map mode this option will be ignored.

       At the moment the elevation and maximum distance must be measured in meters, even if you use geographical
       coordinates  (longitude/latitude).  If your projection is based on distance (easting and northing), these
       too must be in meters. The buffer parameters must be in the same units as the raster  coordinates  (e.g.,
       for latitude-longitude buffers are measured in degrees).

METHOD

       The  calculation  method  is  based on the method used in r.sun to calculate shadows. It starts at a very
       shallow angle and walks along the line of sight and asks at each step whether the line  of  sight  "hits"
       the  terrain.  If so, the angle is increased to allow the line of sight to pass just above the terrain at
       that point.  This is continued until the line of sight reaches a height that is higher than any point  in
       the  region or until it reaches the border of the region (see also the bufferzone,e_buff, n_buff, s_buff,
       and w_buff). The number of lines of sight (azimuth directions) is determined from the direction and  step
       parameters. The method takes into account the curvature of the Earth whereby remote features will seem to
       be  lower  than they actually are. It also accounts for the changes of angles towards cardinal directions
       caused by the projection (see above).

       The output with the -d flag is azimuth degree (-90 to 90, where 0 is parallel with the focal cell).

       All horizon values are positive (or zero). While  negative  values  are  in  theory  possible,  r.horizon
       currently does not support them.

EXAMPLES

       The examples are intended for the North Carolina sample dataset.

   Point mode
       Example 1: determine horizon angle in 225 degree direction (output of horizon angles CCW from East):
       g.region raster=elevation -p
       r.horizon elevation=elevation direction=215 step=0 bufferzone=200 \
           coordinates=638871.6,223384.4 maxdistance=5000

       Example  2: determine horizon values starting at 90 deg (North), step size of 5 deg, saving result as CSV
       file:
       r.horizon elevation=elevation direction=90 step=5 bufferzone=200 \
           coordinates=638871.6,223384.4 maxdistance=5000 file=horizon.csv

       Example 3: test point near highway intersection, saving result as  CSV  file  for  plotting  the  horizon
       around the highway intersection:
       g.region n=223540 s=220820 w=634650 e=638780 res=10 -p
       r.horizon elevation=elevation direction=0 step=5 bufferzone=200 \
           coordinates=636483.54,222176.25 maxdistance=5000 -d file=horizon.csv
       Test point near high way intersection (North Carolina sample dataset)

       Horizon angles for test point (CCW from East)

       We can plot horizon in polar coordinates using Matplotlib in Python:
       import numpy as np
       import matplotlib.pyplot as plt
       horizon = np.genfromtxt(’horizon.csv’, delimiter=’,’)
       horizon = horizon[1:, :]
       ax = plt.subplot(111, polar=True)
       bars = ax.plot(horizon[:, 0] / 180 * np.pi,
                      (90 - horizon[:, 1]) / 180 * np.pi)
       # uncomment the 2 following lines when using -c flag
       # ax.set_theta_direction(-1)
       # ax.set_theta_zero_location(’N’)
       plt.show()
       Horizon plot in polar coordinates.

   Raster map mode
       Raster map mode (output maps "horangle*" become input for r.sun):
       g.region raster=elevation -p
       # we put a bufferzone of 10% of maxdistance around the study area
       # compute only direction between 90 and 270 degrees
       r.horizon elevation=elevation step=30 start=90 end=300 \
           bufferzone=200 output=horangle maxdistance=5000

REFERENCES

       Hofierka  J.,  1997.  Direct  solar  radiation  modelling  within an open GIS environment. Proceedings of
       JEC-GI’97 conference in Vienna, Austria, IOS Press Amsterdam, 575-584

       Hofierka J., Huld T., Cebecauer T., Suri M., 2007. Open Source Solar Radiation  Tools  for  Environmental
       and  Renewable  Energy  Applications,  International Symposium on Environmental Software Systems, Prague,
       2007

       Neteler M., Mitasova H., 2004. Open Source  GIS:  A  GRASS  GIS  Approach,  Springer,  New  York.   ISBN:
       1-4020-8064-6, 2nd Edition 2004 (reprinted 2005), 424 pages

       Project PVGIS, European Commission, DG Joint Research Centre 2001-2007

       Suri  M.,  Hofierka J., 2004.  A New GIS-based Solar Radiation Model and Its Application for Photovoltaic
       Assessments. Transactions in GIS, 8(2), 175-190 (DOI: 10.1111/j.1467-9671.2004.00174.x)

SEE ALSO

        r.sun, r.sunmask, r.viewshed

AUTHORS

       Thomas Huld, Joint Research Centre of the European Commission, Ispra, Italy

       Tomas Cebecauer, Joint Research Centre of the European Commission, Ispra, Italy

       Jaroslav Hofierka, GeoModel s.r.o., Bratislava, Slovakia
       Marcel Suri, Joint Research Centre of the European Commission, Ispra, Italy

       ©  2007,  Thomas   Huld,   Tomas   Cebecauer,   Jaroslav   Hofierka,   Marcel   Suri   Thomas.Huld@jrc.it
       Tomas.Cebecauer@jrc.it hofierka@geomodel.sk Marcel.Suri@jrc.it

SOURCE CODE

       Available at: r.horizon source code (history)

       Accessed: Friday Apr 04 01:19:11 2025

       Main index | Raster index | Topics index | Keywords index | Graphical index | Full index

       © 2003-2025 GRASS Development Team, GRASS GIS 8.4.1 Reference Manual

GRASS 8.4.1                                                                                    r.horizon(1grass)