5 votos

Calculando el porcentaje de cobertura de los archivos de forma

Normalmente no trabajo con archivos de formas, así que estoy un poco perdido aquí. Tengo dos archivos de formas, cada uno con múltiples objetos. El primero es un conjunto de 32 polígonos (cada uno es un gráfico). El segundo archivo de forma tiene más de 10.000 objetos que representan grupos de vegetación de diferentes tamaños dentro de cada parcela. Estoy tratando de averiguarlo:

1) ¿Cómo calculo el porcentaje de cobertura de la vegetación total dentro de cada sitio?

2) ¿Qué porcentaje de cada una de las cubiertas vegetales tiene menos de 5 metros de área en cada parcela?

Así es como se ven mis datos en ArcGIS para una sola trama. También estoy abierto a consejos sobre cómo hacer esto en ArcGIS.

Este enlace te llevará a los archivos de formas de mi buzón: https://www.dropbox.com/sh/wyokxximppexyb3/p7VC-pfF2E

enter image description here

12voto

Dave Haynes Puntos 999

Las partes para el paso tres en la primera respuesta se describen como gráficos a continuación. Esto es lo que quieres hacer:

 a) Have three attributes in the vegetation poly (a SiteID [Floor], area of the veg poly [Area], area of the associated site [SiteArea]
 b) Dissolve the vegetation polygon on the SiteID [Floor].  Calculate statistics on:
      i)  Area = SUM
      ii) SiteArea = FIRST
 c) Add a new field to the dissolved polygon [PercentCov] (Double 6,2)
 d) Calculate the cover in PercentCov with the following expression ([SUM_Area] / [FIRST_Site] * 100

enter image description here

5voto

Dan Puntos 16

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")

3voto

Nick Puntos 3115

El área es un atributo de los polígonos. Para verlo, es posible que tenga que crear un campo en su tabla de atributos para mantener el valor y calcularlo (véase aquí ).

A continuación, puede realizar una unión espacial de la cubierta vegetal en las parcelas. Cuando lo haga, establezca el parámetro reglas de fusión en la asignación de campos a SUM para su área. Parece que algunas de sus áreas de cobertura vegetal cruzan los límites de la parcela, por lo que es posible que tenga que recortar las áreas de cobertura vegetal (pero usted conocerá sus datos mejor que yo). Calcular el porcentaje de cobertura es entonces una cuestión fácil de dividir la suma del campo de las áreas de vegetación por el área de la parcela. Puede crear otro campo y hacer que Arc haga el cálculo de una sola vez para todas las parcelas.

Una solución sencilla para la segunda parte de su consulta sería repetir el proceso pero preseleccionando los polígonos de la cubierta vegetal con una superficie (su nuevo campo) inferior a 5m.

3voto

Dave Haynes Puntos 999

Tendrás que hacer lo siguiente:

 1) Calculate the area for each veg polygon (using the Field Calculator)
 2) Have an attribute in the veg poly table to references the Site areas
      a) If you don't have that, do a spatial join with the Site poly that you have in your graphic (also calculate the area for each Site poly)
 3) Dissolve the spatial join veg polygon on the Site ID, at the same time add statistics to the get the SUM
 4) Calculate the percent cover into a new attribute field by dividing the sum of site veg poly, with the area of the site

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X