Remove polygon holes
The function removes all polygon holes and return the modified layer
st_remove_holes(x, max_area = 0)
x |
Object of class |
max_area |
Maximum area of holes to be removed ( |
Object of same class as x
, with holes removed
See function sfheaders::st_remove_holes
for highly-optimized faster alternative:
Following the StackOverflow answer by user lbusett
:
opar = par(mfrow = c(1, 2)) # Example with 'sfg' - POLYGON p1 = rbind(c(0,0), c(1,0), c(3,2), c(2,4), c(1,4), c(0,0)) p2 = rbind(c(1,1), c(1,2), c(2,2), c(1,1)) pol = st_polygon(list(p1, p2)) pol result = st_remove_holes(pol) result plot(pol, col = "#FF000033", main = "Before") plot(result, col = "#FF000033", main = "After") # Example with 'sfg' - MULTIPOLYGON p3 = rbind(c(3,0), c(4,0), c(4,1), c(3,1), c(3,0)) p4 = rbind(c(3.3,0.3), c(3.8,0.3), c(3.8,0.8), c(3.3,0.8), c(3.3,0.3))[5:1,] p5 = rbind(c(3,3), c(4,2), c(4,3), c(3,3)) mpol = st_multipolygon(list(list(p1,p2), list(p3,p4), list(p5))) mpol result = st_remove_holes(mpol) result plot(mpol, col = "#FF000033", main = "Before") plot(result, col = "#FF000033", main = "After") # Example with 'sfc' - POLYGON x = st_sfc(pol, pol * 0.75 + c(3.5, 2)) x result = st_remove_holes(x) result plot(x, col = "#FF000033", main = "Before") plot(result, col = "#FF000033", main = "After") # Example with 'sfc' - MULTIPOLYGON x = st_sfc(pol, mpol * 0.75 + c(3.5, 2)) x result = st_remove_holes(x) result plot(x, col = "#FF000033", main = "Before") plot(result, col = "#FF000033", main = "After") par(opar) # Example with 'sf' x = st_sfc(pol, mpol * 0.75 + c(3.5, 2)) x = st_sf(geom = x, data.frame(id = 1:length(x))) result = st_remove_holes(x) result plot(x, main = "Before") plot(result, main = "After") # Example with 'sf' using argument 'max_area' x = st_sfc(pol, mpol * 0.75 + c(3.5, 2)) x = st_sf(geom = x, data.frame(id = 1:length(x))) result = st_remove_holes(x, max_area = 0.4) result plot(x, main = "Before") plot(result, main = "After")
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.