Knihovna PDAL a Python

Knihovna PDAL podporuje jazyk Python ve dvou způsobech použití:

  1. umožňuje vytvořit skript v jazyku Python, který pracuje s daty pomocí filters.python

  2. nabízí rozšíření, které je možné integrovat v aplikacích napsaných v jazyku Python

Důležité

Data knihovna PDAL poskytuje jako NumPy pole.

Dokumentace: https://pdal.io/en/2.6.0/python.html

1. filters.python

Tímto způsobem lze vestavět Python funkce do zpracování dat sekvencí operací (tzv. Pipelines) bez znalosti jazyka C++ (ve kterém je PDAL implementován), které umožňují modifikovat mračna bodů ve formě NumPy polí.

Poznámka

Pipeline je reprezentována v knihovně PDAL JSON datovou strukturou.

Funkce musí mít dva argumenty datového typu NumPy polí: (1) mračno bodů před aplikací filters.python a (2) mračno bodů po aplikaci filru. Příklad funkce:

import numpy as np

def multiply_z(ins, outs):
    Z = ins['Z']
    Z *= 10.0
    outs['Z'] = Z
    
    return True

V případě úspěšné operace musí funkce vratit hodnotu True. Pokud by funkce vratila hodnotu False tak by pipeline skončil chybou.

Příklad pipeline:

[
    "/cesta/vstup.las",
    {
        "type":"filters.smrf"
    },
    {
        "type":"filters.python",
        "script":"multiply_z.py",
        "function":"multiply_z",
        "module":"anything"
    },
    {
        "type":"writers.las",
        "filename":"/cesta/vystup.las"
    }
]                

Více ukázek najdete v dokumentaci filters.python.

Příklad spuštění pipeline z příkazové řádky (pod Windows použijte OSGeo4W Shell):

pdal pipeline ./pdal-pipeline.json

Poznámka

Je nutné doinstalovat balíček pdal-plugins

python3 -m pip install pip pdal-plugins

2. Rozšíření

Pomocí rozšíření lze spouštět pipeline přímo v Python skriptu a zpracovat výsledky zpracování dat dále v podobě NumPy polí. Příklad:

json = """
[
    "/cesta/soubor.las",
    {
        "type": "filters.sort",
        "dimension": "Z"
    }
]
"""

import pdal
pipeline = pdal.Pipeline(json)
count = pipeline.execute()
arrays = pipeline.arrays
print(arrays)