pdal

Erweiterung, die die Verarbeitung von Punktwolken-Daten mit SQL ermöglicht.

Maintainer: ahuarte47

Installation und Laden

INSTALL pdal FROM community;
LOAD pdal;

Beispiel

SELECT * FROM PDAL_Read('path/to/your/pointcloud.las');
---
┌───────────┬───────────┬────────┬───────┐
│ X │ Y │ Z │ │
│ double │ double │ double │ ... │
├───────────┼───────────┼────────┤───────┤
637177.98849393.95411.19 │ ... │
637177.30849396.95411.25 │ ... │
637176.34849400.84411.01 │ ... │
637175.45849404.62410.99 │ ... │
637174.33849407.37411.38 │ ... │
└───────────┴───────────┴────────┴───────┘
WITH __input AS (
SELECT
X, Y, RasterValue
FROM
PDAL_Pipeline('./test/data/overlay-sample.tiff', './test/data/overlay-sample-pipeline.json')
)
SELECT
COUNT(*) AS c,
SUM(RasterValue) AS s
FROM
__input
;
---
┌───────┬──────────┐
│ c │ s │
│ int64 │ double │
├───────┼──────────┤
57600576000.0
└───────┴──────────┘

Über pdal

Dies ist eine DuckDB-Erweiterung zur Verarbeitung von Punktwolken-Daten mit SQL.

Sie können die Erweiterung verwenden, um Punktwolken-Daten aus verschiedenen Formaten (z. B. LAS, LAZ) zu lesen und Transformationen darauf auszuführen.

Die Erweiterung basiert auf PDAL (Point Data Abstraction Library), einer C++-Bibliothek, mit der Nutzer Punktwolken-Daten lesen, schreiben und verarbeiten und mit dieser Erweiterung die Daten direkt mit SQL-Abfragen in DuckDB laden können.

SELECT * FROM PDAL_Read('path/to/your/pointcloud.las');
┌───────────┬───────────┬────────┬───────┐
│ X │ Y │ Z │ │
│ double │ double │ double │ ... │
├───────────┼───────────┼────────┤───────┤
637177.98849393.95411.19 │ ... │
637177.30849396.95411.25 │ ... │
637176.34849400.84411.01 │ ... │
637175.45849404.62410.99 │ ... │
637174.33849407.37411.38 │ ... │
└───────────┴───────────┴────────┴───────┘

PDAL unterstützt Datenpipelines; Sie können komplexe Transformationen ausführen, bevor Datenpunkte in DuckDB geladen werden.

Zum Beispiel eine Rasterdatei laden und mit filters.overlay Attribute aus einem Geopackage extrahieren:

WITH __input AS (
SELECT
X, Y, RasterValue
FROM
PDAL_Pipeline('./test/data/overlay-sample.tiff', './test/data/overlay-sample-pipeline.json')
)
SELECT
COUNT(*) AS c,
SUM(RasterValue) AS s
FROM
__input
;
┌───────┬──────────┐
│ c │ s │
│ int64 │ double │
├───────┼──────────┤
57600576000.0
└───────┴──────────┘

Dabei lautet die Pipeline:

{
"pipeline": [
{
"type": "filters.assign",
"value" : [ "RasterValue = 0.0" ]
},
{
"type": "filters.overlay",
"datasource": "./test/data/overlay-sample.gpkg",
"layer": "area",
"column": "user_data",
"dimension": "RasterValue"
}
]
}

Die Pipeline kann entweder als JSON-Datei oder als inline JSON-String angegeben werden. Beginnt der Wert des zweiten Parameters mit “[” und endet mit “]”, handelt es sich um inline JSON, andernfalls um einen Dateipfad:

SELECT
COUNT(*)
FROM
PDAL_pipeline('./test/data/autzen_trim.las',
'[
{
"type": "filters.tail",
"count": 10
}
]'
)
;
┌──────────────┐
│ count_star() │
│ int64 │
├──────────────┤
10
└──────────────┘

Die Funktion PDAL_PipelineTable führt eine PDAL-Pipeline auf einer Eingabetabelle aus. Es wird angenommen, dass die Eingabetabelle Spalten enthält, die mit PDAL-Punktwolken kompatibel sind.

Die Pipeline kann ebenfalls entweder als JSON-Datei oder als inline JSON-String angegeben werden. Beginnt der Wert des zweiten Parameters mit “[” und endet mit “]”, handelt es sich um inline JSON, andernfalls um einen Dateipfad:

SELECT
*
FROM
PDAL_PipelineTable((SELECT X,Y,Z FROM ...), '[ {"type": "filters.tail", "count": 10} ]')
;

Hinzugefügte Funktionen

function_name function_type description comment examples
PDAL_Drivers table Returns the list of supported stage types of a PDAL Pipeline. NULL [SELECT * FROM PDAL_Drivers();]
PDAL_Read table Read and import a variety of point cloud data file formats using the PDAL library. NULL [SELECT * FROM PDAL_Read(‘./test/data/autzen_trim.laz’);]
PDAL_Info table Read the metadata from point cloud file[s]. NULL [SELECT * FROM PDAL_Info(‘./test/data/autzen_trim.la*’);]
PDAL_Pipeline table Read and import a point cloud data file, applying also a custom processing pipeline to the data. NULL [SELECT * FROM PDAL_Pipeline(‘path/to/your/filename.las’, ‘path/to/your/pipeline.json’);]
PDAL_PipelineTable table Apply a custom processing pipeline to the input table. NULL [SELECT * FROM PDAL_PipelineTable((SELECT X,Y,Z FROM …), ‘[ {type: filters.tail, count: 100} ]’);]

Überladene Funktionen

Diese Erweiterung fügt keine Funktionsüberladungen hinzu.

Hinzugefügte Typen

Diese Erweiterung fügt keine Typen hinzu.

Hinzugefügte Einstellungen

Diese Erweiterung fügt keine Einstellungen hinzu.