Standard VLRs - ASPRSorg/LAS GitHub Wiki
VLR Key List: https://www.asprs.org/misc/las-key-list.html
Intro
The LAS 1.5 specification shifted responsibility for management of Variable Length Records (VLRs) owned by the ASPRS LAS Working Group (LWG) from the specification itself to the Official LAS Wiki so that VLRs can be updated or modified without a formal specification update. This page is the official registry of VLRs managed by the LWG.
User-contributed VLRs are documented on this page: https://github.com/ASPRSorg/LAS/wiki/User-Contributed-VLRs
Disclaimer
VLR definitions from the various versions of the LAS specification are included here for convenience. All efforts are made to ensure that the definitions here match the definitions in the specification; nevertheless, in any case of disagreement, the official definition in the most current specification will supercede any definition included in this page.
Deprecated VLRs
Some VLRs are included here for the sake of completeness and to assist with the interpretation of LAS files using legacy versions of LAS. It is strongly recommended that LAS writers not include support for these deprecated VLRs and that the more modern versions of the VLR be used when creating new LAS files.
Classification Lookup (Deprecated)
Field | Value |
---|---|
User ID | LASF_Spec |
Record ID | 0 |
Record Length after Header | 256 records * 16 bytes per struct = 4,096 |
The Classification Lookup VLR provides a mechanism for the LAS file to self-document all classifications
within the LAS file without having to rely on external documentation or metadata. The VLR payload is defined
as an array of CLASSIFICATION
structs, defined as follows:
struct CLASSIFICATION {
uint8_t ClassNumber;
char Description[15];
}; //total of 16 bytes
The legacy Classification Lookup VLR (Record ID 0) has been a feature of the LAS specification since LAS 1.0. This VLR is deprecated in LAS 1.5 due to the limitation of 15 characters being insufficient for a detailed description. An updated version of the VLR may be found on this page under Classification Lookup v2. It is strongly recommended that the updated VLR be used instead.
Classification Lookup v2
Field | Value |
---|---|
User ID | LASF_Spec |
Record ID | 8 |
Record Length after Header | 256 records * 192 bytes per struct = 49,152 |
The Classification Lookup v2 VLR provides a mechanism for the LAS file to self-document all classifications within the LAS file without having to rely on external documentation or metadata. This second version of the VLR improves upon the original by providing additional space for useful classification names, and adds space for optional descriptions.
The VLR payload is defined as a fixed-size array of CLASSIFICATION
structs, defined as follows:
struct CLASSIFICATION {
char ClassName[64];
char Description[128];
}; //total of 192 bytes
The struct's position in the 0-indexed array matches the classification value. For example, a Classification Lookup VLR following the ASPRS Standard Point Class table would have the following payload:
Index | Name | Description |
---|---|---|
0 | Created, Never Classified | Descriptions are optional and user-defined |
1 | Unclassified | You can write whatever you want and be valid |
2 | Ground | Blank descriptions are also okay (fill with null, not spaces) |
3 | Low Vegetation | |
4 | Medium Vegetation | Descriptions should match your file's application |
5 | High Vegetation | Vegetation more than 2m above ground |
6 | Edificio | Name fields are intentionally long to allow non-English words |
... | ... | ... |
38 | Oopsie | The reserved classifications 23-63 should NOT be used... |
39 | Please don't | ...unless you want to conform to a LAS Domain Profile |
40 | Submerged Topography | Check out the Topobathy Domain Profile v2! |
... | ... | ... |
64 | My custom CLASS | Use the "User Definable" classes instead |
65 | Another custom class | They can be whatever you want them to be |
... | ... | ... |
254 | The payload is a fixed size so all 256 classes can be defined | |
255 | Classifications not used should be filled with null values |
Any space not needed for a name or description should be null-filled.