// Test auto scale/offset for streaming mode. TEST(LasWriterTest, issue1940) { StageFactory f; Stage& r = *(f.createStage("readers.faux")); Options ro; ro.add("mode", "constant"); ro.add("bounds", "([55,55],[55,55],[55,55])"); ro.add("count", 20); r.addOptions(ro); LasWriter w; Options wo; //LogPtr log(new Log("TEST", &std::clog)); //log->setLevel((LogLevel)5); //w.setLog(log); wo.add("filename", Support::temppath("out.las")); wo.add("scale_x", "auto"); wo.add("offset_y", "auto"); w.addOptions(wo); w.setInput(r); FixedPointTable t(100); w.prepare(t); w.execute(t); LasTester tester; LasHeader *h = tester.header(w); EXPECT_DOUBLE_EQ(h->offsetX(), 0); EXPECT_DOUBLE_EQ(h->offsetY(), 55); EXPECT_DOUBLE_EQ(h->scaleX(), 1.0); EXPECT_DOUBLE_EQ(h->scaleY(), .01); }
TEST(LasWriterTest, oversize_vlr) { LasWriter w; Options o; o.add("filename", "out.las"); w.addOptions(o); PointTable t; w.prepare(t); std::vector<uint8_t> data(100000, 32); LasTester tester; EXPECT_THROW( tester.addVlr(w, "USER ID", 555, "This is a description", data), pdal_error); }
TEST(LasWriterTest, forwardvlr) { Options readerOps1; readerOps1.add("filename", Support::datapath("las/lots_of_vlr.las")); LasReader r1; r1.addOptions(readerOps1); std::string testfile = Support::temppath("tmp.las"); FileUtils::deleteFile(testfile); Options writerOps; writerOps.add("forward", "vlr"); writerOps.add("filename", testfile); LasWriter w; w.setInput(r1); w.addOptions(writerOps); PointTable t; w.prepare(t); w.execute(t); Options readerOps; readerOps.add("filename", testfile); LasReader r; r.setOptions(readerOps); PointTable t2; r.prepare(t2); r.execute(t2); MetadataNode forward = t2.privateMetadata("lasforward"); auto pred = [](MetadataNode temp) { return Utils::startsWith(temp.name(), "vlr_"); }; MetadataNodeList nodes = forward.findChildren(pred); EXPECT_EQ(nodes.size(), 388UL); }
// Merge a couple of 1.4 LAS files with point formats 1 and 6. Write the // output with version 3. Verify that you get point format 3 (default), // LAS 1.3 output and other header data forwarded. TEST(LasWriterTest, forward) { Options readerOps1; readerOps1.add("filename", Support::datapath("las/4_1.las")); Options readerOps2; readerOps2.add("filename", Support::datapath("las/4_6.las")); LasReader r1; r1.addOptions(readerOps1); LasReader r2; r2.addOptions(readerOps2); StageFactory sf; Stage *m = sf.createStage("filters.merge"); m->setInput(r1); m->setInput(r2); std::string testfile = Support::temppath("tmp.las"); FileUtils::deleteFile(testfile); Options writerOps; writerOps.add("forward", "header"); writerOps.add("minor_version", 3); writerOps.add("filename", testfile); LasWriter w; w.setInput(*m); w.addOptions(writerOps); PointTable t; w.prepare(t); w.execute(t); Options readerOps; readerOps.add("filename", testfile); LasReader r; r.setOptions(readerOps); PointTable t2; r.prepare(t2); r.execute(t2); MetadataNode n1 = r.getMetadata(); EXPECT_EQ(n1.findChild("major_version").value<uint8_t>(), 1); EXPECT_EQ(n1.findChild("minor_version").value<uint8_t>(), 3); EXPECT_EQ(n1.findChild("dataformat_id").value<uint8_t>(), 3); EXPECT_EQ(n1.findChild("filesource_id").value<uint8_t>(), 0); // Global encoding doesn't match because 4_1.las has a bad value, so we // get the default. EXPECT_EQ(n1.findChild("global_encoding").value<uint16_t>(), 0); EXPECT_EQ(n1.findChild("project_id").value<Uuid>(), Uuid()); EXPECT_EQ(n1.findChild("system_id").value(), ""); EXPECT_EQ(n1.findChild("software_id").value(), "TerraScan"); EXPECT_EQ(n1.findChild("creation_doy").value<uint16_t>(), 142); EXPECT_EQ(n1.findChild("creation_year").value<uint16_t>(), 2014); }