void BpfWriter::loadBpfDimensions(PointLayoutPtr layout) { // Verify that we have X, Y and Z and that they're the first three // dimensions. Dimension::IdList dims = layout->dims(); std::sort(dims.begin(), dims.end()); if (dims.size() < 3 || dims[0] != Dimension::Id::X || dims[1] != Dimension::Id::Y || dims[2] != Dimension::Id::Z) { throw pdal_error("Missing one of dimensions X, Y or Z. " "Can't write BPF."); } for (auto id : dims) { BpfDimension dim; dim.m_id = id; dim.m_label = layout->dimName(id); m_dims.push_back(dim); } }
void BpfWriter::loadBpfDimensions(PointLayoutPtr layout) { Dimension::IdList dims; if (m_outputDims.size()) { for (std::string& s : m_outputDims) { Dimension::Id::Enum id = layout->findDim(s); if (id == Dimension::Id::Unknown) { std::ostringstream oss; oss << "Invalid dimension '" << s << "' specified for " "'output_dims' option."; throw pdal_error(oss.str()); } dims.push_back(id); } } else dims = layout->dims(); // Verify that we have X, Y and Z and that they're the first three // dimensions. std::sort(dims.begin(), dims.end()); if (dims.size() < 3 || dims[0] != Dimension::Id::X || dims[1] != Dimension::Id::Y || dims[2] != Dimension::Id::Z) { throw pdal_error("Missing one of dimensions X, Y or Z. " "Can't write BPF."); } for (auto id : dims) { BpfDimension dim; dim.m_id = id; dim.m_label = layout->dimName(id); m_dims.push_back(dim); } }
TEST_F(PgpointcloudWriterTest, writeXYZ) { if (shouldSkipTests()) { return; } Options ops = getDbOptions(); ops.add("output_dims", "X,Y,Z"); optionsWrite(ops); PointTable table; StageFactory factory; Stage* reader(factory.createStage("readers.pgpointcloud")); reader->setOptions(getDbOptions()); reader->prepare(table); Dimension::IdList dims = table.layout()->dims(); EXPECT_EQ(dims.size(), (size_t)3); EXPECT_TRUE(Utils::contains(dims, Dimension::Id::X)); EXPECT_TRUE(Utils::contains(dims, Dimension::Id::Y)); EXPECT_TRUE(Utils::contains(dims, Dimension::Id::Z)); }