diff --git a/.dummy-file b/.dummy-file new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 7b75998026..73392d6e2d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -13,7 +13,7 @@ Please note that GitHub issues are meant to report bugs or feature requests, and Also note, that issues installing PDAL via Conda should be directed to https://github.com/conda-forge/pdal-feedstock/issues/new. Similarly, issues with the PDAL Python bindings installed via Conda should be directed to https://github.com/conda-forge/python-pdal-feedstock/issues/new. [1] https://gis.stackexchange.com/questions/tagged/pdal -[2] https://pdal.io/community.html#mailing-list +[2] https://pdal.org/community.html#mailing-list --> **Describe the bug** diff --git a/.github/workflows/alpine.yml b/.github/workflows/alpine.yml index 82867ea4b7..fc73f63f59 100644 --- a/.github/workflows/alpine.yml +++ b/.github/workflows/alpine.yml @@ -4,6 +4,7 @@ on: push: paths-ignore: - 'doc/**' + branches-ignore: ["dependabot/**"] pull_request: paths-ignore: - 'doc/**' @@ -23,7 +24,7 @@ jobs: fail-fast: true container: pdal/alpinebase:latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Setup run: | source ./scripts/ci/alpine/setup.sh diff --git a/.github/workflows/auto_tag_stable.yml b/.github/workflows/auto_tag_stable.yml index d34fe33117..be4384f68c 100644 --- a/.github/workflows/auto_tag_stable.yml +++ b/.github/workflows/auto_tag_stable.yml @@ -31,7 +31,7 @@ jobs: - name: Checkout code if: steps.check_branch.outputs.run == 'true' - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Tag if: steps.check_branch.outputs.run == 'true' diff --git a/.github/workflows/conda.yml b/.github/workflows/conda.yml index da883afab3..4c6e9ddab8 100644 --- a/.github/workflows/conda.yml +++ b/.github/workflows/conda.yml @@ -4,6 +4,7 @@ on: push: paths-ignore: - 'doc/**' + branches-ignore: ["dependabot/**"] pull_request: paths-ignore: - 'doc/**' @@ -28,14 +29,14 @@ jobs: env: PDAL_PLATFORM: ${{ matrix.platform }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Support longpaths run: git config --system core.longpaths true if: matrix.platform == 'windows-latest' - name: Cache Conda Environment - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/conda_pkgs_dir key: ${{ runner.os }}-${{ steps.get-date.outputs.today }}-conda-${{ env.CACHE_NUMBER }} @@ -71,7 +72,7 @@ jobs: run: | source ./scripts/ci/conda/examples.sh - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v6 with: name: ${{ matrix.platform }}-conda-package path: ./libpdal-feedstock/packages/ diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 65f1610876..2ddd424856 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,12 +1,13 @@ name: Docker on: - push: - paths-ignore: - - 'doc/**' - pull_request: - paths-ignore: - - 'doc/**' + push: + paths-ignore: + - 'doc/**' + branches-ignore: ["dependabot/**"] + pull_request: + paths-ignore: + - 'doc/**' concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} @@ -23,7 +24,7 @@ jobs: permissions: packages: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Lint id: lint run: | diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 8ac4369176..d9e1628bba 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -4,6 +4,7 @@ on: push: paths-ignore: - 'doc/**' + branches-ignore: ["dependabot/**"] pull_request: paths-ignore: - 'doc/**' @@ -27,7 +28,7 @@ jobs: env: BUILD_TYPE: ${{ matrix.type }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: mamba-org/setup-micromamba@v2 with: init-shell: bash diff --git a/.github/workflows/osx.yml b/.github/workflows/osx.yml index e587f33e11..7152f7ab26 100644 --- a/.github/workflows/osx.yml +++ b/.github/workflows/osx.yml @@ -4,6 +4,7 @@ on: push: paths-ignore: - 'doc/**' + branches-ignore: ["dependabot/**"] pull_request: paths-ignore: - 'doc/**' @@ -31,7 +32,7 @@ jobs: shell: bash -l {0} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: mamba-org/setup-micromamba@v2 with: init-shell: bash diff --git a/.github/workflows/pixi.yml b/.github/workflows/pixi.yml index 692b231a40..608f772698 100644 --- a/.github/workflows/pixi.yml +++ b/.github/workflows/pixi.yml @@ -4,6 +4,7 @@ on: push: paths-ignore: - 'doc/**' + branches-ignore: ["dependabot/**"] pull_request: paths-ignore: - 'doc/**' @@ -23,8 +24,8 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v4 - - uses: prefix-dev/setup-pixi@v0.8.10 + - uses: actions/checkout@v6 + - uses: prefix-dev/setup-pixi@v0.9.3 with: environments: >- dev diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9e755b9e50..1b495562b6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,7 +24,7 @@ jobs: fail-fast: false steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: mamba-org/setup-micromamba@v2 with: init-shell: bash @@ -59,7 +59,7 @@ jobs: done working-directory: ./build - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v6 name: Gather source distribution artifact with: name: source-package-ubuntu-latest diff --git a/.github/workflows/slash-command-dispatch.yml b/.github/workflows/slash-command-dispatch.yml index 3180c025c6..bbc8a5c08d 100644 --- a/.github/workflows/slash-command-dispatch.yml +++ b/.github/workflows/slash-command-dispatch.yml @@ -26,7 +26,7 @@ jobs: # Advanced JSON configuration - name: Slash Command Dispatch (JSON) id: scd - uses: peter-evans/slash-command-dispatch@v4 + uses: peter-evans/slash-command-dispatch@v5 with: token: ${{ secrets.GITHUB_TOKEN }} config: > @@ -42,7 +42,7 @@ jobs: - name: Edit comment with error message if: steps.scd.outputs.error-message - uses: peter-evans/create-or-update-comment@v4 + uses: peter-evans/create-or-update-comment@v5 with: comment-id: ${{ github.event.comment.id }} body: | diff --git a/.github/workflows/win.yml b/.github/workflows/win.yml index f13e386c19..3376646689 100644 --- a/.github/workflows/win.yml +++ b/.github/workflows/win.yml @@ -4,6 +4,7 @@ on: push: paths-ignore: - 'doc/**' + branches-ignore: ["dependabot/**"] pull_request: paths-ignore: - 'doc/**' @@ -32,7 +33,7 @@ jobs: BUILD_TYPE: ${{ matrix.type }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: ilammy/msvc-dev-cmd@v1 - uses: mamba-org/setup-micromamba@v2 with: diff --git a/CITATION b/CITATION index 1961f821bc..02836e35d5 100644 --- a/CITATION +++ b/CITATION @@ -1,7 +1,7 @@ To cite PDAL in publications use: PDAL contributors (2025). PDAL: The Point Data Abstraction Library - URL https://pdal.io/. + URL https://pdal.org/. A BibTeX entry for LaTeX users is @@ -10,5 +10,5 @@ A BibTeX entry for LaTeX users is author = {{PDAL contributors}}, year = {2025}, doi = {10.5281/zenodo.10884408}, - url = {https://pdal.io/}, + url = {https://pdal.org/}, } diff --git a/CITATION.cff b/CITATION.cff index 9e665bb2fc..a2bcc1e6d1 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -2,13 +2,13 @@ cff-version: 1.2.0 message: Please cite this software using these metadata or in the CITATION file. type: software title: PDAL -version: 2.9.0 -date-released: 2025-06-19 +version: 2.9.3 +date-released: 2025-11-26 doi: 10.5281/zenodo.2616780 abstract: PDAL is a C++ library for translating and manipulating geospatial point cloud data. It provides pipelines, filters, readers, and writers for manipulating point cloud data. -url: https://pdal.io +url: https://pdal.org repository-code: https://github.com/PDAL/PDAL license: BSD authors: diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a7a6c7e49..ca5a692f4c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.13) -project(PDAL VERSION 2.9.0 LANGUAGES CXX C) +project(PDAL VERSION 2.9.3 LANGUAGES CXX C) string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER) set(ROOT_DIR "${PROJECT_SOURCE_DIR}") @@ -41,7 +41,6 @@ set(CMAKE_CXX_EXTENSIONS OFF) set(PDAL_LIB_NAME pdalcpp) set(PDAL_KAZHDAN_LIB_NAME pdal_kazhdan) -set(PDAL_SPZ_LIB_NAME pdal_spz) set(PDAL_LEPCC_LIB_NAME pdal_lepcc) set(PDAL_TEST_SUPPORT_OBJS pdal_test_support) @@ -168,7 +167,6 @@ add_subdirectory(vendor/lazperf) add_subdirectory(vendor/utfcpp) add_subdirectory(vendor/lepcc) add_subdirectory(vendor/h3) -add_subdirectory(vendor/spz) add_subdirectory(tools) add_subdirectory(apps) @@ -264,7 +262,6 @@ target_link_libraries(${PDAL_LIB_NAME} ${PDAL_LAZPERF_LIB_NAME} ${UTFCPP_LIB_NAME} ${BACKTRACE_LIBRARIES} - ${PDAL_SPZ_LIB_NAME} "$<$,$,9.0>>:-lstdc++fs>" PUBLIC ${WINSOCK_LIBRARY} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a3d2cc40fe..fd45583568 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,7 +17,7 @@ We use Github's [pull requests](https://help.github.com/articles/using-pull-requ * Check for unnecessary whitespace with `git diff --check` before committing. * Make sure your commit messages are in the [proper format](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). * Make sure you have added the necessary tests for your changes. -* [Run _all_ the tests](https://pdal.io/project/testing.html) to assure nothing else was accidentally broken. +* [Run _all_ the tests](https://pdal.org/project/testing.html) to assure nothing else was accidentally broken. ## Submitting Changes @@ -35,7 +35,7 @@ Fixes #123. ## Additional Resources -* [PDAL's coding conventions](https://pdal.io/project/conventions.html) +* [PDAL's coding conventions](https://pdal.org/project/conventions.html) * [General GitHub documentation](http://help.github.com/) * [GitHub pull request documentation](http://help.github.com/send-pull-requests/) * [PDAL Element Room](https://matrix.to/#/#pdal:osgeo.org) diff --git a/HOWTORELEASE.md b/HOWTORELEASE.md index 3d9ae3d412..bd7926ed45 100644 --- a/HOWTORELEASE.md +++ b/HOWTORELEASE.md @@ -37,7 +37,9 @@ This document describes the process for releasing a new version of PDAL. > set(PDAL_SOLIB_MINOR 0) > set(PDAL_SOLIB_BUILD 0) - - Update `doc/download.rst` point to new release + - Update `_config.yml` `release_date` to today's date + - Update `_config.yml` `version` to full version number (ie, 2.9.0) + - Update `doc/download.rst` past release pointer with last release date/version - Update the `STABLE_BRANCH` pointer in the GitHub variables at - Update CITATION.cff with release date and version information diff --git a/README.md b/README.md index b2b8a09865..ef72fc82ba 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # PDAL -PDAL is GDAL for point cloud data. Main website is [https://pdal.io/](https://pdal.io). +PDAL is GDAL for point cloud data. Main website is [https://pdal.org/](https://pdal.org). ## Contributing -* [Mailing list](https://pdal.io/en/stable/community.html#mailing-list) +* [Mailing list](https://pdal.org/en/stable/community.html#mailing-list) * [Contributing](https://github.com/PDAL/PDAL/blob/master/CONTRIBUTING.md) * [Join the chat at https://matrix.to/#/#pdal:osgeo.org](https://matrix.to/#/#pdal:osgeo.org) (mirrored in #pdal on [osgeo.slack.com](http://osgeo.slack.com) diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index 5050f673c2..eaaa6d5e5c 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -46,7 +46,7 @@ endif(APPLE AND PDAL_BUNDLE) set(PKGCONFIG_LIBRARY_DEFINITIONS "") set(PDAL_INCLUDE_DEFINITIONS - "-I${CMAKE_INSTALL_PREFIX}/include -I${GDAL_INCLUDE_DIR}") + "-I${CMAKE_INSTALL_PREFIX}/include") set(PKGCONFIG_LIBRARY_DEFINITIONS "${PKGCONFIG_LIBRARY_DEFINITIONS} gdal") if(LIBXML2_FOUND) diff --git a/apps/pdal.cpp b/apps/pdal.cpp index 0e48118083..25a7523098 100644 --- a/apps/pdal.cpp +++ b/apps/pdal.cpp @@ -117,7 +117,7 @@ void App::outputHelp(const ProgramArgs& args) PluginManager::loadAll(); outputCommands(" - "); m_out << std::endl; - m_out << "See http://pdal.io/apps/ for more detail" << std::endl; + m_out << "See https://pdal.org/apps/ for more detail" << std::endl; } diff --git a/cmake/gdal.cmake b/cmake/gdal.cmake index 5f68579842..d555d84882 100644 --- a/cmake/gdal.cmake +++ b/cmake/gdal.cmake @@ -1,31 +1,10 @@ # # GDAL/OGR support (required) # -function(gdal_find_version _version) - file(READ ${GDAL_INCLUDE_DIR}/gdal_version.h versionfile) - string(REGEX MATCH "GDAL_VERSION_MAJOR[\t ]+([0-9]+)" _ ${versionfile}) - set(MAJOR ${CMAKE_MATCH_1}) - string(REGEX MATCH "GDAL_VERSION_MINOR[\t ]+([0-9]+)" _ ${versionfile}) - set(MINOR ${CMAKE_MATCH_1}) - string(REGEX MATCH "GDAL_VERSION_REV[\t ]+([0-9]+)" _ ${versionfile}) - set(REV ${CMAKE_MATCH_1}) - set(${_version} ${MAJOR}.${MINOR}.${REV} PARENT_SCOPE) -endfunction(gdal_find_version) -find_package(GDAL 3.4 REQUIRED) +find_package(GDAL CONFIG REQUIRED) set_package_properties(GDAL PROPERTIES TYPE REQUIRED PURPOSE "Provides general purpose raster, vector, and reference system support") -if (GDAL_FOUND) - gdal_find_version(GDAL_VERSION) - # - # Older versions of FindGDAL.cmake don't properly set GDAL_VERSION - # - if (GDAL_VERSION VERSION_LESS 3.4.0) - message(FATAL_ERROR - "Found GDAL version ${GDAL_VERSION}. Version 3.4+ is required") - endif() - mark_as_advanced(CLEAR GDAL_INCLUDE_DIR) - mark_as_advanced(CLEAR GDAL_LIBRARY) -else() - message(FATAL_ERROR "GDAL support is required") +if(GDAL_VERSION VERSION_LESS "3.8") + message(FATAL_ERROR "Required at least GDAL version 3.8, but found ${GDAL_VERSION}.") endif() diff --git a/cmake/gtest.cmake b/cmake/gtest.cmake index 749418fb1f..f555c2235b 100644 --- a/cmake/gtest.cmake +++ b/cmake/gtest.cmake @@ -1,86 +1,42 @@ -# CMake configuration stolen from PROJ unit tests -# External GTest provided by (e.g.) libgtest-dev - -set(MIN_GTest_VERSION "1.15.0") - -if(NOT CMAKE_REQUIRED_QUIET) - # CMake 3.17+ use CHECK_START/CHECK_PASS/CHECK_FAIL - message(STATUS "Looking for GTest") +if (MSVC) + # Since tests link CRT dynamically (/MD[d]), require gtest to + #link dynamically too (default is /MT[d]) + option(gtest_force_shared_crt "Always use shared Visual C++ run-time DLL" ON) endif() -find_package(GTest QUIET CONFIG) -set(USE_EXTERNAL_GTEST_DEFAULT OFF) -if(GTest_FOUND) - if(NOT CMAKE_REQUIRED_QUIET) - message(STATUS "Looking for GTest - found (${GTest_VERSION})") - endif() - if(GTest_VERSION VERSION_LESS MIN_GTest_VERSION) - message(WARNING "External GTest version is too old") - else() - set(USE_EXTERNAL_GTEST_DEFAULT ON) - endif() -else() - if(NOT CMAKE_REQUIRED_QUIET) - message(STATUS "Looking for GTest - not found") - endif() -endif() - -option(USE_EXTERNAL_GTEST - "Compile against external GTest" - ${USE_EXTERNAL_GTEST_DEFAULT} -) - -if(USE_EXTERNAL_GTEST) - - if(NOT GTest_FOUND) - message(SEND_ERROR "External GTest >= ${MIN_GTest_VERSION} not found, \ - skipping some tests") - # exit the remainder of this file - return() - endif() - message(STATUS "Using external GTest from build environment") - - # CMake < 3.20.0 uses GTest::GTest - # CMake >= 3.20 uses GTest::gtest, and deprecates GTest::GTest - # so for older CMake, create an alias from GTest::GTest to GTest::gtest - if(NOT TARGET GTest::gtest) - add_library(GTest::gtest INTERFACE IMPORTED) - set_target_properties(GTest::gtest PROPERTIES - INTERFACE_LINK_LIBRARIES "GTest::GTest") - endif() - -else() - message(STATUS "Fetching GTest from GitHub ...") - - # Add Google Test - # - # See https://github.com/google/googletest/blob/main/googletest/README.md - - if(POLICY CMP0135) - cmake_policy(SET CMP0135 NEW) # for DOWNLOAD_EXTRACT_TIMESTAMP option - endif() - - set(GTEST_VERSION "1.15.2") - - include(FetchContent) - FetchContent_Declare( - googletest - URL https://github.com/google/googletest/archive/refs/tags/v${GTEST_VERSION}.zip - EXCLUDE_FROM_ALL # ignored before CMake 3.28 - ) - - # For Windows: Prevent overriding the parent project's compiler/linker settings - set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) - - if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.28.0") - FetchContent_MakeAvailable(googletest) - else() - # Pre CMake 3.28 workaround to prevent installing files - FetchContent_GetProperties(googletest) - if(NOT googletest_POPULATED) - FetchContent_Populate(googletest) - add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR} EXCLUDE_FROM_ALL) + include_directories(${ROOT_DIR}/vendor/gtest/include + ${ROOT_DIR}/vendor/gtest) + +set(GOOGLETEST_VERSION 1.12.1) +add_subdirectory(vendor/gtest) + +set(FPHSA_NAME_MISMATCHED 1) # Suppress warnings, see https://cmake.org/cmake/help/v3.17/module/FindPackageHandleStandardArgs.html + + +if (WITH_ABSEIL) + find_package(absl REQUIRED) + set(FPHSA_NAME_MISMATCHED 0) + + if (absl_FOUND) + find_package(re2 REQUIRED) + + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0") + cmake_policy(SET CMP0079 NEW) + endif() + target_compile_definitions(gtest PUBLIC GTEST_HAS_ABSL=1) + target_compile_definitions(gtest_main PUBLIC GTEST_HAS_ABSL=1) + target_link_libraries(gtest PRIVATE absl::algorithm + absl::base + absl::flags + absl::flags_internal + absl::flags_usage + absl::flags_commandlineflag + absl::flags_parse + absl::debugging + absl::numeric + absl::strings + absl::utility + absl::failure_signal_handler) + target_link_libraries(gtest PUBLIC re2::re2) endif() - endif() endif() - diff --git a/cmake/libraries.cmake b/cmake/libraries.cmake index ff1dbfa17f..6b7a7be95d 100644 --- a/cmake/libraries.cmake +++ b/cmake/libraries.cmake @@ -13,7 +13,7 @@ set(PDAL_SOLIB_MAJOR 19) # # Change if there's a new release with no ABI change # -set(PDAL_SOLIB_MINOR 0) +set(PDAL_SOLIB_MINOR 3) # # Build number. Increment for builds within minor versions. Probably # always 0 for PDAL diff --git a/cmake/macros.cmake b/cmake/macros.cmake index 25fe690930..38476043c2 100644 --- a/cmake/macros.cmake +++ b/cmake/macros.cmake @@ -159,6 +159,13 @@ macro(PDAL_ADD_PLUGIN _name _type _shortname) ${PDAL_ADD_PLUGIN_LINK_WITH} ${WINSOCK_LIBRARY} ) + foreach(_include IN LISTS PDAL_ADD_PLUGIN_INCLUDES) + if(TARGET ${_include}) + target_include_directories(${${_name}} PRIVATE $) + else() + target_include_directories(${${_name}} PRIVATE "${include}") + endif() + endforeach() set_property(TARGET ${${_name}} PROPERTY FOLDER "Plugins/${_type}") set_target_properties(${${_name}} PROPERTIES @@ -184,10 +191,6 @@ endmacro(PDAL_ADD_PLUGIN) # LINK_WITH link test executable with libraries # INCLUDES header file directories # -# If we don't have GTest go activate it first -if(NOT TARGET GTest::gtest) - include (${PDAL_CMAKE_DIR}/gtest.cmake) -endif() macro(PDAL_ADD_TEST _name) @@ -221,10 +224,17 @@ macro(PDAL_ADD_TEST _name) PRIVATE ${PDAL_LIB_NAME} GTest::gtest - GTest::gtest_main ${PDAL_ADD_TEST_LINK_WITH} ${WINSOCK_LIBRARY} ) + foreach(_include IN LISTS PDAL_ADD_TEST_INCLUDES) + if(TARGET ${_include}) + target_include_directories(${_name} PRIVATE $) + else() + target_include_directories(${_name} PRIVATE "${include}") + endif() + endforeach() + add_test(NAME ${_name} COMMAND "${PROJECT_BINARY_DIR}/bin/${_name}" diff --git a/cmake/modules/FindCurl.cmake b/cmake/modules/FindCurl.cmake deleted file mode 100644 index c250cd0d12..0000000000 --- a/cmake/modules/FindCurl.cmake +++ /dev/null @@ -1,68 +0,0 @@ -#.rst: -# FindCURL -# -------- -# -# Find curl -# -# Find the native CURL headers and libraries. -# -# :: -# -# CURL_INCLUDE_DIRS - where to find curl/curl.h, etc. -# CURL_LIBRARIES - List of libraries when using curl. -# CURL_FOUND - True if curl found. -# CURL_VERSION_STRING - the version of curl found (since CMake 2.8.8) - -#============================================================================= -# Copyright 2006-2009 Kitware, Inc. -# Copyright 2012 Rolf Eike Beer -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -# Look for the header file. -find_path(CURL_INCLUDE_DIR NAMES curl/curl.h) -mark_as_advanced(CURL_INCLUDE_DIR) - -# Look for the library (sorted from most current/relevant entry to least). -find_library(CURL_LIBRARY NAMES - curl - # Windows MSVC prebuilts: - curllib - libcurl_imp - curllib_static - # Windows older "Win32 - MSVC" prebuilts (libcurl.lib, e.g. libcurl-7.15.5-win32-msvc.zip): - libcurl -) -mark_as_advanced(CURL_LIBRARY) - -if(CURL_INCLUDE_DIR) - foreach(_curl_version_header curlver.h curl.h) - if(EXISTS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}") - file(STRINGS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}" curl_version_str REGEX "^#define[\t ]+LIBCURL_VERSION[\t ]+\".*\"") - - string(REGEX REPLACE "^#define[\t ]+LIBCURL_VERSION[\t ]+\"([^\"]*)\".*" "\\1" CURL_VERSION_STRING "${curl_version_str}") - unset(curl_version_str) - break() - endif() - endforeach() -endif() - -# handle the QUIETLY and REQUIRED arguments and set CURL_FOUND to TRUE if -# all listed variables are TRUE -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(CURL - REQUIRED_VARS CURL_LIBRARY CURL_INCLUDE_DIR - VERSION_VAR CURL_VERSION_STRING) - -if(CURL_FOUND) - set(CURL_LIBRARIES ${CURL_LIBRARY}) - set(CURL_INCLUDE_DIRS ${CURL_INCLUDE_DIR}) -endif() diff --git a/cmake/modules/FindFbx.cmake b/cmake/modules/FindFbx.cmake deleted file mode 100644 index c2c1d48d61..0000000000 --- a/cmake/modules/FindFbx.cmake +++ /dev/null @@ -1,274 +0,0 @@ -# This module will try to located FBX SDK folder, based on the standard -# directory structure proposed by Autodesk. -# On every platform, the module will look for libraries that matches the -# currently selected cmake generator. -# A version can be specified to the find_package function. -# -# Once done, it will define -# FBX_FOUND - System has Fbx SDK installed -# FBX_INCLUDE_DIRS - The Fbx SDK include directories -# FBX_LIBRARIES - The libraries needed to use Fbx SDK -# FBX_LIBRARIES_DEBUG - The libraries needed to use debug Fbx SDK -# -# It accepts the following variables as input: -# -# FBX_MSVC_RT_DLL - Optional. Select whether to use the DLL version or the -# static library version of the Visual C++ runtime library. -# Default is ON (aka, DLL version: /MD). -# -# Known issues: -# - On ALL platforms: If there are multiple FBX SDK version installed, the -# current implementation will select the first one it finds. -# - On MACOS: If there are multiple FBX SDK compiler supported (clang or gcc), -# the current implementation will select the first one it finds. - -#----------------------------------------------------------------------------# -# # -# ozz-animation is hosted at http://github.com/guillaumeblanc/ozz-animation # -# and distributed under the MIT License (MIT). # -# # -# Copyright (c) 2019 Guillaume Blanc # -# # -# Permission is hereby granted, free of charge, to any person obtaining a # -# copy of this software and associated documentation files (the "Software"), # -# to deal in the Software without restriction, including without limitation # -# the rights to use, copy, modify, merge, publish, distribute, sublicense, # -# and/or sell copies of the Software, and to permit persons to whom the # -# Software is furnished to do so, subject to the following conditions: # -# # -# The above copyright notice and this permission notice shall be included in # -# all copies or substantial portions of the Software. # -# # -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # -# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # -# DEALINGS IN THE SOFTWARE. # -# # -#----------------------------------------------------------------------------# - -############################################################################### -# Generic library search function definition -############################################################################### -function(FindFbxLibrariesGeneric _FBX_ROOT_DIR _OUT_FBX_LIBRARIES _OUT_FBX_LIBRARIES_DEBUG) - # Directory structure depends on the platform: - # - Windows: \lib\\\ - # - Mac OSX: \lib\\ub\\ - # - Linux: \lib\\ - - # Figures out matching compiler/os directory. - - if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC") - if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.10) - set(FBX_CP_PATH "vs2017") - elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19) - set(FBX_CP_PATH "vs2015") - elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18) - set(FBX_CP_PATH "vs2013") - elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 17) - set(FBX_CP_PATH "vs2012") - elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) - set(FBX_CP_PATH "vs2010") - else() - message ("Unsupported MSVC compiler version ${CMAKE_CXX_COMPILER_VERSION}.") - return() - endif() - elseif(APPLE) - set(FBX_CP_PATH "*") - else() - set(FBX_CP_PATH "*") - endif() - - # Detects current processor type. - if(NOT APPLE) # No on APPLE platform - if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(FBX_PROCESSOR_PATH "x64") - else() - set(FBX_PROCESSOR_PATH "x86") - endif() - endif() - - # Set libraries names to search, sorted by preference. - set(FBX_SEARCH_LIB_NAMES fbxsdk-static.a libfbxsdk.a fbxsdk.a) - - # Select whether to use the DLL version or the static library version of the Visual C++ runtime library. - # Default is "md", aka use the multithread DLL version of the run-time library. - if (NOT DEFINED FBX_MSVC_RT_DLL OR FBX_MSVC_RT_DLL) - set(FBX_SEARCH_LIB_NAMES ${FBX_SEARCH_LIB_NAMES} libfbxsdk-md.lib) - else() - set(FBX_SEARCH_LIB_NAMES ${FBX_SEARCH_LIB_NAMES} libfbxsdk-mt.lib) - endif() - - # Set search path. - set(FBX_SEARCH_LIB_PATH "${_FBX_ROOT_DIR}/lib/${FBX_CP_PATH}/${FBX_PROCESSOR_PATH}") - - find_library(FBX_LIB - ${FBX_SEARCH_LIB_NAMES} - HINTS "${FBX_SEARCH_LIB_PATH}/release/") - - if(FBX_LIB) - # Searches debug version also - find_library(FBX_LIB_DEBUG - ${FBX_SEARCH_LIB_NAMES} - HINTS "${FBX_SEARCH_LIB_PATH}/debug/") - - if(UNIX) - if(APPLE) # APPLE requires to link with Carbon framework -# find_library(CARBON_FRAMEWORK Carbon) -# list(APPEND FBX_LIB ${CARBON_FRAMEWORK}) -# list(APPEND FBX_LIB_DEBUG ${CARBON_FRAMEWORK}) - else() - find_package(Threads) - list(APPEND FBX_LIB ${CMAKE_THREAD_LIBS_INIT} dl) - list(APPEND FBX_LIB_DEBUG ${CMAKE_THREAD_LIBS_INIT} dl) - endif() - endif() - - FindFbxVersion(${FBX_ROOT_DIR} PATH_VERSION) - - # 2019 SDK needs to link against bundled libxml and zlib - if(PATH_VERSION GREATER_EQUAL "2019.1") - if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC") - set(ADDITIONAL_LIB_SEARCH_PATH_RELEASE "${FBX_SEARCH_LIB_PATH}/release/") - set(ADDITIONAL_LIB_SEARCH_PATH_DEBUG "${FBX_SEARCH_LIB_PATH}/debug/") - if (NOT DEFINED FBX_MSVC_RT_DLL OR FBX_MSVC_RT_DLL) - set(XML_SEARCH_LIB_NAMES libxml2-md.lib) - set(Z_SEARCH_LIB_NAMES zlib-md.lib) - else() - set(XML_SEARCH_LIB_NAMES libxml2-mt.lib) - set(Z_SEARCH_LIB_NAMES zlib-mt.lib) - endif() - else() - set(ADDITIONAL_LIB_SEARCH_PATH_RELEASE "") - set(ADDITIONAL_LIB_SEARCH_PATH_DEBUG "") - set(XML_SEARCH_LIB_NAMES "xml2") - set(Z_SEARCH_LIB_NAMES "z") - endif() - - find_library(XML_LIB - ${XML_SEARCH_LIB_NAMES} - HINTS ${ADDITIONAL_LIB_SEARCH_PATH_RELEASE}) - find_library(Z_LIB - ${Z_SEARCH_LIB_NAMES} - HINTS ${ADDITIONAL_LIB_SEARCH_PATH_RELEASE}) - - # Searches debug version also - find_library(XML_LIB_DEBUG - ${XML_SEARCH_LIB_NAMES} - HINTS ${ADDITIONAL_LIB_SEARCH_PATH_DEBUG}) - find_library(Z_LIB_DEBUG - ${Z_SEARCH_LIB_NAMES} - HINTS ${ADDITIONAL_LIB_SEARCH_PATH_DEBUG}) - - # for whatever reason on apple it will need iconv as well?! - if(APPLE) - find_library(ICONV_LIB - iconv) - - # no special debug search here as mac only anyway - - if(NOT ICONV_LIB) - message(WARNING "FBX found but required iconv was not found!") - endif() - list(APPEND FBX_LIB ${ICONV_LIB}) - list(APPEND FBX_LIB_DEBUG ${ICONV_LIB}) - endif() - - if(NOT XML_LIB) - message(WARNING "FBX found but required libxml2 was not found!") - endif() - if(NOT Z_LIB) - message(WARNING "FBX found but required zlib was not found!") - endif() - - list(APPEND FBX_LIB ${XML_LIB} ${Z_LIB}) - list(APPEND FBX_LIB_DEBUG ${XML_LIB_DEBUG} ${Z_LIB_DEBUG}) - endif() - set(${_OUT_FBX_LIBRARIES} ${FBX_LIB} PARENT_SCOPE) - set(${_OUT_FBX_LIBRARIES_DEBUG} ${FBX_LIB_DEBUG} PARENT_SCOPE) - else() - message ("A Fbx SDK was found, but doesn't match your compiler settings.") - endif() - # Deduce fbx sdk version -endfunction() - -############################################################################### -# Deduce Fbx sdk version -############################################################################### -function(FindFbxVersion _FBX_ROOT_DIR _OUT_FBX_VERSION) - # Opens fbxsdk_version.h in _FBX_ROOT_DIR and finds version defines. - - set(fbx_version_filename "${_FBX_ROOT_DIR}include/fbxsdk/fbxsdk_version.h") - - if(NOT EXISTS ${fbx_version_filename}) - message(SEND_ERROR "Unable to find fbxsdk_version.h") - endif() - - file(READ ${fbx_version_filename} fbx_version_file_content) - - # Find version major - if(fbx_version_file_content MATCHES "FBXSDK_VERSION_MAJOR[\t ]+([0-9]+)") - set(fbx_version_file_major "${CMAKE_MATCH_1}") - endif() - - # Find version minor - if(fbx_version_file_content MATCHES "FBXSDK_VERSION_MINOR[\t ]+([0-9]+)") - set(fbx_version_file_minor "${CMAKE_MATCH_1}") - endif() - - # Find version patch - if(fbx_version_file_content MATCHES "FBXSDK_VERSION_POINT[\t ]+([0-9]+)") - set(fbx_version_file_patch "${CMAKE_MATCH_1}") - endif() - - if (DEFINED fbx_version_file_major AND - DEFINED fbx_version_file_minor AND - DEFINED fbx_version_file_patch) - set(${_OUT_FBX_VERSION} ${fbx_version_file_major}.${fbx_version_file_minor}.${fbx_version_file_patch} PARENT_SCOPE) - else() - message(SEND_ERROR "Unable to deduce Fbx version for root dir ${_FBX_ROOT_DIR}") - set(${_OUT_FBX_VERSION} "unknown" PARENT_SCOPE) - endif() -endfunction() - -############################################################################### -# Main find package function -############################################################################### - -# Tries to find FBX SDK path -set(FBX_SEARCH_PATHS - "${FBX_DIR}" - "$ENV{FBX_DIR}" - "$ENV{ProgramW6432}/Autodesk/FBX/FBX SDK/*/" - "$ENV{PROGRAMFILES}/Autodesk/FBX/FBX SDK/*/" - "/Applications/Autodesk/FBX SDK/*/") - -find_path(FBX_INCLUDE_DIR - NAMES "include/fbxsdk.h" - PATHS ${FBX_SEARCH_PATHS}) - -if(FBX_INCLUDE_DIR) - # Deduce SDK root directory. - set(FBX_ROOT_DIR "${FBX_INCLUDE_DIR}/") - - # Fills CMake standard variables - set(FBX_INCLUDE_DIRS "${FBX_INCLUDE_DIR}/include") - - # Searches libraries according to the current compiler - FindFbxLibrariesGeneric(${FBX_ROOT_DIR} FBX_LIBRARIES FBX_LIBRARIES_DEBUG) -endif() - -# Handles find_package arguments and set FBX_FOUND to TRUE if all listed variables and version are valid. -include(FindPackageHandleStandardArgs) - -find_package_handle_standard_args(Fbx - FOUND_VAR FBX_FOUND - REQUIRED_VARS FBX_LIBRARIES FBX_INCLUDE_DIRS - VERSION_VAR PATH_VERSION) - -# Warn about how this script can fail to find the newest version. -if(NOT FBX_FOUND) - message("-- Note that the FindFbx.cmake script can fail to find the newest Fbx sdk if there are multiple ones installed. Please set \"FBX_DIR\" environment or cmake variable to choose a specific version/location.") -endif() diff --git a/cmake/modules/FindJace.cmake b/cmake/modules/FindJace.cmake deleted file mode 100644 index 122b66a7fa..0000000000 --- a/cmake/modules/FindJace.cmake +++ /dev/null @@ -1,37 +0,0 @@ -############################################################################### -# -# CMake module to search for Jace library -# -# On success, the macro sets the following variables: -# JACE_FOUND = if the library found -# JACE_LIBRARIES = full path to the library -# JACE_INCLUDE_DIR = where to find the library headers also defined, -# but not for general use are -# JACE_LIBRARY = where to find the Jace library. -# -############################################################################### -MESSAGE(STATUS "Searching for Jace library") - -IF(JACE_INCLUDE_DIR) - # Already in cache, be silent - SET(JACE_FIND_QUIETLY TRUE) -ENDIF() - -FIND_PATH(JACE_INCLUDE_DIR - Jace.h - PATHS - /usr/include - /usr/local - /usr/local/include) - -FIND_LIBRARY(JACE_LIBRARY - NAMES jace - PATHS - /usr/lib - /usr/local - /usr/local/lib) - -# Handle the QUIETLY and REQUIRED arguments and set JACE_FOUND to TRUE -# if all listed variables are TRUE -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Jace DEFAULT_MSG JACE_LIBRARY JACE_INCLUDE_DIR) diff --git a/cmake/modules/FindMrSID.cmake b/cmake/modules/FindMrSID.cmake deleted file mode 100644 index 9a4c12eed9..0000000000 --- a/cmake/modules/FindMrSID.cmake +++ /dev/null @@ -1,56 +0,0 @@ -############################################################################### -# -# CMake module to search for MrSID/MG4 libraries -# -# On success, the macro sets the following variables: -# MRSID_FOUND = if the library was found -# MRSID_LIBRARY = full path to the library -# MRSID_INCLUDE_DIR = full path to the headers -# MRSID_VERSION = version of library which was found -# -# Copyright (c) 2009 Mateusz Loskot -# -# Developed with inspiration from Petr Vanek -# who wrote similar macro for TOra - http://torasql.com/ -# -# Module source: http://github.com/mloskot/workshop/tree/master/cmake/ -# -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. -# -############################################################################### - -if(MRSID_INCLUDE_DIR AND MRSID_LIBRARY) - # Already in cache, be silent - set(MRSID_FIND_QUIETLY TRUE) -endif() - -if(NOT MRSID_FIND_QUIETLY) - message(STATUS "Searching for MrSID LiDAR library ${MrSID_FIND_VERSION}+") -endif() - -if(NOT MRSID_ROOT) - message(FATAL_ERROR "Missing variable MRSID_ROOT with location of MrSID LiDAR sdk") -endif() - -find_path(MRSID_INCLUDE_DIR - lidar/Base.h - PATHS - ${MRSID_ROOT}/include - ${MRSID_ROOT}/Lidar_DSDK/include - NO_DEFAULT_PATH) - -find_library(MRSID_LIBRARY - NAMES - lti_lidar_dsdk - liblti_lidar_dsdk - HINTS - ${MRSID_INCLUDE_DIR}/../lib - NO_DEFAULT_PATH) - - -# Handle the QUIETLY and REQUIRED arguments and set MRSID_FOUND to TRUE -# if all listed variables are TRUE -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(MrSID DEFAULT_MSG MRSID_LIBRARY MRSID_INCLUDE_DIR) - diff --git a/cmake/modules/FindZSTD.cmake b/cmake/modules/FindZSTD.cmake deleted file mode 100644 index 05103b6b0c..0000000000 --- a/cmake/modules/FindZSTD.cmake +++ /dev/null @@ -1,38 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# - Find ZSTD (zstd.h, libzstd.a, libzstd.so, and libzstd.so.0) -# This module defines -# ZSTD_INCLUDE_DIRS, directory containing headers -# ZSTD_LIBRARIES, path to libzstd shared library -# ZSTD_FOUND, whether zstd has been found - -find_path(ZSTD_INCLUDE_DIR NAMES zstd.h - PATH_SUFFIXES "include") -mark_as_advanced(ZSTD_INCLUDE_DIR) - -find_library(ZSTD_LIBRARY NAMES zstd) -mark_as_advanced(ZSTD_LIBRARY) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(ZSTD - REQUIRED_VARS ZSTD_LIBRARY ZSTD_INCLUDE_DIR) - -if (ZSTD_FOUND) - set(ZSTD_LIBRARIES ${ZSTD_LIBRARY}) - set(ZSTD_INCLUDE_DIRS ${ZSTD_INCLUDE_DIR}) -endif() diff --git a/cmake/options.cmake b/cmake/options.cmake index b1c3feda5d..61ec0f4922 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -94,6 +94,11 @@ option(BUILD_PLUGIN_ARROW add_feature_info("Arrow plugin" BUILD_PLUGIN_ARROW "read/write data to and from Arrow format") +option(BUILD_PLUGIN_SPZ + "Choose if SPZ support should be built" FALSE) +add_feature_info("SPZ plugin" BUILD_PLUGIN_SPZ + "read/write 3D gaussian splat data to and from SPZ format") + option(BUILD_TOOLS_NITFWRAP "Choose if nitfwrap tool should be built" FALSE) option(WITH_TESTS diff --git a/cmake/spz.cmake b/cmake/spz.cmake new file mode 100644 index 0000000000..06f8044bef --- /dev/null +++ b/cmake/spz.cmake @@ -0,0 +1,12 @@ +# +# SPZ library +# + +# The oldest spz release that's on conda-forge is 2.0.0, +# but they have it marked as 1.1 in their cmake file. +find_package(spz 1.1.0 REQUIRED) +set_package_properties(spz PROPERTIES TYPE REQUIRED + PURPOSE "SPZ gaussian splat format support") +if(spz_FOUND) + set(PDAL_HAVE_SPZ 1) +endif(spz_FOUND) diff --git a/doc/Makefile b/doc/Makefile index c86caf4ede..c99d774760 100755 --- a/doc/Makefile +++ b/doc/Makefile @@ -25,20 +25,28 @@ clean: -rm -rf $(BUILDDIR)/* -rm -rf doxygen/xml*; -rm -rf doxygen/html*; + -rm conf.py html: jupyterbook $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." -jupyterbook: ./doxygen/xml/index.xml - pushd .. && jupyter-book config sphinx doc/ && popd +pdf: jupyterbook + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/pdf || exit 0 + cd $(BUILDDIR)/pdf && latexmk -r latexmkrc -pdf -f -dvi- -ps- -jobname=pdal -interaction=nonstopmode + cd .. + @echo + @echo "Build finished. The PDF pages are in $(BUILDDIR)/pdf." + +jupyterbook: ./doxygen/xml/index.xml _config.yml + cd .. && jupyter-book config sphinx doc/ && cd doc sed -i "1i\import os, sys; sys.path.append(os.path.abspath(\"./_ext\"))" conf.py @echo @echo "Built jupyter-book" ./doxygen/xml/index.xml: - pushd .. && doxygen ./doc/doxygen/doxygen.conf 1> /dev/null && popd + cd .. && doxygen ./doc/doxygen/doxygen.conf 1> /dev/null && cd doc @echo @echo "Built doxygen" diff --git a/doc/_config.yml b/doc/_config.yml index d9288441d5..ad7407e17f 100644 --- a/doc/_config.yml +++ b/doc/_config.yml @@ -2,9 +2,9 @@ # Learn more at https://jupyterbook.org/customize/config.html title: Point Data Abstraction Library (PDAL) -author: '' +author: "" copyright: "2025" -# logo: _static/pdal_logo.png +logo: "_static/pdal-logo-600.png" # Force re-execution of notebooks on each build. # See https://jupyterbook.org/content/execute.html @@ -15,8 +15,15 @@ execute: # Define the name of the latex output file for PDF builds latex: - latex_documents: - targetname: pdal.tex + use_jupyterbook_latex: true # use sphinx-jupyterbook-latex for pdf builds as default +# latex_engine: pdflatex +# latex_documents: +# targetname: "pdal.tex" +# startdocname: "index.md" +# title: "PDAL: Point cloud Data Abstraction Library" +# author: "Andrew Bell\\Brad Chambers\\Howard Butler\\Michael Gerlek\\PDAL Contributors" +# theme: "manual" + # Information about where the book exists on the web repository: @@ -31,16 +38,19 @@ html: use_repository_button: true extra_navbar: "" use_edit_page_button: true - favicon: './_static/logo/favicon.ico' + favicon: "./_static/logo/favicon.ico" short_title: "Documentation" + baseurl: "https://pdal.org" html_show_copyright: false html_short_title: PDAL - html_title: PDAL2 + html_title: PDAL extra_footer: | - Copyright ©2025 Andrew Bell, Brad Chambers, Howard Butler, and others + Copyright ©2025 Andrew Bell, Brad Chambers, Howard Butler, and others sphinx: + project: "Point cloud Data Abstraction Library" + copyright: "%Y, PDAL Authors" local_extensions: embed: ./_ext rtd_deploy: ./_ext @@ -53,6 +63,7 @@ sphinx: - notfound.extension - sphinxcontrib.jquery config: + suppress_warnings: ["etoc.toctree"] html_show_copyright: false bibtex_bibfiles: - references.bib @@ -68,70 +79,72 @@ sphinx: hpp: "cpp" h: "cpp" breathe_default_project: api - latex_logo: "./_static/logo/pdal_logo_only.png" + latex_logo: "./_static/pdal-logo-600.png" latex_use_parts: false latex_show_urls: "inline" + + latex_documents: + - + - "index" + - "pdal.tex" + - "PDAL: Point cloud Data Abstraction Library" + - 'Andrew Bell\\Brad Chambers\\Howard Butler\\Michael Gerlek\\PDAL Contributors' + - "manual" + - "False" latex_elements: - preamble: ' - \makeatother + preamble: ' \makeatother %\color {blue} %\normalcolor {dark blue} \definecolor{VerbatimColor}{RGB}{239, 239, 239} \definecolor{VerbatimBorderColor}{RGB}{148, 148, 148} \usepackage{geometry} - \geometry{ - letterpaper, - left={30mm}, + \geometry{ + letterpaper, + left={30mm}, } \raggedright' - figure_align: 'htbp' - releasename: '' - tocdepth: 4 - pointsize: '12pt' - papersize: 'letterpaper' + figure_align: "htbp" + releasename: "" + pointsize: "12pt" + papersize: "letterpaper" pygments_style: "sphinx" -# latex_documents: -# - "index" -# - "pdal.tex" -# - "PDAL: Point cloud Data Abstraction Library" -# - 'Andrew Bell\\Brad Chambers\\Howard Butler\\Michael Gerlek\\PDAL Contributors' -# - "manual" - parse: myst_substitutions: - ASPRSLAS: '[ASPRS LAS](https://www.asprs.org/divisions-committees/lidar-division/laser-las-file-format-exchange-activities)' - Bash: '[Bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell))' - CRREL: '[CRREL](https://www.erdc.usace.army.mil/Locations/CRREL/)' - CSV: '[CSV](https://en.wikipedia.org/wiki/Comma-separated_values)' - Docker: '[Docker](https://www.docker.com/)' - Entwine: '[Entwine](https://entwine.io/)' - GDAL: '[GDAL](https://gdal.org/)' - GEOS: '[GEOS](https://libgeos.org)' - GRID: '[GRiD](https://grid.nga.mil/grid/)' - GeoTIFF: '[GeoTIFF](https://github.com/OSGeo/libgeotiff)' - Hobu: '[Hobu](https://hobu.co/)' - JSON: '[JSON](https://en.wikipedia.org/wiki/JSON)' - Julia: '[Julia](https://julialand.org)' - LASzip: '[LASzip](http://laszip.org)' - LiDAR: '[LiDAR](https://en.wikipedia.org/wiki/Lidar)' - NCALM: '[NCALM](http://ncalm.cive.uh.edu/)' - NumPy: '[NumPy](http://www.numpy.org/)' - Optech: '[Optech](http://www.teledyneoptech.com/)' - PCL: '[PCL](http://pointclouds.org)' - PDAL: '[PDAL](https://pdal.io/)' - PROJ: '[PROJ](https://proj.org)' - Python: '[Python](https://python.org/)' - QGIS: '[QGIS](https://qgis.org)' - RIEGL: '[RIEGL](https://riegl.com/)' - Terminal: '`Conda Shell`' + version: "2.9.3" + release_date: "2025-11-26" + ASPRSLAS: "[ASPRS LAS](https://www.asprs.org/divisions-committees/lidar-division/laser-las-file-format-exchange-activities)" + Bash: "[Bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell))" + CRREL: "[CRREL](https://www.erdc.usace.army.mil/Locations/CRREL/)" + CSV: "[CSV](https://en.wikipedia.org/wiki/Comma-separated_values)" + Docker: "[Docker](https://www.docker.com/)" + Entwine: "[Entwine](https://entwine.io/)" + GDAL: "[GDAL](https://gdal.org/)" + GEOS: "[GEOS](https://libgeos.org)" + GRID: "[GRiD](https://grid.nga.mil/grid/)" + GeoTIFF: "[GeoTIFF](https://github.com/OSGeo/libgeotiff)" + Hobu: "[Hobu](https://hobu.co/)" + JSON: "[JSON](https://en.wikipedia.org/wiki/JSON)" + Julia: "[Julia](https://julialand.org)" + LASzip: "[LASzip](http://laszip.org)" + LiDAR: "[LiDAR](https://en.wikipedia.org/wiki/Lidar)" + NCALM: "[NCALM](https://ncalm.cive.uh.edu/)" + NumPy: "[NumPy](https://www.numpy.org/)" + Optech: "[Optech](https://www.teledyneoptech.com/)" + PCL: "[PCL](https://pointclouds.org)" + PDAL: "[PDAL](https://pdal.org/)" + PROJ: "[PROJ](https://proj.org)" + Python: "[Python](https://python.org/)" + QGIS: "[QGIS](https://qgis.org)" + RIEGL: "[RIEGL](https://riegl.com/)" + Terminal: "`Conda Shell`" USACE: U.S. Army Corps of Engineers - UTM: '[UTM](https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system)' - WGS84: '[WGS84](https://en.wikipedia.org/wiki/Geodetic_datum)' - WellKnownText: '[Well Known Text](https://en.wikipedia.org/wiki/Well-known_text_representation_of_coordinate_reference_systems)' - XML: '[XML](https://en.wikipedia.org/wiki/XML)' - jq: '[jq](https://stedolan.github.io/jq/)' - libLAS: '[libLAS](https://liblas.org/)' - nbsp: ' ' + UTM: "[UTM](https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system)" + WGS84: "[WGS84](https://en.wikipedia.org/wiki/Geodetic_datum)" + WellKnownText: "[Well Known Text](https://en.wikipedia.org/wiki/Well-known_text_representation_of_coordinate_reference_systems)" + XML: "[XML](https://en.wikipedia.org/wiki/XML)" + jq: "[jq](https://stedolan.github.io/jq/)" + libLAS: "[libLAS](https://liblas.org/)" + nbsp: " " alpinestatus: "[![Alpine Status](https://github.com/PDAL/PDAL/workflows/Alpine/badge.svg)](https://github.com/PDAL/PDAL/actions?query=workflow%3AAlpine)" dockerstatus: "[![Docker Status](https://github.com/PDAL/PDAL/workflows/Docker/badge.svg)](https://github.com/PDAL/PDAL/actions?query=workflow%3ADocker)" docsstatus: "[![Docs Status](https://github.com/PDAL/PDAL/workflows/Docs/badge.svg)](https://github.com/PDAL/PDAL/actions?query=workflow%3ADocs)" diff --git a/doc/_static/pdal-logo-600.png b/doc/_static/pdal-logo-600.png new file mode 100644 index 0000000000..434bc35224 Binary files /dev/null and b/doc/_static/pdal-logo-600.png differ diff --git a/doc/development/compilation/dependencies.md b/doc/development/compilation/dependencies.md index 23eaec51a7..4bf4d83fb9 100755 --- a/doc/development/compilation/dependencies.md +++ b/doc/development/compilation/dependencies.md @@ -16,7 +16,7 @@ on your system. ## Required Dependencies -### GDAL (3.0+) +### GDAL (3.8+) PDAL uses GDAL for spatial reference system description manipulation, and image reading supporting for the NITF driver. In diff --git a/doc/development/writing-filter.md b/doc/development/writing-filter.md index 81e972e663..ceec53019b 100755 --- a/doc/development/writing-filter.md +++ b/doc/development/writing-filter.md @@ -15,11 +15,19 @@ implemented as *static* filters and are statically linked into the PDAL library. Filters that require extra/optional dependencies, or are external to the core PDAL codebase altogether, such as {ref}`filters.python`, are implemented as *shared* filters, and are built as individual shared libraries, -discoverable by PDAL at runtime. +discoverable by PDAL at runtime through DLL/.so's named by a convention and found +in the path(s) defined by `PDAL_DRIVER_PATH` environment variable. In this tutorial, we will give a brief example of a filter, with notes on how to make it static or shared. +```{warning} +If no points are passed to a filter, it will not be executed. For example, if a +``where`` clause were to remove all of the points, or a reader returns an empty +PointView, the filter will not be executed. +``` + + ## The header First, we provide a full listing of the filter header. diff --git a/doc/development/writing-writer.md b/doc/development/writing-writer.md index b7224bc44c..39f75037b4 100755 --- a/doc/development/writing-writer.md +++ b/doc/development/writing-writer.md @@ -197,4 +197,4 @@ The [LAS tutorial] has a high-level overview of how reading and writing a LAS fi [interesting.las]: https://github.com/PDAL/PDAL/raw/refs/heads/master/test/data/las/interesting.las [pipeline-mywriter.json]: https://github.com/PDAL/PDAL/blob/master/examples/writing-writer/pipeline-mywriter.json?raw=true [Dimension.json]: https://github.com/PDAL/PDAL/blob/master/pdal/Dimension.json -[LAS tutorial]: https://pdal.io/en/latest/tutorial/las.html +[LAS tutorial]: https://pdal.org/en/latest/tutorial/las.html diff --git a/doc/download.md b/doc/download.md index a1f0cb1304..2b19b64239 100755 --- a/doc/download.md +++ b/doc/download.md @@ -4,11 +4,16 @@ ## Current Release(s) -- **2025-06-19** [PDAL-2.9.0-src.tar.bz2] [Release Notes] ([md5]) +[dynamically set the release version and date from _config.yml]:: + +- {{ '**{the_date}**'.format(the_date=release_date) }} {{ '[PDAL-{ver}-src.tar.bz2](https://github.com/PDAL/PDAL/releases/download/{ver}/PDAL-{ver}-src.tar.bz2)'.format(ver=version) }} {{ '[Release Notes](https://github.com/PDAL/PDAL/releases/tag/{ver})'.format(ver=version) }} {{ '([md5](https://github.com/PDAL/PDAL/releases/download/{ver}/PDAL-{ver}-src.tar.bz2.md5))'.format(ver=version) }} ## Past Releases +- **2025-09-01** [PDAL-2.9.1-src.tar.bz2] +- **2025-08-25** [PDAL-2.9.1-src.tar.bz2] +- **2025-06-19** [PDAL-2.9.0-src.tar.bz2] - **2025-02-03** [PDAL-2.8.4-src.tar.bz2] - **2024-03-27** [PDAL-2.7.1-src.tar.bz2] - **2024-02-05** [PDAL-2.6.3-src.tar.bz2] @@ -131,7 +136,7 @@ channel, the command to install both the PDAL application and the Python extension is ``` -conda install -c conda-forge pdal python-pdal gdal +conda install -c conda-forge python-pdal libpdal ``` It is strongly recommended that you make use of Conda's environment management @@ -140,7 +145,6 @@ environment). Instructions can be found on the Conda website. [alpine linux]: https://www.alpinelinux.org/ [conda forge]: https://anaconda.org/conda-forge/pdal -[md5]: https://github.com/PDAL/PDAL/releases/download/2.8.0/PDAL-2.8.0-src.tar.bz2.md5 [pdal-1.9.1-src.tar.bz2]: https://github.com/PDAL/PDAL/releases/download/1.9.1/PDAL-1.9.1-src.tar.bz2 [pdal-2.0.1-src.tar.bz2]: https://github.com/PDAL/PDAL/releases/download/2.0.1/PDAL-2.0.1-src.tar.bz2 [pdal-2.1.0-src.tar.bz2]: https://github.com/PDAL/PDAL/releases/download/2.1.0/PDAL-2.1.0-src.tar.bz2 @@ -164,4 +168,6 @@ environment). Instructions can be found on the Conda website. [pdal-2.8.0-src.tar.bz2]: https://github.com/PDAL/PDAL/releases/download/2.8.0/PDAL-2.8.0-src.tar.bz2 [pdal-2.8.4-src.tar.bz2]: https://github.com/PDAL/PDAL/releases/download/2.8.4/PDAL-2.8.4-src.tar.bz2 [pdal-2.9.0-src.tar.bz2]: https://github.com/PDAL/PDAL/releases/download/2.9.0/PDAL-2.9.0-src.tar.bz2 -[release notes]: https://github.com/PDAL/PDAL/releases/tag/2.9.0 +[pdal-2.9.1-src.tar.bz2]: https://github.com/PDAL/PDAL/releases/download/2.9.1/PDAL-2.9.1-src.tar.bz2 +[pdal-2.9.2-src.tar.bz2]: https://github.com/PDAL/PDAL/releases/download/2.9.2/PDAL-2.9.2-src.tar.bz2 + diff --git a/doc/environment.yml b/doc/environment.yml index cd53456fce..0d25ef8161 100644 --- a/doc/environment.yml +++ b/doc/environment.yml @@ -4,7 +4,6 @@ dependencies: - python-pdal - jupyter-book == 1.0.4 - breathe > 4.34 - - proj - sphinxcontrib-jquery - sphinx-notfound-page - sphinx-inline-tabs diff --git a/doc/index.md b/doc/index.md index f501131911..82396dd212 100755 --- a/doc/index.md +++ b/doc/index.md @@ -22,17 +22,13 @@ Finally, PDAL speaks Python by both embedding and extending it. Visit {ref}`python` to find out how you can use PDAL with Python to process point cloud data. -The entire website is available as a single PDF at +The entire website is available as a single PDF at ## News -### **06-19-2025** +### **11-26-2025** -PDAL 2.9.0 was released. Visit {ref}`download` to grab a copy. - -### **02-03-2025** - -PDAL 2.8.4 was released. Visit {ref}`download` to grab a copy. +PDAL 2.9.3 was released. Visit {ref}`download` to grab a copy. ## Indices and tables diff --git a/doc/local-build-environment.yml b/doc/local-build-environment.yml index cabaf57dfd..481a04d448 100644 --- a/doc/local-build-environment.yml +++ b/doc/local-build-environment.yml @@ -2,3 +2,17 @@ channels: - conda-forge dependencies: - doxygen + - make + - python-pdal + - jupyter-book + - breathe > 4.34 + - sphinxcontrib-jquery + - sphinx-notfound-page + - sphinx-inline-tabs + - cmake + - pillow + - sphinx-jupyterbook-latex + - imagemagick + - compilers + + diff --git a/doc/project/docker.md b/doc/project/docker.md index ec5d6f05cf..aef7019d09 100755 --- a/doc/project/docker.md +++ b/doc/project/docker.md @@ -3,76 +3,19 @@ # Building Docker Containers for PDAL PDAL's {ref}`repository ` is linked to [DockerHub] for automatic -building of [Docker] containers. PDAL keeps three Docker containers current. +building of [Docker] containers. PDAL keeps two Docker containers current. -- `pdal/ubuntu-dependencies:latest` -- PDAL's dependencies - `pdal/pdal:latest` -- PDAL master -- `pdal/pdal:1.5` -- PDAL maintenance branch - -```{note} -Containers are built upon the [Dependencies] container, but the -[Dependencies] container is not pinned to specific Bionic or PDAL release -times. It corresponds to where ever the `dependencies` tag of the PDAL -source tree at resides +- {{'`pdal/pdal:{ver}` -- PDAL current release'.format(ver=version) }} ``` -## Dependencies +## Dockerfile -The PDAL dependencies Docker container is used by both the latest and release -branch Docker containers. The dependencies container is also used during -{ref}`integration` testing by Travis. It is built using the Dockerfile at +The PDAL Docker container definition is used by both the latest and release +branch Docker containers but it is built using the definition of the file for +the given branch. It is built using the Dockerfile at -The `pdal/dependencies:latest` image is regenerated by force-pushing a tag of -the SHA you wish to use to have [DockerHub] build. - -``` -git tag -f dependencies -git push origin refs/tags/dependencies -f -``` - -```{note} -The dependencies container is currently built upon [Ubuntu Bionic]. When -the next Ubuntu LTS is released, the PDAL project will likely move to it. -``` - -## Maintenance - -A PDAL container corresponding to the last major release is automatically -created and maintained with every commit to the active release branch. For -example, the `1.4-maintenance` branch will have a corresponding -`pdal/pdal:1.4` container made with every commit on [DockerHub]. Users are -encouraged to use these containers for testing, bug confirmation, and deployment - -```{figure} ../images/docker-maintenance-branch.png -Docker containers on maintenance branch correspond to major PDAL releases. -``` - -## Latest (or master) - -A PDAL container corresponding to a developer-selected release point is made -available at `pdal/pdal:latest` and corresponds to the manual push of a -`docker-master` tag by PDAL developers. This container is typically used for -testing and verification of fixes, and it is recommended that users looking to -depend on PDAL's Docker containers always use known release versions off of the -last stable release branch. - -```{warning} -You should be using the [Maintenance] Docker container for any -production-oriented operations. Only use the latest one to test or prototype -a latest, unreleased feature. -``` - -```{figure} ../images/docker-master-branch.png -The `pdal/pdal:latest` branch is current relative to the `docker-master` -branch in GitHub. -``` - -``` -$ git tag -f docker-master -$ git push origin refs/tags/docker-master -f -``` - [docker]: https://www.docker.com/ [dockerhub]: https://hub.docker.com/r/pdal/pdal/ [ubuntu bionic]: http://releases.ubuntu.com/18.04/ diff --git a/doc/project/integration.md b/doc/project/integration.md index fd7957f77f..9f52120e59 100755 --- a/doc/project/integration.md +++ b/doc/project/integration.md @@ -36,9 +36,9 @@ Docs are always built and doc artifacts are attached to the build: - PDF - Misspelled words -### Push to pdal.io +### Push to pdal.org -Docs are pushed to pdal.io under the following conditions: +Docs are pushed to pdal.org under the following conditions: - Doc building succeeds - The push branch denoted in `./github/workflows/docs.yaml` matches the current diff --git a/doc/rtd-prebuild.sh b/doc/rtd-prebuild.sh index 23f21df5e6..2a93a3b1f0 100755 --- a/doc/rtd-prebuild.sh +++ b/doc/rtd-prebuild.sh @@ -1,5 +1,6 @@ #!/bin/bash + # Making a build directory for cmake - if we name it _build it will also be # the output location for jupyterbook. This can be customizable if we want mkdir -p doc/_build diff --git a/doc/stages/bounds_opts.md b/doc/stages/bounds_opts.md old mode 100644 new mode 100755 diff --git a/doc/stages/filespec.md b/doc/stages/filespec.md old mode 100644 new mode 100755 index f4d5b9ba04..3eedb7e2a2 --- a/doc/stages/filespec.md +++ b/doc/stages/filespec.md @@ -1,5 +1,7 @@ (filespec)= +# Filespec + In addition to a string or [GDAL VSI](https://gdal.org/en/stable/user/virtual_file_systems.html) filename, HTTP headers and query parameters to be forwarded to remote endpoints can be specified within the filename option. As shown below, a JSON object can be substituted, with the 'headers' and 'query' fields as JSON objects of key/value string pairs. @@ -46,11 +48,10 @@ If using a direct HTTPS link, include the SAS token as query parameters: ```json { "filename": { - "path": "https://.blob.core.windows.net//ept.json", + "path": "https://AZURE_STORAGE_ACCOUNT.blob.core.windows.net/PATH_TO_EPT/ept.json", "query":{ "sp": "r", "st": "2024-03-03T17:30:06Z", - ... "sig": "dQkX7R%2BXHrQLP9qiNdS0zMhYNpmQwLW0D86UUrEgGao%3D" } } diff --git a/doc/stages/filters.csf.md b/doc/stages/filters.csf.md index f6c1bf2ac2..1d17ed4ccc 100755 --- a/doc/stages/filters.csf.md +++ b/doc/stages/filters.csf.md @@ -67,5 +67,8 @@ iterations : Maximum number of iterations. \[Default: **500**\] +```{include} ground_cls_opts.md +``` + ```{include} filter_opts.md ``` diff --git a/doc/stages/filters.dem.md b/doc/stages/filters.dem.md index 7111f36fcf..011f1e6eca 100755 --- a/doc/stages/filters.dem.md +++ b/doc/stages/filters.dem.md @@ -16,6 +16,7 @@ elevation model. ```json [ + "input.las", { "type":"filters.dem", "raster":"dem.tif", diff --git a/doc/stages/filters.geomdistance.md b/doc/stages/filters.geomdistance.md index 30033b58fc..8499a11c7a 100755 --- a/doc/stages/filters.geomdistance.md +++ b/doc/stages/filters.geomdistance.md @@ -24,8 +24,8 @@ This example computes the 2D distance of points to the given geometry. { "type":"filters.geomdistance", "geometry":"POLYGON ((636889.412951239268295 851528.512293258565478 422.7001953125,636899.14233423944097 851475.000686757150106 422.4697265625,636899.14233423944097 851475.000686757150106 422.4697265625,636928.33048324030824 851494.459452757611871 422.5400390625,636928.33048324030824 851494.459452757611871 422.5400390625,636928.33048324030824 851494.459452757611871 422.5400390625,636976.977398241520859 851513.918218758190051 424.150390625,636976.977398241520859 851513.918218758190051 424.150390625,637069.406536744092591 851475.000686757150106 438.7099609375,637132.647526245797053 851445.812537756282836 425.9501953125,637132.647526245797053 851445.812537756282836 425.9501953125,637336.964569251285866 851411.759697255445644 425.8203125,637336.964569251285866 851411.759697255445644 425.8203125,637473.175931254867464 851158.795739248627797 435.6298828125,637589.928527257987298 850711.244121236610226 420.509765625,637244.535430748714134 850511.791769731207751 420.7998046875,636758.066280735656619 850667.461897735483944 434.609375,636539.155163229792379 851056.63721774588339 422.6396484375,636889.412951239268295 851528.512293258565478 422.7001953125))", + "dimension":"distance" }, - "dimension":"distance", { "type":"writers.las", "filename":"with-distance.las" diff --git a/doc/stages/filters.gpstimeconvert.md b/doc/stages/filters.gpstimeconvert.md old mode 100644 new mode 100755 diff --git a/doc/stages/filters.hag_delaunay.md b/doc/stages/filters.hag_delaunay.md index 49fe570fc3..b01e5f3c8e 100755 --- a/doc/stages/filters.hag_delaunay.md +++ b/doc/stages/filters.hag_delaunay.md @@ -3,13 +3,9 @@ # filters.hag_delaunay The **Height Above Ground Delaunay filter** takes as input a point cloud with -`Classification` set to 2 for ground points. It creates a new dimension, -`HeightAboveGround`, that contains the normalized height values. - -```{note} -We expect ground returns to have the classification value of 2 in keeping -with the [ASPRS Standard LIDAR Point Classes](http://www.asprs.org/a/society/committees/standards/LAS_1_4_r13.pdf). -``` +`Classification` of ground points set to 2 or a specified value. It creates +a new dimension, `HeightAboveGround`, that contains the normalized height +values. Ground points may be generated by {ref}`filters.pmf` or {ref}`filters.smrf`, but you can use any method you choose, as long as the ground returns are @@ -55,7 +51,7 @@ we execute the following pipeline "type":"filters.hag_delaunay" }, { - "type":"writers.laz", + "type":"writers.las", "filename":"autzen_hag_delaunay.laz", "extra_dims":"HeightAboveGround=float32" } @@ -91,5 +87,9 @@ allow_extrapolation difference between the heights of the non-ground point and nearest ground point. \[Default: false\] +class + +: Classification value of ground points. \[Default: 2\] + ```{include} filter_opts.md ``` diff --git a/doc/stages/filters.hag_dem.md b/doc/stages/filters.hag_dem.md index a88f1e48ac..1a969e8c65 100755 --- a/doc/stages/filters.hag_dem.md +++ b/doc/stages/filters.hag_dem.md @@ -2,8 +2,8 @@ # filters.hag_dem -The **Height Above Ground (HAG) Digital Elevation Model (DEM) filter** loads -a GDAL-readable raster image specifying the DEM. The `Z` value of each point +The **Height Above Ground (HAG) Digital Elevation Model (DEM) filter** uses +a GDAL-readable raster image to specifying the DEM. The `Z` value of each point in the input is compared against the value at the corresponding X,Y location in the DEM raster. It creates a new dimension, `HeightAboveGround`, that contains the normalized height values. @@ -82,11 +82,30 @@ band : GDAL Band number to read (count from 1). \[Default: 1\] +nodata_hag + +: HAG value to set when pixel value is NoData + \[Default: 0.0] + +min_clamp + +: Clamp HAG minimum value to specified + \[Default: std::numeric_limits::min] + +max_clamp + +: Clamp HAG maximum value to specified + \[Default: std::numeric_limits::max] + zero_ground : If true, set HAG of ground-classified points to 0 rather than comparing `Z` value to raster DEM. \[Default: true\] +class + +: Classification value of ground points. Used when `zero_ground` is set to true. \[Default: 2\] + ```{include} filter_opts.md ``` diff --git a/doc/stages/filters.hag_nn.md b/doc/stages/filters.hag_nn.md index 39a6f6d586..bbfa0485ce 100755 --- a/doc/stages/filters.hag_nn.md +++ b/doc/stages/filters.hag_nn.md @@ -3,13 +3,9 @@ # filters.hag_nn The **Height Above Ground Nearest Neighbor filter** takes as input a point -cloud with `Classification` set to 2 for ground points. It creates a new -dimension, `HeightAboveGround`, that contains the normalized height values. - -```{note} -We expect ground returns to have the classification value of 2 in keeping -with the [ASPRS Standard LIDAR Point Classes](http://www.asprs.org/a/society/committees/standards/LAS_1_4_r13.pdf). -``` +cloud with `Classification` of ground points set to 2 or a specified value. +It creates a new dimension, `HeightAboveGround`, that contains the normalized +height values. Ground points may be generated by {ref}`filters.pmf` or {ref}`filters.smrf`, but you can use any method you choose, as long as the ground returns are @@ -48,7 +44,7 @@ we execute the following pipeline "type":"filters.hag_nn" }, { - "type":"writers.laz", + "type":"writers.las", "filename":"autzen_hag_nn.laz", "extra_dims":"HeightAboveGround=float32" } @@ -130,5 +126,9 @@ allow_extrapolation extrapolation is used to assign the `HeightAboveGround` value. \[Default: false\] +class + +: Classification value of ground points. \[Default: 2\] + ```{include} filter_opts.md ``` diff --git a/doc/stages/filters.head.md b/doc/stages/filters.head.md index 3f8603490a..fd105ac2db 100755 --- a/doc/stages/filters.head.md +++ b/doc/stages/filters.head.md @@ -22,6 +22,7 @@ Thin a point cloud by first shuffling the point order with ```json [ + "input.las", { "type":"filters.randomize" }, @@ -38,6 +39,7 @@ Compute height above ground and extract the ten highest points. ```json [ + "input.las", { "type":"filters.smrf" }, diff --git a/doc/stages/filters.litree.md b/doc/stages/filters.litree.md old mode 100644 new mode 100755 diff --git a/doc/stages/filters.lloydkmeans.md b/doc/stages/filters.lloydkmeans.md old mode 100644 new mode 100755 diff --git a/doc/stages/filters.md b/doc/stages/filters.md index 5c3cefa960..a8201cb582 100755 --- a/doc/stages/filters.md +++ b/doc/stages/filters.md @@ -198,6 +198,7 @@ filters.nndistance filters.normal filters.optimalneighborhood filters.planefit +filters.radiusassign filters.radialdensity filters.reciprocity filters.zsmooth @@ -254,6 +255,11 @@ filters.griddecimation : Compute a deviation of a point from a manifold approximating its neighbors. +{ref}`filters.radiusassign` + +: Update the value of a dimension (using an assignment expression) for specific points + depending on their neighbors in a given radius. + {ref}`filters.radialdensity` : Compute pointwise density of points within a given radius. @@ -272,7 +278,7 @@ filters.griddecimation : Assign values for one point (the highest or lowest) per cell of a 2d regular grid. ### Assignment -