MCPcopy Create free account
hub / github.com/PDAL/PDAL / initialize

Method initialize

io/CopcReader.cpp:313–392  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

311
312
313void CopcReader::initialize(PointTableRef table)
314{
315 if (m_args->threads > 100)
316 log()->get(LogLevel::Warning) << "Using a large thread count: " <<
317 m_args->threads << " threads" << std::endl;
318 // Make sure we allow at least as many chunks as we have threads.
319 m_args->keepAliveChunkCount = (std::max)(m_args->threads, (size_t)m_args->keepAliveChunkCount);
320
321 m_p->connector.reset(new connector::Connector(m_filespec));
322
323 MetadataNode forward = table.privateMetadata("lasforward");
324 MetadataNode m = getMetadata();
325
326 // alert consumers that we are a COPC file
327 m.add("copc", true);
328
329 fetchHeader();
330
331 MetadataNode copc_metadata = m.add("copc_info");
332
333 copc_metadata.add("center_x", m_p->copc_info.center_x);
334 copc_metadata.add("center_y", m_p->copc_info.center_y);
335 copc_metadata.add("center_z", m_p->copc_info.center_z);
336 copc_metadata.add("halfsize", m_p->copc_info.halfsize);
337 copc_metadata.add("spacing", m_p->copc_info.spacing);
338 copc_metadata.add("root_hier_offset", m_p->copc_info.root_hier_offset);
339 copc_metadata.add("root_hier_size", m_p->copc_info.root_hier_size);
340 copc_metadata.add("gpstime_minimum", m_p->copc_info.gpstime_minimum);
341 copc_metadata.add("gpstime_maximum", m_p->copc_info.gpstime_maximum);
342 las::extractHeaderMetadata(m_p->header, forward, m);
343
344 using namespace std::placeholders;
345 las::VlrCatalog catalog(std::bind(&CopcReader::fetch, this, _1, _2));
346 catalog.load(las::Header::Size14, m_p->header.vlrCount, m_p->header.evlrOffset,
347 m_p->header.evlrCount);
348 las::Vlr ebVlr = fetchEbVlr(catalog);
349
350 las::VlrList srsVlrs = fetchSrsVlrs(catalog);
351 las::Srs srs;
352 srs.init(srsVlrs, m_args->srsVlrOrder.types, true, log());
353 setSpatialReference(srs.get());
354
355 if (m_args->doVlrs)
356 {
357 int i = 0;
358 // This simply avoids re-requesting the VLR data from a remote source for those
359 // VLRs where we already have data.
360 if (ebVlr.dataSize())
361 las::addVlrMetadata(ebVlr, "vlr_" + std::to_string(i++), forward, m);
362 for (const las::Vlr& vlr : srsVlrs)
363 if (vlr.dataSize())
364 las::addVlrMetadata(vlr, "vlr_" + std::to_string(i++), forward, m);
365
366 las::VlrList ignored = las::parseIgnoreVlrs({});
367 for (const las::VlrCatalog::Entry& e : catalog)
368 {
369 las::Vlr vlr(e.userId, e.recordId);
370 if (las::shouldIgnoreVlr(vlr, ignored) || vlr == ebVlr || Utils::contains(srsVlrs, vlr))

Callers

nothing calls this directly

Calls 15

extractHeaderMetadataFunction · 0.85
addVlrMetadataFunction · 0.85
parseIgnoreVlrsFunction · 0.85
shouldIgnoreVlrFunction · 0.85
ceilFunction · 0.85
privateMetadataMethod · 0.80
dataSizeMethod · 0.80
fetchWithDescriptionMethod · 0.80
logFunction · 0.50
getMetadataFunction · 0.50
setSpatialReferenceFunction · 0.50
containsFunction · 0.50

Tested by

no test coverage detected