r.in.lidar.html 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619
  1. <h2>DESCRIPTION</h2>
  2. The <em>r.in.lidar</em> module loads LAS LiDAR point clouds into a new
  3. raster map using binning. The user may choose from a variety of
  4. statistical methods which will be used for binning when creating
  5. the new raster.
  6. <p>
  7. Since a new raster map is created during the binning, the binning of
  8. points depends on the current computational region settings
  9. (extent and resolution) by default (see more about binning below).
  10. When using the <b>-e</b> flag, the binning will be done in the extent
  11. of the point cloud, so the resulting raster will have extent based on
  12. the input point cloud.
  13. When the <em>resolution=value</em> parameter is used,
  14. the binning is done using the provided resolution and the resulting
  15. raster will have that resolution (see more below for more information
  16. about extent and resolution management).
  17. <p>
  18. <em>r.in.lidar</em> is designed for processing massive point cloud
  19. datasets, for example raw LiDAR or sidescan sonar swath data. It has
  20. been tested with large datasets (see below for memory management
  21. notes).
  22. <h3>Binning</h3>
  23. The main different of <em>r.in.lidar</em> in comparison to
  24. <em><a href="r.in.lidar.html">r.in.lidar</a></em> is that
  25. <em>r.in.lidar</em> creates a raster instead of just importing the
  26. points into GRASS GIS. However, <em>r.in.lidar</em> does not merely
  27. rasterizes the points from the point cloud. <em>r.in.lidar</em>
  28. uses binning to derive values for individual raster cells,
  29. so the value of a cell is typically an aggregation of values
  30. of individual points falling into one cell.
  31. In general binning is the conversion of points into a regular grid.
  32. The binning of points with X and Y coordinates starts with the overlay
  33. of a grid of bins over the points.
  34. <p>
  35. In the basic case, binning is a method which counts the number of
  36. points which fall into one raster cell, i.e. bin. The number of points
  37. per cell (bin) indicates the density of points in the point cloud.
  38. The cell (bin) is always square or rectangular in case of
  39. <em>r.in.lidar</em> because the result is GRASS GIS 2D raster.
  40. The result of binning where the number of point per cell is counted
  41. is sometimes called 2D (two dimensional) histogram because
  42. a histogram is used in univariate statistics (in one dimension)
  43. to count the number samples falling into a given bin.
  44. <center>
  45. <img src="r_in_lidar_binning_count.png">
  46. <img src="r_in_lidar_binning_mean.png">
  47. <p><em>
  48. Figure: The binning on left was used to count number of points per
  49. (sometimes also called 2D histogram). The numbers in cells are
  50. examples of counts, the rest is represented by the color.
  51. The binning on right was used with mean to create a surface
  52. based on the values associated with the points. The numbers
  53. show examples of cell values. Note also the cells without any points
  54. which were assigned the NULL value.
  55. </em>
  56. </center>
  57. The basic concept of binning is extended when the points have another
  58. value associated with them. For LiDAR data this value can be the Z
  59. coordinate or intensity. The value for a given cell (bin) is computed
  60. using univariate statistics from the values of all points in the cell.
  61. For example, computing the mean value of Z coordinates can yield
  62. a raster representing the digital elevation model. Another example is
  63. the range of Z coordinates which can be used as a rough estimate of
  64. vegetation height.
  65. <h3>Statistics</h3>
  66. Available statistics for populating the output raster map are:
  67. <dl class="option_descriptions">
  68. <dt>n</dt>
  69. <dd>This computes the number (count) of points per cell. The result
  70. is a indicator of spatially variable density of points in the given
  71. area.</dd>
  72. <dt>min</dt>
  73. <dd>This finds the minimum of point values in each cell.
  74. It can be useful when finding topography in a forested or urban
  75. environment and there is a lot of points per one cells (terrain is
  76. oversampled considering the desired resolution).
  77. It can also create surfaces independent on the noise from premature
  78. hits as it will always select the lowest point.
  79. </dd>
  80. <dt>max</dt>
  81. <dd>This finds the maximum of point values in each cell.
  82. In connection with <b>base_raster</b> it can yield maximum vegetation
  83. of feature height per cell.
  84. For this purpose, it is usually much more appropriate than <em>mean</em>
  85. which would yield heights mostly influenced by the vertical
  86. distribution of points.
  87. </dd>
  88. <dt>range</dt>
  89. <dd>This computes the range of point values in each cell.
  90. The range of Z coordinates per cell can be used as a rough estimate of
  91. vegetation height when the cells are small enough, slopes low
  92. and the area is mostly vegetated.
  93. However, for more profound analysis, the base raster together with
  94. different statistics is recommended.</dd>
  95. <dt>sum</dt>
  96. <dd>This computes the sum of point values per cell.
  97. This is useful especially when intensity is used as a value
  98. (flags <b>-i</b> and <b>-j</b>).</dd>
  99. <dt>mean</dt>
  100. <dd>This is a mean (average) value of point values in cell.
  101. When used with Z coordinates (the default) and points from the ground
  102. class, the resulting raster is a digital elevation model.
  103. When intensity is used as a point value, the resulting raster contains
  104. mean intensity per cell.
  105. Note that <em>mean</em> gives heights influenced by the vertical
  106. distribution of points</dd>
  107. <dt>stddev</dt>
  108. <dd>This computes the standard deviation of point values for each
  109. cell.</dd>
  110. <dt>variance</dt>
  111. <dd>This computes the variance of point values for each cell.
  112. Variance and derivatives use the biased estimator (n)
  113. [note that this might be subject to change].</dd>
  114. <dt>coeff_var</dt>
  115. <dd>This computes the coefficient of variance of point values for each
  116. cell. Coefficient of variance is given in percentage and defined as
  117. <tt>(stddev/mean)*100</tt>.</dd>
  118. <dt>median</dt>
  119. <dd>This computes the median of point values for each cell</dd>
  120. <dt>percentile</dt>
  121. <dd>p<sup><i>th</i></sup> (nth) percentile of points in cell</dd>
  122. <dt>skewness</dt>
  123. <dd>This is a skewness of point values in cell</dd>
  124. <dt>trimmean</dt>
  125. <dd>This is a trimmed mean of point values in cell.
  126. Trimmed mean also know as truncated mean is a mean
  127. computed after discarding values at the low end and at the high end.
  128. How many values to discard is given by the <b>trim</b> option
  129. in percent. In statistics the usual percentage of trimmed values ranges
  130. from 5 to 25 percent.</dd>
  131. </dl>
  132. Note that different statistics have different memory requirements
  133. (see below for details).
  134. <h3>Filtering</h3>
  135. Points falling outside the current computational region will be skipped.
  136. This includes points falling <em>exactly</em> on the southern region
  137. bound. To capture those adjust the region with:
  138. <div class="code"><pre>
  139. g.region s=s-0.000001
  140. </pre></div>
  141. See <em><a href="g.region.html">g.region</a></em> for details about
  142. computation region handling in GRASS GIS.
  143. <p>
  144. The <b>zrange</b> parameter may be used for filtering the input data by
  145. vertical extent. Example uses include
  146. filtering out extreme outliers and outliers on relatively flat terrain.
  147. This parameter can be also used for cutting the point cloud into
  148. vertical sections preparing it for further processing
  149. by separate sections, together as if it would be an imagery group
  150. (see <em><a href="i.group.html">i.group</a></em>), or combined into
  151. a 3D raster using <em><a href="r.to.rast3.html">r.to.rast3</a></em>.
  152. In for these last examples, it might actually be more advantageous
  153. to use <em><a href="r3.in.lidar.html">r3.in.lidar</a></em> module.
  154. The <b>zrange</b> parameter is especially powerful when used
  155. together with the <b>base_raster</b> parameter. The <b>zrange</b>
  156. is applied to Z values after the <b>base_raster</b> reduction.
  157. <center>
  158. <img src="r_in_lidar_zrange.png">
  159. <p><em>
  160. Figure: This is the principle of zrange filter. Points with the
  161. Z coordinate value below the lower value in the range (here 180)
  162. are filtered out (blue points) and same applies for points above
  163. higher value in the range (here 250). All other points are preserved
  164. (green points).
  165. </em>
  166. </center>
  167. <p>
  168. A LiDAR pulse can have multiple returns. The first return values can be
  169. used to obtain a digital surface model (DSM) where e.g. canopy cover is
  170. represented. The last return values can be used to obtain a digital
  171. terrain model (DTM) where e.g. the forest floor instead of canopy
  172. cover is represented. The <b>return_filter</b> option allows selecting
  173. one of first, mid, or last returns. Return number and number of returns
  174. in the pulse associated with each point are compared to determine
  175. if the point is first, mid, or last return.
  176. <p>
  177. LiDAR points often come as already classified into standardized classes.
  178. For example, class number 2 represents ground. For other classes see
  179. LAS format specification in references. The <b>class_filter</b> option
  180. allows selecting one or more classes using numbers (integers) separated
  181. by comma.
  182. <p>
  183. In varied terrain the user may find that <em>min</em> maps make for a good
  184. noise filter as most LIDAR noise is from premature hits. The <em>min</em> map
  185. may also be useful to find the underlying topography in a forested or urban
  186. environment if the cells are oversampled.
  187. <p>
  188. The user can use a combination of <em>r.in.lidar</em> <b>output</b> maps
  189. to create custom raster-based filters, for examplee, use
  190. <em><a href="r.mapcalc.html">r.mapcalc</a></em> to create
  191. a <tt>mean-(2*stddev)</tt> map. (In this example the user may want to
  192. include a lower bound filter in <em>r.mapcalc</em> to remove highly
  193. variable points (small <em>n</em>) or run <em>r.neighbors</em> to
  194. smooth the stddev map before further use.)
  195. <p>
  196. Note that proper filtering of the input points in not only critical for
  197. the analysis itself but it can also speed up the processing.
  198. <h3>Reduction to a base raster</h3>
  199. For analysis of features on the terrain surface, especially vegetation
  200. it is advantageous to remove the influence of the terrain on heights
  201. because the height above the terrain is important (e.g. height of
  202. a tree) rather than height of the top of the tree above the see level.
  203. In this case, the base raster would be digital elevation model
  204. which can be one derived from the point cloud, or obtained in
  205. some other way. LiDAR data often come with precomputed DEMs
  206. (quality should be checked in this case) and there is often a DEM
  207. available for a given area (fit with the point cloud, especially
  208. vertical, and resolution should be checked).
  209. <center>
  210. <img src="r_in_lidar_base_raster.png">
  211. <p><em>
  212. Figure: This is a profile of base raster (in orange) representing
  213. digital elevation model and selected points, e.g. first return,
  214. from point cloud (green dots). By default the points would create
  215. a digital surface model (thin brown line) but after reducing the
  216. Z coordinates using the base raster, the created surface is a
  217. derived from the height of points relative to the base raster.
  218. </em>
  219. </center>
  220. The usage of base raster is not limited to digital elevation model.
  221. The base raster can be any surface which has some relation to the
  222. point values, for example digital surface model representing
  223. top of the canopy.
  224. <h3>Setting extent and resolution</h3>
  225. <p>
  226. Since the creation of raster maps depends on the computational
  227. region settings (extent and resolution), as default the current
  228. region extents and resolution are used for the import. When using
  229. the <em>-e</em> flag along with the <em>resolution=value</em>
  230. parameter, the region used for the new raster will be based
  231. the point cloud extent and the provided resolution. It is therefore
  232. recommended to first use the <em>-s</em> flag to get the extents of the
  233. LiDAR point cloud to be imported, then adjust the current region extent
  234. and resolution accordingly, and only then proceed with the actual import.
  235. Another option is to automatically set the region extents based on the
  236. LAS dataset itself (<em>-e</em> flag) along with the desired raster
  237. resolution. The best option is to know the point cloud extent ahead,
  238. e.g. from tiling scheme, and use it. See below for details.
  239. <p>
  240. Since the <em>r.in.lidar</em> generates a raster map through binning
  241. from the original LiDAR points, the target computational region
  242. extent and resolution have to be determined. A typical workflow
  243. would involve the examination of the LAS data's associated
  244. documentation or the scan of the LAS data file with
  245. <em>r.in.lidar</em>'s <b>-s</b> (or <b>-g</b>) flag to find the input
  246. data's bounds.
  247. <p>
  248. Another option is to automatically set the region extents based on the
  249. LAS dataset extent (<b>-e</b> flag) along with the desired raster
  250. resolution using the <em>resolution</em> parameter.
  251. <p>
  252. Using the <b>-s</b> scan flag, the extent of the input data (and thus
  253. point density) is printed. To check this is recommended before performing
  254. the full import. The <b>-g</b> shell style flag prints the extent suitable
  255. as command line parameters for <em>g.region</em>.
  256. <p>
  257. A simpler option is to automatically set the region extents based on the
  258. LAS dataset (<b>-e</b> flag) along with the target raster resolution using
  259. the <em>resolution</em> parameter. Also here it is recommended to verify
  260. and optimize the resulting region settings with <em>g.region</em> prior
  261. to importing the dataset.
  262. <h2>NOTES</h2>
  263. <h3>Format and projection support</h3>
  264. The typical file extensions for the LAS format are .las and .laz
  265. (compressed). The compressed LAS (.laz) format can be imported only if
  266. libLAS has been compiled with LASzip support. It is also recommended to
  267. compile libLAS with GDAL which is used to test if the LAS projection
  268. matches that of the GRASS location.
  269. <h3>LAS file import preparations</h3>
  270. Note that the scanning (<b>-s</b> or <b>-g</b> flags) needs to iterate
  271. over the whole point cloud. This will take a long time for large
  272. datasets, so if the user knows the approximate extent of the dataset,
  273. for example because it dataset for one county or tiling scheme is
  274. available as vector polygons, it is much more advantageous to provide
  275. the extent information instead of retrieving it from the dataset.
  276. The same applies to the <b>-e</b> flag which also needs to perform
  277. scanning before the binning begins.
  278. <p>
  279. Also note that the scanning does not apply any filters, so the
  280. extent determined by scanning can be theoretically bigger than
  281. the extent actively used during the binning.
  282. This behavior ensures that the newly created raster has always
  283. the same extent regardless the filters used.
  284. However, for most cases (considering the point cloud and the resolution
  285. used) there is no difference between the extent without filters applied
  286. and the extent if the filters would be applied.
  287. <h3>Memory consumption</h3>
  288. <p>
  289. While the <b>input</b> file can be arbitrarily large, <em>r.in.lidar</em>
  290. will use a large amount of system memory (RAM) for large raster regions
  291. (&gt; 10000x10000 pixels).
  292. If the module refuses to start complaining that there isn't enough memory,
  293. use the <b>percent</b> parameter to run the module in several passes.
  294. In addition using a less precise map format (<tt>CELL</tt> [integer] or
  295. <tt>FCELL</tt> [floating point]) will use less memory than a <tt>DCELL</tt>
  296. [double precision floating point] <b>output</b> map.
  297. For <b>method</b>=<em>n</em>, the <tt>CELL</tt> format is used
  298. automatically.
  299. <p>
  300. The <em>mean</em> and <em>range</em> methods will use average amount
  301. of memory (comparing to other methods).
  302. Methods such as <em>n, min, max</em>, and <em>sum</em> will use
  303. less memory,
  304. while <em>stddev, variance</em>, and <em>coeff_var</em> will use more.
  305. <p>
  306. The memory usage for regular statistics mentioned above is based solely
  307. on region (raster) size.
  308. However, the aggregate functions <em>median, percentile, skewness</em>
  309. and <em>trimmean</em> will use more memory and may not be
  310. appropriate for use with arbitrarily large input files without
  311. a small value for the <b>percent</b> option because unlike
  312. the other statistics memory use for these also depends on
  313. the number of data points.
  314. <p>
  315. The default map <b>type</b>=<tt>FCELL</tt> is intended as compromise between
  316. preserving data precision and limiting system resource consumption.
  317. <h2>EXAMPLES</h2>
  318. Simple example of binning of point from a LAS file into a newly created
  319. raster map in an existing location/mapset (using metric units):
  320. <div class="code"><pre>
  321. # set the computational region automatically, resol. for binning is 5m
  322. r.in.lidar -e -o input=points.las resolution=5 output=lidar_dem_mean
  323. g.region raster=lidar_dem_mean -p
  324. r.univar lidar_dem_mean
  325. </pre></div>
  326. <h3>Finding suitable extent and resolution</h3>
  327. <!-- TODO: there is duplication with the text in the description -->
  328. Using the <b>-s</b> scan flag, the extent of the input data (and thus
  329. point density) is printed. To check this is recommended before performing
  330. the full import. The <b>-g</b> shell style flag prints the extent suitable
  331. as command line parameters for <em>g.region</em>.
  332. <p>
  333. A simpler option is to automatically set the region extents based on the
  334. LAS dataset (<b>-e</b> flag) along with the target raster resolution using
  335. the <em>resolution</em> parameter. Also here it is recommended to verify
  336. and optimize the resulting region settings with <em>g.region</em> prior
  337. to importing the dataset.
  338. <p>
  339. For the output raster map, a <b>suitable resolution</b> can be found by
  340. dividing the number of input points by the area covered (this requires
  341. an iterative approach as outlined here):
  342. <!-- points.las is from California -->
  343. <div class="code"><pre>
  344. # print LAS metadata (Number of Points)
  345. r.in.lidar -p input=points.las
  346. # Number of Point Records: 1287775
  347. # scan for LAS points cloud extent
  348. r.in.lidar -sg input=points.las output=dummy -o
  349. # n=2193507.740000 s=2190053.450000 e=6070237.920000 w=6066629.860000 b=-3.600000 t=906.000000
  350. # set computation region to this extent
  351. g.region n=2193507.740000 s=2190053.450000 e=6070237.920000 w=6066629.860000 -p
  352. # print resulting extent
  353. g.region -p
  354. # rows: 3454
  355. # cols: 3608
  356. # points_per_cell = n_points / (rows * cols)
  357. # Here: 1287775 / (3454 * 3608) = 0.1033359 LiDAR points/raster cell
  358. # As this is too low, we need to select a lower raster resolution
  359. g.region res=5 -ap
  360. # rows: 692
  361. # cols: 723
  362. # Now: 1287775 / (692 * 723) = 2.573923 LiDAR points/raster cell
  363. # import as mean
  364. r.in.lidar input=points.las output=lidar_dem_mean method=mean -o
  365. # import as max
  366. r.in.lidar input=points.las output=lidar_dem_max method=max -o
  367. # import as p'th percentile of the values
  368. r.in.lidar input=points.las output=lidar_dem_percentile_95 \
  369. method=percentile pth=95 -o
  370. </pre></div>
  371. <center>
  372. <img src="r_in_lidar_dem_mean3D.jpg" alt="Mean value DEM in perspective view"><br>
  373. <i>Mean value DEM in perspective view, imported from LAS file</i>
  374. </center>
  375. <p>
  376. Further hints: how to calculate number of LiDAR points/square meter:
  377. <div class="code"><pre>
  378. g.region -e
  379. # Metric location:
  380. # points_per_sq_m = n_points / (ns_extent * ew_extent)
  381. # Lat/Lon location:
  382. # points_per_sq_m = n_points / (ns_extent * ew_extent*cos(lat) * (1852*60)^2)
  383. </pre></div>
  384. <h3>Serpent Mound dataset</h3>
  385. This example is analogous to the example used in the GRASS wiki page for
  386. <a href="http://grasswiki.osgeo.org/wiki/LIDAR#Import_LAS_as_raster_DEM">importing LAS as raster DEM</a>.
  387. <p>The sample LAS data are in the file "Serpent Mound Model LAS Data.las",
  388. available at
  389. <a href="http://www.appliedimagery.com/downloads/sampledata/Serpent%20Mound%20Model%20LAS%20Data.las">appliedimagery.com</a>:
  390. <div class="code"><pre>
  391. # print LAS file info
  392. r.in.lidar -p input="Serpent Mound Model LAS Data.las"
  393. # using v.in.lidar to create a new location
  394. # create location with projection information of the LAS data
  395. v.in.lidar -i input="Serpent Mound Model LAS Data.las" location=Serpent_Mound
  396. # quit and restart GRASS in the newly created location "Serpent_Mound"
  397. # scan the extents of the LAS data
  398. r.in.lidar -sg input="Serpent Mound Model LAS Data.las"
  399. # set the region to the extents of the LAS data, align to resolution
  400. g.region n=4323641.57 s=4320942.61 w=289020.90 e=290106.02 res=1 -ap
  401. # import as raster DEM
  402. r.in.lidar input="Serpent Mound Model LAS Data.las" \
  403. output=Serpent_Mound_Model_LAS_Data method=mean
  404. </pre></div>
  405. <center>
  406. <img src="r_in_lidar.png">
  407. <p><em>Figure: Elevation for the whole area of Serpent Mound dataset</em></p>
  408. </center>
  409. <h3>Height above ground</h3>
  410. The mean height above ground of the points can be computed for each
  411. raster cell (the ground elevation is given by the raster map
  412. <tt>elevation</tt>):
  413. <div class="code"><pre>
  414. g.region raster=elevation -p
  415. r.in.lidar input=points.las output=mean_height_above_ground base_raster=elevation method=mean
  416. </pre></div>
  417. In this type of computation, it might be advantageous to change the resolution
  418. to match the precision of the points rather than deriving it from the base raster.
  419. <!-- TODO: say how -->
  420. <h3>Multiple file input</h3>
  421. The file option requres a file that contains a list of file names with the full
  422. path. For example, a list of files in the directory /home/user/data:
  423. <div class="code"><pre>
  424. points1.laz
  425. points2.laz
  426. points3.laz
  427. </pre></div>
  428. would be lised in the file as:
  429. <div class="code"><pre>
  430. /home/user/data/points1.laz
  431. /home/user/data/points2.laz
  432. /home/user/data/points3.laz
  433. </pre></div>
  434. On Linux and OSX, this file can be automatically generated with the command:
  435. <div class="code"><pre>
  436. ls /home/user/data/*.laz > /home/user/data/filelist.txt
  437. </pre></div>
  438. On Windows:
  439. <div class="code"><pre>
  440. dir /b c:\users\user\data\*.laz > c:\users\user\data\filelist.txt
  441. </pre></div>
  442. The mean height above ground example above would then be:
  443. <div class="code"><pre>
  444. g.region raster=elevation -p
  445. r.in.lidar file=/home/user/data/filelist.txt output=mean_height_above_ground base_raster=elevation method=mean
  446. </pre></div>
  447. In Python, the list of files can be created using the <em>glob</em>
  448. Python module:
  449. <div class="code"><pre>
  450. import glob
  451. import gscript
  452. file_list_name = '/home/user/data/filelist.txt'
  453. with open(, mode='w') as file_list:
  454. for path in glob.iglob('/home/user/data/lidar/*.las'):
  455. file_list.write(path + "\n")
  456. gscript.run_command('r.in.lidar', file=file_list_name,
  457. output='mean_height_above_ground',
  458. base_raster='elevation' method='mean')
  459. </pre></div>
  460. <h2>KNOWN ISSUES</h2>
  461. <ul>
  462. <li>The "<tt>nan</tt>" value (as defined in C language) can leak into
  463. <em>coeff_var</em> raster maps. Cause is unknown. Possible
  464. work-around is: <tt>r.null setnull=nan</tt> or
  465. <tt>r.mapcalc 'no_nan = if(map == map, map, null())'</tt>.
  466. <li>Only one method can be applied for a single run and multiple map
  467. output from a single run
  468. (e.g. <tt>method=string[,string,...] output=name[,name,...]</tt>
  469. or <tt>n=string mean=string</tt>) is no supported.
  470. <!-- not really:
  471. <li> Merge with r.in.xyz.
  472. -->
  473. <!-- Bob Covill has supplied patches for MBIO interface already -->
  474. </ul>
  475. If you encounter any problems (or solutions!) please contact the GRASS
  476. Development Team.
  477. <h2>SEE ALSO</h2>
  478. <em>
  479. <a href="g.region.html">g.region</a>,
  480. <a href="r.in.xyz.html">r.in.xyz</a>,
  481. <a href="r.mapcalc.html">r.mapcalc</a>,
  482. <a href="r.univar.html">r.univar</a>,
  483. <a href="v.in.lidar.html">v.in.lidar</a>,
  484. <a href="r3.in.lidar.html">r3.in.lidar</a>,
  485. <a href="v.vect.stats.html">v.vect.stats</a>
  486. <br>
  487. <a href="v.lidar.correction.html">v.lidar.correction</a>,
  488. <a href="v.lidar.edgedetection.html">v.lidar.edgedetection</a>,
  489. <a href="v.lidar.growing.html">v.lidar.growing</a>,
  490. <a href="v.outlier.html">v.outlier</a>,
  491. <a href="v.surf.bspline.html">v.surf.bspline</a>
  492. </em>
  493. <br>
  494. <a href="https://en.wikipedia.org/wiki/Truncated_mean">Trimmed mean</a>
  495. (Truncated mean, Wikipedia article),
  496. <a href="http://opentopography.org/">OpenTopography</a>
  497. (LiDAR point cloud repository)
  498. <h2>REFERENCES</h2>
  499. <ul>
  500. <li>
  501. V. Petras, A. Petrasova, J. Jeziorska, H. Mitasova (2016):
  502. <em>Processing UAV and lidar point clouds in GRASS GIS</em>.
  503. XXIII ISPRS Congress 2016 [<a href="http://www.int-arch-photogramm-remote-sens-spatial-inf-sci.net/XLI-B7/945/2016/">ISPRS Archives</a>, <a href="https://www.researchgate.net/publication/304340172_Processing_UAV_and_lidar_point_clouds_in_GRASS_GIS">ResearchGate</a>]
  504. <li>
  505. <a href="http://www.asprs.org/Committee-General/LASer-LAS-File-Format-Exchange-Activities.html">
  506. ASPRS LAS format</a>
  507. <li>
  508. <a href="http://www.liblas.org/">LAS library</a>
  509. <li>
  510. <a href="http://test.liblas.org/doxygen/liblas_8h.htm">LAS library C API</a> documentation
  511. </ul>
  512. <h2>AUTHORS</h2>
  513. Markus Metz<br>
  514. Vaclav Petras,
  515. <a href="http://geospatial.ncsu.edu/osgeorel/">NCSU GeoForAll Lab</a>
  516. (base_raster option, documentation)
  517. <br>
  518. based on <em>r.in.xyz</em> by Hamish Bowman and Volker Wichmann<br>
  519. <p><i>Last changed: $Date$</i>