-
Notifications
You must be signed in to change notification settings - Fork 432
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'origin/master' into issue-2262
- Loading branch information
Showing
37 changed files
with
1,412 additions
and
575 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
.. _filters.hag_delaunay: | ||
|
||
filters.hag_delaunay | ||
=============================================================================== | ||
|
||
The **Height Above Ground Delaunay filter** takes as input a point cloud with | ||
``Classification`` set to 2 for ground points. It creates a new dimension, | ||
``HeightAboveGround``, that contains the normalized height values. | ||
|
||
.. note:: | ||
|
||
We expect ground returns to have the classification value of 2 in keeping | ||
with the `ASPRS Standard LIDAR Point Classes | ||
<http://www.asprs.org/a/society/committees/standards/LAS_1_4_r13.pdf>`_. | ||
|
||
Ground points may be generated by :ref:`filters.pmf` or :ref:`filters.smrf`, | ||
but you can use any method you choose, as long as the ground returns are | ||
marked. | ||
|
||
Normalized heights are a commonly used attribute of point cloud data. This can | ||
also be referred to as *height above ground* (HAG) or *above ground level* | ||
(AGL) heights. In the end, it is simply a measure of a point's relative height | ||
as opposed to its raw elevation value. | ||
|
||
The filter creates a delaunay triangulation of the `count`_ ground points | ||
closest to the non-ground point in question. If the non-ground point is within | ||
the trianulated area, the assigned ``HeightAboveGround`` is the difference | ||
between its ``Z`` value and a ground height interpolated from the three | ||
vertices of the containing triangle. If the non-ground point is outside of the | ||
triangulated area, its ``HeightAboveGround`` is calculated as the difference | ||
between its ``Z`` value and the ``Z`` value of the nearest ground point. | ||
|
||
Choosing a value for `count`_ is difficult, as placing the non-ground point in | ||
the triangulated area depends on the layout of the nearby points. If, for | ||
example, all the ground points near a non-ground point lay on one side of that | ||
non-ground point, finding a containing triangle will fail. | ||
|
||
.. embed:: | ||
|
||
Example #1 | ||
---------- | ||
|
||
Using the autzen dataset (here shown colored by elevation), which already has | ||
points classified as ground | ||
|
||
.. image:: ./images/autzen-elevation.png | ||
:height: 400px | ||
|
||
we execute the following pipeline | ||
|
||
.. code-block:: json | ||
[ | ||
"autzen.laz", | ||
{ | ||
"type":"filters.hag_delaunay" | ||
}, | ||
{ | ||
"type":"writers.laz", | ||
"filename":"autzen_hag_delaunay.laz", | ||
"extra_dims":"HeightAboveGround=float32" | ||
} | ||
] | ||
which is equivalent to the ``pdal translate`` command | ||
|
||
:: | ||
|
||
$ pdal translate autzen.laz autzen_hag_delaunay.laz hag_delaunay \ | ||
--writers.las.extra_dims="HeightAboveGround=float32" | ||
|
||
In either case, the result, when colored by the normalized height instead of | ||
elevation is | ||
|
||
.. image:: ./images/autzen-hag-delaunay.png | ||
:height: 400px | ||
|
||
Options | ||
------------------------------------------------------------------------------- | ||
|
||
_`count` | ||
The number of ground neighbors to consider when determining the height | ||
above ground for a non-ground point. [Default: 10] | ||
|
||
allow_extrapolation | ||
If false and a non-ground point lies outside of the bounding box of | ||
all ground points, its ``HeightAboveGround`` is set to 0. If true | ||
and ``delaunay`` is set, the ``HeightAboveGround`` is set to the | ||
difference between the heights of the non-ground point and nearest | ||
ground point. [Default: false] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
.. _filters.hag_dem: | ||
|
||
filters.hag_dem | ||
=============================================================================== | ||
|
||
The **Height Above Ground (HAG) Digital Elevation Model (DEM) filter** loads | ||
a GDAL-readable raster image specifying the DEM. The ``Z`` value of each point | ||
in the input is compared against the value at the corresponding X,Y location | ||
in the DEM raster. It creates a new dimension, ``HeightAboveGround``, that | ||
contains the normalized height values. | ||
|
||
Normalized heights are a commonly used attribute of point cloud data. This can | ||
also be referred to as *height above ground* (HAG) or *above ground level* (AGL) | ||
heights. In the end, it is simply a measure of a point's relative height as | ||
opposed to its raw elevation value. | ||
|
||
.. embed:: | ||
|
||
.. streamable:: | ||
|
||
Example #1 | ||
---------- | ||
|
||
Using the autzen dataset (here shown colored by elevation) | ||
|
||
.. image:: ./images/autzen-elevation.png | ||
:height: 400px | ||
|
||
we generate a DEM based on the points already classified as ground | ||
|
||
:: | ||
$ pdal translate autzen.laz autzen_dem.tif range \ | ||
--filters.range.limits="Classification[2:2]" \ | ||
--writers.gdal.output_type="idw" \ | ||
--writers.gdal.resolution=6 \ | ||
--writers.gdal.window_size=24 | ||
|
||
and execute the following pipeline | ||
|
||
.. code-block:: json | ||
[ | ||
"autzen.laz", | ||
{ | ||
"type":"filters.hag_dem", | ||
"raster": "autzen_dem.tif" | ||
}, | ||
{ | ||
"type":"writers.las", | ||
"filename":"autzen_hag_dem.laz", | ||
"extra_dims":"HeightAboveGround=float32" | ||
} | ||
] | ||
which is equivalent to the ``pdal translate`` command | ||
|
||
:: | ||
|
||
$ pdal translate autzen.laz autzen_hag_dem.laz hag_dem \ | ||
--filters.hag_dem.raster=autzen_dem.tif \ | ||
--writers.las.extra_dims="HeightAboveGround=float32" | ||
|
||
In either case, the result, when colored by the normalized height instead of | ||
elevation is | ||
|
||
.. image:: ./images/autzen-hag-dem.png | ||
:height: 400px | ||
|
||
Options | ||
------------------------------------------------------------------------------- | ||
|
||
_`raster` | ||
GDAL-readable raster to use for DEM. | ||
|
||
band | ||
GDAL Band number to read (count from 1). | ||
[Default: 1] | ||
|
||
zero_ground | ||
If true, set HAG of ground-classified points to 0 rather than comparing | ||
``Z`` value to raster DEM. | ||
[Default: true] | ||
|
Oops, something went wrong.