test_that("horizontal and vertical units are resolved separately", { horizontal <- display_unit_info(sf::st_crs(2277)) expect_false(horizontal$known) expect_match(horizontal$note, "source Z: unknown", fixed = TRUE) mixed <- display_unit_info(sf::st_crs("EPSG:26917+6360")) expect_true(mixed$known) expect_equal(mixed$factors, c(1, 1, 1200/3937), tolerance=1e-12) metres <- display_unit_info(sf::st_crs("EPSG:26917+5703")) expect_equal(metres$factors, c(1,1,1)) expect_true(metres$known) }) test_that("international feet and US survey feet keep their distinct factors", { p <- data.frame(X=1000, Y=2000, Z=100, Classification=2L, Intensity=400L) units <- display_unit_info(sf::st_crs(2277), z_units="ft") converted <- scale_display_points(p, units) expect_equal(converted$X,1000*1200/3937) expect_equal(converted$Z,30.48) expect_identical(converted$Classification,p$Classification) expect_identical(converted$Intensity,p$Intensity) expect_equal(p$Z,100) unknown <- display_unit_info(sf::st_crs(NA)) expect_false(unknown$known) expect_equal(scale_display_points(p,unknown),p) explicit <- display_unit_info(sf::st_crs(NA),"ft","us-ft") expect_true(explicit$known) expect_match(explicit$note,"user confirmed",fixed=TRUE) expect_false(display_unit_info(sf::st_crs(4326),"m","m")$known) }) test_that("file previews convert display samples without modifying the original LAS", { skip_if_not_installed("lidR") p <- data.frame(X=c(3000000,3000010,3000020),Y=c(10000000,10000010,10000020),Z=c(10,20,30)) las <- lidR::LAS(p) sf::st_crs(las) <- sf::st_crs(2277) path <- tempfile(fileext=".las"); on.exit(unlink(path)) lidR::writeLAS(las,path) original <- tools::md5sum(path) result <- read_preview(path,z_units="ft") expect_identical(attr(result,"units"),"m") expect_equal(result$Z+attr(result,"origin")[["Z"]],p$Z*.3048,tolerance=1e-6) expect_equal(result$X+attr(result,"origin")[["X"]],p$X*1200/3937,tolerance=1e-6) expect_identical(tools::md5sum(path),original) unknown <- read_forest_preview(path,percent=100) expect_match(attr(unknown,"units"),"unverified") expect_error(read_forest_preview(path,percent=100,voxel=1),"Confirm horizontal") expect_error(read_comparison_cloud(path,sf::st_sf(geometry=sf::st_as_sfc(sf::st_bbox(c(xmin=2999900,ymin=9999900,xmax=3000100,ymax=10000100),crs=2277)))),"known horizontal and elevation units") roi <- sf::st_sf(geometry=sf::st_as_sfc(sf::st_bbox(c(xmin=2999900,ymin=9999900,xmax=3000100,ymax=10000100),crs=2277))) compared <- read_comparison_cloud(path,roi,z_units="ft") expect_equal(compared$points$Z,p$Z*.3048,tolerance=1e-6) expect_equal(compared$points$X,p$X*1200/3937,tolerance=1e-6) expect_match(compared$units_note,"scaled to metres",fixed=TRUE) })