OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimLasHdr.cpp
Go to the documentation of this file.
1 //----------------------------------------------------------------------------
2 //
3 // File: ossimLasHdr.cpp
4 //
5 // License: LGPL
6 //
7 // See LICENSE.txt file in the top level directory for more details.
8 //
9 // Author: David Burken
10 //
11 // Description: Container class for LAS LIDAR format public header block.
12 
13 //
14 //----------------------------------------------------------------------------
15 // $Id$
16 
18 #include <ossim/base/ossimCommon.h>
19 #include <ossim/base/ossimEndian.h>
21 
22 #include <bitset>
23 #include <cstring>
24 #include <iomanip>
25 #include <iostream>
26 #include <sstream>
27 
29  m_fileSourceId(0),
30  m_globalEncoding(0),
31  m_projectIdGuidData1(0),
32  m_projectIdGuidData2(0),
33  m_projectIdGuidData3(0),
34  m_versionMajor(0),
35  m_versionMinor(0),
36  m_fileCreationDay(0),
37  m_fileCreateionYear(0),
38  m_headerSize(0),
39  m_offsetToPointData(0),
40  m_numberOfVariableLengthRecords(0),
41  m_pointDataFormatId(0),
42  m_pointDataRecordLength(0),
43  m_legacyNumberOfPointRecords(0),
44  m_xScaleFactor(0.0),
45  m_yScaleFactor(0.0),
46  m_zScaleFactor(0.0),
47  m_xOffset(0.0),
48  m_yOffset(0.0),
49  m_zOffset(0.0),
50  m_maxX(0.0),
51  m_minX(0.0),
52  m_maxY(0.0),
53  m_minY(0.0),
54  m_maxZ(0.0),
55  m_minZ(0.0),
56  m_startOfWaveformDataPacket(0),
57  m_startOfExtendedVariableLengthRecords(0),
58  m_numberOfExtendedVariableLengthRecords(0),
59  m_numberOfPointRecords(0)
60 {
61  // Initialize arrays:
62  strncpy(m_fileSignature, "LASF", 4);
63  m_fileSignature[4] = '\0';
64  memset(m_projectIdGuidData4, 0, 8);
65  memset(m_systemIndentifier, 0, 32);
66  memset(m_generatingSoftware, 0, 32);
67  memset(m_legacyNumberOfPointsByReturn, 0, 20); // 5 uint32s(5 x 4)
68  memset(m_numberOfPointsByReturn, 0, 120); // 15 unint64s(15 x 8)
69 }
70 
72  m_fileSourceId(hdr.m_fileSourceId),
73  m_globalEncoding(hdr.m_globalEncoding),
74  m_projectIdGuidData1(hdr.m_projectIdGuidData1),
75  m_projectIdGuidData2(hdr.m_projectIdGuidData2),
76  m_projectIdGuidData3(hdr.m_projectIdGuidData3),
77  m_versionMajor(hdr.m_versionMajor),
78  m_versionMinor(hdr.m_versionMinor),
79  m_fileCreationDay(hdr.m_fileCreationDay),
80  m_fileCreateionYear(hdr.m_fileCreateionYear),
81  m_headerSize(hdr.m_headerSize),
82  m_offsetToPointData(hdr.m_offsetToPointData),
83  m_numberOfVariableLengthRecords(hdr.m_numberOfVariableLengthRecords),
84  m_pointDataFormatId(hdr.m_pointDataFormatId),
85  m_pointDataRecordLength(hdr.m_pointDataRecordLength),
86  m_legacyNumberOfPointRecords(hdr.m_legacyNumberOfPointRecords),
87  m_xScaleFactor(hdr.m_xScaleFactor),
88  m_yScaleFactor(hdr.m_yScaleFactor),
89  m_zScaleFactor(hdr.m_zScaleFactor),
90  m_xOffset(hdr.m_xOffset),
91  m_yOffset(hdr.m_yOffset),
92  m_zOffset(hdr.m_zOffset),
93  m_maxX(hdr.m_maxX),
94  m_minX(hdr.m_minX),
95  m_maxY(hdr.m_maxY),
96  m_minY(hdr.m_minY),
97  m_maxZ(hdr.m_maxZ),
98  m_minZ(hdr.m_minZ),
99  m_startOfWaveformDataPacket(hdr.m_startOfWaveformDataPacket),
100  m_startOfExtendedVariableLengthRecords(hdr.m_startOfExtendedVariableLengthRecords),
101  m_numberOfExtendedVariableLengthRecords(hdr.m_numberOfExtendedVariableLengthRecords),
102  m_numberOfPointRecords(hdr.m_numberOfPointRecords)
103 {
104  // Copy arrays.
105  memcpy((void*)m_fileSignature, (void*)(hdr.m_fileSignature), 4);
106  memcpy((void*)m_projectIdGuidData4, (void*)(hdr.m_projectIdGuidData4), 8);
107  memcpy((void*)m_systemIndentifier, (void*)(hdr.m_systemIndentifier), 32);
108  memcpy((void*)m_generatingSoftware, (void*)(hdr.m_generatingSoftware), 32);
109  memcpy((void*)m_legacyNumberOfPointsByReturn, (void*)(hdr.m_legacyNumberOfPointsByReturn), 20);
110  memcpy((void*)m_numberOfPointsByReturn, (void*)(hdr.m_numberOfPointsByReturn), 120);
111 }
112 
114 {
115  if (this != &hdr)
116  {
124  strncpy(m_systemIndentifier, hdr.m_systemIndentifier, 32);
125  strncpy(m_generatingSoftware, hdr.m_generatingSoftware, 32);
137  m_xOffset = hdr.m_xOffset;
138  m_yOffset = hdr.m_yOffset;
139  m_zOffset = hdr.m_zOffset;
140  m_maxX = hdr.m_maxX;
141  m_minX = hdr.m_minX;
142  m_maxY = hdr.m_maxY;
143  m_minY = hdr.m_minY;
144  m_maxZ = hdr.m_maxZ;
145  m_minZ = hdr.m_minZ;
150 
151  // Copy arrays.
152  memcpy((void*)m_fileSignature,(void*)(hdr.m_fileSignature), 4);
153  memcpy((void*)m_projectIdGuidData4, (void*)(hdr.m_projectIdGuidData4), 8);
154  memcpy((void*)m_systemIndentifier, (void*)(hdr.m_systemIndentifier), 32);
155  memcpy((void*)m_generatingSoftware, (void*)(hdr.m_generatingSoftware), 32);
156  memcpy((void*)m_legacyNumberOfPointsByReturn,
157  (void*)(hdr.m_legacyNumberOfPointsByReturn), 20);
158  memcpy((void*)m_numberOfPointsByReturn, (void*)(hdr.m_numberOfPointsByReturn), 120);
159  }
160  return *this;
161 }
162 
164 {
165 }
166 
168 {
169  bool result = false;
170  char SIG[4];
171  in.read(SIG, 4);
172  if ( (SIG[0] == 'L') && (SIG[1] == 'A') &&
173  (SIG[2] == 'S') && (SIG[3] == 'F') )
174  {
175  result = true;
176  }
177  return result;
178 }
179 
181 {
182  in.read(m_fileSignature, 4);
183  in.read((char*)&m_fileSourceId, 2);
184  in.read((char*)&m_globalEncoding, 2);
185  in.read((char*)&m_projectIdGuidData1, 4);
186  in.read((char*)&m_projectIdGuidData2, 2);
187  in.read((char*)&m_projectIdGuidData3, 2);
188  in.read((char*)&m_projectIdGuidData4, 8);
189  in.read((char*)&m_versionMajor, 1);
190  in.read((char*)&m_versionMinor, 1);
191  in.read(m_systemIndentifier, 32);
192  in.read(m_generatingSoftware, 32);
193  in.read((char*)&m_fileCreationDay, 2);
194  in.read((char*)&m_fileCreateionYear, 2);
195  in.read((char*)&m_headerSize, 2);
196  in.read((char*)&m_offsetToPointData, 4);
197  in.read((char*)&m_numberOfVariableLengthRecords, 4);
198  in.read((char*)&m_pointDataFormatId, 1);
199  in.read((char*)&m_pointDataRecordLength, 2);
200  in.read((char*)&m_legacyNumberOfPointRecords, 4);
201  in.read((char*)&m_legacyNumberOfPointsByReturn, 20);
202  in.read((char*)&m_xScaleFactor, 8);
203  in.read((char*)&m_yScaleFactor, 8);
204  in.read((char*)&m_zScaleFactor, 8);
205  in.read((char*)&m_xOffset, 8);
206  in.read((char*)&m_yOffset, 8);
207  in.read((char*)&m_zOffset, 8);
208  in.read((char*)&m_maxX, 8);
209  in.read((char*)&m_minX, 8);
210  in.read((char*)&m_maxY, 8);
211  in.read((char*)&m_minY, 8);
212  in.read((char*)&m_maxZ, 8);
213  in.read((char*)&m_minZ, 8);
214 
215  // Version specific:
216  if ( versionGreaterThan( 1, 2 ) )
217  {
218  // Added in 1.3:
219  in.read((char*)&m_startOfWaveformDataPacket, 8);
220  }
221  if ( versionGreaterThan( 1, 3 ) )
222  {
223  // Added in 1.4:
224  in.read((char*)&m_startOfExtendedVariableLengthRecords, 8);
225  in.read((char*)&m_numberOfExtendedVariableLengthRecords, 4);
226  in.read((char*)&m_numberOfPointRecords, 8);
227  in.read((char*)&m_numberOfPointsByReturn, 120);
228  }
229 
231  {
232  swap();
233  }
234 
235  if ( !versionGreaterThan( 1, 3 ) ) // Less than 1.4
236  {
237  //---
238  // Copy legacy point count to 64 bit data members. This will allow LAS code
239  // to always go through same methods for point counts.
240  //---
242  for ( ossim_uint32 i = 0; i < 5; ++i )
243  {
245  }
246  }
247 }
248 
250 {
252  {
253  // Write little endian per spec.
254  swap();
255  }
256 
257  out.write(m_fileSignature, 4);
258  out.write((char*)&m_fileSourceId, 2);
259  out.write((char*)&m_globalEncoding, 2);
260  out.write((char*)&m_projectIdGuidData1, 4);
261  out.write((char*)&m_projectIdGuidData2, 2);
262  out.write((char*)&m_projectIdGuidData3, 2);
263  out.write((char*)&m_projectIdGuidData4, 8);
264  out.write((char*)&m_versionMajor, 1);
265  out.write((char*)&m_versionMinor, 1);
266  out.write(m_systemIndentifier, 32);
267  out.write(m_generatingSoftware, 32);
268  out.write((char*)&m_fileCreationDay, 2);
269  out.write((char*)&m_fileCreateionYear, 2);
270  out.write((char*)&m_headerSize, 2);
271  out.write((char*)&m_offsetToPointData, 4);
272  out.write((char*)&m_numberOfVariableLengthRecords, 4);
273  out.write((char*)&m_pointDataFormatId, 1);
274  out.write((char*)&m_pointDataRecordLength, 2);
275  out.write((char*)&m_legacyNumberOfPointRecords, 4);
276  out.write((char*)&m_legacyNumberOfPointsByReturn, 20);
277  out.write((char*)&m_xScaleFactor, 8);
278  out.write((char*)&m_yScaleFactor, 8);
279  out.write((char*)&m_zScaleFactor, 8);
280  out.write((char*)&m_xOffset, 8);
281  out.write((char*)&m_yOffset, 8);
282  out.write((char*)&m_zOffset, 8);
283  out.write((char*)&m_maxX, 8);
284  out.write((char*)&m_minX, 8);
285  out.write((char*)&m_maxY, 8);
286  out.write((char*)&m_minY, 8);
287  out.write((char*)&m_maxZ, 8);
288  out.write((char*)&m_minZ, 8);
289 
290  if ( versionGreaterThan( 1, 2 ) )
291  {
292  // Added in 1.3:
293  out.write((char*)&m_startOfWaveformDataPacket, 8);
294  }
295  if ( versionGreaterThan( 1, 3 ) )
296  {
297  // Added in 1.4:
298  out.write((char*)&m_startOfExtendedVariableLengthRecords, 8);
299  out.write((char*)&m_numberOfExtendedVariableLengthRecords, 4);
300  out.write((char*)&m_numberOfPointRecords, 8);
301  out.write((char*)&m_numberOfPointsByReturn, 120);
302  }
303 
305  {
306  // Swap back to native byte order if needed:
307  swap();
308  }
309 }
310 
312 {
313  ossimKeywordlist kwl;
314  getKeywordlist( kwl );
315  return out << kwl;
316 }
317 
319 {
320  return hdr.print(out);
321 }
322 
324 {
325  kwl.add("las.file_source_id", m_fileSourceId);
326 
327  //---
328  // m_globalEncoding is a bit encoding so we output bit at a time:
329  // At the time of this coding only first four bits used.
330  //---
331 
332  // 1.2:
333  kwl.add("las.gps_time_type", (getGpsTimeTypeBit()?"1":"0") );
334 
335  if ( versionGreaterThan( 1, 2 ) )
336  {
337  // Added in 1.3:
338  kwl.add("las.waveform_data_packets_internal", (getWaveforDataPacketsInternalBit()?"1":"0") );
339  kwl.add("las.waveform_data_packets_external", (getWaveforDataPacketsExternalBit()?"1":"0") );
340  kwl.add("las.synthetically_generated", (getReturnsSyntheticallyGeneratedBit()?"1":"0") );
341  }
342 
343  if ( versionGreaterThan( 1, 3 ) )
344  {
345  // 1.4:
346  kwl.add("las.wkt", (getWktBit()?"1":"0") );
347  }
348 
349  kwl.add("las.project_id_guid", getProjectIdGuid().c_str());
350 
351  kwl.add("las.version", getVersion().c_str());
352 
353  kwl.add("las.system_indentifier", getSystemIndentifier().c_str());
354  kwl.add("las.generating_software", getGeneratingSoftware().c_str());
355 
356  kwl.add("las.file_creation_day", m_fileCreationDay);
357  kwl.add("las.file_creation_year", m_fileCreateionYear);
358 
359  kwl.add("las.header_size", m_headerSize);
360  kwl.add("las.offset_to_point_data", m_offsetToPointData );
361  kwl.add("las.number_of_variable_length_records", m_numberOfVariableLengthRecords);
362  kwl.add("las.point_data_format_id", m_pointDataFormatId);
363  kwl.add("las.point_data_record_length", m_pointDataRecordLength);
364 
365  kwl.add("las.x_scale_factor", m_xScaleFactor);
366  kwl.add("las.y_scale_factor", m_yScaleFactor);
367  kwl.add("las.z_scale_factor", m_zScaleFactor);
368 
369  kwl.add("las.x_offset", m_xOffset);
370  kwl.add("las.y_offset", m_yOffset);
371  kwl.add("las.z_offset", m_zOffset);
372 
373  kwl.add("las.max_x", m_maxX);
374  kwl.add("las.min_x", m_minX);
375  kwl.add("las.max_y", m_maxY);
376  kwl.add("las.min_y", m_minY);
377  kwl.add("las.max_z", m_maxZ);
378  kwl.add("las.min_z", m_minZ);
379 
380  kwl.add("las.start_of_wave_form_data", m_startOfWaveformDataPacket);
381 
382  if ( versionGreaterThan( 1, 3 ) )
383  {
384  kwl.add("las.number_of_point_records", m_numberOfPointRecords);
385  for (ossim_uint32 i = 0; i < 15; ++i)
386  {
388  os << "las.number_of_points_return" << (i+1);
389  kwl.add( os.str().c_str(), m_numberOfPointsByReturn[i] );
390  }
391  }
392  else
393  {
394  // Prior to 1.4:
395  kwl.add("las.number_of_point_records", m_legacyNumberOfPointRecords);
396  for (ossim_uint32 i = 0; i < 5; ++i)
397  {
399  os << "las.number_of_points_return" << (i+1);
400  kwl.add( os.str().c_str(), m_legacyNumberOfPointsByReturn[i] );
401  }
402  }
403 }
404 
406 {
407  // Test the first bit:
408  std::bitset<1> bs( m_globalEncoding );
409  return bs.test(0);
410 }
411 
413 {
414  // Test the second bit:
415  std::bitset<2> bs( m_globalEncoding );
416  return bs.test(1);
417 }
418 
420 {
421  // Test the third bit:
422  std::bitset<3> bs( m_globalEncoding );
423  return bs.test(2);
424 }
425 
427 {
428  // Test the fourth bit:
429  std::bitset<4> bs( m_globalEncoding );
430  return bs.test(3);
431 }
432 
434 {
435  // Test the fith bit:
436  std::bitset<5> bs( m_globalEncoding );
437  return bs.test(4);
438 }
439 
440 std::string ossimLasHdr::getProjectIdGuid() const
441 {
443  os << std::hex
444  << m_projectIdGuidData1 << "-"
445  << m_projectIdGuidData2 << "-"
446  << m_projectIdGuidData3 << "-";
447  for (int i=0; i<8; ++i)
448  {
450  os << uid;
451  }
452  return os.str();
453 }
454 
455 std::string ossimLasHdr::getVersion() const
456 {
458  os << int(m_versionMajor) << "." << int(m_versionMinor);
459  return os.str();
460 }
461 
463 {
464  std::string s;
465  s.reserve(32);
466  for (int i=0; i<32; ++i)
467  {
468  s.push_back(m_systemIndentifier[i]);
469  }
470  return s;
471 }
472 
474 {
475  std::string s;
476  s.reserve(32);
477  for (int i=0; i<32; ++i)
478  {
479  s.push_back(m_generatingSoftware[i]);
480  }
481  return s;
482 }
483 
485 {
486  return m_headerSize;
487 }
488 
490 {
491  return m_offsetToPointData;
492 }
493 
495 {
497 }
498 
500 {
501  return m_pointDataFormatId;
502 }
503 
505 {
506  return m_numberOfPointRecords;
507 }
508 
510 {
511  ossim_uint64 result = 0;
512  if ( entry < 15 )
513  {
514  result = m_numberOfPointsByReturn[entry];
515  }
516  return result;
517 }
518 
520 {
521  return m_xScaleFactor;
522 }
523 
525 {
526  return m_yScaleFactor;
527 }
528 
530 {
531  return m_zScaleFactor;
532 }
533 
535 {
536  return m_xOffset;
537 }
538 
540 {
541  return m_yOffset;
542 }
543 
545 {
546  return m_zOffset;
547 }
548 
550 {
551  return m_minX;
552 }
553 
555 {
556  return m_minY;
557 }
558 
560 {
561  return m_minZ;
562 }
563 
565 {
566  return m_maxX;
567 }
568 
570 {
571  return m_maxY;
572 }
573 
575 {
576  return m_maxZ;
577 }
578 
580 {
581  ossimEndian endian;
582  endian.swap(m_fileSourceId);
583  endian.swap(m_globalEncoding);
584  endian.swap(m_projectIdGuidData1);
585  endian.swap(m_projectIdGuidData2);
586  endian.swap(m_projectIdGuidData3);
587  endian.swap(m_fileCreationDay);
588  endian.swap(m_fileCreateionYear);
589  endian.swap(m_headerSize);
590  endian.swap(m_offsetToPointData);
595  endian.swap(m_xScaleFactor);
596  endian.swap(m_yScaleFactor);
597  endian.swap(m_zScaleFactor);
598  endian.swap(m_xOffset);
599  endian.swap(m_yOffset);
600  endian.swap(m_zOffset);
601  endian.swap(m_maxX);
602  endian.swap(m_minX);
603  endian.swap(m_maxY);
604  endian.swap(m_minY);
605  endian.swap(m_maxZ);
606  endian.swap(m_minZ);
611  endian.swap(m_numberOfPointsByReturn, 15);
612 }
613 
615 {
616  bool result = false;
617  if ( m_versionMajor == major )
618  {
619  result = m_versionMinor > minor;
620  }
621  else if ( m_versionMajor > major )
622  {
623  result = true;
624  }
625  return result;
626 }
ossim_uint32 getNumberOfVlrs() const
ossim_uint8 m_projectIdGuidData4[8]
Definition: ossimLasHdr.h:153
std::ostream & print(std::ostream &out) const
print method.
ossim_float64 m_yOffset
Definition: ossimLasHdr.h:171
ossim_float64 m_minY
Definition: ossimLasHdr.h:176
std::basic_ostringstream< char > ostringstream
Class for char output memory streams.
Definition: ossimIosFwd.h:35
ossim_uint16 m_globalEncoding
Definition: ossimLasHdr.h:149
ossim_uint8 m_versionMajor
Definition: ossimLasHdr.h:154
Represents serializable keyword/value map.
ossim_uint64 m_numberOfPointRecords
Definition: ossimLasHdr.h:182
std::string getProjectIdGuid() const
void getKeywordlist(ossimKeywordlist &kwl) const
bool checkSignature(std::istream &in) const
Checks for LASF in first four bytes.
const ossim_float64 & getMaxX() const
std::ostream & operator<<(std::ostream &out, const ossimLasHdr &hdr)
ossim_float64 m_xOffset
Definition: ossimLasHdr.h:170
ossim_float64 m_minX
Definition: ossimLasHdr.h:174
const ossim_float64 & getScaleFactorY() const
ossim_uint32 m_numberOfExtendedVariableLengthRecords
Definition: ossimLasHdr.h:181
ossim_uint16 m_fileCreationDay
Definition: ossimLasHdr.h:158
OSSIM_DLL ossimByteOrder byteOrder()
Definition: ossimCommon.cpp:54
const ossim_float64 & getScaleFactorZ() const
ossim_uint32 getOffsetToPointData() const
const ossim_float64 & getMinX() const
unsigned short ossim_uint16
std::string getGeneratingSoftware() const
void writeStream(std::ostream &out)
Writes header to stream.
ossim_uint16 m_projectIdGuidData3
Definition: ossimLasHdr.h:152
bool getWaveforDataPacketsInternalBit() const
ossim_uint64 m_startOfWaveformDataPacket
Definition: ossimLasHdr.h:179
const ossim_float64 & getOffsetX() const
double ossim_float64
void add(const char *prefix, const ossimKeywordlist &kwl, bool overwrite=true)
ossim_uint8 m_versionMinor
Definition: ossimLasHdr.h:155
ossim_float64 m_maxX
Definition: ossimLasHdr.h:173
bool getWktBit() const
const ossim_float64 & getOffsetZ() const
bool getGpsTimeTypeBit() const
bool versionGreaterThan(ossim_uint8 major, ossim_uint8 minor) const
Test version.
ossim_uint64 getNumberOfPoints() const
ossim_uint32 m_projectIdGuidData1
Definition: ossimLasHdr.h:150
bool getWaveforDataPacketsExternalBit() const
void swap()
Performs a swap if system byte order is not little endian.
const ossim_float64 & getScaleFactorX() const
ossim_uint32 m_legacyNumberOfPointRecords
Definition: ossimLasHdr.h:165
unsigned long long ossim_uint64
void readStream(std::istream &in)
Method to initialize from input stream.
unsigned int ossim_uint32
const ossim_float64 & getMaxY() const
const ossim_float64 & getOffsetY() const
const ossim_float64 & getMinZ() const
ossim_uint8 getPointDataFormatId() const
ossim_float64 m_zOffset
Definition: ossimLasHdr.h:172
ossim_uint16 m_fileCreateionYear
Definition: ossimLasHdr.h:159
const ossimLasHdr & operator=(const ossimLasHdr &hdr)
ossim_uint64 m_startOfExtendedVariableLengthRecords
Definition: ossimLasHdr.h:180
char m_generatingSoftware[32]
Definition: ossimLasHdr.h:157
ossim_float64 m_minZ
Definition: ossimLasHdr.h:178
ossim_uint32 m_numberOfVariableLengthRecords
Definition: ossimLasHdr.h:162
char m_systemIndentifier[32]
Definition: ossimLasHdr.h:156
std::basic_istream< char > istream
Base class for char input streams.
Definition: ossimIosFwd.h:20
ossim_float64 m_maxZ
Definition: ossimLasHdr.h:177
const ossim_float64 & getMaxZ() const
bool getReturnsSyntheticallyGeneratedBit() const
char m_fileSignature[5]
Definition: ossimLasHdr.h:147
ossim_uint16 m_fileSourceId
Definition: ossimLasHdr.h:148
ossim_uint64 m_numberOfPointsByReturn[15]
Definition: ossimLasHdr.h:183
ossim_float64 m_yScaleFactor
Definition: ossimLasHdr.h:168
ossim_float64 m_zScaleFactor
Definition: ossimLasHdr.h:169
ossim_uint16 m_pointDataRecordLength
Definition: ossimLasHdr.h:164
ossim_uint32 m_offsetToPointData
Definition: ossimLasHdr.h:161
ossim_uint16 getHeaderSize() const
ossim_uint16 m_headerSize
Definition: ossimLasHdr.h:160
ossim_float64 m_maxY
Definition: ossimLasHdr.h:175
void swap(ossim_sint8 &)
Definition: ossimEndian.h:26
ossim_uint8 m_pointDataFormatId
Definition: ossimLasHdr.h:163
std::string getVersion() const
unsigned char ossim_uint8
ossim_uint16 m_projectIdGuidData2
Definition: ossimLasHdr.h:151
ossim_uint32 m_legacyNumberOfPointsByReturn[5]
Definition: ossimLasHdr.h:166
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23
const ossim_float64 & getMinY() const
ossim_float64 m_xScaleFactor
Definition: ossimLasHdr.h:167
std::string getSystemIndentifier() const