Tôi đã gặp phải tất cả các vấn đề khi sử dụng ArcGIS ZonalStats và nghĩ rằng R có thể là một cách tuyệt vời. Nói rằng tôi khá mới với R, nhưng có nền tảng mã hóa.
Tình huống là tôi có một số raster và một shapefile đa giác với nhiều tính năng có kích thước khác nhau (mặc dù tất cả các tính năng đều lớn hơn một ô raster và các tính năng đa giác được căn chỉnh theo raster). Tôi đã tìm ra cách lấy giá trị trung bình cho từng tính năng đa giác bằng thư viện raster với trích xuất:
#load packages required
require(rgdal)
require(sp)
require(raster)
# ---Set the working directory-------
datdir <- "/test_data/"
#Read in grid of water depth
ras <- raster("test_data/raster/pl_sm_rp1000/w001001.adf")
#read in polygon shape file
proxNA <- shapefile("test_data/proxy/PL_proxy_WD_NA_test")
#calc mean depth per polygon feature
#unweighted - only assigns grid to district if centroid is in that district
proxNA$RP1000 <- extract(ras, proxNA, fun = mean, na.rm = TRUE, weights = FALSE)
#plot depth values
spplot(proxNA[,'RP1000'])
Vấn đề tôi có là tôi cũng cần một tỷ lệ dựa trên diện tích giữa diện tích của đa giác và tất cả các ô không NA trong cùng một đa giác. Tôi biết kích thước ô của raster là bao nhiêu và tôi có thể lấy diện tích cho mỗi đa giác, nhưng liên kết bị thiếu là số lượng của tất cả các ô không NA trong mỗi tính năng. Tôi đã quản lý để có được số ô của tất cả các ô trong đa giác proxNA@data$Cnumb1000 <- cellFromPolygon(ras, proxNA)
và tôi chắc chắn có một cách để lấy giá trị thực của ô raster, sau đó yêu cầu một vòng lặp để lấy số của tất cả các ô không NA kết hợp với một số đếm, vv NHƯNG, tôi chắc chắn có một cách tốt hơn và nhanh hơn để làm điều đó! Nếu bất kỳ ai trong số các bạn có ý tưởng hoặc có thể chỉ cho tôi đi đúng hướng, tôi sẽ rất biết ơn!
ras
giữ cờ NA sử dụng giá trị hợp pháp? Có vẻ như bạn có thể lọc giá trị đó hoặc lấy số lượng các giá trị đó sau thực tế.