Reclasificación de datos espaciales

1 Conceptualización

En este documento vamos a hacer una reclasificación de datos espaciales de un mapa de coberturas vegetales clasificadas con el sistema Corine Land Cover, para efectos de práctica queremos llevar este sistema al de CORNARE.

Vamos a explicar brevemente en qué consiste cada uno de ellos:

1.1 Corine Land Cover

El sistema Corine Land Cover es un esquema de clasificación estandarizado con 44 clases de cobertura y uso del suelo. Es utilizado por la Agencia Europea del Medio Ambiente para informar sobre cambios de gran escala en la cobertura del suelo con una unidad mínima de mapeo de 5 ha cada seis años y mapeado operacionalmente por sus estados miembros. Por ejemplo, la clase principal 1 es “Áreas urbanas” y tiene 3 subclases: “Áreas urbanas densamente construidas”, “Áreas urbanas medianamente construidas” y “Áreas urbanas escasamente construidas”. La subclase “Áreas urbanas densamente construidas” tiene 2 clases secundarias: “Áreas de alta densidad de edificios” y “Áreas de baja densidad de edificios”. A su vez cada clase presenta subclases, por lo que la clase 1 se divide en 1.1, 1.2, y a su vez estas se dividen en 1.1.1, 1.1.2…

A continuación te presento sus principales categorías:

Categoría Descripción
Áreas urbanas Áreas principalmente ocupadas por viviendas y edificios utilizados por servicios públicos/administrativos, incluyendo sus áreas conectadas (tierras asociadas, red de carreteras de acceso, estacionamientos).
Áreas industriales, comerciales y de transporte Áreas ocupadas por edificios y estructuras relacionadas con la industria, el comercio y el transporte.
Tierras agrícolas Tierras utilizadas para la producción de cultivos agrícolas y pastos.
Bosques y zonas seminaturales Áreas cubiertas por bosques y arbustos naturales o seminaturales.
Zonas húmedas Áreas cubiertas por agua estancada o corriente, con una profundidad máxima de seis metros en su punto más profundo.
Superficies artificiales no agrícolas Áreas cubiertas por superficies artificiales no agrícolas como carreteras, aeropuertos, puertos deportivos y áreas de extracción de minerales.
Zonas descubiertas Áreas sin vegetación permanente.
Glaciares y áreas permanentemente nevadas Áreas cubiertas por hielo y nieve permanentes.

1.2 CORNARE

Por otra parte, el sistema cornare, al ser más antiguo presenta tan sólo 6 categorías:

  • Cultivos limpios: Áreas donde se realizan siembras y desyerbas frecuentes, lo que deja la tierra expuesta la mayor parte del año.
  • Cultivos semilimpios: Áreas donde se establecen cultivos con protección parcial del suelo contra la erosión, y que requieren laboreo y remoción del suelo solo en la fase de establecimiento del cultivo.
  • Pastoreo: Áreas donde se permite el pastoreo de animales, pero se requiere un buen manejo que incluye rotación, limpias y fertilización periódica, así como la asociación con especies leguminosas.
  • Cultivos silvopastoriles: Áreas donde se armoniza el cultivo de árboles con la pastura, permitiendo el pastoreo permanente o rotativo del ganado. No se requiere la remoción frecuente de la tierra.
  • Plantación productora - protectora: Uso que no remueve en forma continua y frecuente la tierra, aunque la deja desprovista de árboles en áreas pequeñas y por periodos relativamente breves donde se ejecuta la tala selectiva; conservando una protección permanente a la tierra por los árboles y la vegetación existente.
  • Uso para Conservación, Protección y/o Manejo Especial: Son aquellos usos que no permiten ningún tipo de intervención sobre el bosque, especialmente en lo que aprovechamiento para madera comercial se refiere. Por lo tanto, son coberturas que deben protegerse y conservarse como están, permitiendo su recuperación espontánea y/o su enriquecimiento a través de un manejo especial controlado, dado su carácter de protectores de nacimientos de agua, santuarios de fauna, bancos genéticos, parques nacionales, bellezas escénicas, áreas declaradas de reserva forestal protectora, entre otras.
  • Otros usos: Son aquellos usos que no se encuentran definidos en ninguna de las clases según la metodología de CORNARE y que fueron clasificados de acuerdo a las particularidades de la cuenca como: Construcción para aquellas zonas de tejido urbano continuo y discontinuo, así como industrial y comercio.

1.3 Reclasificación Corine Land Cover -> CORNARE

  • 3.1.1, Bosque denso -> Conservación
  • 2.4.1, Mosaico de cultivos -> Cultivos semilimpios
  • 3.2.3, Vegetación secundaria o en transición -> Cultivos densos
  • 2.3.1, Pastos limpios -> Pastoreo
  • 2.4.2, Mosaico de pastos y cultivos -> Cultivos semilimpios
  • 2.4.3, Mosaico de cultivos, pastos y espacios naturales -> Cultivos semilimpios
  • 1.1.2, Tejido urbano discontinuo -> Tejido urbano discontinuo
  • 3.1.2, Bosque abierto -> Conservación
  • 2.3.2, Pastos arbolados -> Pastoreo
  • 2.4.5, Mosaico de cultivos y espacios naturales -> Cultivos semilimpios
  • 3.1.3, Bosque fragmentado -> Uso forestal

2 Preparación

2.1 Librerías necesarias

  • dplyr: Para la manipulación de la base de datos y el uso de pipes (%>%)
  • stringr: Manipulación de variables de tipo caracter
  • sf: Lectura de objetos espaciales (shp)
  • ggplot2: Gráficas de los mapas resultantes
library(dplyr)
library(stringr)
library(sf)
library(ggplot2)

2.2 Lectura y preparación de shp

Leemos la base de datos y eliminamos la variable Id que contiene ceros y no aporta nada al análisis.

cob <- st_read("Conberturas_Cuenca.shp") %>% select(-Id)

Le damos un vistazo a la base de datos para conocer su estructura y encontrar posibles incosistencias

cob

Notamos que la variable Codigo contiene bastantes NA, entonces debemos cuantificar la cantidad de NA para tener una idea más precisa. Posterior a ello vamos a usar la variable Cobertura para rehacer la variable Codigo, puesto que las entradas en la variable Cobertura están de la forma Codigo, Cobertura, por ejemplo: 3.1.1, Bosque denso.

sum(is.na(cob))/nrow(cob)
[1] 0.5470085
cob$Codigo <- "m"

Necesitamos separar el código y enviarla a la variable Codigo dejar el nombre de la cobertura en la variable Cobertura, para ello hacemos lo siguiente:

  • Reparamos la entrada 2.4.5 Mosaico de cultivos y espacios naturales añadiendo una , luego del código, esto se debe a que hubo un error de digitación, por eso sólo hay una ocurrencia.
cob <- cob %>% 
  mutate(Coberturas = str_replace(Coberturas, 
                                  "2.4.5 Mosaico de cultivos y espacios naturales", 
                                  "2.4.5, Mosaico de cultivos y espacios naturales"), 
         Codigo = if_else(Codigo != str_remove(Coberturas, ", .*") | 
                            Codigo == is.na(Codigo), 
                          str_remove(Coberturas, ", .*"), Codigo))
# Volvemos a verificar los NA
cob %>% select(Codigo, Coberturas)
  • Removemos el código de coberturas y removemos la cobertura de los códigos
cob_reclass <- cob %>% 
  mutate(Coberturas = str_remove(Coberturas, ".*, "), 
         Codigo = str_remove(Codigo, ", .*")) %>% 
  rename(id = Codigo, cob = Coberturas)

cob_reclass %>% select(id, cob)

2.3 Reclasificación

Por último elaboramos la reclasificación con los criterios antes establecidos con un ciclo if_else.

cob_reclass <- cob_reclass %>% 
  mutate(id2 = str_replace_all(id, "1..*", "1"), 
         cob = str_replace(cob, "2.4.5 Mosaico de cultivos y espacios naturales", 
                          "Mosaico de cultivos y espacios naturales"),
         id = str_replace(id, "2.4.5 Mosaico de cultivos y espacios naturales", 
                           "2.4.5"), 
         uso_actual = if_else(id == "2.3.1", "Pastoreo",
                        if_else(id == "3.1.1", "Conservación",
                          if_else(id == "2.4.1", "Cultivos semilimpios",
                            if_else(id == "3.2.3", "Plantación productora-protectora", #O conservación
                              if_else(id == "2.4.2", "Cultivos semilimpios",
                                if_else(id == "2.4.3", "Cultivos semilimpios",
                                  if_else(id == "3.1.2", "Conservacion",
                                    if_else(id == "2.3.2", "Cultivo agro-silvo-pastoril",
                                      if_else(id == "2.4.5", "Cultivos semilimpios",
                                        if_else(id == "3.1.3", "Plantación productora-protectora", 
                                          if_else(id2 == "1", cob, #Carpintería
                                            if_else(str_detect(cob, "permanentes"), 
                                                    "Cultivos limpios", 
                                              if_else(id == "2.1.5", "Cultivos limpios", 
                                                if_else(id == "2.1.1", 
                                                        "Cultivos semilimpios", 
                                                        NA))))))))))))))) %>% select(-id2)

Verificamos cómo quedaron las equivalencias cob -> uso_actual en la base de datos.

cob_reclass %>% as_tibble() %>% 
  select(cob, uso_actual) %>% na.omit %>% unique()

Como vemos, pasamos de 15 categorías que teníamos con Corine Land Cover, a sólo 8 categorías equivalentes en CORNARE, incluyendo 2 que no son propias de este sistema (Zonas industriales o comerciales, y Tejido urbano discontinuo).

Ahora hagamos una comparación visual:

cob_reclass %>% na.omit %>% ggplot() + 
  geom_sf(mapping = aes(fill = cob))

cob_reclass %>% na.omit %>% ggplot() + 
  geom_sf(mapping = aes(fill = uso_actual))