Options LasWriter::getDefaultOptions() { Options options; options.add("filename", "", "Name of the file for LAS/LAZ output."); options.add("compression", false, "Do we LASzip-compress the data?"); options.add("format", 3, "Point format to write"); options.add("major_version", 1, "LAS Major version"); options.add("minor_version", 2, "LAS Minor version"); options.add("creation_doy", 0, "Day of Year for file"); options.add("creation_year", 2011, "4-digit year value for file"); LasHeader header; options.add("system_id", header.getSystemIdentifier(), "System ID for this file"); options.add("software_id", GetDefaultSoftwareId(), "Software ID for this file"); options.add("filesource_id", 0, "File Source ID for this file"); options.add("forward_metadata", false, "forward metadata into " "the file as necessary"); options.add("extra_dims", "", "Extra dimensions not part of the LAS " "point format to be added to each point."); return options; }
TEST(LasWriterTest, metadata_options) { Options ops; Option metadataOp("metadata", ""); Options metadataOps; metadataOps.add("format", 4); metadataOps.add("software_id", "MySoftwareId"); metadataOps.add("system_id", "FORWARD"); metadataOps.add("minor_version", "forward"); metadataOp.setOptions(metadataOps); ops.add(metadataOp); ops.add("filename", Support::temppath("wontgetwritten")); LasWriter writer; writer.setOptions(ops); PointTable table; writer.prepare(table); MetadataNode m = writer.getMetadata(); m.add("minor_version", 56); uint8_t format = (uint8_t)LasTester::headerVal<unsigned>(writer, "format"); EXPECT_EQ(format, 4u); std::string softwareId = LasTester::headerVal<std::string>(writer, "software_id"); EXPECT_EQ(softwareId, "MySoftwareId"); std::string systemId = LasTester::headerVal<std::string>(writer, "system_id"); // Since the option specifies forward and there is not associated // metadata, the value should be the default. LasHeader header; EXPECT_EQ(systemId, header.getSystemIdentifier()); // In this case, we should have metadata to override the default. uint8_t minorVersion = (uint8_t)LasTester::headerVal<unsigned>(writer, "minor_version"); EXPECT_EQ(minorVersion, 56u); }
// Get header info from options and store in map for processing with // metadata. void LasWriter::getHeaderOptions(const Options &options) { typedef boost::optional<std::string> OpString; auto metaOptionValue = [this, options](const std::string& name, const::std::string& defVal) { std::string value; OpString opValue = options.getMetadataOption<std::string>(name); if (opValue) { value = *opValue; // The reassignment makes sure the case is correct. if (boost::iequals(value, "FORWARD")) { value = "FORWARD"; value += defVal; } } else value = options.getValueOrDefault(name, defVal); m_headerVals[name] = value; }; std::time_t now; std::time(&now); std::tm* ptm = std::gmtime(&now); uint16_t year = ptm->tm_year + 1900; uint16_t doy = ptm->tm_yday; metaOptionValue("format", "3"); metaOptionValue("minor_version", "2"); metaOptionValue("creation_year", std::to_string(year)); metaOptionValue("creation_doy", std::to_string(doy)); metaOptionValue("software_id", GetDefaultSoftwareId()); LasHeader header; metaOptionValue("system_id", header.getSystemIdentifier()); metaOptionValue("project_id", boost::lexical_cast<std::string>(boost::uuids::uuid())); metaOptionValue("global_encoding", "0"); metaOptionValue("filesource_id", "0"); }