v.vol.rst(1grass)
π v.vol.rst (1grass) β GRASS User's Manual π
πΈ NAME
v.vol.rst β Interpolates point data to a 3D raster map using regularized spline with tension (RST) algorithm. β¨
π KEYWORDS
vector, voxel, surface, interpolation, RST, 3D, no-data filling
β¨ SYNOPSIS
v.vol.rst
v.vol.rst --help
v.vol.rst [-c] input=name [cross_input=name] [wcolumn=name]
[tension=float] [smooth=float] [smooth_column=name]
[where=sql_query] [deviations=name] [cvdev=name] [maskmap=name]
[segmax=integer] [npmin=integer] [npmax=integer] [dmin=float]
[wscale=float] [zscale=float] [cross_output=name] [elevation=name]
[gradient=name] [aspect_horizontal=name] [aspect_vertical=name]
[ncurvature=name] [gcurvature=name] [mcurvature=name]
[--overwrite] [--help] [--verbose] [--quiet] [--ui]
π© Flags
-cβ Perform a cross-validation procedure without volume interpolation--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
input=name[required] β Name of input 3D vector points mapcross_input=nameβ Name of input surface raster map for cross-sectionwcolumn=nameβ Name of column containing w-values attribute to interpolatetension=floatβ Tension parameter. Default:40.smooth=floatβ Smoothing parameter. Default:0.1smooth_column=nameβ Name of column with smoothing parameterswhere=sql_queryβ WHERE conditions of SQL statement without βwhereβ keyword. Example:income < 1000 and population >= 10000deviations=nameβ Name for output deviations vector point mapcvdev=nameβ Name for output cross-validation errors vector point mapmaskmap=nameβ Name of input raster map used as masksegmax=integerβ Maximum number of points in a segment. Default:50npmin=integerβ Minimum number of points for approximation in a segment (>segmax). Default:200npmax=integerβ Maximum number of points for approximation in a segment (>npmin). Default:700dmin=floatβ Minimum distance between points (to remove almost identical points)wscale=floatβ Conversion factor for w-values used for interpolation. Default:1.0zscale=floatβ Conversion factor for z-values. Default:1.0cross_output=nameβ Name for output cross-section raster mapelevation=nameβ Name for output elevation 3D raster mapgradient=nameβ Name for output gradient magnitude 3D raster mapaspect_horizontal=nameβ Name for output gradient horizontal angle 3D raster mapaspect_vertical=nameβ Name for output gradient vertical angle 3D raster mapncurvature=nameβ Name for output change of gradient 3D raster mapgcurvature=nameβ Name for output Gaussian curvature 3D raster mapmcurvature=nameβ Name for output mean curvature 3D raster map
π DESCRIPTION
okay bestie, hereβs the whole vibe: v.vol.rst interpolates values to a 3-dimensional raster map from 3-dimensional point data β think temperature, rainfall data from climatic stations, concentrations from drill holes, etc. β and those points come in through a 3-D vector point file named input. The size of the output 3D raster map elevation is given by the current 3D region. Sometimes, the user may want to get a 2-D map showing a modelled phenomenon at a crossection surface. In that case, cross_input and cross_output options must be specified, with the output 2D raster map cross_output containing the crossection of the interpolated volume with a surface defined by the cross_input 2D raster map. As an option, simultaneously with interpolation, geometric parameters of the interpolated phenomenon can be computed β magnitude of gradient, direction of gradient defined by horizontal and vertical angles, change of gradient, Gauss-Kronecker curvature, or mean curvature. These geometric parameters are saved as 3D raster maps gradient, aspect_horizontal, aspect_vertical, ncurvature, gcurvature, mcurvature, respectively. Maps aspect_horizontal and aspect_vertical are in degrees. π«
At first, data points are checked for identical positions and points that are closer to each other than given dmin are removed. Parameters wscale and zscale allow the user to re-scale the w-values and z-coordinates of the point data β useful, for example, for transformation of elevations given in feet to meters, so that the proper values of gradient and curvatures can be computed. Rescaling of z-coordinates (zscale) is also needed when the distances in vertical direction are much smaller than the horizontal distances; if that is the case, the value of zscale should be selected so that the vertical and horizontal distances have about the same magnitude. π
Regularized spline with tension method is used in the interpolation. The tension parameter controls the distance over which each given point influences the resulting volume β with very high tension, each point influences only its close neighborhood and the volume goes rapidly to trend between the points. Higher values of tension parameter reduce the overshoots that can appear in volumes with rapid change of gradient. For noisy data, it is possible to define a global smoothing parameter, smooth. With the smoothing parameter set to zero (smooth=0) the resulting volume passes exactly through the data points. When smoothing is used, it is possible to output a vector map deviations containing deviations of the resulting volume from the given data. β¨
The user can define a 2D raster map named maskmap, which will be used as a mask. The interpolation is skipped for 3-dimensional cells whose 2-dimensional projection has a zero value in the mask. Zero values will be assigned to these cells in all output 3D raster maps. π
If the number of given points is greater than 700, segmented processing is used. The region is split into 3-dimensional "box" segments, each having less than segmax points and interpolation is performed on each segment of the region. To ensure the smooth connection of segments, the interpolation function for each segment is computed using the points in the given segment and the points in its neighborhood. The minimum number of points taken for interpolation is controlled by npmin, the value of which must be larger than segmax and less than 700. This limit of 700 was selected to ensure the numerical stability and efficiency of the algorithm. π₯
ποΈ SQL support
Using the where parameter, the interpolation can be limited to use only a subset of the input vectors.
# preparation as in above example
v.vol.rst elevrand_3d wcol=soilrange elevation=soilrange zscale=100 where="soilrange > 3"
π§ͺ Cross validation procedure
Sometimes it can be difficult to figure out the proper values of interpolation parameters. In this case, the user can use a crossvalidation procedure using -c flag (a.k.a. "jack-knife" method) to find optimal parameters for given data. In this method, every point in the input point file is temporarily excluded from the computation and interpolation error for this point location is computed. During this procedure no output grid files can be simultanuously computed. The procedure for larger datasets may take a very long time, so it might be worth to use just a sample data representing the whole dataset. π§
Example (based on Slovakia3d dataset):
v.info -c precip3d
g.region n=5530000 s=5275000 w=4186000 e=4631000 res=500 -p
v.vol.rst -c input=precip3d wcolumn=precip zscale=50 segmax=700 cvdev=cvdevmap tension=10
v.db.select cvdevmap
v.univar cvdevmap col=flt1 type=point
Based on these results, the parameters will have to be optimized. It is recommended to plot the CV error as curve while modifying the parameters. π
The best approach is to start with tension, smooth and zscale with rough steps, or to set zscale to a constant somewhere between 30-60. This helps to find minimal RMSE values while then finer steps can be used in all parameters. The reasonable range is tension=10...100, smooth=0.1...1.0, zscale=10...100. π
In v.vol.rst the tension parameter is much more sensitive to changes than in v.surf.rst, therefore the user should always check the result by visual inspection. Minimizing CV does not always provide the best result, especially when the density of data are insufficient. Then the optimal result found by CV is an oversmoothed surface. π
π NOTES π
okay bestie, ground rules first. the vector points map HAS to be a 3D vector map β like, actual x, y, z as geometry, no pretending. if you don't have one, the module v.in.db can generate a 3D vector map from a table that's got x,y,z columns. β¨
also, and this is important: your input data should be in a projected coordinate system, something like Universal Transverse Mercator. and ngl, as of May 2009 the module does not appear to have support for geographic (Lat/Long) coordinates. so like, don't. π«
so what's it actually doing? v.vol.rst uses regularized spline with tension for interpolation from point data (that's the Mitasova and Mitas, 1993 situation, iykyk). and the implementation has an improved segmentation procedure based on Oct-trees which enhances the efficiency for large data sets. efficiency queen. π
then the geometric parameters β and bestie there are a lot of them, love a girl who's thorough:
- magnitude of gradient (
gradient) - horizontal (
aspect_horizontal) and vertical (aspect_vertical) aspects - change of gradient (
ncurvature) - Gauss-Kronecker (
gcurvature) and mean curvatures (mcurvature)
all of those are computed directly from the interpolation function, so that the important relationships between these parameters are preserved. more info on these parameters lives in Mitasova et al., 1995 or Thorpe, 1979. π
β οΈ the program gives a warning when significant overshoots appear and higher tension should be used. HOWEVER β and this is the twist β with tension too high the resulting volume will have local maximum in each given point and everywhere else the volume goes rapidly to trend. so, balance.
and with a smoothing parameter greater than zero, the volume will not pass through the data points, and the higher the parameter the closer the volume will be to the trend. π
want the theory on smoothing with splines? Talmi and Gilat, 1977 or Wahba, 1990. go off, scholar. π
some quick fixes for when things look cursed:
- if a visible connection of segments appears, the program should be rerun with higher
npminto get more points from the neighborhood of given segment. - if the number of points in a vector map is less than 400,
segmaxshould be set to400so that segmentation is not performed when it is not necessary. (yes bestie, that's genuinely what it says.) - the program gives a warning when the user wants to interpolate outside the "box" given by minimum and maximum coordinates in the input vector map. to remedy this: zoom into the area encompassing the input vector data points. that's it, that's the fix. π¦
for large data sets (thousands of data points), it is suggested to zoom into a smaller representative area and test whether the parameters chosen (e.g. defaults) are appropriate. lowkey good advice, test your defaults.
πΈ and the non-negotiable: the user must rung.regionbefore the program to set the 3D region for interpolation. nog.region, no vibes, no volume.
π EXAMPLES π
Spearfish example (we first simulate 3D soil range data):
g.region -dp
# define volume
g.region res=100 tbres=100 res3=100 b=0 t=1500 -ap3
### First part: generate synthetic 3D data (true 3D soil data preferred)
# generate random positions from elevation map (2D)
r.random elevation.10m vector=elevrand n=200 seed=42
# generate synthetic values
v.to.db elevrand option=coor col=x,y
v.db.select elevrand
# create new 3D map
v.in.db elevrand out=elevrand_3d x=x y=y z=value key=cat
v.info -c elevrand_3d
v.info -t elevrand_3d
# remove the now superfluous βxβ, βyβ and βvalueβ (z) columns
v.db.dropcolumn elevrand_3d col=x
v.db.dropcolumn elevrand_3d col=y
v.db.dropcolumn elevrand_3d col=value
# add attribute to have data available for 3D interpolation
# (Soil range types taken from the USDA Soil Survey)
d.mon wx0
d.rast soils.range
d.vect elevrand_3d
v.db.addcolumn elevrand_3d col="soilrange integer"
v.what.rast elevrand_3d col=soilrange rast=soils.range
# fix 0 (no data in raster map) to NULL:
v.db.update elevrand_3d col=soilrange value=NULL where="soilrange=0"
v.db.select elevrand_3d
# optionally: check 3D points in Paraview
v.out.vtk input=elevrand_3d output=elevrand_3d.vtk type=point precision=2
paraview --data=elevrand_3d.vtk
### Second part: 3D interpolation from 3D point data
# interpolate volume to "soilrange" voxel map
v.vol.rst input=elevrand_3d wcol=soilrange elevation=soilrange zscale=100
# visualize I: in GRASS wxGUI
g.gui
# load: 2D raster map: elevation.10m
# 3D raster map: soilrange
# visualize II: export to Paraview
r.mapcalc "bottom = 0.0"
r3.out.vtk -s input=soilrange top=elevation.10m bottom=bottom dp=2 output=volume.vtk
paraview --data=volume.vtk
π KNOWN ISSUES π
- the
deviationsfile is written as 2D and deviations are not written as attributes.
that's it, that's the tea. not a fix, just a heads up. π
π REFERENCES π
- Hofierka J., Parajka J., Mitasova H., Mitas L., 2002, Multivariate Interpolation of Precipitation Using Regularized Spline with Tension. Transactions in GIS 6, pp. 135-150.
- Mitas, L., Mitasova, H., 1999, Spatial Interpolation. In: P.Longley, M.F. Goodchild, D.J. Maguire, D.W.Rhind (Eds.), Geographical Information Systems: Principles, Techniques, Management and Applications, Wiley, pp.481-492
- Mitas L., Brown W. M., Mitasova H., 1997, Role of dynamic cartography in simulations of landscape processes based on multi-variate fields. Computers and Geosciences, Vol. 23, No. 4, pp. 437-446 (includes CDROM and WWW: www.elsevier.nl/locate/cgvis)
- Mitasova H., Mitas L., Brown W.M., D.P. Gerdes, I. Kosinovsky, Baker, T.1995, Modeling spatially and temporally distributed phenomena: New methods and tools for GRASS GIS. International Journal of GIS, 9 (4), special issue on Integrating GIS and Environmental modeling, 433-446.
- Mitasova, H., Mitas, L., Brown, B., Kosinovsky, I., Baker, T., Gerdes, D. (1994): Multidimensional interpolation and visualization in GRASS GIS
- Mitasova H. and Mitas L. 1993: Interpolation by Regularized Spline with Tension: I. Theory and Implementation, Mathematical Geology 25, 641-655.
- Mitasova H. and Hofierka J. 1993: Interpolation by Regularized Spline with Tension: II. Application to Terrain Modeling and Surface Geometry Analysis, Mathematical Geology 25, 657-667.
- Mitasova, H., 1992 : New capabilities for interpolation and topographic analysis in GRASS, GRASSclippings 6, No.2 (summer), p.13.
- Wahba, G., 1990 : Spline Models for Observational Data, CNMS-NSF Regional Conference series in applied mathematics, 59, SIAM, Philadelphia, Pennsylvania.
- Mitas, L., Mitasova H., 1988 : General variational approach to the interpolation problem, Computers and Mathematics with Applications 16, p. 983
- Talmi, A. and Gilat, G., 1977 : Method for Smooth Approximation of Data, Journal of Computational Physics, 23, p.93-123.
- Thorpe, J. A. (1979): Elementary Topics in Differential Geometry. Springer-Verlag, New York, pp. 6-94.
like, the reading list ate. πβ¨
π«Ά SEE ALSO π«Ά
g.region, v.in.ascii, r3.mask, v.in.db, v.surf.rst, v.univar
π AUTHOR π
Original version of program (in FORTRAN) and GRASS enhancements:
- Lubos Mitas, NCSA, University of Illinois at Urbana-Champaign, Illinois, USA, since 2000 at Department of Physics, North Carolina State University, Raleigh, USA
lubos_mitas@ncsu.edu - Helena Mitasova, Department of Marine, Earth and Atmospheric Sciences, North Carolina State University, Raleigh, USA,
hmitaso@unity.ncsu.edu
Modified program (translated to C, adapted for GRASS, new segmentation procedure):
- Irina Kosinovsky, US Army CERL, Champaign, Illinois, USA
- Dave Gerdes, US Army CERL, Champaign, Illinois, USA
Modifications for g3d library, geometric parameters, cross-validation, deviations:
- Jaro Hofierka, Department of Geography and Regional Development, University of Presov, Presov, Slovakia,
hofierka@fhpv.unipo.sk, http://www.geomodel.sk
the way this took a whole village and every single one of them is credited π iconic behaviour.
πΎ SOURCE CODE πΎ
Available at: v.vol.rst source code (history)
Latest change: Friday Apr 17 01:04:26 2026 in commit: 32a143358df26b2e518b03c7e0d79541e8d1e5b1
Main index | Vector index | Topics index | Keywords index | Graphical index | Full index
Β© 2003-2026 GRASS Development Team, GRASS 8.5.0 Reference Manual
and that's the whole page bestie!! π
β¨ this lil manual is living in GRASS 8.5.0, Β© 2003-2026 GRASS Development Team, and it got its last lil glow-up on Friday Apr 17 2026 (commit 32a143358df26b2e518b03c7e0d79541e8d1e5b1) β go forth and interpolate, you absolute main character π¦πΈπ
π¦ where this page comes from
- alpine 3.24: grass-gis-doc 8.5.0-r1 Β· GPL-2.0-or-later
- ubuntu stonking: grass-doc 8.5.0-1ubuntu1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms