filters.julia#

The Julia Filter allows Julia software to be embedded in a Pipeline that allows modification of PDAL points through a TypedTables datatype.

The supplied julia function must take a TypedTables FlexTable as an argument and return the same object (with modifications).

Warning

The returned Table contains all the Dimensions of the incoming ins Table

Dynamic Plugin

This stage requires a dynamic plugin to operate

 module MyModule
   using TypedTables

   function multiply_z(ins)
     for n in 1:length(ins)
       ins[n] = merge(ins[n], (; :Z => row.Z * 10.0)
     end
     return ins
   end
 end


If you want write a dimension that might not be available, you can specify
it with the add_dimension_ option:

  ::

      "add_dimension": "NewDimensionOne"

To create more than one dimension, this option also accepts an array:

  ::

      "add_dimension": [ "NewDimensionOne", "NewDimensionTwo", "NewDimensionThree" ]


You can also specify the :ref:`type <types>` of the dimension using an ``=``.
  ::

      "add_dimension": "NewDimensionOne=uint8"

Filter Example#

[
    "file-input.las",
    {
        "type":"filters.smrf"
    },
    {
        "type":"filters.julia",
        "script":"filter_z.jl",
        "function":"filter_z",
        "module":"MyModule"
    },
    {
        "type":"writers.las",
        "filename":"file-filtered.las"
    }
]

The JSON pipeline file referenced the external filter_z.jl Julia script, which removes points with the Z coordinate by less than 420.

module MyModule
  using TypedTables

  function filter_z(ins)
    return filter(p -> p.Z > 420, ins)
  end
end

Modification Example#

[
    "file-input.las",
    {
        "type":"filters.smrf"
    },
    {
        "type":"filters.julia",
        "script":"multiply_z.jl",
        "function":"multiply_z",
        "module":"MyModule"
    },
    {
        "type":"writers.las",
        "filename":"file-modified.las"
    }
]

The JSON pipeline file referenced the external multiply_z.jl Julia script, which scales the Z coordinate by a factor of 10.

module MyModule
  using TypedTables

  function multiply_z(ins)
    for n in 1:length(ins)
      ins[n] = merge(ins[n], (; :Z => row.Z * 10.0)
    end
    return ins
  end
end

Options#

script

When reading a function from a separate Julia file, the file name to read from.

source

The literal Julia code to execute, when the script option is not being used.

module

The Julia module that is holding the function to run. [Required]

function

The function to call. [Required]

add_dimension

A dimension name or an array of dimension names to add to the pipeline that do not already exist.

where

An expression that limits points passed to a filter. Points that don’t pass the expression skip the stage but are available to subsequent stages in a pipeline. [Default: no filtering]

where_merge

A strategy for merging points skipped by a where option when running in standard mode. If true, the skipped points are added to the first point view returned by the skipped filter. If false, skipped points are placed in their own point view. If auto, skipped points are merged into the returned point view provided that only one point view is returned and it has the same point count as it did when the filter was run. [Default: auto]