1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314
|
.. _start:
******************************************************************************
Getting Started with libLAS
******************************************************************************
.. contents::
:depth: 3
:backlinks: none
:Author: Howard Butler
:Contact: hobu.inc at gmail dot com
Overview
------------------------------------------------------------------------------
libLAS is two things: a library for embedding read and write support of the
ASPRS LAS format into your own C/C++ applications, and a suite of command-line
utilities based on :ref:`LASTools <lastools_liblas>` for inspecting, manipulating,
transforming, and processing LAS LiDAR data.
This document is an entry point into the world of libLAS, and will give a
general overview of the types of operations you can do with the :ref:`libLAS utilities <utilities>`
as well as point you to other information for developing your own applications
with libLAS.
Installation
------------------------------------------------------------------------------
:ref:`download` contains the canonical location for obtaining libLAS in
both source and binary forms.
Windows
..............................................................................
:ref:`osgeo4w_install` contains information how to install libLAS on Windows.
Unix
..............................................................................
Packages are available for `DebianGIS`_, but in most other cases you are
going to have to compile libLAS yourself. :ref:`compilation` provides an
extensive synopsis of how to do so.
OSX
..............................................................................
If you use you `Homebrew`_, you can install libLAS this way::
$ brew install liblas
If you want the latest development version::
$ brew install liblas --HEAD
Otherwise, you have to :ref:`compile <compilation>` libLAS yourself.
Compilation
..............................................................................
:ref:`compilation` shows how to compile libLAS for your own use on Windows,
Mac OSX, and Linux.
Processing
------------------------------------------------------------------------------
The libLAS :ref:`command-line utilities <utilities>` provide the bulk of
user-facing operational software for libLAS, although the underlying libLAS
library is what powers them. Below is a listing of common operations that
you might want to do on LAS data, and the utilities and approaches to
take to complete those tasks.
Reprojecting an LAS file
..............................................................................
All LAS data are in some sort of coordinate system, even if that coordinate
system is not described in the LAS file. For terrestrial LAS data, these
coordinate system descriptions often map to coordinate systems described
by the `EPSG`_ database. Another source of information about coordinate
systems in http://spatialreference.org.
The :ref:`las2las <las2las>` utility is the tool you will want to use to
reproject LAS data. :ref:`las2las <las2las>` can take advantage of the
existing coordinate system description that might already be specified in the
LAS file, or you may override the coordinate system description (or supply
one if none was specified).
We're going to use an example file at http://liblas.org/samples/srs.las which
contains only 10 points and has a coordinate system defined. Please
download this file if you want to follow along.
:ref:`las2las <las2las>` is very similar in behavior to another data
translation utility for raster data -- `gdal_translate`_. To reproject data,
we must have a description of both the coordinate system we are starting with
and a description of the coordinate system we are going to. To find out what
you are starting with, issue a :ref:`lasinfo <lasinfo>` command:
::
lasinfo --no-check srs.las
.. note::
The --no-check option tells lasinfo to only print the header information
for the file and to not scan through all of the points. For a 10 point file,
this of course isn't much of a concern, but with a 50 or 500 million point
file, it isn't worth waiting for a full scan of the data if all you
want is header information.
Our :ref:`lasinfo <lasinfo>` invocation tells us that the ``srs.las`` file
is in a UTM North Zone 17 coordinate system:
::
PROJCS["WGS 84 / UTM zone 17N",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",-81],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AUTHORITY["EPSG","32617"]]
Now that we know our input coordinate system, we can make a decision about
what to reproject the data to. In our first example, we're going to use
the venerable plate carrée non-coordinate system, `EPSG:4326`_.
::
las2las srs.las --t_srs EPSG:4326
Our process succeeds, but after a quick inspection of the data with
``lasinfo output.las`` we see a problem:
::
...
Scale Factor X Y Z: 0.01 0.01 0.01
Offset X Y Z: -0.00 -0.00 -0.00
...
Min X, Y, Z: -83.43, 39.01, 170.58,
Max X, Y, Z: -83.43, 39.01, 170.76,
The ``srs.las`` file had a scale of 0.01, or two decimal places of precision
for its X, Y, and Z coordinates. For UTM data, this is ok, because it implies
an implicit precision of 1 cm. For decimal degree data of the unprojected
Plate Carrée coordinate system, it causes us to lose a bunch of precision. We
need to set our scale values to something that can hold more precision in our
case:
::
las2las --t_srs EPSG:4326 srs.las --scale 0.000001 0.000001 0.01
Another quick inspection with :ref:`lasinfo <lasinfo>` gives us something
we're more comfortable with:
::
...
Scale Factor X Y Z: 0.000001 0.000001 0.01
Offset X Y Z: -0.000000 -0.000000 -0.00
...
Min X, Y, Z: -83.427598, 39.012599, 170.58
Max X, Y, Z: -83.427548, 39.012618, 170.76
Vertical datum transformation of an LAS file
..............................................................................
We're going to continue what we were doing in `Reprojecting an LAS file`_ but
add a twist -- we want to change the vertical datum on the data from WGS84
to NAVD88.
.. warning:
A number of requirements are needed before you can do vertical datum
transformations with libLAS. The most important is GDAL support, of course,
but you also need a very current (possibly even unreleased) version of
`Proj.4`_ and the vertical datum .gtx transformation files. If you're using
:ref:`osgeo4w_install`, you already have all of this installed when you
installed libLAS. For Linux or other Unix platforms, you should be aware of
these requirements.
Assuming you have all of the prerequisites in place, we can do the vertical
datum transformation quite simply (again, worrying about precision as well):
::
las2las srs.las --t_srs EPSG:4326+5703 --scale 0.000001 0.000001 0.01
The key point there is adding `+5703` to the coordinate system description
tells the GDAL/Proj.4 machinery to do a vertical transformation. There are
other ways to have these operations happen using `WKT`_ and even GeoTIFF
keys, but this is the most simple way to do things via command line.
Assigning color information to a LAS file
..............................................................................
.. note::
The following example assumes you are working with the `Autzen_Stadium`_
example file that is available from the http://liblas.org/sample sample
library.
Frequent availability of combined terrestrial LiDAR and image captures means
that its now possible to obtain .las files that you can stylize with RGB
imagery. The LAS 1.2 specification provides two different point data
types that allow storing RGB data as 16 bit integers, but the tools to
do the actual intersection operation have been somewhat limited.
libLAS 1.6+ allows you to assign color information to a .las file if `GDAL`_
is linked in at compile-time.
.. note::
The :ref:`LAS specifications <specifications>` only allow two different
point format types to store color information -- point format 2 and point
format 3. The difference between point format 2 and point format 3 is that
3 also has time stored on it. Additionally, only LAS 1.2 and 1.3 versions
support storing color information, but libLAS only can write LAS 1.2 as of
libLAS 1.6.0.
1. Unzip the `Autzen Stadium <Autzen_Stadium>`_ data.
::
$ unzip Autzen_Stadium.zip
Archive: Autzen_Stadium.zip
creating: Autzen_Stadium/
inflating: Autzen_Stadium/image.tif
inflating: Autzen_Stadium/lidar.las
2. Issue the :ref:`las2las <las2las>` call
::
$ las2las -i lidar.las \
--color-source image.tif \
-o output.las \
--file-format 1.2 \
--point-format 3 \
-v
::
Opening lidar.las to fetch Header
Setting format to: 1.2
Setting point format to: 3
Fetching color from ' image.tif' using bands '1, 2, 3' for R, G, B
Writing output:
- : output.las
0...10...20...30...40...50...60...70...80...90...100 - done.
3. Inspect the :ref:`lasinfo <lasinfo>` output and see color information
attached.
::
lasinfo output.las
...
Minimum Color: 39 56 56
Maximum Color: 252 254 251
.. note::
:ref:`assign_color` contains more detailed information about this process.
Compressing an LAS file with `LASzip`_
..............................................................................
libLAS provides the ability to compress data using the fantastic `LASzip`_
compression library.
.. _`LASzip`: http://laszip.org
.. _`CMake`: http://www.cmake.org/
.. _`CTest`: http://cmake.org/cmake/help/ctest-2-8-docs.html
.. _`CMake 2.8.0+`: http://www.cmake.org/cmake/help/cmake-2-8-docs.html
.. _`CDash`: http://www.cdash.org/
.. _`continuous integration`: http://en.wikipedia.org/wiki/Continuous_integration
.. _`libLAS CDash`: http://my.cdash.org/index.php?project=libLAS
.. _`Curses`: http://en.wikipedia.org/wiki/Curses_%28programming_library%29
.. _`Autoconf`: http://www.gnu.org/software/autoconf/
.. _`LLVM`: http://llvm.org/
.. _`OSGeo4W`: http://trac.osgeo.org/osgeo4w/
.. _`Boost`: http://www.boost.org/
.. _`DebianGIS`: http://wiki.debian.org/DebianGis
.. _`gdal_translate`: http://www.gdal.org/gdal_translate.html
.. _`EPSG`: http://www.epsg-registry.org/
.. _`EPSG:4326`: http://spatialreference.org/ref/epsg/4326/
.. _`Proj.4`: http://trac.osgeo.org/proj/
.. _`WKT`: http://en.wikipedia.org/wiki/Well-known_text#Spatial_reference_systems
.. _`GDAL`: http://gdal.org
.. _`Autzen_Stadium`: http://liblas.org/samples/Autzen_Stadium.zip
.. _`Homebrew`: http://brew.sh
|