Saya telah mengalami berbagai masalah menggunakan ArcGIS ZonalStats dan berpikir R bisa menjadi cara yang hebat. Mengatakan bahwa saya cukup baru untuk R, tetapi mendapat latar belakang pengkodean.
Situasinya adalah bahwa saya memiliki beberapa raster dan poligon bentuk dengan banyak fitur ukuran yang berbeda (meskipun semua fitur lebih besar dari sel raster dan fitur poligon disejajarkan dengan raster). Saya telah menemukan cara untuk mendapatkan nilai rata-rata untuk setiap fitur poligon menggunakan perpustakaan raster dengan ekstrak:
#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'])
Masalah yang saya miliki adalah bahwa saya juga membutuhkan rasio berbasis area antara area poligon dan semua sel non NA dalam poligon yang sama. Saya tahu apa ukuran sel raster itu dan saya bisa mendapatkan luas untuk setiap poligon, tetapi tautan yang hilang adalah jumlah semua sel non-NA di setiap fitur. Saya berhasil mendapatkan nomor sel semua sel dalam poligon proxNA@data$Cnumb1000 <- cellFromPolygon(ras, proxNA)
dan saya yakin ada cara untuk mendapatkan nilai aktual dari sel raster, yang kemudian membutuhkan loop untuk mendapatkan jumlah semua sel non-NA dikombinasikan dengan hitungan, dll. TAPI, saya yakin ada cara yang jauh lebih baik dan lebih cepat untuk melakukan itu! Jika ada di antara Anda yang memiliki ide atau dapat mengarahkan saya ke arah yang benar, saya akan sangat berterima kasih!
ras
memegang bendera NA menggunakan nilai yang sah? Sepertinya Anda bisa memfilter untuk nilai itu atau mendapatkan hitungan dari nilai-nilai itu setelah faktanya.