Expression Syntax#
The PDAL expression syntax is a subset of that found in a great many programming languages. Specifically, it uses a limited set of operators from the C language. Dimension names can be used where a variable or constant would be used. Double-precision constants are supported.
All mathematical operations are done with double-precision floating point. There is no automatic conversion of numeric values to logical values. For example, the following is not permitted:
((Intensity > 0) && Classification)
Instead, you must write:
((Intensity > 0) && (Classification != 0))
Mathematical Operators#
Operator |
Function |
Example |
---|---|---|
* |
Multiplication |
Intensity * 64.0 |
/ |
Division |
Green / 255 |
+ |
Addition |
Classification + 255 |
- |
Subtraction |
X - 64215.2 |
Logical Operators#
Operator |
Function |
Example |
---|---|---|
! |
Not |
!(X < 25) |
> |
Greater |
X > 52.523 |
>= |
Greater Than or Equal |
X >= 52.523 |
< |
Less |
Y < -28.456 |
<= |
Less Than or Equal |
X <= 0 |
== |
Equal |
Classification == 7 |
!= |
Not Equal |
Classification != 7 |
&& |
And |
Classification == 7 && Intensity > 64 |
|| |
Or |
Classification == 7 || Classification == 8 |
The order or operations is as listed, which matches that of the C language. Parentheses are supported to alter the order of operations.
Examples#
((Classification == 7 || Classification == 8) && NumberOfReturns == 1)
Selects points with a classification of 7 or 8 and number of returns equal to 1. Note that in this case the parentheses are necessary.
X > 2500 && X < 4700 && Y > 0
Selects points with an X between 2500 and 4700 and a positive Y value.
(NumberOfReturns > 1 && ReturnNumber == 1)
Selects “first” returns from a laser pulse.
!(NumberOfReturns == 1)
Selects only those points where the laser pulse generated multiple returns.