just when I thought the LAS FWF extension for 1.4 was dead as I had not really seen much data in the new point types 9 and 10 then I get some sample data to inspect. See this thread here to download the sample:
See my findings below. It seems compress nicely with
laszip -i cld_170604_01_042610_018.las ^
-waveform ^
-o cld_170604_01_042610_018_new.laz
WARNING: number of samples for wave packet descr 4 is zero
WARNING: number of samples for wave packet descr 5 is zero
WARNING: number of samples for wave packet descr 6 is zero
WARNING: number of samples for wave packet descr 7 is zero
WARNING: number of samples for wave packet descr 8 is zero
WARNING: number of samples for wave packet descr 9 is zero
WARNING: number of samples for wave packet descr 10 is zero
WARNING: gap in waveform offsets.
WARNING: last offset plus size was 60 but new offset is 160 (for point 2)
However, note that the '-waveform' extension to the external WDP files of the (unloved) LAS FWF extension has seen much less testing than the core LASzip compressor. But the savings are significant.
BEFORE:
53,740,648 cld_170604_01_042610_018.las
151,487,840 cld_170604_01_042610_018.wdp
AFTER:
13,371,956 cld_170604_01_042610_018_new.laz
39,172,226 cld_170604_01_042610_018_new.wdz
At first the visuals are nice as the attached images show. But closer inspection reveals that the waveforms directions do not properly align nicely with the discrete returns. The red and the blue dot that are the first and the last return of a laser pulse generating two returns should lie exactly on one line but they do not as the attached images demonstrate. Did someone maybe reproject the discrete returns from one CRS to another CRS? This would require also changing the waveform direction vectors, but does any software do this? LAStools does not. One reason I have fallen out of love with the LAS FWF extension. (-:
lasview -i cld_170604_01_042610_018_new.laz
However, tackling the resolution and the bounding box values as well as the non-zero legacy counts can be done with
las2las -i cld_170604_01_042610_018.las ^
-rescale 0.01 0.01 0.01 ^
-remove_vlrs_from_to 4 10 ^
-o cld_170604_01_042610_018_nicer.las
as those seems to be a little ugly in the original export as lasinfo complains (see below all the red marked entries in the lasinfo report before and how much nicer it looks after). Careful with removing a fixed range of VLRs in case there are other files where there are more proper WavePacketDescriptors because different digitization sample numbers are in use. And the resulting "nicer" LAS files compress even better:
BEFORE:
13,371,956 cld_170604_01_042610_018_new.laz
AFTER:
11,894,792 cld_170604_01_042610_018_nicer.laz
============================================================
============================================================
============================================================
lasinfo -i cld_170604_01_042610_018.las
lasinfo (180831) report for 'cld_170604_01_042610_018.las'
reporting all LAS header entries:
file signature: 'LASF'
file source ID: 18
global_encoding: 21
project ID GUID data 1-4: 01045231-0000-0000-6F42-746F0000724E
version major.minor: 1.4
system identifier: 'AX60_180-901 EXTRACTION'
generating software: 'Trimble LPMaster'
file creation day/year: 23/2018
header size: 375
offset to point data: 1913
number var. length records: 11
point data format: 9
point data record length: 59
number of point records: 910825
number of points by return: 738856 140862 27810 3129 162
scale factor x y z: 0.001 0.001 0.001
offset x y z: 1600000 5745000 0
max x y z: 1926829.675 5745560.160 240.288
WARNING: stored resolution of min_x not compatible with x_offset and x_scale_factor: 1925836.4580397061
WARNING: stored resolution of min_y not compatible with y_offset and y_scale_factor: 5744947.0237300051
WARNING: stored resolution of min_z not compatible with z_offset and z_scale_factor: 181.65890502929687
WARNING: stored resolution of max_x not compatible with x_offset and x_scale_factor: 1926829.6747145108
WARNING: stored resolution of max_y not compatible with y_offset and y_scale_factor: 5745560.1595842494
WARNING: stored resolution of max_z not compatible with z_offset and z_scale_factor: 240.28761291503906
start of waveform data packet record: 0
start of first extended variable length record: 0
number of extended_variable length records: 0
extended number of point records: 910825
extended number of points by return: 738856 140862 27810 3129 162 6 0 0 0 0 0 0 0 0 0
variable length header record 1 of 11:
reserved 0
user ID 'LASF_Projection'
record ID 2112
length after header 682
description 'WKT description'
WKT OGC COORDINATE SYSTEM:
PROJCS["NZGD2000 / New Zealand Transverse Mercator 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101
,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUT
HORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PA
RAMETER["central_meridian",173],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1600000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2193"
],AXIS["Easting",EAST],AXIS["Northing",NORTH]]
variable length header record 2 of 11:
reserved 0
user ID 'LASF_Spec'
record ID 100
length after header 26
description 'WDP_1'
index 1 bits/sample 16 compression 0 samples 80 temporal 1000 gain 1, offset 0
variable length header record 3 of 11:
reserved 0
user ID 'LASF_Spec'
record ID 101
length after header 26
description 'WDP_2'
index 2 bits/sample 16 compression 0 samples 160 temporal 1000 gain 1, offset 0
variable length header record 4 of 11:
reserved 0
user ID 'LASF_Spec'
record ID 102
length after header 26
description 'WDP_3'
index 3 bits/sample 16 compression 0 samples 240 temporal 1000 gain 1, offset 0
variable length header record 5 of 11:
reserved 0
user ID 'LASF_Spec'
record ID 103
length after header 26
description 'WDP_4'
index 4 bits/sample 16 compression 0 samples 0 temporal 1000 gain 1, offset 0
variable length header record 6 of 11:
reserved 0
user ID 'LASF_Spec'
record ID 104
length after header 26
description 'WDP_5'
index 5 bits/sample 16 compression 0 samples 0 temporal 1000 gain 1, offset 0
variable length header record 7 of 11:
reserved 0
user ID 'LASF_Spec'
record ID 105
length after header 26
description 'WDP_6'
index 6 bits/sample 16 compression 0 samples 0 temporal 1000 gain 1, offset 0
variable length header record 8 of 11:
reserved 0
user ID 'LASF_Spec'
record ID 106
length after header 26
description 'WDP_7'
index 7 bits/sample 16 compression 0 samples 0 temporal 1000 gain 1, offset 0
variable length header record 9 of 11:
reserved 0
user ID 'LASF_Spec'
record ID 107
length after header 26
description 'WDP_8'
index 8 bits/sample 16 compression 0 samples 0 temporal 1000 gain 1, offset 0
variable length header record 10 of 11:
reserved 0
user ID 'LASF_Spec'
record ID 108
length after header 26
description 'WDP_9'
index 9 bits/sample 16 compression 0 samples 0 temporal 1000 gain 1, offset 0
variable length header record 11 of 11:
reserved 0
user ID 'LASF_Spec'
record ID 109
length after header 26
description 'WDP_10'
index 10 bits/sample 16 compression 0 samples 0 temporal 1000 gain 1, offset 0
the header is followed by 2 user-defined bytes
reporting minimum and maximum for all LAS point record entries ...
X 325836458 326829675
Y -52975 560160
Z 181659 240288
intensity 3 16983
return_number 1 6
number_of_returns 1 6
edge_of_flight_line 0 1
scan_direction_flag 1 1
classification 0 4
scan_angle_rank -25 30
user_data 17 255
point_source_ID 18 18
gps_time 180585572.845342 180585577.175763
Wavepacket Index 1 3
Offset 0 151487680
Size 160 480
Location 639.596 175640
Xt -3.17766e-005 0.000122964
Yt -7.55894e-005 1.00387e-005
Zt 1.59413e-005 0.00027238
extended_return_number 1 6
extended_number_of_returns 1 6
extended_classification 0 4
extended_scan_angle -4232 4985
extended_scanner_channel 0 0
WARNING: 3 points outside of header bounding box
number of first returns: 738856
number of intermediate returns: 31107
number of last returns: 738856
number of single returns: 597994
WARNING: point type is 9 but (legacy) number of point records in header is 910825 instead zero.
WARNING: point type is 9 but (legacy) number of points by return [1] in header is 738856 instead zero.
WARNING: point type is 9 but (legacy) number of points by return [2] in header is 140862 instead zero.
WARNING: point type is 9 but (legacy) number of points by return [3] in header is 27810 instead zero.
WARNING: point type is 9 but (legacy) number of points by return [4] in header is 3129 instead zero.
WARNING: point type is 9 but (legacy) number of points by return [5] in header is 162 instead zero.
overview over extended number of returns of given pulse: 597994 226104 74043 11868 780 36 0 0 0 0 0 0 0 0 0
histogram of classification of points:
1509 never classified (0)
518583 ground (2)
390733 medium vegetation (4)
WARNING: real max x larger than header max x by 0.000285
WARNING: real max y larger than header max y by 0.000416
WARNING: real max z larger than header max z by 0.000387
============================================================
============================================================
============================================================
lasinfo -i cld_170604_01_042610_018_nicer.las
lasinfo (180831) report for 'cld_170604_01_042610_018_nicer.las'
reporting all LAS header entries:
file signature: 'LASF'
file source ID: 18
global_encoding: 21
project ID GUID data 1-4: 01045231-0000-0000-6F42-746F0000724E
version major.minor: 1.4
system identifier: 'LAStools (c) by rapidlasso GmbH'
generating software: 'las2las (version 180831)'
file creation day/year: 23/2018
header size: 375
offset to point data: 1353
number var. length records: 4
point data format: 9
point data record length: 59
number of point records: 0
number of points by return: 0 0 0 0 0
scale factor x y z: 0.01 0.01 0.01
offset x y z: 1600000 5745000 0
min x y z: 1925836.46 5744947.02 181.66
max x y z: 1926829.68 5745560.16 240.29
start of waveform data packet record: 0
start of first extended variable length record: 0
number of extended_variable length records: 0
extended number of point records: 910825
extended number of points by return: 738856 140862 27810 3129 162 6 0 0 0 0 0 0 0 0 0
variable length header record 1 of 4:
reserved 0
user ID 'LASF_Projection'
record ID 2112
length after header 682
description 'WKT description'
WKT OGC COORDINATE SYSTEM:
PROJCS["NZGD2000 / New Zealand Transverse Mercator 2000",GEOGCS["NZGD2000",DATUM["New_Zealand_Geodetic_Datum_2000",SPHEROID["GRS 1980",6378137,298.257222101
,AUTHORITY["EPSG","7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6167"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUT
HORITY["EPSG","9122"]],AUTHORITY["EPSG","4167"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PA
RAMETER["central_meridian",173],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",1600000],PARAMETER["false_northing",10000000],AUTHORITY["EPSG","2193"
],AXIS["Easting",EAST],AXIS["Northing",NORTH]]
variable length header record 2 of 4:
reserved 0
user ID 'LASF_Spec'
record ID 100
length after header 26
description 'WDP_1'
index 1 bits/sample 16 compression 0 samples 80 temporal 1000 gain 1, offset 0
variable length header record 3 of 4:
reserved 0
user ID 'LASF_Spec'
record ID 101
length after header 26
description 'WDP_2'
index 2 bits/sample 16 compression 0 samples 160 temporal 1000 gain 1, offset 0
variable length header record 4 of 4:
reserved 0
user ID 'LASF_Spec'
record ID 102
length after header 26
description 'WDP_3'
index 3 bits/sample 16 compression 0 samples 240 temporal 1000 gain 1, offset 0
the header is followed by 2 user-defined bytes
reporting minimum and maximum for all LAS point record entries ...
X 32583646 32682968
Y -5298 56016
Z 18166 24029
intensity 3 16983
return_number 1 6
number_of_returns 1 6
edge_of_flight_line 0 1
scan_direction_flag 1 1
classification 0 4
scan_angle_rank -25 30
user_data 17 255
point_source_ID 18 18
gps_time 180585572.845342 180585577.175763
Wavepacket Index 1 3
Offset 0 151487680
Size 160 480
Location 639.596 175640
Xt -3.17766e-005 0.000122964
Yt -7.55894e-005 1.00387e-005
Zt 1.59413e-005 0.00027238
extended_return_number 1 6
extended_number_of_returns 1 6
extended_classification 0 4
extended_scan_angle -4232 4985
extended_scanner_channel 0 0
number of first returns: 738856
number of intermediate returns: 31107
number of last returns: 738856
number of single returns: 597994
overview over extended number of returns of given pulse: 597994 226104 74043 11868 780 36 0 0 0 0 0 0 0 0 0
histogram of classification of points:
1509 never classified (0)
518583 ground (2)
390733 medium vegetation (4)
============================================================
============================================================
============================================================