TEST(LasReaderTest, IgnoreVLRs) { PointTable table; Options readOps; readOps.add("filename", Support::datapath("las/lots_of_vlr.las")); readOps.add("ignore_vlr", "Merrick"); LasReader reader; reader.setOptions(readOps); reader.prepare(table); PointViewSet viewSet = reader.execute(table); // First two VLRs are SRS info, the other 388 would be // Merrick ones that we want to ignore/remove MetadataNode root = reader.getMetadata(); for (size_t i = 2; i < 390; ++i) { std::string name("vlr_"); name += std::to_string(i); MetadataNode m = root.findChild(name); EXPECT_FALSE(!m.empty()) << "No node " << i; m = m.findChild("data"); EXPECT_FALSE(!m.empty()) << "No value for node " << i; } }
TEST(LasReaderTest, test_vlr) { PointTable table; Options ops1; ops1.add("filename", Support::datapath("las/lots_of_vlr.las")); LasReader reader; reader.setOptions(ops1); reader.prepare(table); reader.execute(table); MetadataNode root = reader.getMetadata(); for (size_t i = 0; i < 390; ++i) { std::string name("vlr_"); name += std::to_string(i); MetadataNode m = root.findChild(name); EXPECT_TRUE(!m.value().empty()) << "No node " << i; } }
TEST(LasWriterTest, fix1063_1064_1065) { std::string outfile = Support::temppath("out.las"); std::string infile = Support::datapath("las/test1_4.las"); FileUtils::deleteFile(outfile); std::string cmd = "pdal translate --writers.las.forward=all " "--writers.las.a_srs=\"EPSG:4326\" " + infile + " " + outfile; std::string output; Utils::run_shell_command(Support::binpath(cmd), output); Options o; o.add("filename", outfile); LasReader r; r.setOptions(o); PointTable t; r.prepare(t); PointViewSet s = r.execute(t); EXPECT_EQ(s.size(), 1u); PointViewPtr v = *s.begin(); EXPECT_EQ(v->size(), 1000u); // https://github.com/PDAL/PDAL/issues/1063 for (PointId idx = 0; idx < v->size(); ++idx) EXPECT_EQ(8, v->getFieldAs<int>(Dimension::Id::ClassFlags, idx)); // https://github.com/PDAL/PDAL/issues/1064 MetadataNode m = r.getMetadata(); m = m.findChild("global_encoding"); EXPECT_EQ(17, m.value<int>()); // https://github.com/PDAL/PDAL/issues/1065 SpatialReference ref = v->spatialReference(); std::string wkt = "GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]"; EXPECT_EQ(ref.getWKT(), wkt); }
TEST(Random, extra_ops) { std::string outfile(Support::temppath("out.las")); const std::string cmd = appName() + " --count=100 --writers.las.minor_version=3 " + outfile; FileUtils::deleteFile(outfile); std::string output; Utils::run_shell_command(cmd, output); Options o; o.add("filename", outfile); PointTable t; LasReader r; r.setOptions(o); r.prepare(t); MetadataNode n = r.getMetadata(); EXPECT_EQ(n.findChild("minor_version").value<uint8_t>(), 3); }
// 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); }