All,

The libLAS team is pleased to announce the release of libLAS 1.6.0b4 and the 
inaugural release of Martin Isenburg's stand-alone, LGPL'd LASzip LAS 
compression library.  I would like to thank both Martin Isenburg and Michael 
Gerlek for their hard work developing and integrating LASzip into libLAS.

I'll let Martin answer any questions about LASzip's inner workings, but my 
experience with it has been wonderful.  LASzip is meant to provide lossless 
compression for ASPRS LAS data, and its integration in libLAS allows you to 
directly read .laz (LASzip compressed LAS files) directly like you would an 
uncompressed .las file.  You can compress your data from the command line via 
las2las, as well as use the new liblas::{ReaderFactory|WriterFactory} to work 
with compressed data in your software.  LASzip compression has not yet come to 
the C or Python APIs yet, but this is planned for a future release.

As with anything, there's no free lunch, and LASzip's compressed data comes 
with both a reading performance cost and a writing performance cost.  It is up 
to you to determine where and how to use the technology to your benefit, but 
there are certainly situations where the tradeoff is worth it.  
http://liblas.org/samples/ can provide you an example of what kinds of 
compression ratio and variability you might expect with LASzip with each file 
now provided in both compressed and uncompressed form.  Here are some simple 
5-run /usr/bin/time examples of a las2las invocation on the hobu.las file from 
the sample library.  It has about 1.3 million points.  Times are in seconds.  
It's not definitive (or repeatable!), but it should give you some idea of the 
tradeoffs you'll be making.

> fire:data hobu$ ./check_compression.sh 
> Testing  hobu.las
> Writing compressed data...
>         1.15 real         0.93 user         0.15 sys
>         1.11 real         0.93 user         0.14 sys
>         1.11 real         0.93 user         0.14 sys
>         1.12 real         0.93 user         0.15 sys
>         1.11 real         0.93 user         0.14 sys
> Filesize: 7.4M
> Writing uncompressed data...
>         0.76 real         0.30 user         0.33 sys
>         0.79 real         0.30 user         0.34 sys
>         0.91 real         0.30 user         0.37 sys
>         0.76 real         0.30 user         0.33 sys
>         0.79 real         0.30 user         0.33 sys
> Filesize: 32M
> Ratio: 4:1
> Reading compressed data...
>         1.58 real         1.55 user         0.02 sys
>         1.58 real         1.55 user         0.02 sys
>         1.58 real         1.55 user         0.02 sys
>         1.59 real         1.55 user         0.02 sys
>         1.59 real         1.55 user         0.02 sys
> Reading uncompressed data...
>         0.52 real         0.43 user         0.07 sys
>         0.51 real         0.43 user         0.07 sys
>         0.52 real         0.43 user         0.07 sys
>         0.52 real         0.43 user         0.07 sys
>         0.51 real         0.43 user         0.07 sys

Another very important note is that random reading through the file, in the 
form of ReadPointAt and friends is rudimentarily supported, and you should 
expect lots of pain (each call means decompressing the entire file to that 
point before giving you your data) if you do so.  It is hoped that future work 
will provide some knobs to allow "slighly random" access through the 
LASzip-compressed file in the form of chunking.

Here's a list of other things that have been fixed since 1.6.0b3:

* liblas-config script should be available and working again for Unix clients 
that were using the autoconf-based version
* pkgconfig script now available (thanks Ed Hill)
* liblas::Schema::GetDimension now returns boost::optional< Dimension const&> 
instead of throwing exception
* libLAS-specific std::exceptions are now thrown (still based on 
std::runtime_error) to provide more granularity than just the runtime_error 
that was rampantly thrown previously
* numerous performance tweeks, in the form of eliminating unnecessary function 
calls and reordering operations where it made sense.  b4 is significantly 
faster, especially for common operations like simple las2las filtering jobs
* lasblock --write-points actually writes out all of the blocks instead of the 
first block over and over again
* las2txt: the classification number was being written out as a byte instead of 
int
* libLAS libraries, liblas and liblas_c, are now versioned with SONAMEs on 
unixes
* RPM spec file now available (thanks Ed Hill)

Thanks to all who provided bug reports and especially Mauricio Terneus of 
Certainty3D for the performance and LASzip testing help on IRC.  I look forward 
to hearing of your experiences with libLAS.  Head to 
http://liblas.org/download.html to obtain your copy of both LASzip and libLAS.  
The OSGeo4W builds have also been updated to include both.

Howard 

 _______________________________________________
Liblas-devel mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/liblas-devel

Reply via email to