Ya que has etiquetado R, aquí hay una solución en R. Es mejor no asumir que hay una columna que representa el área, por lo que estoy tirando de la ranura polygon@area. En el(los) bucle(s) puedes notar una forma interesante de sacar los valores de una columna específica basada en la indexación de una columna diferente.
Este código añadirá las columnas "pVeg" y "pVeg5" a la clase de características del polígono de sus parcelas. La columna pVeg representa el porcentaje de toda la vegetación en la parcela y "pVeg5" es el porcentaje <= 5m.
require(sp)
require(rgdal)
# SET WORKING DIRECTORY AND READ DATA
setwd("D:/TMP/vegplots")
plots <- readOGR(getwd(), "plots")
veg <- readOGR(getwd(), "veg_in_plots")
# ASSOCIATE PLOT IDS TO VEG DATA
veg@data <- data.frame(veg@data, LocCode=over(veg, plots[,"LocCode"]))
# CALCULATE POLYGON AREAS AND ADD TO DATA
plots@data <- data.frame(plots@data, pArea=sapply(slot(plots, 'polygons'), function(i) slot(i, 'area')))
veg@data <- data.frame(veg@data, vArea=sapply(slot(veg, 'polygons'), function(i) slot(i, 'area')))
# CALCULATE PERCENT VEG AREA IN EACH PLOT AND ADD TO "plots" data.frame
varea <- vector()
for(i in 1:dim(plots)[1]) {
varea <- append(varea, sum(veg[veg$LocCode == plots@data[i,]$LocCode ,]$vArea) )
}
plots@data <- data.frame(plots@data, pVeg=varea / plots@data$pArea * 100)
# CALCULATE PERCENT VEG AREA <= 5m IN EACH PLOT AND ADD TO "plots" data.frame
vsub <- veg[veg$vArea <= 5 ,]
varea5 <- vector()
for(i in 1:dim(plots)[1]) {
varea5 <- append(varea5, sum(vsub[vsub$LocCode == plots@data[i,]$LocCode ,]$vArea) )
}
plots@data <- data.frame(plots@data, pVeg5=varea5 / plots@data$pArea * 100)
writeOGR(plots, getwd(), "VegPercents", driver="ESRI Shapefile")