All points in a file use the one point data record format (PDRF) named in the header, and all have the length the header gives. Bytes beyond the format’s own fields are extra bytes, described by an Extra Bytes record. Formats 0 to 5 are the legacy formats; 6 to 10, added in LAS 1.4, are preferred, and LAS 1.5 allows only those. Numbers are little-endian; bit 0 is the lowest bit.
The formats at a glance
| Format | Minimum size | Contents | Since |
|---|---|---|---|
| 0 | 20 | Legacy core | 1.0 |
| 1 | 28 | 0 + GPS time | 1.0 |
| 2 | 26 | 0 + RGB | 1.2 |
| 3 | 34 | 0 + GPS time + RGB | 1.2 |
| 4 | 57 | 1 + waveform | 1.3 |
| 5 | 63 | 3 + waveform | 1.3 |
| 6 | 30 | New core, with GPS time | 1.4 |
| 7 | 36 | 6 + RGB | 1.4 |
| 8 | 38 | 6 + RGB + NIR | 1.4 |
| 9 | 59 | 6 + waveform | 1.4 |
| 10 | 67 | 8 + waveform | 1.4 |
Formats 0 to 5
| Offset | Size | Type | Name | In formats |
|---|---|---|---|---|
| 0 | 4 | int32 | X | All |
| 4 | 4 | int32 | Y | All |
| 8 | 4 | int32 | Z | All |
| 12 | 2 | uint16 | Intensity | All |
| 14 | 1 | bits | Return Number (bits 0–2), Number of Returns (3–5), Scan Direction Flag (6), Edge of Flight Line (7) | All |
| 15 | 1 | bits | Classification (bits 0–4), Synthetic (5), Key-point (6), Withheld (7) | All |
| 16 | 1 | int8 | Scan Angle Rank | All |
| 17 | 1 | uint8 | User Data | All |
| 18 | 2 | uint16 | Point Source ID | All |
| 20 | 8 | float64 | GPS Time | 1, 3, 4, 5 |
| 20 (format 2), 28 (3, 5) | 6 | uint16 × 3 | Red, Green, Blue | 2, 3, 5 |
| 28 (format 4), 34 (5) | 29 | see below | Wave packet fields | 4, 5 |
Return numbers run from 1 to 5 here. The Scan Angle Rank is the angle in whole degrees, −90 to +90, at which the pulse left the scanner including the aircraft’s roll: 0 is straight down (nadir) and −90 is to the left of the direction of flight.
Formats 6 to 10
| Offset | Size | Type | Name | In formats |
|---|---|---|---|---|
| 0 | 4 | int32 | X | All |
| 4 | 4 | int32 | Y | All |
| 8 | 4 | int32 | Z | All |
| 12 | 2 | uint16 | Intensity | All |
| 14 | 1 | bits | Return Number (bits 0–3), Number of Returns (4–7) | All |
| 15 | 1 | bits | Classification Flags (bits 0–3), Scanner Channel (4–5), Scan Direction Flag (6), Edge of Flight Line (7) | All |
| 16 | 1 | uint8 | Classification | All |
| 17 | 1 | uint8 | User Data | All |
| 18 | 2 | int16 | Scan Angle | All |
| 20 | 2 | uint16 | Point Source ID | All |
| 22 | 8 | float64 | GPS Time | All |
| 30 | 6 | uint16 × 3 | Red, Green, Blue | 7, 8, 10 |
| 36 | 2 | uint16 | NIR (near infrared) | 8, 10 |
| 30 (format 9), 38 (10) | 29 | see below | Wave packet fields | 9, 10 |
Return numbers run from 1 to 15. The Scanner Channel, 0 to 3, is the scanner head of a multi-channel system, 0 for a single scanner. The Scan Angle counts steps of 0.006 degrees: 0 is straight down in the data’s coordinate system, positive is anticlockwise as seen from behind the sensor facing along the track, and ±30,000 (180 degrees) is straight up.
Common fields
| Field | Meaning |
|---|---|
| X, Y, Z | Stored integers; the coordinate is value × scale factor + offset from the header |
| Intensity | Return strength, scaled to 16 bits by multiplying by 65,536 ÷ the sensor’s range (so a 10-bit sensor’s value is multiplied by 64); 0 if not recorded |
| Return Number | Which return of its pulse this point is, starting at 1; at most Number of Returns |
| Number of Returns | How many returns the pulse had; 1 for single-return systems |
| Scan Direction Flag | 1: the mirror was moving left to right across the track; 0: right to left |
| Edge of Flight Line | 1 only for the last point of a scan line before the scan changes direction |
| User Data | Free for the user’s own use |
| Point Source ID | The File Source ID of the file the point came from, such as its flight line, 1 to 65,535; 0 is reserved |
| GPS Time | Time the point was measured, in the encoding set by Global Encoding: GPS week time, Adjusted Standard GPS Time or, in 1.5, Offset GPS Time |
| Red, Green, Blue, NIR | Colour and near-infrared values scaled to 16 bits (an 8-bit value is multiplied by 256) |
Classification flags
| Name | Bit in formats 0–5 (byte 15) | Bit in formats 6–10 (byte 15) | Meaning |
|---|---|---|---|
| Synthetic | 5 | 0 | Made by a method other than direct measurement, such as digitising from stereo photographs |
| Key-point | 6 | 1 | A model key point that thinning should keep |
| Withheld | 7 | 2 | Leave the point out of processing (same as deleted) |
| Overlap | – | 3 | The point lies where two or more swaths overlap |
Classification codes
Formats 0 to 5 have 5 bits, codes 0 to 31; formats 6 to 10 have a whole byte.
| Code | Formats 0–5 | Formats 6–10 |
|---|---|---|
| 0 | Created, never classified | Created, never classified |
| 1 | Unclassified | Unclassified |
| 2 | Ground | Ground |
| 3 | Low vegetation | Low vegetation |
| 4 | Medium vegetation | Medium vegetation |
| 5 | High vegetation | High vegetation |
| 6 | Building | Building |
| 7 | Low point (noise) | Low point (noise) |
| 8 | Model key-point (mass point) | Reserved |
| 9 | Water | Water |
| 10 | Reserved | Rail |
| 11 | Reserved | Road surface |
| 12 | Overlap points | Reserved |
| 13 | Reserved | Wire – guard (shield) |
| 14 | Reserved | Wire – conductor (phase) |
| 15 | Reserved | Transmission tower |
| 16 | Reserved | Wire-structure connector, such as an insulator |
| 17 | Reserved | Bridge deck |
| 18 | Reserved | High noise |
| 19 | Reserved | Overhead structure, such as conveyors or traffic lights |
| 20 | Reserved | Ignored ground, such as near a breakline |
| 21 | Reserved | Snow |
| 22 | Reserved | Temporal exclusion: features left out because they changed between sources, such as water levels |
| 23 to 31 | Reserved | Reserved |
| 32 to 63 | – | Reserved |
| 64 to 255 | – | User definable |
Code 1 is for points that went through classification without being assigned a class. Overlap points (code 12 in formats 0 to 5) are usually also marked withheld.
Wave packet fields
Formats 4, 5, 9 and 10 end with 29 bytes that link the point to its recorded waveform.
| Offset | Size | Type | Name | Meaning |
|---|---|---|---|---|
| +0 | 1 | uint8 | Wave Packet Descriptor Index | Which waveform packet descriptor applies, 1 to 255; 0 means no waveform |
| +1 | 8 | uint64 | Byte Offset to Waveform Data | Where the packet starts, from the start of the waveform data record (or of the .wdp file) |
| +9 | 4 | uint32 | Waveform Packet Size | Size of the packet in bytes |
| +13 | 4 | float32 | Return Point Waveform Location | Time in picoseconds from the waveform’s anchor point to this return |
| +17 | 4 | float32 | Parametric dx | Direction of the pulse: a point t picoseconds from the anchor is at anchor + t × (dx, dy, dz) |
| +21 | 4 | float32 | Parametric dy | |
| +25 | 4 | float32 | Parametric dz |
The anchor point is this point’s position plus L × (dx, dy, dz), where L is the Return Point Waveform Location. For waveform data inside the file, the packet’s absolute position is Start of Waveform Data Packet Record (from the header) plus the byte offset.
Worked example
A format 6 point with header scale 0.01 and offsets 0:
| Offset | Bytes | Meaning |
|---|---|---|
| 0 | 40 E2 01 00 | X = 123456 → 1234.56 |
| 12 | E8 03 | Intensity 1000 |
| 14 | 32 | Return 2 of 3 |
| 15 | 48 | Overlap flag (bit 3) and scan direction positive (bit 6) |
| 16 | 02 | Class 2, ground |
| 18 | F4 01 | Scan angle 500 × 0.006 = 3 degrees |