A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/r-lidar/lidR/issues/728 below:

undocumented clip_roi behaviour with overlapping polygons · Issue #728 · r-lidar/lidR · GitHub

When working with an 'sf' polygon layer where some features overlap, I hadn't realized that the clip_roi function only allocates a point to one of the features in an overlapping group. This isn't mentioned in the function docs and was the cause of unexpected values in downstream calculations (veg cover estimates) before I realized it was happening.

A simple example to reproduce the behaviour...

library(sf)
library(lidR)

# Load a LAS tile
# las <- lidR::readLAS(path)

# Create two overlapping polygons inside the tile bounds
bb <- st_bbox(las)
y <- mean(bb[c("ymin", "ymax")])
w <- bb["xmax"] - bb["xmin"]
x1 <- bb["xmin"] + 0.4*w
x2 <- bb["xmin"] + 0.6*w

pts <- st_sfc(st_point(c(x1, y)), st_point(c(x2, y)), crs = st_crs(las))
polys <- st_buffer(pts, dist = 0.2*w)

poly_las <- clip_roi(las, polys)

# Base R plot of a sample of the points
xyplot <- function(xlas, prop_points = 0.05) {
  xy <- cbind(xlas$X, xlas$Y)
  n <- nrow(xy)
  xy <- xy[sample(n, size=prop_points * n), ]
  plot(xy, asp=c(1,1), pch=16, cex=0.2)
}

xyplot(poly_las[[1]])  # full circle of points for first polygon
xyplot(poly_las[[2]])  # cresent shape (non-overlapping portion) for second polygon

A simple work-around is to run clip_roi via lapply...

poly_las <- lapply(seq_along(polys), function(i) clip_roi(las, polys[[i]] ))

Perhaps it would be good to mention this in the function docs?


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4