@@ -79,6 +79,90 @@ struct TIndexReader::Args
79
79
NL::json m_readerArgs;
80
80
};
81
81
82
+ namespace
83
+ {
84
+
85
+ NL::json handleReaderArgs (NL::json rawReaderArgs)
86
+ {
87
+ if (rawReaderArgs.is_object ())
88
+ {
89
+ NL::json array_args = NL::json::array ();
90
+ array_args.push_back (rawReaderArgs);
91
+ rawReaderArgs = array_args;
92
+ }
93
+ for (auto & opts: rawReaderArgs)
94
+ if (!opts.is_object ())
95
+ throw pdal_error (" Reader Args for each reader must be a valid JSON object" );
96
+
97
+ NL::json readerArgs;
98
+ for (NL::json& readerPipeline: rawReaderArgs)
99
+ {
100
+
101
+ if (!readerPipeline.contains (" type" ))
102
+ throw pdal_error (" No \" type\" key found in supplied reader arguments." );
103
+
104
+ std::string driver = readerPipeline.at (" type" ).get <std::string>();
105
+ if (rawReaderArgs.contains (driver))
106
+ throw pdal_error (" Multiple instances of the same driver in supplied reader arguments." );
107
+ readerArgs[driver] = { };
108
+
109
+ for (auto & arg: readerPipeline.items ())
110
+ {
111
+ if (arg.key () == " type" )
112
+ continue ;
113
+
114
+ std::string key = arg.key ();
115
+ readerArgs[driver][key] = { };
116
+ readerArgs[driver][key] = arg.value ();
117
+ }
118
+ }
119
+ return readerArgs;
120
+ }
121
+
122
+ Options setReaderOptions (const NL::json& readerArgs, const std::string& driver)
123
+ {
124
+ Options readerOptions;
125
+ if (readerArgs.contains (driver)) {
126
+ NL::json args = readerArgs.at (driver).get <NL::json>();
127
+ for (auto & arg : args.items ()) {
128
+ NL::detail::value_t type = readerArgs.at (driver).at (arg.key ()).type ();
129
+ switch (type)
130
+ {
131
+ case NL::detail::value_t ::string:
132
+ {
133
+ std::string val = arg.value ().get <std::string>();
134
+ readerOptions.add (arg.key (), arg.value ().get <std::string>());
135
+ break ;
136
+ }
137
+ case NL::detail::value_t ::number_float:
138
+ {
139
+ readerOptions.add (arg.key (), arg.value ().get <float >());
140
+ break ;
141
+ }
142
+ case NL::detail::value_t ::number_integer:
143
+ {
144
+ readerOptions.add (arg.key (), arg.value ().get <int >());
145
+ break ;
146
+ }
147
+ case NL::detail::value_t ::boolean:
148
+ {
149
+ readerOptions.add (arg.key (), arg.value ().get <bool >());
150
+ break ;
151
+ }
152
+ default :
153
+ {
154
+ readerOptions.add (arg.key (), arg.value ());
155
+ break ;
156
+ }
157
+ }
158
+ }
159
+ }
160
+
161
+ return readerOptions;
162
+ }
163
+
164
+ } // unnamed namespace
165
+
82
166
TIndexReader::TIndexReader () :
83
167
m_args (new TIndexReader::Args),
84
168
m_dataset (nullptr ),
@@ -354,97 +438,10 @@ void TIndexReader::ready(PointTableRef table)
354
438
StageWrapper::ready (m_merge, table);
355
439
}
356
440
357
-
358
441
PointViewSet TIndexReader::run (PointViewPtr view)
359
442
{
360
443
return StageWrapper::run (m_merge, view);
361
444
}
362
445
363
- NL::json TIndexReader::handleReaderArgs (NL::json rawReaderArgs)
364
- {
365
-
366
- if (rawReaderArgs.is_object ())
367
- {
368
- NL::json array_args = NL::json::array ();
369
- array_args.push_back (rawReaderArgs);
370
- rawReaderArgs = array_args;
371
- }
372
- for (auto & opts: rawReaderArgs)
373
- if (!opts.is_object ())
374
- throw pdal_error (" Reader Args for each reader must be a valid JSON object" );
375
-
376
- NL::json readerArgs;
377
- for (NL::json& readerPipeline: rawReaderArgs)
378
- {
379
-
380
- if (!readerPipeline.contains (" type" ))
381
- throw pdal_error (" No \" type\" key found in supplied reader arguments." );
382
-
383
- std::string driver = readerPipeline.at (" type" ).get <std::string>();
384
- log ()->get (LogLevel::Debug2) << " Gathering reader_args for reader of type " << driver << std::endl;
385
- if (rawReaderArgs.contains (driver))
386
- throw pdal_error (" Multiple instances of the same driver in supplied reader arguments." );
387
- readerArgs[driver] = { };
388
-
389
- for (auto & arg: readerPipeline.items ())
390
- {
391
-
392
- if (arg.key () == " type" )
393
- continue ;
394
-
395
- std::string key = arg.key ();
396
- readerArgs[driver][key] = { };
397
- readerArgs[driver][key] = arg.value ();
398
- }
399
- }
400
- return readerArgs;
401
- }
402
-
403
-
404
- Options TIndexReader::setReaderOptions (const NL::json& readerArgs, const std::string& driver) const
405
- {
406
- Options readerOptions;
407
- if (readerArgs.contains (driver)) {
408
- NL::json args = readerArgs.at (driver).get <NL::json>();
409
- for (auto & arg : args.items ()) {
410
- NL::detail::value_t type = readerArgs.at (driver).at (arg.key ()).type ();
411
- switch (type)
412
- {
413
- case NL::detail::value_t ::string:
414
- {
415
- std::string val = arg.value ().get <std::string>();
416
- readerOptions.add (arg.key (), arg.value ().get <std::string>());
417
- break ;
418
- }
419
- case NL::detail::value_t ::number_float:
420
- {
421
- readerOptions.add (arg.key (), arg.value ().get <float >());
422
- break ;
423
- }
424
- case NL::detail::value_t ::number_integer:
425
- {
426
- readerOptions.add (arg.key (), arg.value ().get <int >());
427
- break ;
428
- }
429
- case NL::detail::value_t ::boolean:
430
- {
431
- readerOptions.add (arg.key (), arg.value ().get <bool >());
432
- break ;
433
- }
434
- default :
435
- {
436
- readerOptions.add (arg.key (), arg.value ());
437
- break ;
438
- }
439
- }
440
- }
441
- }
442
-
443
- return readerOptions;
444
- }
445
-
446
-
447
-
448
-
449
446
} // namespace pdal
450
447
0 commit comments