experiences with full waveform export to LAS 1.4 with point type 9

80 views
Skip to first unread message

Martin Isenburg

unread,
Sep 4, 2018, 9:08:53 AM9/4/18
to PulseWaves - no pulse left behind
Hello,

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
  min x y z:                  1925836.458 5744947.024 181.659
  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)

============================================================
============================================================ 
============================================================ 
full_waveform_LAS14_point_type_9_optech_3.jpg
full_waveform_LAS14_point_type_9_optech_4.jpg
full_waveform_LAS14_point_type_9_optech_5.jpg
full_waveform_LAS14_point_type_9_optech_6.jpg
Reply all
Reply to author
Forward
0 new messages