[Liblas-devel] Written file can't be read by other .las viewers

James Hargrave jhargrave at photomodeler.com
Fri Aug 26 15:39:16 EDT 2011


Hey guys,

Thanks for the suggestions and help.  Running the repair gave me the clue I
needed.  I wasn't setting the min/max values to the header.

Here's the output from the repair:
reporting all LAS header entries:
  file signature:            'LASF'
  file source ID:            0
  reserved (global_encoding):0
  project ID GUID data 1-4:  0 0 0 ''
  version major.minor:       1.2
  system identifier:         'libLAS'
  generating software:       'libLAS 1.7.0b2'
  file creation day/year:    237/2011
  header size                227
  offset to point data       227
  number var. length records 0
  point data format          3
  point data record length   34
  number of point records    5857
  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               0 0 0
  min x y z                  0.00 0.00 0.00
  max x y z                  0.00 0.00 0.00
reporting minimum and maximum for all LAS point record entries ...
  x -1323 1581
  y -831 983
  z -3855 -1905
  intensity 0 0
  edge_of_flight_line 0 0
  scan_direction_flag 0 0
  number_of_returns_of_given_pulse 0 0
  return_number 0 0
  classification 0 0
  scan_angle_rank 0 0
  user_data 0 0
  point_source_ID 0 0
  gps_time 0.000000 0.000000
  Color R 0 220
        G 1 243
        B 0 255
WARNING: there are 5857 points with return number 0
WARNING: there are 5857 points with a number of returns of given pulse of 0
histogram of classification of points:
     5857 Created, never classified (0)
real max x larger than header max x by 15.810000 (repaired)
real min x smaller than header min x by 13.230000 (repaired)
real max y larger than header max y by 9.830000 (repaired)
real min y smaller than header min y by 8.310000 (repaired)
real min z smaller than header min z by 38.550000 (repaired)



I added these lines after writing all the points (and computing the min/max
during the write):

	header.SetMin( min.X(), min.Y(), min.Z() );
	header.SetMax( max.X(), max.Y(), max.Z() );

	writer->SetHeader(header);
	writer->WriteHeader();


This fixed the problem.

Are there any other fields I should be specifically setting?


Heaps of thanks,
- James



> -----Original Message-----
> From: Howard Butler [mailto:hobu.inc at gmail.com]
> Sent: August-26-11 6:33 AM
> To: James Hargrave
> Cc: liblas-devel
> Subject: Re: [Liblas-devel] Written file can't be read by other .las
> viewers
> 
> 
> On Aug 26, 2011, at 8:11 AM, Howard Butler wrote:
> 
> >
> > On Aug 25, 2011, at 6:16 PM, James Hargrave wrote:
> >
> >> Hello,
> >>
> >> When I use laslib to create a file I am able to then read the file back
> in
> >> and everything seems fine.  However, I am unable to view the file in
> other
> >> applications such as the lasview.exe utility found here:
> >>
> >> http://www.cs.unc.edu/~isenburg/lastools/
> >>
> >> The steps I use mirror the C++ tutorial from the laslib.org site:
> >>
> >> 	ofs.open((char*)filename, ios::out | ios::binary);
> >> 	liblas::Header header;
> >>
> >> 	writer = new liblas::Writer(ofs, header);
> >>
> >> Then in a loop:
> >>
> >> 	liblas::Point point;
> >> 	point.SetCoordinates(pt.X(), pt.Y(), pt.Z());
> >>
> >> 	// fill other properties of point record
> >> 	if ( rgb )
> >> 		point.SetColor( liblas::Color( rgb[0], rgb[1], rgb[2] ) );
> >>
> >> 	writer->WritePoint(point);
> >>
> >>
> >> If anyone has any ideas I'd appreciate any suggestions.  If it would
> help I
> >> can also provide a sample output file which I am able to read back in
> using
> >> liblas but does not appear when loaded into lasview.exe .
> >>
> >> Thanks,
> >> - James
> >
> >
> > James,
> >
> > Which version of libLAS are you using? The following just worked for me
> this morning with the latest git HEAD on https://github.com/libLAS/libLAS
> >
> > ~/liblas$ las2las TO_core_last_zoom.las lastools-test-from-liblas.las
> > ~/lastools/bin/lasinfo lastools-test-from-liblas.las
> >
> >> reporting all LAS header entries:
> >>  file signature:            'LASF'
> >>  file source ID:            0
> >>  reserved (global_encoding):0
> >>  project ID GUID data 1-4:  0 0 0 ''
> >>  version major.minor:       1.0
> >>  system identifier:         ''
> >>  generating software:       'TerraScan'
> >>  file creation day/year:    0/0
> >>  header size                227
> >>  offset to point data       229
> >>  number var. length records 0
> >>  point data format          1
> >>  point data record length   28
> >>  number of point records    213093
> >>  number of points by return 128621 84472 0 0 0
> >>  scale factor x y z         0.01 0.01 0.01
> >>  offset x y z               -0 -0 -0
> >>  min x y z                  630250.00 4834500.00 46.83
> >>  max x y z                  630500.00 4834750.00 170.65
> >> the header is followed by 2 user-defined bytes
> >> reporting minimum and maximum for all LAS point record entries ...
> >>  x 63025000 63050000
> >>  y 483450000 483475000
> >>  z 4683 17065
> >>  intensity 10 50200
> >>  edge_of_flight_line 0 0
> >>  scan_direction_flag 0 0
> >>  number_of_returns_of_given_pulse 1 2
> >>  return_number 1 2
> >>  classification 1 1
> >>  scan_angle_rank 0 0
> >>  user_data 2 4
> >>  point_source_ID 0 0
> >>  gps_time 413162.560400 414095.322000
> >> overview over number of returns of given pulse: 128621 84472 0 0 0 0 0
> >> histogram of classification of points:
> >>   213093 Unclassified (1)
> >
> >
> > Are you making sure to delete the writer in your code? You must delete
> the writer because it will be writing header details at the end of
writing.
> Also, make sure to do ofs.close() to force the flush of any data left in
> the ostream buffer.
> 
> After some discussion on IRC with Martin, he suggested you run the
> following:
> 
> ~/lastools $ lasinfo -repair file-written-by-liblas.las
> 
> I don't think your code is updating the header's bounds and return count
> information, and this might be required for lasview.exe to run.
> 
> Howard




More information about the Liblas-devel mailing list