[pdal] How to invoke my custom writer?

Pete Gadomski pete.gadomski at gmail.com
Tue Jul 11 08:22:17 PDT 2017


> If you're using cmake, you can use the PDAL build to generate the shared library for you.  Here's an example plugin:

Sorry, I'll correct that link:
https://github.com/PDAL/PDAL/tree/master/plugins/cpd

Andrew's original link was the CPD project itself, not the PDAL plugin.

Cheers,
Pete

On Tue, Jul 11, 2017 at 9:16 AM, Andrew Bell <andrew.bell.ia at gmail.com> wrote:
> You need to build your writer (a plugin) into a shared object that can be
> loaded by the plugin manager.  It needs to be called
> libpdal_plugin_writer_PdalVectorMapWriter.<your shared library extension>.
> The shared library needs to be located somewhere that the plugin manager can
> find it.  By default, PDAL will look in the following directories for
> plugins:
>
> ".", "./lib", "../lib", "./bin", "../bin"
>
> If you're using cmake, you can use the PDAL build to generate the shared
> library for you.  Here's an example plugin:
>
> https://github.com/gadomski/cpd.git
>
> Note that you don't have to do ANY of this if you're not using the
> pipeline/plugin manager to run your writer from a JSON pipeline.  If you're
> executing code programmatically, you can simply add your writer to the end
> of a pipeline and call prepare() and execute() on the pipeline that you've
> created in code.
>
>
> On Tue, Jul 11, 2017 at 10:59 AM, Paul Schrum <paul.schrum at gmail.com> wrote:
>>
>> Thank you Andrew.
>>
>> In the cpp file containing the class, I have the following lines:
>>
>>   static PluginInfo const s_info = PluginInfo(
>>     "writers.PdalVectorMapWriter",
>>     "Custom Writer to write a GRASS Vector Map",
>>     "http://no/documentation/yet" );
>>
>>   CREATE_SHARED_PLUGIN(1, 0, PdalVectorMapWriter, Writer, s_info);
>>
>> So would the only other thing I need to do be to tell pdal where to find
>> the class?  I don't have to instantiate the class and pass it the instance?
>>
>> The class lives in my GRASS executable, v.in.pdal.  How do I tell pdal to
>> append PDAL_DRIVER_PATH with v.in.pdal's path, and is that sufficient?
>>
>> I see in https://github.com/PDAL/PDAL/tree/master/plugins that these are
>> built using CMake.  But GRASS uses make, so I don't know how to make these
>> work together.  Is it not possible for me simply to pass an instance of my
>> class to some kind of pdal->registerPlugIn() function or something similar
>> which happens at runtime?
>>
>> - Paul
>>
>>
>> On Mon, Jul 10, 2017 at 7:56 PM, Andrew Bell <andrew.bell.ia at gmail.com>
>> wrote:
>>>
>>> You need to build your writer as a shared plugin and make sure that the
>>> dll/so that you create is in a folder where the plugin manager will look for
>>> it (or set PDAL_DRIVER_PATH).  Take a look at one of the existing plugins in
>>> the "plutgins" subdirectory of pdal.  Let me know if you need more help.
>>>
>>> On Mon, Jul 10, 2017 at 5:11 PM, Paul Schrum <paul.schrum at gmail.com>
>>> wrote:
>>>>
>>>> I am developing a custom PDAL writer for my GSoC project. (Link)  Source
>>>> Code is on github.  The module compiles, but it is an intermediate state
>>>> since I am in the process of developing it.
>>>>
>>>> I have the custom writer, PdalVectorMapWriter,  inheriting from writer
>>>> and it compiles okay.  Currently all functions just print out their own name
>>>> and return.
>>>>
>>>> In main.cpp I create the pipeline json string and create a
>>>> PipelineExecutor with it.  I then call pipeline-> validate.  This throws an
>>>> exception stating
>>>>
>>>> terminate called after throwing an instance of 'pdal::pdal_error'
>>>>   what():  Couldn't create writer stage of type
>>>> 'writers.PdalVectorMapWriter'.
>>>>
>>>> So I am thinking that I need somehow to inform Pdal about an instance of
>>>> the class.  But as I go over the Pdal documentation, I do not see how to do
>>>> that.  Can someone help me understand what I need to do?
>>>>
>>>> - Paul
>>>>
>>>> Here is a key code snippet:
>>>> 81    std::string pipeline_json =
>>>> 82            pipelineJson::basicVectorMapReaderWriter(inFile,outFile);
>>>> 83
>>>> 84    cout << pipeline_json << endl;  //diagnostic only
>>>> 85    cout << endl;
>>>> 86    G_important_message(_("Running the pipeline ..."));
>>>> 87    auto pipeline = new pdal::PipelineExecutor(pipeline_json);
>>>> 88
>>>> 87    cout << "is valid?  " << pipeline->validate() << endl;
>>>>
>>>> Line 87 throws the exception.
>>>>
>>>>
>>>> Here is the json string being passed to the PipelineExecutor
>>>> constructor:
>>>>
>>>> { "pipeline":[
>>>>
>>>> "/home/user/Desktop/ALL/SourceModules/cpp/grass7_trunk/vector/v.in.pdal/testFiles/100-points.las",
>>>> {
>>>>    "type":"writers.PdalVectorMapWriter",
>>>>    "filename":"100-points"
>>>> }
>>>>  ]
>>>> }
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> pdal mailing list
>>>> pdal at lists.osgeo.org
>>>> https://lists.osgeo.org/mailman/listinfo/pdal
>>>
>>>
>>>
>>>
>>> --
>>> Andrew Bell
>>> andrew.bell.ia at gmail.com
>>
>>
>
>
>
> --
> Andrew Bell
> andrew.bell.ia at gmail.com
>
> _______________________________________________
> pdal mailing list
> pdal at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/pdal


More information about the pdal mailing list