En este cuaderno se presentan dos técnicas de interpolación: Inverse Distance Weighted (IDW) y Ordinary Kriging (OK).
Esta técnica determinística, también conocida como inverse distance-based weighted interpolation. Es la estimación del valor z en la locación x por una media ponderada de las observaciones ercanas.
Como se observa en la imagen anterior, los puntos rojos tienen valores de elevación conocidos. Así que los otros puntos serán interpolados:
El IDW es un método muy flexible de interpolación espacial. Se puede configurar de diferentes formas. Si se especifíca el radio de búsqueda, la interpolación solo usará el número de puntos conocidos dentro de ese radio de búsqueda.
El método probabilístico Ordinay Kriging es el kriging más utilizado. Se usa para estimar un valor en un punto de una región para la cual se conoce un variograma, utilizando datos de los vecinos de la ubicación de estimación.
La relación geoespacial (disimilitud entre puntos en función de la distancia/dirección) dentro del área de interés puede describirse mediante un variograma empírico. Se calculan las distancias entre los puntos de muestreo. Luego, se calculan los valores que conforman el variograma, ordenando las muestras cuyas distancias entre puntos caen dentro de un intervalo de distancia (h1, h2, etc.); calculando el valor como el promedio de la raíz cuadrada de la diferencia en las muestras γ(h).
Ambas técnicas se usarán para obtener una superficie plana del carbono orgánico del suelo de 15 a 30 cm de profundidad. Gracias a las muestras obtenidas de SoilGrids 250 m.
Limpiamos el espacio de trabajo:
rm(list = ls())
Para la lectura y escritura de los datos geoespaciales, usaremos terra (para los ráster) y sf (para los vectores). Para la interpolación espacial, usaremos las librerías de gstat y automap. Finalmente, para la visualización, usaremos ggplot, leaflet y tmap.
Primero, necesitamos instalar las librerías requeridas desde la consola.
Una vez instaladas, vamos a cargar las librerías:
library(terra)
## terra 1.8.15
library(sf)
## Linking to GEOS 3.12.2, GDAL 3.9.3, PROJ 9.4.1; sf_use_s2() is TRUE
library(sp)
library(stars)
## Cargando paquete requerido: abind
library(gstat)
library(automap)
library(RColorBrewer)
library(leaflet)
library(leafem)
Nuestras muestras son valores de Carbono Orgánico del suelo entre 15-30 cm de profundidad. Fueron obtenidas desde SoilGrids 250 m usando este cuaderno.
Estas muestras se guardaron en formato de GeoPackage (GPKG), dentro del directorio de datos, usando soc_{depto}.gpkg como nombre del archivo.
Para empezar, validemos que los datos estén disponibles para usarse:
list.files(path="D:/GB2_UNAL/Proyecto_5/INFORME_2", pattern = "*.gpkg")
## [1] "Mun_meta.gpkg" "soc_stder.gpkg"
Ahora, leamos las muestras usando sf.
samples = sf::st_read("D:/GB2_UNAL/Proyecto_5/INFORME_2/soc_stder.gpkg")
## Reading layer `soc_stder' from data source
## `D:\GB2_UNAL\Proyecto_5\INFORME_2\soc_stder.gpkg' using driver `GPKG'
## Simple feature collection with 1937 features and 1 field
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -74.93558 ymin: 1.619848 xmax: -71.02165 ymax: 4.894763
## Geodetic CRS: +proj=longlat +datum=WGS84 +no_defs
Como nuestra área de estudio es El Meta,es necesario leer también el GeoPackage correspondiente de los municipios:
munic = sf::st_read("D:/GB2_UNAL/Proyecto_5/INFORME_2/mun_meta.gpkg")
## Reading layer `municipios_colombia' from data source
## `D:\GB2_UNAL\Proyecto_5\INFORME_2\mun_meta.gpkg' using driver `GPKG'
## Simple feature collection with 29 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -74.93335 ymin: 1.617732 xmax: -71.07753 ymax: 4.899101
## Geodetic CRS: MAGNA-SIRGAS
Como mi gpkg de municipios tiene el sistema de coordenadas MAGNA-SIRGAS, lo transformarémos a WGS 84:
munic_wgs84 = st_transform(munic, crs=4326)
Vamos generar un resumen de las muestras:
summary(samples)
## soc geom
## Min. : 8.449 POINT :1937
## 1st Qu.:12.170 epsg:NA : 0
## Median :14.803 +proj=long...: 0
## Mean :20.642
## 3rd Qu.:20.841
## Max. :86.841
En total tenemos 1937 muestras de Carbono Orgánico del suelo.
Representación gráfica con un histograma:
hist(samples$soc,
main = "Contenido de carbono orgánico del suelo en la fracción de tierra fina",
xlab = "g/kg",
xlim = c(0, 120),
col = "lightblue",
breaks = 20)
El hitograma anterior presenta la frecuncia de g/kG de carbono orgánico en el suelo, observamos que se presenta mayor frecuencia en 10 - 15 g/kg.
Vamos a redondear los valores de Carbono Orgánico del suelo a dos dígitos:
samples$soc =round(samples$soc, 2)
Visualicemos las muestras para saber su distribución espacial, usando leaflet.
pal <- colorNumeric(
c("#E1F5C4", "#EDE574", "#F9D423", "#FC913A", "#FF4E50"),
domain = samples$soc,
)
leaflet() %>%
addPolygons(
data = munic_wgs84,
color = "gray",
# set the opacity of the outline
opacity = 5,
# set the stroke width in pixels
weight = 1,
# set the fill opacity
fillOpacity = 0.2) %>%
addCircleMarkers(
data = samples,
radius= 1.5,
label = ~soc,
color = ~pal(soc),
fillOpacity = 1,
stroke = F
) %>%
addLegend(
data = samples,
pal = pal,
values = ~soc,
position = "bottomleft",
title = "SOC:",
opacity = 0.7) %>%
addProviderTiles("OpenStreetMap")