123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- <h2>DESCRIPTION</h2>
- <b>r.horizon</b> 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:
- <ul>
- <li> single point: as a series of horizon
- heights in the specified directions from the given point. The results are
- written to the stdout.
- <li> 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.
- </ul>
- <p>
- 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
- LOCATION with x,y coordinate system, where this correction is
- not applied.
- <p>
- Using the <b>-c</b> flag, the azimuthal angles will be printed in compass
- orientation (North=0, clockwise).
- <h3>Input parameters:</h3>
- <p>The <i>elevation</i> 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.
- <p>The <i>step</i> parameter gives the angle step (in degrees)
- between successive azimuthal directions for the calculation of the
- horizon. Thus, a value of 5 for the <i>step</i> will give a total of
- 360/5=72 directions (72 raster maps if used in the raster map mode).
- <p>The <i>start</i> parameter gives the angle start (in degrees)
- for the calculation of the horizon. The default value is 0 (East with
- North being 90 etc.).
- <p>The <i>end</i> 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.
- <p>The <i>direction</i> 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 <i>direction</i> should be set to 45 and <i>step</i> to
- 180. If you only want one single direction, use this parameter to
- specify desired direction of horizon angle, and set the <i>step</i>
- size to 0 degrees. Otherwise all angles for a given starting <i>direction</i>
- with step of <i>step</i> are calculated.
- <p>The <i>distance</i> 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.
- <p>The <i>maxdistance</i> value gives a maximum distance to move away
- from the origin along the line of sight in order to search for the
- horizon height.
- <!-- check next statement in the source code -->
- The default <i>maxdistance</i> 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 <em>r.viewshed</em>.
- <p>The <i>coordinate</i> parameter takes a pair of easting-northing values
- in the current coordinate system and calculates the values of angular
- height of the horizon around this point. To achieve the
- consistency of the results, the point coordinate is
- aligned to the midpoint of the closest elevation raster cell.
- <p>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
- <i>bufferzone</i> parameter allows you to specify the same size of
- buffer for all cardinal directions and the parameters <i>e_buff</i>,
- <i>n_buff</i>, <i>s_buff</i>, and <i>w_buff</i> 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.
- <p>The <i>basename</i> parameter gives the basename of the output
- horizon raster maps. The raster name of each horizon direction
- raster will be constructed as <i>basename_</i>ANGLE, where ANGLE
- is the angle in degrees with the direction. If you use <b>r.horizon</b>
- in the single point mode this option will be ignored.
- <p>The <i>output</i> parameter allows saving the resulting horizon
- angles in a comma separated ASCII file (single point mode only). If
- you use <b>r.horizon</b> in the raster map mode this option will be ignored.
- <p>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 locations buffers are
- measured in degree unit).
- <h2>METHOD</h2>
- <p>The calculation method is based on the method used in <b>r.sun</b>
- 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 <i>bufferzone,e_buff</i>, <i>n_buff</i>,
- <i>s_buff</i>, and <i>w_buff</i>). The the number of lines of sight (azimuth
- directions) is determined from the <i>direction</i> and
- <i>step</i> 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).
- <h2>EXAMPLES</h2>
- The examples are intended for the North Carolina sample dataset.
- <h3>Single point mode</h3>
- <b>Example 1</b>: determine horizon angle in 225 degree direction (output
- of horizon angles CCW from East):
- <div class="code"><pre>
- g.region raster=elevation -p
- r.horizon elevation=elevation direction=215 step=0 bufferzone=200 \
- coordinates=638871.6,223384.4 maxdistance=5000
- </pre></div>
- <p>
- <b>Example 2</b>: determine horizon values starting at 90 deg (North),
- step size of 5 deg, saving result as CSV file:
- <div class="code"><pre>
- r.horizon elevation=elevation direction=90 step=5 bufferzone=200 \
- coordinates=638871.6,223384.4 maxdistance=5000 file=horizon.csv
- </pre></div>
- <p>
- <b>Example 3</b>: test point near highway intersection, saving result
- as CSV file for plotting the horizon around the highway intersection:
- <div class="code"><pre>
- 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
- </pre></div>
- <center>
- <img src="rhorizon_shaded_dem_point.png"><br>
- Test point near high way intersection (North Carolina sample dataset)
- <p>
- <img src="rhorizon_singlepoint_plot.png"><br>
- Horizon angles for test point (CCW from East)
- </center>
- <p>We can plot horizon in polar coordinates using Matplotlib in Python:
- <div class="code"><pre>
- 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()
- </pre></div>
- <center>
- <img src="rhorizon_polar_plot.png"><br>
- Horizon plot in polar coordinates.
- </center>
- <h3>Raster map mode</h3>
- Raster map mode (output maps "horangle*" become input for <em>r.sun</em>):
- <div class="code"><pre>
- # 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
- </pre></div>
- <h2>REFERENCES</h2>
- <p>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
- <p>Hofierka J., Huld T., Cebecauer T., Suri M., 2007. Open Source Solar
- Radiation Tools for Environmental and Renewable Energy Applications,
- <a href="http://www.isess.org/papers.asp?year=2007">International Symposium on
- Environmental Software Systems</a>, Prague, 2007
- <p>Neteler M., Mitasova H., 2004. Open Source GIS: A GRASS GIS
- Approach, <a href="http://www.springer.com/geography/gis+cartography/book/978-0-387-35767-6">Springer</a>, New York.
- ISBN: 1-4020-8064-6, 2nd Edition 2004 (reprinted 2005), 424 pages
- <p>Project <a href="http://re.jrc.ec.europa.eu/pvgis/">PVGIS</a>, European
- Commission, DG Joint Research Centre 2001-2007
- <p>Suri M., Hofierka J., 2004.
- A New GIS-based Solar Radiation Model and Its Application for
- Photovoltaic Assessments. <a href="http://www.blackwellpublishing.com/toc.asp?ref=1361-1682">Transactions
- in GIS</a>, 8(2), 175-190
- <h2>SEE ALSO</h2>
- <em>
- <a href="r.sun.html">r.sun</a>,
- <a href="r.sunmask.html">r.sunmask</a>,
- <a href="r.viewshed.html">r.viewshed</a>
- </em>
- <h2>AUTHORS</h2>
- <p>Thomas Huld, Joint Research Centre of
- the European Commission, Ispra, Italy
- <br>
- <p>Tomas Cebecauer, Joint Research Centre
- of the European Commission, Ispra, Italy
- <br>
- <p>Jaroslav Hofierka, GeoModel s.r.o.,
- Bratislava, Slovakia <br>Marcel Suri, Joint Research Centre of the
- European Commission, Ispra, Italy
- <p>© 2007, Thomas Huld, Tomas Cebecauer, Jaroslav Hofierka, Marcel Suri
- <ADDRESS STYLE="margin-bottom: 0.2in"><a href="mailto:Thomas.Huld@jrc.it">Thomas.Huld@jrc.it</a>
- <a href="mailto:Tomas.Cebecauer@jrc.it">Tomas.Cebecauer@jrc.it</a>
- <a href="mailto:hofi@geomodel.sk">hofierka@geomodel.sk</a>
- <a href="mailto:Marcel.Suri@jrc.it">Marcel.Suri@jrc.it</a>
- </ADDRESS>
- <p><i>Last changed: $Date$</i>
|