|
@@ -57,71 +57,10 @@ 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 <b>npmin</b> , the value of which
|
|
|
-must
|
|
|
-be larger than <b>segmax</b> and less than 700. This limit of 700 was
|
|
|
+must be larger than <b>segmax</b> and less than 700. This limit of 700 was
|
|
|
selected to ensure the numerical stability and efficiency of the
|
|
|
algorithm.
|
|
|
|
|
|
-<h2>EXAMPLES</h2>
|
|
|
-
|
|
|
-<!-- TODO: find better data. This example is nonsensical :-) -->
|
|
|
-Spearfish example (we first simulate 3D soil range data):
|
|
|
-
|
|
|
-<div class="code"><pre>
|
|
|
-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_output=elevrand n=200
|
|
|
-
|
|
|
-# generate synthetic values
|
|
|
-v.db.addcolumn elevrand col="x double precision, y double precision"
|
|
|
-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 dp=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 elev=soilrange zmult=100
|
|
|
-
|
|
|
-# visualize I: in GRASS GIS 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
|
|
|
-</pre></div>
|
|
|
-
|
|
|
|
|
|
<h3>SQL support</h3>
|
|
|
|
|
@@ -215,7 +154,6 @@ not necessary.
|
|
|
"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.
|
|
|
|
|
|
-
|
|
|
<p>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.
|
|
@@ -223,6 +161,67 @@ chosen (e.g. defaults) are appropriate.
|
|
|
<p>The user must run <em>g.region</em> before the program to set the
|
|
|
3D region for interpolation.
|
|
|
|
|
|
+
|
|
|
+<h2>EXAMPLES</h2>
|
|
|
+
|
|
|
+<!-- TODO: find better data. This example is nonsensical :-) -->
|
|
|
+Spearfish example (we first simulate 3D soil range data):
|
|
|
+
|
|
|
+<div class="code"><pre>
|
|
|
+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_output=elevrand n=200
|
|
|
+
|
|
|
+# generate synthetic values
|
|
|
+v.db.addcolumn elevrand col="x double precision, y double precision"
|
|
|
+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 dp=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 elev=soilrange zmult=100
|
|
|
+
|
|
|
+# visualize I: in GRASS GIS 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
|
|
|
+</pre></div>
|
|
|
+
|
|
|
<h2>BUGS</h2>
|
|
|
<b>devi</b> file is written as 2D and deviations are not written as attributes.
|
|
|
|
|
@@ -236,8 +235,8 @@ Mitasova, H.</a>, 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
|
|
|
-<p>Mitas L., Brown W. M., Mitasova H., 1997, <a
|
|
|
- href="http://www4.ncsu.edu/~hmitaso/gmslab/lcgfin/cg-mitas.html">Role
|
|
|
+<p>Mitas L., Brown W. M., Mitasova H., 1997,
|
|
|
+<a href="http://www4.ncsu.edu/~hmitaso/gmslab/lcgfin/cg-mitas.html">Role
|
|
|
of dynamic cartography in simulations of landscape processes based on
|
|
|
multi-variate fields.</a> Computers and Geosciences, Vol. 23, No. 4,
|
|
|
pp. 437-446 (includes CDROM and WWW: www.elsevier.nl/locate/cgvis)
|
|
@@ -248,16 +247,14 @@ New methods and tools for GRASS GIS. International Journal of GIS, 9
|
|
|
(4),
|
|
|
special issue on Integrating GIS and Environmental modeling, 433-446.
|
|
|
<p> Mitasova, H., Mitas, L., Brown, B., Kosinovsky, I., Baker, T.,
|
|
|
-Gerdes, D. (1994): <a
|
|
|
- href="http://www4.ncsu.edu/~hmitaso/gmslab/viz/ches.html">Multidimensional
|
|
|
+Gerdes, D. (1994):
|
|
|
+<a href="http://www4.ncsu.edu/~hmitaso/gmslab/viz/ches.html">Multidimensional
|
|
|
interpolation and visualization in GRASS GIS</a>
|
|
|
-<p><a
|
|
|
- href="http://www4.ncsu.edu/~hmitaso/gmslab/papers/lmg.rev1.ps">Mitasova
|
|
|
+<p><a href="http://www4.ncsu.edu/~hmitaso/gmslab/papers/lmg.rev1.ps">Mitasova
|
|
|
H. and Mitas L. 1993</a>: Interpolation by Regularized Spline with
|
|
|
Tension: I. Theory and Implementation, <i>Mathematical Geology</i> 25,
|
|
|
641-655.
|
|
|
-<p><a
|
|
|
- href="http://www4.ncsu.edu/~hmitaso/gmslab/papers/hmg.rev1.ps">Mitasova
|
|
|
+<p><a href="http://www4.ncsu.edu/~hmitaso/gmslab/papers/hmg.rev1.ps">Mitasova
|
|
|
H. and Hofierka J. 1993</a>: Interpolation by Regularized Spline with
|
|
|
Tension: II. Application to Terrain Modeling and Surface Geometry
|
|
|
Analysis, <i>Mathematical Geology</i> 25, 657-667.
|