diff --git a/.github/workflows/pdf.yml b/.github/workflows/pdf.yml new file mode 100644 index 0000000..d549634 --- /dev/null +++ b/.github/workflows/pdf.yml @@ -0,0 +1,48 @@ +name: Docs + +on: + push: + branches: '*' + +jobs: + docs: + name: Docs + + runs-on: ubuntu-latest + strategy: + fail-fast: true + container: ghcr.io/osgeo/proj-docs + + steps: + - uses: actions/checkout@v3 + - name: Print versions + run: | + python3 --version + sphinx-build --version + DEBIAN_FRONTEND=noninteractive apt-get update -y + DEBIAN_FRONTEND=noninteractive apt-get install texlive-fonts-recommended -y + - name: Lint .rst files + run: | + if find . -name '*.rst' | xargs grep -P '\t'; then echo 'Tabs are bad, please use four spaces in .rst files.'; false; fi + - name: PDF + run: | + make latexpdf + - name: Spelling + run: | + make spelling + - uses: actions/upload-artifact@v4 + with: + name: PDF + path: build/latex/LAS.pdf + if-no-files-found: error + - uses: actions/upload-artifact@v4 + with: + name: TEX + path: build/latex/LAS.tex + if-no-files-found: error + - uses: actions/upload-artifact@v4 + with: + name: Misspelled + path: build/spelling/output.txt + if-no-files-found: ignore + diff --git a/.gitignore b/.gitignore index 567609b..f785746 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ build/ +.vscode diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 4ee1dec..0000000 --- a/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -language: c -services: docker -sudo: required -os: -- linux -before_install: "./scripts/before_install.sh" -script: -- echo "no compile needed. We just build the docs in after_success" -after_success: -- echo "$TRAVIS_SECURE_ENV_VARS" -- sh -c "./scripts/build_docs.sh" -- sh -c 'if test "$TRAVIS_SECURE_ENV_VARS" = "true"; then echo "publish "; ./scripts/stage.sh; fi' -- echo "PDF at https://s3.amazonaws.com/asprs-las/LAS-specification-$TRAVIS_COMMIT.pdf" - -env: - global: - - secure: wJwGbbWxTl/mKS+qtgzlSOPydZNC2uJ/lAh35W3Tw5pufrLflFondwuxTMu8vnYR1kk2c5uxu5TFf6bjNDhEv5M/L4wYvt5rISYuqeU7C7iisl02VfbdXzZGBqLFRsB6z2Oho6nYB+nszFEMerd5m9r3qPSPILDlYuxmyjE0oZeptBOGLF9URhL4DrCRw00e7qjuOR09D9s5roZgK81FmOAtohQEfx0T8u5bqMFHcViWQGHsIGrowmObQd+4vnogV6WdydR87ezMtJn+L1Nc7EfXnmDme7NiGQRiBoVNQGxdDE07YAM4ev7sKgt+VeZSWidfHVKbUGyCxs1rhZfjsMF1f2efeSbfnN4nCI3+qrr7WNVU+da93U3PSVzk005/bMDz7KGXNZbh7yQyOmTitCxT557KWxz6twO87DxyoWDi+eZceC+ArrpycA1qR7QwMzjECHwVqITuSzXtMFfS3dps7kxUTcO8CyTXd01DeGt+5AUaoFWBLBFtq6BFgnFG/2rjuzK5DCz590hdDZV7jb4SVcWmOz9+Ig172CfwfIatLboyfm5RlFSXI5bXFPED7z83ZEqf5LWrWZaGr5l5mcIL/4OJaqsagvEPiY9rrvBRJ2LnoumMK1Glk6Iror4m4ovDcFA16CVnHZe3f45UJ4EJ+sCE+0vZYkkr6PvHEoE= - - secure: DZ1aTWsXRQMapAogRcReYHhOxAvxBksm8X9C8VeE1WNJ3vxrfMSjz7ESih3GC/gN2bCEhVIYDr2LF3rd2Y5KJOLg/heWxzvyLFEBMlYnQaIMA7lxKevPid5yOgX79M63Czh4k3paooJ6K4lJvNzLKJG2Fme1yWwr/y9RSZ0VKPVm/d0APJcQWwGT0bFYe7fYLSHVf3baZZm9WaS/XAr4pEGwamW3mua7RbdWkT72KBynuX2VPO8b0M6z+G44tSV9KM7uQVGZ/lAEnD3iU33JGGNW52LxVE67Sv2Flvv0nnNg23/y4iFMSNoGR0wigBgoIOWIA5ypUSNs1mJm1kk3Sxz3EDqt6cvDVjp5rn5gF3yR6XXuJQSssi/ZdL18v2ISqTkVMj1yKvrCIB74yzWI8kfiuW+QydK0Cb+7Ci0bkDjM9N9rgZcZNQZf6MCoaqIH9M+XamROUYWbqrTUuysiE+1VPZ0ihpY1a68f4Zw0xpK803o2xLtaZJdJpSD4Xxjf3/OHWW+LsIq8Kn/m7Zyh6Hu9DX40rVJnRj5cpeFgInrsyARVdOWEOu8q64C9s9Av+dlJ9qdNB0Hj/yW4p1Iz1v4PFudMkismjeDrJTvQeyKskdHMIhBYeuUJxLJsZZ90HgvjWU0VH+zfWCmuhZh0mGeUS0Eu4HoZ7J/6Y9VCx3s= diff --git a/Makefile b/Makefile index 18d5339..e1f68b7 100644 --- a/Makefile +++ b/Makefile @@ -17,4 +17,6 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + + diff --git a/README.md b/README.md index 94c8f85..9650d11 100644 --- a/README.md +++ b/README.md @@ -25,3 +25,4 @@ New to LAS? New to GitHub? Want to help? No problem! Learn how to sign up and contribute [here](https://github.com/ASPRSorg/LAS/wiki/Get-Involved). [![Build Status](https://api.travis-ci.org/ASPRSorg/LAS.svg?branch=master)](https://travis-ci.org/ASPRSorg/LAS) + diff --git a/scripts/before_install.sh b/scripts/before_install.sh deleted file mode 100755 index 5d44a57..0000000 --- a/scripts/before_install.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -./scripts/docker.sh - diff --git a/scripts/build_docs.sh b/scripts/build_docs.sh deleted file mode 100755 index 2a886b9..0000000 --- a/scripts/build_docs.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -echo "building docs for $TRAVIS_BUILD_DIR" -docker run -v $TRAVIS_BUILD_DIR:/data -w /data asprsorg/las make latexpdf - - diff --git a/scripts/docker.sh b/scripts/docker.sh deleted file mode 100755 index 5d9d70f..0000000 --- a/scripts/docker.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -# asprsorg/las image has all of the Sphinx -# dependencies need to build the LAS specification - -docker pull asprsorg/las - - diff --git a/scripts/docker/Dockerfile b/scripts/docker/Dockerfile deleted file mode 100644 index 34cee88..0000000 --- a/scripts/docker/Dockerfile +++ /dev/null @@ -1,30 +0,0 @@ -## -# ASPRSorg/LAS - -FROM ubuntu:xenial - -MAINTAINER Howard Butler - -RUN apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 16126D3A3E5C1192 \ - && apt-get update \ - && apt-get install -y --fix-missing --no-install-recommends \ - software-properties-common build-essential ca-certificates \ - git make cmake wget unzip libtool automake python-pip \ - libpython-dev libjpeg-dev zlib1g-dev \ - python-dev python-pip g++ doxygen dvipng \ - cmake libjpeg8-dev zlib1g-dev texlive-latex-base \ - texlive-latex-extra git texlive-fonts-recommended texlive-latex-recommended \ - graphviz python-matplotlib \ - python-setuptools imagemagick latexmk \ - && apt-get remove --purge -y $BUILD_PACKAGES && rm -rf /var/lib/apt/lists/* - - - -RUN pip install breathe \ - sphinx_bootstrap_theme awscli sphinxcontrib-bibtex \ - sphinx_rtd_theme gitpython - -RUN git clone https://github.com/sphinx-doc/sphinx.git && cd sphinx \ - && git checkout stable \ - && python setup.py install - diff --git a/scripts/stage.sh b/scripts/stage.sh deleted file mode 100755 index 49592a2..0000000 --- a/scripts/stage.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -sha=$(git rev-parse HEAD) - -basetex="LAS-specification-$sha.tex" -basepdf="LAS-specification-$sha.pdf" - -filename="build/latex/$basepdf" - - - -docker run -e "AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY" -e "AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID" -v $TRAVIS_BUILD_DIR:/data -w /data asprsorg/las aws s3 cp /data/build/latex/LAS.tex s3://asprs-las/$basetex --acl public-read --region us-east-1 - -echo "Raw TEX uploaded to https://s3.amazonaws.com/asprs-las/$basetex" - -docker run -e "AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY" -e "AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID" -v $TRAVIS_BUILD_DIR:/data -w /data asprsorg/las aws s3 cp /data/build/latex/LAS.pdf s3://asprs-las/$basepdf --acl public-read --region us-east-1 - -echo "Compiled PDF uploaded to https://s3.amazonaws.com/asprs-las/$basepdf" - diff --git a/source/01_intro.txt b/source/01_intro.txt index 3c5be49..0b0ce23 100644 --- a/source/01_intro.txt +++ b/source/01_intro.txt @@ -104,6 +104,25 @@ Summary of LAS 1.4 revisions (GitHub Issue numbers included when applicable): * Added missing Scanner Channel field in note about PDRF6-10 bit field. (`I-80 `_) +* R16 - Readability improvements and clarifications (August 2025): + + * Clarified uniformity of GPS Time for all returns of a pulse. + (`I-81 `_) + * Added example usage of Overlap bit. + (`I-5 `_) + * Reworded mandatory zero Classification for Synthetic PDRF0-5. + (`I-86 `_) + * Added Byte Offset columns to Header, VLR, EVLR, and PDRF tables. + (`I-55 `_) + * Clarified how and when certain header fields should be zero-filled. + (`I-101 `_) + * Added Official LAS Wiki section. + (`I-71 `_) + * Clarified source of min/max XYZ and ExtraByte values. + (`I-89 `_) + * More closely aligned data types with C99 definitions. + (`I-115 `_) + For detailed information on changes in revisions R14 and newer, review the inline differencing provided on the `GitHub page `_. @@ -127,21 +146,21 @@ The additions of LAS 1.4 include: Systems. * Addition of an Overlap bit to indicate points in the overlap region while maintaining the class definition. - * Addition of an (optional) :ref:`extrabytes_vlr_label` Variable Length Record to describe + * Addition of an (optional) :ref:`Extra Bytes Variable Length Record ` to describe "extra bytes" stored with each point. * Other minor changes: * Added definitions for "LAS Domain Profile" and "LAS Domain Profile Description". - * Added links to official LAS wiki: https://github.com/ASPRSorg/LAS/wiki + * Added references to :ref:`Official LAS Wiki `. Conformance ................................................................................ The data types used in the LAS format definition are conformant to the 1999 -ANSI C Language Specification (ANSI/ISO/IEC 9899:1999 ("C99"). +ANSI C Language Specification (ANSI/ISO/IEC 9899:1999 ("C99")). Authority @@ -156,24 +175,29 @@ organization as directed by the ASPRS Board of Directors. Questions related to this standard can be directed to ASPRS: * Online at https://github.com/ASPRSorg/LAS -* By phone at 301-493-0290 +* By phone at 225-408-4747 * By email at las@asprs.org or asprs@asprs.org -* By mail at 425 Barlow Place, Suite 210, Bethesda, Maryland 20814-2160 +* By mail at 8550 United Plaza Blvd, Suite 1001, Baton Rouge, LA 70809 OGC ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -LAS has been recognized by the Open Geospatial Consortium (`OGC`_) in 2018 as an +LAS has been recognized by the Open Geospatial Consortium (`OGC`_) since 2018 as an OGC Community Standard. The OGC version of the document with forward material about standards that LAS references and its status within the standard body can -be found at https://portal.opengeospatial.org/files/17-030r1. +be found at https://www.ogc.org/publications/standard/las/. Future recognition and activity on OGC referencing activities of LAS can be -followed at http://www.opengeospatial.org/standards/community. +followed at https://www.ogc.org/publications/. + +.. _`OGC`: https://www.ogc.org -.. _`OGC`: http://www.opengeospatial.org -.. raw:: latex +.. _laswiki_link: - \newpage +Official LAS Wiki +................................................................................ +The official LAS wiki hosts supplemental guidance pages, links to external +resources, public registries, and more LAS-related resources. +The wiki can be found at https://github.com/ASPRSorg/LAS/wiki. diff --git a/source/02.00_definition.txt b/source/02.00_definition.txt index 6e80c14..3c41061 100644 --- a/source/02.00_definition.txt +++ b/source/02.00_definition.txt @@ -1,3 +1,7 @@ +.. raw:: latex + + \newpage + LAS Format Definition -------------------------------------------------------------------------------- diff --git a/source/02.03_datatypes.sub b/source/02.03_datatypes.sub index 2d63e8c..0cd6bc9 100644 --- a/source/02.03_datatypes.sub +++ b/source/02.03_datatypes.sub @@ -3,19 +3,22 @@ Data Types The following data types are used in the LAS format definition. Note that these data types are conformant to the 1999 ANSI C Language Specification -(ANSI/ISO/IEC 9899:1999 ("C99")). - -* char (1 byte) -* unsigned char (1 byte) -* short (2 bytes) -* unsigned short (2 bytes) -* long (4 bytes) -* unsigned long (4 bytes) -* long long (8 bytes) -* unsigned long long (8 bytes) -* float (4 byte IEEE floating point format) -* double (8 byte IEEE floating point format) -* string (a variable series of 1 byte characters, ASCII encoded, null-terminated) +(ANSI/ISO/IEC 9899:1999 ("C99")), as defined in the standard header +````. + +* int8_t (1 byte) +* uint8_t (1 byte) +* int16_t (2 bytes) +* uint16_t (2 bytes) +* int32_t (4 bytes) +* uint32_t (4 bytes) +* int64_t (8 bytes) +* uint64_t (8 bytes) +* float (4-byte ``binary32`` IEEE floating point format) +* double (8-byte ``binary64`` IEEE floating point format) +* string (a variable-length array of 1-byte characters, ASCII-encoded, + null-terminated, contained in a fixed-length ``char`` array, where ``char`` + must be equivalent to either ``int8_t`` or ``uint8_t``) .. warning:: diff --git a/source/02.04_header.sub b/source/02.04_header.sub index 8de5105..3cad9fd 100644 --- a/source/02.04_header.sub +++ b/source/02.04_header.sub @@ -3,90 +3,90 @@ Public Header Block ................................................................................ -.. tabularcolumns:: |p{6.5cm}|p{4.0cm}|p{2.0cm}|p{1.5cm}| +.. tabularcolumns:: |p{6.5cm}|p{2.0cm}|p{1.2cm}|p{1.8cm}|p{1.8cm}| .. table:: Public Header Block - +----------------------------------+-------------------------+-----------+--------------+ - | **Item** | **Format** | **Size** | **Required** | - +----------------------------------+-------------------------+-----------+--------------+ - | File Signature ("LASF") | char[4] | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | File Source ID | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Global Encoding | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Project ID - GUID Data 1 | unsigned long | 4 bytes | | - +----------------------------------+-------------------------+-----------+--------------+ - | Project ID - GUID Data 2 | unsigned short | 2 bytes | | - +----------------------------------+-------------------------+-----------+--------------+ - | Project ID - GUID Data 3 | unsigned short | 2 bytes | | - +----------------------------------+-------------------------+-----------+--------------+ - | Project ID - GUID Data 4 | unsigned char[8] | 8 bytes | | - +----------------------------------+-------------------------+-----------+--------------+ - | Version Major | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Version Minor | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | System Identifier | char[32] | 32 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Generating Software | char[32] | 32 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | File Creation Day of Year | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | File Creation Year | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Header Size | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Offset to Point Data | unsigned long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Number of Variable Length Records| unsigned long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Point Data Record Format | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Point Data Record Length | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Legacy Number of Point Records | unsigned long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Legacy Number of Point by Return | unsigned long[5] | 20 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | X Scale Factor | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Y Scale Factor | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Z Scale Factor | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | X Offset | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Y Offset | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Z Offset | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Max X | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Min X | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Max Y | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Min Y | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Max Z | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Min Z | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Start of Waveform Data Packet | unsigned long long | 8 bytes | yes | - | Record | | | | - +----------------------------------+-------------------------+-----------+--------------+ - | Start of First Extended Variable | unsigned long long | 8 bytes | yes | - | Length Record | | | | - +----------------------------------+-------------------------+-----------+--------------+ - | Number of Extended Variable | unsigned long | 4 bytes | yes | - | Length Records | | | | - +----------------------------------+-------------------------+-----------+--------------+ - | Number of Point Records | unsigned long long | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ - | Number of Points by Return | unsigned long long[15] | 120 bytes | yes | - +----------------------------------+-------------------------+-----------+--------------+ + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Item | Format | Byte Offset | Size | Required | + +==================================+=========================+=================+===========+==============+ + | File Signature ("LASF") | char[4] | 0 | 4 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | File Source ID | uint16_t | 4 | 2 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Global Encoding | uint16_t | 6 | 2 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Project ID - GUID Data 1 | uint32_t | 8 | 4 bytes | | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Project ID - GUID Data 2 | uint16_t | 12 | 2 bytes | | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Project ID - GUID Data 3 | uint16_t | 14 | 2 bytes | | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Project ID - GUID Data 4 | uint8_t[8] | 16 | 8 bytes | | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Version Major | uint8_t | 24 | 1 byte | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Version Minor | uint8_t | 25 | 1 byte | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | System Identifier | char[32] | 26 | 32 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Generating Software | char[32] | 58 | 32 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | File Creation Day of Year | uint16_t | 90 | 2 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | File Creation Year | uint16_t | 92 | 2 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Header Size | uint16_t | 94 | 2 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Offset to Point Data | uint32_t | 96 | 4 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Number of Variable Length Records| uint32_t | 100 | 4 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Point Data Record Format | uint8_t | 104 | 1 byte | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Point Data Record Length | uint16_t | 105 | 2 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Legacy Number of Point Records | uint32_t | 107 | 4 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Legacy Number of Point by Return | uint32_t[5] | 111 | 20 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | X Scale Factor | double | 131 | 8 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Y Scale Factor | double | 139 | 8 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Z Scale Factor | double | 147 | 8 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | X Offset | double | 155 | 8 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Y Offset | double | 163 | 8 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Z Offset | double | 171 | 8 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Max X | double | 179 | 8 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Min X | double | 187 | 8 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Max Y | double | 195 | 8 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Min Y | double | 203 | 8 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Max Z | double | 211 | 8 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Min Z | double | 219 | 8 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Start of Waveform Data Packet | uint64_t | 227 | 8 bytes | yes | + | Record | | | | | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Start of First Extended Variable | uint64_t | 235 | 8 bytes | yes | + | Length Record | | | | | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Number of Extended Variable | uint32_t | 243 | 4 bytes | yes | + | Length Records | | | | | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Number of Point Records | uint64_t | 247 | 8 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ + | Number of Points by Return | uint64_t[15] | 255 | 120 bytes | yes | + +----------------------------------+-------------------------+-----------------+-----------+--------------+ .. note:: @@ -191,7 +191,7 @@ file can be uniquely identified, globally. .. note:: Example implementations of representing the Project ID fields as a GUID can - be found on the official LAS wiki: https://github.com/ASPRSorg/LAS/wiki + be found on the :ref:`Official LAS Wiki `. **Version Number** @@ -234,6 +234,8 @@ files. Thus, System ID becomes: | | identifying the operation | +-----------------------------+---------------------------------------------+ +If the character data is less than 32 characters, the remaining +data must be null. **Generating Software** @@ -246,7 +248,7 @@ data must be null. **File Creation Day of Year** -Day, expressed as an unsigned short, on which this file was created. Day is +Day, expressed as a uint16_t, on which this file was created. Day is computed as the Greenwich Mean Time (GMT) day. January 1 is considered day 1. **File Creation Year** @@ -273,6 +275,8 @@ This field contains the current number of VLRs that are stored in the file preceding the Point Data Records. If the number of VLRs changes, then this number must be updated. +This field is unrelated to the number of EVLRs appended to the file. + **Point Data Record Format** The point data record indicates the type of point data records contained in the @@ -286,7 +290,7 @@ single LAS file must be the same type and hence the same length. If the specified size is larger than implied by the point format type (e.g., 32 bytes instead of 28 bytes for type 1) the remaining bytes are user-specific "extra bytes". The format and meaning of such "extra bytes" can (optionally) be -described with an :ref:`extrabytes_vlr_label` VLR. +described with an :ref:`Extra Bytes VLR `. **Legacy Number of Point Records** @@ -309,7 +313,7 @@ five returns. **X, Y, and Z Scale Factors** The scale factor fields contain a double floating-point value that is used to -scale the corresponding X, Y, and Z long values within the point records. The +scale the corresponding X, Y, and Z int32_t values within the point records. The corresponding X, Y, and Z scale factor must be multiplied by the X, Y, or Z point record value to get the actual X, Y, or Z coordinate. For example, if the X, Y, and Z coordinates are intended to have two decimal digits, then each @@ -336,8 +340,11 @@ record X is multiplied by the X scale factor and then added to the X offset. **Max and Min X, Y, and Z** -The max and min data fields are the actual unscaled extents of the LAS point +The max and min data fields are the spatial extents of the LAS point file data, specified in the coordinate system of the LAS data. +It should be noted that the max and min should be computed based on the true +X, Y, and Z coordinates and not based on the integer values stored in the point records. +If there are no point records in the file, these values must be set to zero. **Start of Waveform Data Packet Record** @@ -354,6 +361,8 @@ This value provides the offset, in bytes, from the beginning of the LAS file to the first byte of the first EVLR. If any software adds/removes data to/from the Variable Length Records or Point Records, then this offset value must be updated. +If there are no EVLRs, this value must be zero. + **Number of Extended Variable Length Records** This field contains the current number of EVLRs (including, if present, the @@ -361,6 +370,8 @@ Waveform Data Packet Record) that are stored in the file after the Point Data Records. If the number of EVLRs changes, then this number must be updated. If there are no EVLRs this value is zero. +If there are no EVLRs, this value must be zero. + **Number of Point Records** This field contains the total number of point records in the file. Note that diff --git a/source/02.05_vlr.sub b/source/02.05_vlr.sub index c007a09..e4951bf 100644 --- a/source/02.05_vlr.sub +++ b/source/02.05_vlr.sub @@ -5,7 +5,7 @@ Variable Length Records (VLRs) The Public Header Block can be followed by any number of Variable Length Records (VLRs) so long as the total size does not make the start of the Point -Record data inaccessible by an unsigned long ("Offset to Point Data" in the +Record data inaccessible by a uint32_t ("Offset to Point Data" in the Public Header Block). The number of VLRs is specified in the "Number of Variable Length Records" field in the Public Header Block. The Variable Length Records must be accessed sequentially since the size of each variable length @@ -13,23 +13,23 @@ record is contained in the Variable Length Record Header. Each Variable Length Record Header is 54 bytes in length. -.. tabularcolumns:: |p{6.5cm}|p{4.0cm}|p{2.0cm}|p{1.5cm}| +.. tabularcolumns:: |p{5.0cm}|p{3.0cm}|p{2.2cm}|p{1.6cm}|p{1.5cm}| .. table:: Variable Length Record Header - +----------------------------------+-------------------------+-----------+----------+ - | Item | Format | Size | Required | - +==================================+=========================+===========+==========+ - | Reserved | unsigned short | 2 bytes | | - +----------------------------------+-------------------------+-----------+----------+ - | User ID | char[16] | 16 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Record ID | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Record Length After Header | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Description | char[32] | 32 bytes | | - +----------------------------------+-------------------------+-----------+----------+ + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Item | Format | Byte Offset | Size | Required | + +==================================+=========================+=============+===========+==========+ + | Reserved | uint16_t | 0 | 2 bytes | | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | User ID | char[16] | 2 | 16 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Record ID | uint16_t | 18 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Record Length After Header | uint16_t | 20 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Description | char[32] | 22 | 32 bytes | | + +----------------------------------+-------------------------+-------------+-----------+----------+ **Reserved** diff --git a/source/02.06_point.sub b/source/02.06_point.sub index 9827219..93dcbe9 100644 --- a/source/02.06_point.sub +++ b/source/02.06_point.sub @@ -47,40 +47,40 @@ Point Data Record Format 0 Point Data Record Format 0 contains the core 20 bytes that are shared by Point Data Record Formats 0 to 5. -.. tabularcolumns:: |p{7.5cm}|p{3.5cm}|p{1.5cm}|p{1.5cm}| +.. tabularcolumns:: |p{7.0cm}|p{2.5cm}|p{1.2cm}|p{1.5cm}|p{1.8cm}| .. table:: Point Data Record Format 0 - +----------------------------------+-------------------------+-----------+----------+ - | Item | Format | Size | Required | - +==================================+=========================+===========+==========+ - | X | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Y | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Z | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Intensity | unsigned short | 2 bytes | no | - +----------------------------------+-------------------------+-----------+----------+ - | Return Number | 3 bits (bits 0-2) | 3 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Number of Returns (Given Pulse) | 3 bits (bits 3-5) | 3 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Direction Flag | 1 bit (bit 6) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Edge of Flight Line | 1 bit (bit 7) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Angle Rank (-90 to +90) -- | signed char | 1 byte | yes | - | Left Side | | | | - +----------------------------------+-------------------------+-----------+----------+ - | User Data | unsigned char | 1 byte | no | - +----------------------------------+-------------------------+-----------+----------+ - | Point Source ID | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | *Minimum PDRF Size* [1]_ | *20 bytes* | - +------------------------------------------------------------+----------------------+ + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Item | Format | Byte Offset | Size | Required | + +==================================+=========================+=============+===========+==========+ + | X | int32_t | 0 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Y | int32_t | 4 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Z | int32_t | 8 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Intensity | uint16_t | 12 | 2 bytes | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Number | 3 bits (bits 0-2) | 14:0 | 3 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Number of Returns (Given Pulse) | 3 bits (bits 3-5) | 14:3 | 3 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Direction Flag | 1 bit (bit 6) | 14:6 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Edge of Flight Line | 1 bit (bit 7) | 14:7 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification | uint8_t | 15 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Angle Rank (-90 to +90) -- | int8_t | 16 | 1 byte | yes | + | Left Side | | | | | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | User Data | uint8_t | 17 | 1 byte | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Point Source ID | uint16_t | 18 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | *Minimum PDRF Size* [1]_ | *20 bytes* | + +------------------------------------------------------------+------------------------------------+ .. [1] Recall that the Point Data Record Size can be greater than the minimum required for a PDRF. These "extra bytes" follow the standard Point Record @@ -88,7 +88,7 @@ Data Record Formats 0 to 5. **X, Y, and Z** -The X, Y, and Z values are stored as long integers. The X, Y, and Z values are +The X, Y, and Z values are stored as int32_t integers. The X, Y, and Z values are used in conjunction with the scale values and the offset values to determine the coordinate for each point as described in the :ref:`headerblock_label` section. @@ -161,11 +161,11 @@ these cases, the Edge of Flight Line Flag should be set to zero. **Classification** -This field represents the "class" attributes of a point. If a point has never -been classified, this byte must be set to zero. The format for classification +This field represents the "class" attributes of a point. The format for classification is a bit encoded field with the lower five bits used for the class and the three high bits used for flags. The bit definitions are listed in Table 8 and -the classification values in Table 9. +the classification values in Table 9. If a point has never +been classified, the lowest five bits must be set to zero. .. tabularcolumns:: |p{2.0cm}|p{3.0cm}|p{8.5cm}| @@ -310,42 +310,42 @@ Point Data Record Format 1 is the same as Point Data Record Format 0 with the addition of GPS Time. -.. tabularcolumns:: |p{7.5cm}|p{3.5cm}|p{1.5cm}|p{1.5cm}| +.. tabularcolumns:: |p{7.0cm}|p{2.5cm}|p{1.2cm}|p{1.5cm}|p{1.8cm}| .. table:: Point Data Record Format 1 - +----------------------------------+-------------------------+-----------+----------+ - | Item | Format | Size | Required | - +==================================+=========================+===========+==========+ - | X | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Y | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Z | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Intensity | unsigned short | 2 bytes | no | - +----------------------------------+-------------------------+-----------+----------+ - | Return Number | 3 bits (bits 0-2) | 3 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Number of Returns (Given Pulse) | 3 bits (bits 3-5) | 3 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Direction Flag | 1 bit (bit 6) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Edge of Flight Line | 1 bit (bit 7) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Angle Rank (-90 to +90) -- | signed char | 1 byte | yes | - | Left Side | | | | - +----------------------------------+-------------------------+-----------+----------+ - | User Data | unsigned char | 1 byte | no | - +----------------------------------+-------------------------+-----------+----------+ - | Point Source ID | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | GPS Time | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | *Minimum PDRF Size* | *28 bytes* | - +------------------------------------------------------------+----------------------+ + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Item | Format | Byte Offset | Size | Required | + +==================================+=========================+=============+===========+==========+ + | X | int32_t | 0 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Y | int32_t | 4 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Z | int32_t | 8 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Intensity | uint16_t | 12 | 2 bytes | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Number | 3 bits (bits 0-2) | 14:0 | 3 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Number of Returns (Given Pulse) | 3 bits (bits 3-5) | 14:3 | 3 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Direction Flag | 1 bit (bit 6) | 14:6 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Edge of Flight Line | 1 bit (bit 7) | 14:7 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification | uint8_t | 15 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Angle Rank (-90 to +90) -- | int8_t | 16 | 1 byte | yes | + | Left Side | | | | | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | User Data | uint8_t | 17 | 1 byte | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Point Source ID | uint16_t | 18 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | GPS Time | double | 20 | 8 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | *Minimum PDRF Size* | *28 bytes* | + +------------------------------------------------------------+------------------------------------+ **GPS Time** @@ -353,6 +353,11 @@ The GPS Time is the double floating point time tag value at which the point was observed. It is GPS Week Time if the :ref:`Global Encoding ` low bit is clear and Adjusted Standard GPS Time if the bit is set. +It is intended that each return of a given pulse would have an identical GPS +Time. In the example of pulsed LiDAR systems, the GPS Time would be the time at +which the originating pulse was emitted, not the time at which each return was +recorded. + For :ref:`Aggregate Model Systems `, the GPS Time should be set to zero unless assigned from a component measurement. @@ -368,46 +373,46 @@ Point Data Record Format 2 is the same as Point Data Record Format 0 with the addition of three color channels. These fields are used when "colorizing" a point using ancillary data, typically from a camera. -.. tabularcolumns:: |p{7.5cm}|p{3.5cm}|p{1.5cm}|p{1.5cm}| +.. tabularcolumns:: |p{7.0cm}|p{2.5cm}|p{1.2cm}|p{1.5cm}|p{1.8cm}| .. table:: Point Data Record Format 2 - +----------------------------------+-------------------------+-----------+----------+ - | Item | Format | Size | Required | - +==================================+=========================+===========+==========+ - | X | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Y | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Z | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Intensity | unsigned short | 2 bytes | no | - +----------------------------------+-------------------------+-----------+----------+ - | Return Number | 3 bits (bits 0-2) | 3 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Number of Returns (Given Pulse) | 3 bits (bits 3-5) | 3 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Direction Flag | 1 bit (bit 6) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Edge of Flight Line | 1 bit (bit 7) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Angle Rank (-90 to +90) -- | signed char | 1 byte | yes | - | Left Side | | | | - +----------------------------------+-------------------------+-----------+----------+ - | User Data | unsigned char | 1 byte | no | - +----------------------------------+-------------------------+-----------+----------+ - | Point Source ID | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Red | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Green | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Blue | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | *Minimum PDRF Size* | *26 bytes* | - +------------------------------------------------------------+----------------------+ + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Item | Format | Byte Offset | Size | Required | + +==================================+=========================+=============+===========+==========+ + | X | int32_t | 0 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Y | int32_t | 4 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Z | int32_t | 8 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Intensity | uint16_t | 12 | 2 bytes | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Number | 3 bits (bits 0-2) | 14:0 | 3 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Number of Returns (Given Pulse) | 3 bits (bits 3-5) | 14:3 | 3 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Direction Flag | 1 bit (bit 6) | 14:6 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Edge of Flight Line | 1 bit (bit 7) | 14:7 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification | uint8_t | 15 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Angle Rank (-90 to +90) -- | int8_t | 16 | 1 byte | yes | + | Left Side | | | | | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | User Data | uint8_t | 17 | 1 byte | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Point Source ID | uint16_t | 18 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Red | uint16_t | 20 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Green | uint16_t | 22 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Blue | uint16_t | 24 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | *Minimum PDRF Size* | *26 bytes* | + +------------------------------------------------------------+------------------------------------+ **Red, Green, and Blue** @@ -431,48 +436,48 @@ Point Data Record Format 3 Point Data Record Format 3 is the same as Point Data Record Format 2 with the addition of GPS Time. -.. tabularcolumns:: |p{7.5cm}|p{3.5cm}|p{1.5cm}|p{1.5cm}| +.. tabularcolumns:: |p{7.0cm}|p{2.5cm}|p{1.2cm}|p{1.5cm}|p{1.8cm}| .. table:: Point Data Record Format 3 - +----------------------------------+-------------------------+-----------+----------+ - | Item | Format | Size | Required | - +==================================+=========================+===========+==========+ - | X | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Y | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Z | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Intensity | unsigned short | 2 bytes | no | - +----------------------------------+-------------------------+-----------+----------+ - | Return Number | 3 bits (bits 0-2) | 3 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Number of Returns (Given Pulse) | 3 bits (bits 3-5) | 3 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Direction Flag | 1 bit (bit 6) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Edge of Flight Line | 1 bit (bit 7) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Angle Rank (-90 to +90) -- | signed char | 1 byte | yes | - | Left Side | | | | - +----------------------------------+-------------------------+-----------+----------+ - | User Data | unsigned char | 1 byte | no | - +----------------------------------+-------------------------+-----------+----------+ - | Point Source ID | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | GPS Time | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Red | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Green | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Blue | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | *Minimum PDRF Size* | *34 bytes* | - +------------------------------------------------------------+----------------------+ + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Item | Format | Byte Offset | Size | Required | + +==================================+=========================+=============+===========+==========+ + | X | int32_t | 0 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Y | int32_t | 4 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Z | int32_t | 8 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Intensity | uint16_t | 12 | 2 bytes | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Number | 3 bits (bits 0-2) | 14:0 | 3 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Number of Returns (Given Pulse) | 3 bits (bits 3-5) | 14:3 | 3 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Direction Flag | 1 bit (bit 6) | 14:6 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Edge of Flight Line | 1 bit (bit 7) | 14:7 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification | uint8_t | 15 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Angle Rank (-90 to +90) -- | int8_t | 16 | 1 byte | yes | + | Left Side | | | | | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | User Data | uint8_t | 17 | 1 byte | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Point Source ID | uint16_t | 18 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | GPS Time | double | 20 | 8 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Red | uint16_t | 28 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Green | uint16_t | 30 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Blue | uint16_t | 32 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | *Minimum PDRF Size* | *34 bytes* | + +------------------------------------------------------------+------------------------------------+ .. raw:: latex @@ -483,56 +488,56 @@ Point Data Record Format 4 Point Data Record Format 4 adds Wave Packets to Point Data Record Format 1. -.. tabularcolumns:: |p{7.5cm}|p{3.5cm}|p{1.5cm}|p{1.5cm}| +.. tabularcolumns:: |p{7.0cm}|p{2.5cm}|p{1.2cm}|p{1.5cm}|p{1.8cm}| .. table:: Point Data Record Format 4 - +----------------------------------+-------------------------+-----------+----------+ - | Item | Format | Size | Required | - +==================================+=========================+===========+==========+ - | X | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Y | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Z | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Intensity | unsigned short | 2 bytes | no | - +----------------------------------+-------------------------+-----------+----------+ - | Return Number | 3 bits (bits 0-2) | 3 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Number of Returns (Given Pulse) | 3 bits (bits 3-5) | 3 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Direction Flag | 1 bit (bit 6) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Edge of Flight Line | 1 bit (bit 7) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Angle Rank (-90 to +90) -- | signed char | 1 byte | yes | - | Left Side | | | | - +----------------------------------+-------------------------+-----------+----------+ - | User Data | unsigned char | 1 byte | no | - +----------------------------------+-------------------------+-----------+----------+ - | Point Source ID | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | GPS Time | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Wave Packet Descriptor Index | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Byte Offset to Waveform Data | unsigned long long | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Waveform Packet Size in Bytes | unsigned long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Return Point Waveform Location | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Parametric dx | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Parametric dy | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Parametric dz | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | *Minimum PDRF Size* | *57 bytes* | - +------------------------------------------------------------+----------------------+ + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Item | Format | Byte Offset | Size | Required | + +==================================+=========================+=============+===========+==========+ + | X | int32_t | 0 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Y | int32_t | 4 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Z | int32_t | 8 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Intensity | uint16_t | 12 | 2 bytes | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Number | 3 bits (bits 0-2) | 14:0 | 3 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Number of Returns (Given Pulse) | 3 bits (bits 3-5) | 14:3 | 3 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Direction Flag | 1 bit (bit 6) | 14:6 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Edge of Flight Line | 1 bit (bit 7) | 14:7 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification | uint8_t | 15 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Angle Rank (-90 to +90) -- | int8_t | 16 | 1 byte | yes | + | Left Side | | | | | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | User Data | uint8_t | 17 | 1 byte | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Point Source ID | uint16_t | 18 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | GPS Time | double | 20 | 8 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Wave Packet Descriptor Index | uint8_t | 28 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Byte Offset to Waveform Data | uint64_t | 29 | 8 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Waveform Packet Size in Bytes | uint32_t | 37 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Point Waveform Location | float | 41 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Parametric dx | float | 45 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Parametric dy | float | 49 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Parametric dz | float | 53 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | *Minimum PDRF Size* | *57 bytes* | + +------------------------------------------------------------+------------------------------------+ **Wave Packet Descriptor Index** @@ -545,7 +550,7 @@ waveform data associated with this Point Record. **Byte Offset to Waveform Data** The waveform packet data are stored in the LAS file in an Extended Variable -Length Record or in an auxiliary *.wdp file. The Byte Offset represents the +Length Record or in an auxiliary \*.wdp file. The Byte Offset represents the location of the start of this Point Record’s waveform packet within the waveform data variable length record (or external file) relative to the beginning of the :ref:`fwf_packets_label` header. The absolute location of the beginning of this @@ -557,7 +562,7 @@ waveform packet relative to the beginning of the file is given by: **Byte Offset to Waveform Data** - for data stored in an auxiliary *.wdp file. + for data stored in an auxiliary \*.wdp file. **Waveform Packet Size in Bytes** @@ -615,7 +620,7 @@ and the vertical units are meters. .. note:: Users seeking further clarity regarding LAS waveform encoding are encouraged - to learn more on the official LAS wiki: https://github.com/ASPRSorg/LAS/wiki + to learn more on the :ref:`Official LAS Wiki `. .. raw:: latex @@ -627,62 +632,62 @@ Point Data Record Format 5 Point Data Record Format 5 adds Wave Packets to Point Data Record Format 3. -.. tabularcolumns:: |p{7.0cm}|p{3.5cm}|p{1.5cm}|p{1.5cm}| +.. tabularcolumns:: |p{7.0cm}|p{2.5cm}|p{1.2cm}|p{1.5cm}|p{1.8cm}| .. table:: Point Data Record Format 5 - +----------------------------------+-------------------------+-----------+----------+ - | Item | Format | Size | Required | - +==================================+=========================+===========+==========+ - | X | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Y | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Z | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Intensity | unsigned short | 2 bytes | no | - +----------------------------------+-------------------------+-----------+----------+ - | Return Number | 3 bits (bits 0-2) | 3 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Number of Returns (Given Pulse) | 3 bits (bits 3-5) | 3 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Direction Flag | 1 bit (bit 6) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Edge of Flight Line | 1 bit (bit 7) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Angle Rank (-90 to +90) -- | signed char | 1 byte | yes | - | Left Side | | | | - +----------------------------------+-------------------------+-----------+----------+ - | User Data | unsigned char | 1 byte | no | - +----------------------------------+-------------------------+-----------+----------+ - | Point Source ID | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | GPS Time | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Red | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Green | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Blue | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Wave Packet Descriptor Index | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Byte Offset to Waveform Data | unsigned long long | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Waveform Packet Size in Bytes | unsigned long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Return Point Waveform Location | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Parametric dx | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Parametric dy | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Parametric dz | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | *Minimum PDRF Size* | *63 bytes* | - +------------------------------------------------------------+----------------------+ + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Item | Format | Byte Offset | Size | Required | + +==================================+=========================+=============+===========+==========+ + | X | int32_t | 0 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Y | int32_t | 4 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Z | int32_t | 8 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Intensity | uint16_t | 12 | 2 bytes | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Number | 3 bits (bits 0-2) | 14:0 | 3 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Number of Returns (Given Pulse) | 3 bits (bits 3-5) | 14:3 | 3 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Direction Flag | 1 bit (bit 6) | 14:6 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Edge of Flight Line | 1 bit (bit 7) | 14:7 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification | uint8_t | 15 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Angle Rank (-90 to +90) -- | int8_t | 16 | 1 byte | yes | + | Left Side | | | | | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | User Data | uint8_t | 17 | 1 byte | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Point Source ID | uint16_t | 18 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | GPS Time | double | 20 | 8 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Red | uint16_t | 28 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Green | uint16_t | 30 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Blue | uint16_t | 32 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Wave Packet Descriptor Index | uint8_t | 34 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Byte Offset to Waveform Data | uint64_t | 35 | 8 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Waveform Packet Size in Bytes | uint32_t | 43 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Point Waveform Location | float | 47 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Parametric dx | float | 51 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Parametric dy | float | 55 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Parametric dz | float | 59 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | *Minimum PDRF Size* | *63 bytes* | + +------------------------------------------------------------+------------------------------------+ .. raw:: latex @@ -698,45 +703,45 @@ to support up to 15 returns, there are more bits for point classifications to support up to 256 classes, there is a higher precision scan angle (16 bits instead of 8), and the GPS time is mandatory. -.. tabularcolumns:: |p{7.5cm}|p{3.5cm}|p{1.5cm}|p{1.5cm}| +.. tabularcolumns:: |p{6.0cm}|p{3.5cm}|p{1.2cm}|p{1.5cm}|p{1.5cm}| .. table:: Point Data Record Format 6 - +----------------------------------+-------------------------+-----------+----------+ - | Item | Format | Size | Required | - +==================================+=========================+===========+==========+ - | X | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Y | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Z | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Intensity | unsigned short | 2 bytes | no | - +----------------------------------+-------------------------+-----------+----------+ - | Return Number | 4 bits (bits 0-3) | 4 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Number of Returns (Given Pulse) | 4 bits (bits 4-7) | 4 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification Flags | 4 bits (bits 0-3) | 4 bits | no | - +----------------------------------+-------------------------+-----------+----------+ - | Scanner Channel | 2 bits (bits 4-5) | 2 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Direction Flag | 1 bit (bit 6) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Edge of Flight Line | 1 bit (bit 7) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | User Data | unsigned char | 1 byte | no | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Angle | short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Point Source ID | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | GPS Time | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | *Minimum PDRF Size* | *30 bytes* | - +------------------------------------------------------------+----------------------+ + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Item | Format | Byte Offset | Size | Required | + +==================================+=========================+=============+===========+==========+ + | X | int32_t | 0 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Y | int32_t | 4 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Z | int32_t | 8 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Intensity | uint16_t | 12 | 2 bytes | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Number | 4 bits (bits 0-3) | 14:0 | 4 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Number of Returns (Given Pulse) | 4 bits (bits 4-7) | 14:4 | 4 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification Flags | 4 bits (bits 0-3) | 15:0 | 4 bits | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scanner Channel | 2 bits (bits 4-5) | 15:4 | 2 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Direction Flag | 1 bit (bit 6) | 15:6 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Edge of Flight Line | 1 bit (bit 7) | 15:7 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification | uint8_t | 16 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | User Data | uint8_t | 17 | 1 byte | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Angle | int16_t | 18 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Point Source ID | uint16_t | 20 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | GPS Time | double | 22 | 8 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | *Minimum PDRF Size* | *30 bytes* | + +------------------------------------------------------------+------------------------------------+ .. note:: @@ -802,7 +807,10 @@ with the point. The bit definitions are: | | | (unless required by a specification | | | | other than this document) but | | | | allows Classification of overlap points | - | | | to be preserved. | + | | | to be preserved. For example, this may | + | | | be useful for designating Ground points | + | | | that are valid but are not needed to | + | | | meet coverage or density requirements. | +-------+-------------------------+------------------------------------------+ .. note:: @@ -853,11 +861,11 @@ Classification must adhere to the following standard: .. table:: ASPRS Standard Point Classes (Point Data Record Formats 6-10) +------------------+-----------------------------+--------------------------------+ - | Value (Bits 0:4) | Meaning | Notes | + | Value | Meaning | Notes | +==================+=============================+================================+ | 0 | Created, Never Classified | See note [4]_ | - +------------------+-----------------------------+ + - | 1 | Unclassified | | + +------------------+-----------------------------+--------------------------------+ + | 1 | Unclassified | See note [4]_ | +------------------+-----------------------------+--------------------------------+ | 2 | Ground | | +------------------+-----------------------------+--------------------------------+ @@ -922,7 +930,7 @@ Classification must adhere to the following standard: **Scan Angle** -The Scan Angle is a signed short that represents the rotational position of the +The Scan Angle is an int16_t that represents the rotational position of the emitted laser pulse with respect to the vertical dimension of the coordinate system of the data. Down in the data coordinate system is the 0.0 position. Each increment represents 0.006 degrees. Counter-clockwise rotation, as viewed from @@ -946,51 +954,51 @@ Point Data Record Format 7 is the same as Point Data Record Format 6 with the addition of three RGB color channels. These fields are used when "colorizing" a point using ancillary data, typically from a camera. -.. tabularcolumns:: |p{7.5cm}|p{3.5cm}|p{1.5cm}|p{1.5cm}| +.. tabularcolumns:: |p{6.0cm}|p{3.5cm}|p{1.2cm}|p{1.5cm}|p{1.5cm}| .. table:: Point Data Record Format 7 - +----------------------------------+-------------------------+-----------+----------+ - | Item | Format | Size | Required | - +==================================+=========================+===========+==========+ - | X | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Y | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Z | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Intensity | unsigned short | 2 bytes | no | - +----------------------------------+-------------------------+-----------+----------+ - | Return Number | 4 bits (bits 0-3) | 4 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Number of Returns (Given Pulse) | 4 bits (bits 4-7) | 4 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification Flags | 4 bits (bits 0-3) | 4 bits | no | - +----------------------------------+-------------------------+-----------+----------+ - | Scanner Channel | 2 bits (bits 4-5) | 2 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Direction Flag | 1 bit (bit 6) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Edge of Flight Line | 1 bit (bit 7) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | User Data | unsigned char | 1 byte | no | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Angle | short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Point Source ID | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | GPS Time | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Red | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Green | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Blue | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | *Minimum PDRF Size* | *36 bytes* | - +------------------------------------------------------------+----------------------+ + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Item | Format | Byte Offset | Size | Required | + +==================================+=========================+=============+===========+==========+ + | X | int32_t | 0 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Y | int32_t | 4 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Z | int32_t | 8 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Intensity | uint16_t | 12 | 2 bytes | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Number | 4 bits (bits 0-3) | 14:0 | 4 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Number of Returns (Given Pulse) | 4 bits (bits 4-7) | 14:4 | 4 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification Flags | 4 bits (bits 0-3) | 15:0 | 4 bits | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scanner Channel | 2 bits (bits 4-5) | 15:4 | 2 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Direction Flag | 1 bit (bit 6) | 15:6 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Edge of Flight Line | 1 bit (bit 7) | 15:7 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification | uint8_t | 16 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | User Data | uint8_t | 17 | 1 byte | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Angle | int16_t | 18 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Point Source ID | uint16_t | 20 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | GPS Time | double | 22 | 8 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Red | uint16_t | 30 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Green | uint16_t | 32 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Blue | uint16_t | 34 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | *Minimum PDRF Size* | *36 bytes* | + +------------------------------------------------------------+------------------------------------+ .. raw:: latex @@ -1002,53 +1010,53 @@ Point Data Record Format 8 Point Data Record Format 8 is the same as Point Data Record Format 7 with the addition of a NIR (near infrared) channel. -.. tabularcolumns:: |p{7.5cm}|p{3.5cm}|p{1.5cm}|p{1.5cm}| +.. tabularcolumns:: |p{6.0cm}|p{3.5cm}|p{1.2cm}|p{1.5cm}|p{1.5cm}| .. table:: Point Data Record Format 8 - +----------------------------------+-------------------------+-----------+----------+ - | Item | Format | Size | Required | - +==================================+=========================+===========+==========+ - | X | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Y | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Z | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Intensity | unsigned short | 2 bytes | no | - +----------------------------------+-------------------------+-----------+----------+ - | Return Number | 4 bits (bits 0-3) | 4 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Number of Returns (Given Pulse) | 4 bits (bits 4-7) | 4 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification Flags | 4 bits (bits 0-3) | 4 bits | no | - +----------------------------------+-------------------------+-----------+----------+ - | Scanner Channel | 2 bits (bits 4-5) | 2 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Direction Flag | 1 bit (bit 6) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Edge of Flight Line | 1 bit (bit 7) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | User Data | unsigned char | 1 byte | no | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Angle | short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Point Source ID | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | GPS Time | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Red | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Green | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Blue | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | NIR | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | *Minimum PDRF Size* | *38 bytes* | - +------------------------------------------------------------+----------------------+ + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Item | Format | Byte Offset | Size | Required | + +==================================+=========================+=============+===========+==========+ + | X | int32_t | 0 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Y | int32_t | 4 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Z | int32_t | 8 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Intensity | uint16_t | 12 | 2 bytes | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Number | 4 bits (bits 0-3) | 14:0 | 4 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Number of Returns (Given Pulse) | 4 bits (bits 4-7) | 14:4 | 4 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification Flags | 4 bits (bits 0-3) | 15:0 | 4 bits | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scanner Channel | 2 bits (bits 4-5) | 15:4 | 2 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Direction Flag | 1 bit (bit 6) | 15:6 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Edge of Flight Line | 1 bit (bit 7) | 15:7 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification | uint8_t | 16 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | User Data | uint8_t | 17 | 1 byte | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Angle | int16_t | 18 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Point Source ID | uint16_t | 20 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | GPS Time | double | 22 | 8 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Red | uint16_t | 30 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Green | uint16_t | 32 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Blue | uint16_t | 34 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | NIR | uint16_t | 36 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | *Minimum PDRF Size* | *38 bytes* | + +------------------------------------------------------------+------------------------------------+ **NIR** @@ -1071,59 +1079,59 @@ Point Data Record Format 9 Point Data Record Format 9 adds Wave Packets to Point Data Record Format 6. -.. tabularcolumns:: |p{7.5cm}|p{3.5cm}|p{1.5cm}|p{1.5cm}| +.. tabularcolumns:: |p{6.0cm}|p{3.5cm}|p{1.2cm}|p{1.5cm}|p{1.5cm}| .. table:: Point Data Record Format 9 - +----------------------------------+-------------------------+-----------+----------+ - | Item | Format | Size | Required | - +==================================+=========================+===========+==========+ - | X | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Y | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Z | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Intensity | unsigned short | 2 bytes | no | - +----------------------------------+-------------------------+-----------+----------+ - | Return Number | 4 bits (bits 0-3) | 4 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Number of Returns (Given Pulse) | 4 bits (bits 4-7) | 4 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification Flags | 4 bits (bits 0-3) | 4 bits | no | - +----------------------------------+-------------------------+-----------+----------+ - | Scanner Channel | 2 bits (bits 4-5) | 2 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Direction Flag | 1 bit (bit 6) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Edge of Flight Line | 1 bit (bit 7) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | User Data | unsigned char | 1 byte | no | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Angle | short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Point Source ID | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | GPS Time | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Wave Packet Descriptor Index | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Byte Offset to Waveform Data | unsigned long long | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Waveform Packet Size in Bytes | unsigned long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Return Point Waveform Location | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Parametric dx | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Parametric dy | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Parametric dz | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | *Minimum PDRF Size* | *59 bytes* | - +------------------------------------------------------------+----------------------+ + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Item | Format | Byte Offset | Size | Required | + +==================================+=========================+=============+===========+==========+ + | X | int32_t | 0 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Y | int32_t | 4 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Z | int32_t | 8 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Intensity | uint16_t | 12 | 2 bytes | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Number | 4 bits (bits 0-3) | 14:0 | 4 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Number of Returns (Given Pulse) | 4 bits (bits 4-7) | 14:4 | 4 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification Flags | 4 bits (bits 0-3) | 15:0 | 4 bits | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scanner Channel | 2 bits (bits 4-5) | 15:4 | 2 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Direction Flag | 1 bit (bit 6) | 15:6 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Edge of Flight Line | 1 bit (bit 7) | 15:7 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification | uint8_t | 16 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | User Data | uint8_t | 17 | 1 byte | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Angle | int16_t | 18 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Point Source ID | uint16_t | 20 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | GPS Time | double | 22 | 8 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Wave Packet Descriptor Index | uint8_t | 30 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Byte Offset to Waveform Data | uint64_t | 31 | 8 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Waveform Packet Size in Bytes | uint32_t | 39 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Point Waveform Location | float | 43 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Parametric dx | float | 47 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Parametric dy | float | 51 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Parametric dz | float | 55 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | *Minimum PDRF Size* | *59 bytes* | + +------------------------------------------------------------+------------------------------------+ .. raw:: latex @@ -1134,67 +1142,67 @@ Point Data Record Format 10 Point Data Record Format 10 is the same as Point Data Record Format 9 with RGB and NIR values. -.. tabularcolumns:: |p{7.5cm}|p{3.5cm}|p{1.5cm}|p{1.5cm}| +.. tabularcolumns:: |p{6.0cm}|p{3.5cm}|p{1.2cm}|p{1.5cm}|p{1.5cm}| .. table:: Point Data Record Format 10 - +----------------------------------+-------------------------+-----------+----------+ - | Item | Format | Size | Required | - +==================================+=========================+===========+==========+ - | X | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Y | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Z | long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Intensity | unsigned short | 2 bytes | no | - +----------------------------------+-------------------------+-----------+----------+ - | Return Number | 4 bits (bits 0-3) | 4 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Number of Returns (Given Pulse) | 4 bits (bits 4-7) | 4 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification Flags | 4 bits (bits 0-3) | 4 bits | no | - +----------------------------------+-------------------------+-----------+----------+ - | Scanner Channel | 2 bits (bits 4-5) | 2 bits | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Direction Flag | 1 bit (bit 6) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Edge of Flight Line | 1 bit (bit 7) | 1 bit | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Classification | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | User Data | unsigned char | 1 byte | no | - +----------------------------------+-------------------------+-----------+----------+ - | Scan Angle | short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Point Source ID | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | GPS Time | double | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Red | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Green | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Blue | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | NIR | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Wave Packet Descriptor Index | unsigned char | 1 byte | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Byte Offset to Waveform Data | unsigned long long | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Waveform Packet Size in Bytes | unsigned long | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Return Point Waveform Location | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Parametric dx | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Parametric dy | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Parametric dz | float | 4 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | *Minimum PDRF Size* | *67 bytes* | - +------------------------------------------------------------+----------------------+ + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Item | Format | Byte Offset | Size | Required | + +==================================+=========================+=============+===========+==========+ + | X | int32_t | 0 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Y | int32_t | 4 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Z | int32_t | 8 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Intensity | uint16_t | 12 | 2 bytes | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Number | 4 bits (bits 0-3) | 14:0 | 4 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Number of Returns (Given Pulse) | 4 bits (bits 4-7) | 14:4 | 4 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification Flags | 4 bits (bits 0-3) | 15:0 | 4 bits | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scanner Channel | 2 bits (bits 4-5) | 15:4 | 2 bits | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Direction Flag | 1 bit (bit 6) | 15:6 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Edge of Flight Line | 1 bit (bit 7) | 15:7 | 1 bit | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Classification | uint8_t | 16 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | User Data | uint8_t | 17 | 1 byte | no | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Scan Angle | int16_t | 18 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Point Source ID | uint16_t | 20 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | GPS Time | double | 22 | 8 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Red | uint16_t | 30 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Green | uint16_t | 32 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Blue | uint16_t | 34 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | NIR | uint16_t | 36 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Wave Packet Descriptor Index | uint8_t | 38 | 1 byte | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Byte Offset to Waveform Data | uint64_t | 39 | 8 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Waveform Packet Size in Bytes | uint32_t | 47 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Return Point Waveform Location | float | 51 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Parametric dx | float | 55 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Parametric dy | float | 59 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Parametric dz | float | 63 | 4 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | *Minimum PDRF Size* | *67 bytes* | + +------------------------------------------------------------+------------------------------------+ .. raw:: latex diff --git a/source/02.07_evlr.sub b/source/02.07_evlr.sub index baebd96..ebcf73b 100644 --- a/source/02.07_evlr.sub +++ b/source/02.07_evlr.sub @@ -19,23 +19,23 @@ be accessed sequentially since the size of each variable length record is contained in the Extended Variable Length Record Header. Each Extended Variable Length Record Header is 60 bytes in length. -.. tabularcolumns:: |p{6.5cm}|p{4.0cm}|p{2.0cm}|p{1.5cm}| +.. tabularcolumns:: |p{5.0cm}|p{3.2cm}|p{2.2cm}|p{1.6cm}|p{1.5cm}| .. table:: Extended Variable Length Record Header - +----------------------------------+-------------------------+-----------+----------+ - | Item | Format | Size | Required | - +==================================+=========================+===========+==========+ - | Reserved | unsigned short | 2 bytes | | - +----------------------------------+-------------------------+-----------+----------+ - | User ID | char[16] | 16 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Record ID | unsigned short | 2 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Record Length After Header | unsigned long long | 8 bytes | yes | - +----------------------------------+-------------------------+-----------+----------+ - | Description | char[32] | 32 bytes | | - +----------------------------------+-------------------------+-----------+----------+ + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Item | Format | Byte Offset | Size | Required | + +==================================+=========================+=============+===========+==========+ + | Reserved | uint16_t | 0 | 2 bytes | | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | User ID | char[16] | 2 | 16 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Record ID | uint16_t | 18 | 2 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Record Length After Header | uint64_t | 20 | 8 bytes | yes | + +----------------------------------+-------------------------+-------------+-----------+----------+ + | Description | char[32] | 28 | 32 bytes | | + +----------------------------------+-------------------------+-------------+-----------+----------+ .. note:: diff --git a/source/03_required_vlrs.txt b/source/03_required_vlrs.txt index c1241e4..04c40d0 100644 --- a/source/03_required_vlrs.txt +++ b/source/03_required_vlrs.txt @@ -26,7 +26,7 @@ Georeferencing Information Using WKT For definition of WKT, we refer to Open Geospatial Consortium (OGC) specification "OpenGIS coordinate transformation service implementation specification" revision 1.00 released 12 January 2001, section 7 (`"Coordinate -Transformation Service Spec" `_). +Transformation Service Spec" `_). As there are a few dialects of WKT, please note that LAS is not using the "ESRI WKT" dialect, which does not include TOWGS84 and Authority nodes. @@ -106,22 +106,22 @@ complete description can be found in the GeoTIFF format specification. Here is a summary from a programmatic point of view for someone interested in implementation. -The GeoKeyDirectoryTag is defined as an array of unsigned short values. +The GeoKeyDirectoryTag is defined as an array of uint16_t values. Programmatically, the data can be structured as follows: :: struct sGeoKeys { - unsigned short wKeyDirectoryVersion; - unsigned short wKeyRevision; - unsigned short wMinorRevision; - unsigned short wNumberOfKeys; + uint16_t wKeyDirectoryVersion; + uint16_t wKeyRevision; + uint16_t wMinorRevision; + uint16_t wNumberOfKeys; struct sKeyEntry { - unsigned short wKeyID; - unsigned short wTIFFTagLocation; - unsigned short wCount; - unsigned short wValue_Offset; + uint16_t wKeyID; + uint16_t wTIFFTagLocation; + uint16_t wCount; + uint16_t wValue_Offset; } pKey[1]; }; @@ -132,11 +132,11 @@ Programmatically, the data can be structured as follows: wKeyDirectoryVersion = 1; // Always wKeyRevision = 1; // Always wMinorRevision = 0; // Always - wNumberOfKeys // Number of sets of 4 unsigned shorts to follow + wNumberOfKeys // Number of sets of 4 uint16_t integers to follow .. tabularcolumns:: |p{4.5cm}|p{12.0cm}| -.. table:: GeoKey Four Unsigned Shorts +.. table:: GeoKey Four uint16_t Integers +---------------------------------+----------------------------------------------------------+ | Name | Definition | @@ -147,7 +147,7 @@ Programmatically, the data can be structured as follows: | ``wTIFFTagLocation`` | Indicates where the data for this key is located: | | | | | | * 0 means data is in the ``wValue_Offset`` field as an | - | | unsigned short. | + | | uint16_t. | | | * 34736 means the data is located at index | | | ``wValue_Offset`` of the GeoDoubleParamsTag record. | | | * 34737 means the data is located at index | diff --git a/source/04_optional_vlrs.txt b/source/04_optional_vlrs.txt index 0a23a1f..ea6a2af 100644 --- a/source/04_optional_vlrs.txt +++ b/source/04_optional_vlrs.txt @@ -19,7 +19,7 @@ Classification Lookup :: struct CLASSIFICATION { - unsigned char ClassNumber; + uint8_t ClassNumber; char Description[15]; }; //total of 16 bytes @@ -66,22 +66,22 @@ across applications. The extra bytes descriptor is defined as follows: :: struct EXTRA_BYTES { - unsigned char reserved[2]; // 2 bytes - unsigned char data_type; // 1 byte - unsigned char options; // 1 byte - char name[32]; // 32 bytes - unsigned char unused[4]; // 4 bytes - anytype no_data; // 8 bytes - unsigned char deprecated1[16]; // 16 bytes - anytype min; // 8 bytes - unsigned char deprecated2[16]; // 16 bytes - anytype max; // 8 bytes - unsigned char deprecated3[16]; // 16 bytes - double scale; // 8 bytes - unsigned char deprecated4[16]; // 16 bytes - double offset; // 8 bytes - unsigned char deprecated5[16]; // 16 bytes - char description[32]; // 32 bytes + uint8_t reserved[2]; // 2 bytes + uint8_t data_type; // 1 byte + uint8_t options; // 1 byte + char name[32]; // 32 bytes + uint8_t unused[4]; // 4 bytes + anytype no_data; // 8 bytes + uint8_t deprecated1[16]; // 16 bytes + anytype min; // 8 bytes + uint8_t deprecated2[16]; // 16 bytes + anytype max; // 8 bytes + uint8_t deprecated3[16]; // 16 bytes + double scale; // 8 bytes + uint8_t deprecated4[16]; // 16 bytes + double offset; // 8 bytes + uint8_t deprecated5[16]; // 16 bytes + char description[32]; // 32 bytes }; // total of 192 bytes The 4 "extra bytes" could, for example, be of data_type 9 - a 4-byte floating @@ -93,10 +93,10 @@ each point record: #) "laser pulse direction [0]" - data_type = 9 (float) #) "laser pulse direction [1]" - data_type = 9 (float) #) "laser pulse direction [2]" - data_type = 9 (float) -#) "pulse width" - data_type = 3 (ushort) +#) "pulse width" - data_type = 3 (uint16_t) In this example, an array of three individual floats collectively specify a -"laser pulse direction" for that point, and one unsigned short integer specifies +"laser pulse direction" for that point, and one uint16_t integer specifies a "pulse width" for that point. The "extra bytes" are made accessible via a unique name. The "name" field @@ -127,21 +127,21 @@ Any unused characters in the "name" or "description" fields must be set to zero. | 0 | undocumented extra bytes | specify value in | | | | ``options`` field | +------------+-------------------------------+-------------------+ - | 1 | unsigned char | 1 byte | + | 1 | uint8_t | 1 byte | +------------+-------------------------------+-------------------+ - | 2 | char | 1 byte | + | 2 | int8_t | 1 byte | +------------+-------------------------------+-------------------+ - | 3 | unsigned short | 2 bytes | + | 3 | uint16_t | 2 bytes | +------------+-------------------------------+-------------------+ - | 4 | short | 2 bytes | + | 4 | int16_t | 2 bytes | +------------+-------------------------------+-------------------+ - | 5 | unsigned long | 4 bytes | + | 5 | uint32_t | 4 bytes | +------------+-------------------------------+-------------------+ - | 6 | long | 4 bytes | + | 6 | int32_t | 4 bytes | +------------+-------------------------------+-------------------+ - | 7 | unsigned long long | 8 bytes | + | 7 | uint64_t | 8 bytes | +------------+-------------------------------+-------------------+ - | 8 | long long | 8 bytes | + | 8 | int64_t | 8 bytes | +------------+-------------------------------+-------------------+ | 9 | float | 4 bytes | +------------+-------------------------------+-------------------+ @@ -174,6 +174,8 @@ Any unused characters in the "name" or "description" fields must be set to zero. | | | by the corresponding offset value (after | | | | applying the scaling). | +-----------+------------------+-------------------------------------------+ + | 5-7 | *Reserved* | *Reserved for ASPRS definition* | + +-----------+------------------+-------------------------------------------+ The bit mask in the "options" field specifies whether the min and max range of @@ -186,13 +188,13 @@ values in the corresponding fields are to be disregarded. Any unused If the selected data_type is less than 8 bytes, the no_data, min, and max fields should be upcast into 8-byte storage. For any float these 8 bytes would be -upcast to a double, for any unsigned char, unsigned short, or unsigned long -they would be upcast to an unsigned long long and for any char, short, or long, -they would be upcast to a long long. +upcast to a double, for any uint8_t, uint16_t, or uint32_t +they would be upcast to a uint64_t and for any int8_t, int16_t, or int32_t, +they would be upcast to a int64_t. -If used, the min and max fields reflect the actual minimum and maximum values -of the attribute in the LAS file, in its raw form, without any scale -or offset values applied. +If used, the min and max fields reflect the minimum and maximum values +of the attribute in the LAS file as computed from the raw value stored in the LAS +point record, without any scale or offset values applied. The "reserved" field, the "unused" field, and the "deprecated" fields must be set to zero and may be used in a future revision. @@ -253,13 +255,13 @@ dataset, the LAS file supports up to 255 Waveform Packet Descriptors. +------------------------------+-------------------------+-----------+--------------+ | Item | Format | Size | Required | +==============================+=========================+===========+==============+ - | Bits per Sample | unsigned char | 1 byte | yes | + | Bits per Sample | uint8_t | 1 byte | yes | +------------------------------+-------------------------+-----------+--------------+ - | Waveform Compression Type | unsigned char | 1 byte | yes | + | Waveform Compression Type | uint8_t | 1 byte | yes | +------------------------------+-------------------------+-----------+--------------+ - | Number of Samples | unsigned long | 4 bytes | yes | + | Number of Samples | uint32_t | 4 bytes | yes | +------------------------------+-------------------------+-----------+--------------+ - | Temporal Sample Spacing | unsigned long | 4 bytes | yes | + | Temporal Sample Spacing | uint32_t | 4 bytes | yes | +------------------------------+-------------------------+-----------+--------------+ | Digitizer Gain | double | 8 bytes | yes | +------------------------------+-------------------------+-----------+--------------+ @@ -300,6 +302,4 @@ absolute digitizer voltage using the formula: .. note:: Users seeking further clarity regarding LAS waveform encoding are encouraged - to learn more on the official LAS wiki: https://github.com/ASPRSorg/LAS/wiki - - + to learn more on the :ref:`Official LAS Wiki `. diff --git a/source/06_profiles.txt b/source/06_profiles.txt index 0d06159..e1b9862 100644 --- a/source/06_profiles.txt +++ b/source/06_profiles.txt @@ -11,7 +11,7 @@ needs of a particular subset of the broad point cloud community (e.g., the coastal/bathymetric lidar community, or the powerline mapping community). So as to not alter the LAS base specification, new classes can only be added to Point Data Record Formats 6-10, and classification values cannot start below 39. New -attributes must be incorporated using :ref:`extrabytes_vlr_label` VLRs. It is strongly +attributes must be incorporated using :ref:`Extra Bytes VLRs `. It is strongly recommended that the development of Domain Profiles be coordinated to avoid unnecessary overlap or conflicts (e.g., conflicting class numbers) between profiles. diff --git a/source/_static/ASPRS_Logo_Blue.png b/source/_static/ASPRS_Logo_Blue.png new file mode 100644 index 0000000..d392414 Binary files /dev/null and b/source/_static/ASPRS_Logo_Blue.png differ diff --git a/source/_static/asprslogo45.png b/source/_static/asprslogo45.png deleted file mode 100644 index 79fff8d..0000000 Binary files a/source/_static/asprslogo45.png and /dev/null differ diff --git a/source/conf.py b/source/conf.py index 5426292..f4a29a6 100644 --- a/source/conf.py +++ b/source/conf.py @@ -30,7 +30,7 @@ # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['sphinx.ext.mathjax'] +extensions = ['sphinx.ext.mathjax', 'sphinxcontrib.spelling'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -46,7 +46,7 @@ # General information about the project. project = u'LAS' -copyright = u'2019, ASPRS' +copyright = u'2025, ASPRS' author = u'ASPRS' # The version info for the project you're documenting, acts as replacement for @@ -56,21 +56,22 @@ # The short X.Y version. #version = u'1.4' # Custom non-keyword version tag for header -myversion = u'1.4 - R15' +myversion = u'1.4 - R16' # The full version, including alpha/beta/rc tags. release = u'VERSION ' + myversion releasename = release version='' # Publication info (approval date, release date, and GitHub SHA) -today='09 July 2019' -releasedate='09 July 2019' +today='XX XXXX 2025' +releasedate='27 August 2025' approvaldate = 'November 2011' import subprocess def get_git_revision_short_hash(): - return subprocess.check_output(['git', 'rev-parse', 'HEAD']) + import os + return os.environ['GITHUB_SHA'] gitsha = get_git_revision_short_hash() # The language for content autogenerated by Sphinx. Refer to documentation @@ -78,12 +79,12 @@ def get_git_revision_short_hash(): # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = 'en' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = [] +exclude_patterns = ['spelling_wordlist.txt'] # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' @@ -103,6 +104,11 @@ def get_git_revision_short_hash(): # further. For a list of options available for each theme, see the # documentation. # +# HTML theme options in Alabaster here: +# https://alabaster.readthedocs.io/en/latest/customization.html +# Alabaster default CSS is here: +# https://github.com/sphinx-doc/alabaster/blob/master/alabaster/static/alabaster.css_t + # html_theme_options = {} # Add any paths that contain custom static files (such as style sheets) here, @@ -130,6 +136,8 @@ def get_git_revision_short_hash(): \usepackage{titling} \usepackage{fancyhdr} +\usepackage{times} +\usepackage{courier} \makeatletter \fancypagestyle{normal}{ \fancyhf{} @@ -143,9 +151,11 @@ def get_git_revision_short_hash(): } % Override Sphinx defaults for table heading (bold instead of sans serif) -% note: won't work in newer versions of Sphinx 1.7+ -\protected\def\sphinxstylethead{\textbf} +% https://stackoverflow.com/a/42988749/1666676 +% https://github.com/sphinx-doc/sphinx/blob/a6d7ae16739bf92a032a7c4df0297db7cf120ec9/sphinx/texinputs/sphinxlatexstyletext.sty#L46 +\protected\def\sphinxstyletheadfamily{\bfseries} +% leave this here... https://tex.stackexchange.com/a/8353/143333 \makeatother % Override Sphinx defaults for list item spacing and bolding. More info: @@ -202,10 +212,9 @@ def get_git_revision_short_hash(): \noindent Published by:\\ } The American Society for Photogrammetry \& Remote Sensing\\ -425 Barlow Place, Suite 210\\ -Bethesda, Maryland 20814-2160\\ -Voice: 301-493-0290\\ -Fax: 225-408-4422\\ +8550 United Plaza Blvd. Suite 1001\\ +Baton Rouge, LA 70809\\ +Voice: 225-408-4747\\ Web: \underline{www.asprs.org}\\ @@ -241,7 +250,7 @@ def get_git_revision_short_hash(): # The font size ('10pt', '11pt' or '12pt'). # - 'pointsize': '12pt', + 'pointsize': '11pt', # Other document class options - ensure uniform header/footer 'classoptions': ',oneside,openany', @@ -258,11 +267,25 @@ def get_git_revision_short_hash(): # Don't use atendofbody. Use fancyhdr calls in preamble instead (above). # 'atendofbody': """American Society for Photogrammetry \& Remote Sensing \\ LAS SPECIFICATION \\""" + releasename + + # Customize sphinx setup parameters + # https://www.sphinx-doc.org/en/master/latex.html#latexsphinxsetup + # 'sphinxsetup': "TableRowColorOdd={rgb}{0,0,255},TableRowColorEven={rgb}{0,255,0}", + # 'sphinxsetup': "TableRowColorHeader={rgb}{235,235,235}", } +# Customize latex table styles: https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-latex_table_style +# Defaults are latex_table_style = ['booktabs', 'colorrows'] +# You can override for specific tables using rst-class directive +# https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#rstclass + +# Override default table styles back to plain tables because of aliasing issues with booktabs +# latex_table_style = ['booktabs', 'colorrows'] +latex_table_style = ['standard'] + latex_toplevel_sectioning='section' latex_show_urls='footnote' -latex_logo = './_static/asprslogo45.png' +latex_logo = './_static/ASPRS_Logo_Blue.png' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, diff --git a/source/spelling_wordlist.txt b/source/spelling_wordlist.txt new file mode 100644 index 0000000..d98547c --- /dev/null +++ b/source/spelling_wordlist.txt @@ -0,0 +1,41 @@ +LAS +LiDAR +lidar +upcast +structs +georeferencing +Georeferencing +ushort +dataset +Digitizer +digitizer +picoseconds +wTIFFTagLocation +Programmatically +dx +dy +dz +photogrammetric +Endian +endian +Reprojection +rescaling +unscaled +wdp +breakline +WKT +wkt +untransformed +differencing +conformant +Photogrammetry +bathymetric +powerline +LMS +implementers +reflectivity +photogrammetrically +Geospatial +TerraScan +OpenGIS +uint diff --git a/wiki/LAS_FWF_illustration_constant.png b/wiki/LAS_FWF_illustration_constant.png deleted file mode 100644 index 951cf1c..0000000 Binary files a/wiki/LAS_FWF_illustration_constant.png and /dev/null differ diff --git a/wiki/LAS_FWF_illustration_refracted.png b/wiki/LAS_FWF_illustration_refracted.png deleted file mode 100644 index 65757de..0000000 Binary files a/wiki/LAS_FWF_illustration_refracted.png and /dev/null differ