Importar y exportar archivos GPX en R

El objetivo del presente tutorial es aprender a importar un listado de archivos GPX (son los archivos nativos que se toman con el GPS) en R y exportarlos como archivos .csv, para aprender a exportar estos archivos csv a shapefile se puede leer este tutorialrealizado meses atrás.

Primero instalamos la librería “plotKML” y “data.table”, mediante el siguiente comando:

install.packages(«plotKML»)
install.packages(«data.table»)
require(plotKML)
require(data.table)
Escribimos la ruta donde está el listado de archivos gpx.
path <- "D:/Personal/_blog/_importGPX/_gpx"
listado <- list.files(path, full.names = T)
Ahora mediante el comando “lapply” aplicamos la función readGPX a todos los archivos gpx.
gpx_wayPoints_2 <- lapply(listado, FUN = readGPX, waypoints = TRUE, track = FALSE, routes = FALSE)
Ahora creamos un listado vacío para allí guardar las tablas de waypoints (puntos tomados con el GPS)
gpx_wayPoints3 <- list()
Para obtener solamente las tablas del archivo gpx, realizamos un ciclo mediante el cual iteramos en cada objeto de la lista obteniendo solamente la tabla
for (i in 1:length(listado)){
  gpx_wayPoints3[[i]] <- gpx_wayPoints_2[[i]]$waypoints
}
Mediante la siguiente línea de comando podemos observar las dimensiones de cada tabla, y así poder observar si tienen igual número de columnas
lapply(gpx_wayPointsList2, function(x){dim(x)})
Ahora mediante el comando “rbindlist” unimos los tres dataframe (tabla) dentro de uno solo
tabla <- rbindlist(gpx_wayPoints3)
dim(tabla) #podemos observer las dimensiones de la tabla
Por último guardamos la tabla en un archivo csv.
write.csv(tabla, «D:/Personal/_blog/_importGPX/tabla.csv»)
Los datos para realizar la práctica se encuentran disponibles en este enlace.

Descarga de automatizada de archivos raster en R

26 de Julio de 2016
Hace pocos días ISRIC World Soil Information [1] realizó la actualización de los datos espaciales (tipo raster) de suelo a resolución de 250 metros, anteriormente la resolución estaba en aproximadamente 1 km, estos datos provienen de distintas fuentes de datos y representan propiedades físicas, biológicas y químicas; por ejemplo, el potencial de hidrogeno (pH), la capacidad de intercambio catiónico, el contenido de carbono orgánico, el porcentaje de arena, suelo y arcilla, la densidad aparente, entre otras.
Los archivos se encuentran disponibles mediante un sitio web FPT (File Transfer Protocol) disponible en este enlace; estos datos es posible descargarlos mediante clic en cada archivo desde un navegador web (ej. Google Chrome, Opera, Mozilla Firefoz) o desde el lenguaje de programación R usando la librería “utils” (R Core Team, Versión 3.2.2.), la ventaja que ofrece R respecto al navegador web es que es posible optimizar la descarga haciendo uso de iteraciones, lo que evita el hacer uso de clic en cada archivo del sitio web [2].

install.packages(«utils»)
library(utils)
for (nomen in c(«CECSOL»,»CLYPPT»,»CRFVOL»,»ORCDRC»,»PHICKL»,»PHIHOX», «SLTPPT»,»SNDPPT»,»ORCDRC»)) #se varia acorde al tipo de variable
{
  for (i in 1:7)
  {
    code=paste0(nomen,»_M_sl»,i,»_250m_ll.tif»)
    url=paste0(«ftp://ftp.soilgrids.org/data/recent/»,code)
    download.file(url, destfile = paste0(«E:/ISRIC/»,code), mode = «wb»)
  } #la URL es el enlace web desde donde se descargan los archivos raster y varia acorde al perfil de la variable, el «destfile» es el archivo donde se van a guardar los datos en el disco duro del pc y el nombre es el mismo del raster, el mode es wb para que sea reconocido como archivo espacial
}

En este sentido, el objetivo del presente tutorial es realizar la descarga de la mayoría de archivos raster [3] de suelos a resolución de 250 metros mediante un ciclo (for) en R, para ello necesitamos la librería “utils” y una buena conexión a internet. 
Apenas se ejecuta el código se comienza la descarga desplegándose lo presentado en la siguiente figura en caso que se esté utilizando la interfaz de RStudio.
Para tener en cuenta:
[1] ISRIC es un sistema para el mapeo automatizado del suelo basado en perfiles de suelos globales, la base de datos comprende archivos raster del mundo a 1 km y 250 m de resolución espacial producida mediante la asignación automática del suelo basada en algoritmos de aprendizaje automático. Para leer más: Hengl, T., Mendes de Jesus, J., Heuvelink, G. B.M., Ruiperez Gonzalez, M., Kilibarda, M. et al. (2016) SoilGrids250m: global gridded soil information based on Machine Learning. Earth System Science Data (ESSD) in review.
[2] Desde cualquier navegador web solamente es posible realizar dos descargas a la vez.
[3] Debido a los nombres de los archivos raster de tipo de suelo no es posible realizar la descarga optimizada mediante el ciclo, pues el nombre del archivo varía considerablemente.
Gracias @AndresAgui90 por su grata ayuda en la elaboración de este tutorial. 

Uso de la herramienta “Clip” en ArcGIS

17 de enero de 2016

Uso de la herramienta “Clip” en ArcGIS


El objetivo de este ejercicio es obtener los municipios solamente del Valle del Cauca a partir del shape de municipios para Colombia y el límite de este departamento, estos datos son descargados de la página oficial del SIGOT.
Nota: el tutorial presente fue realizado con el software ArcGIS 10.3, de igual manera la herramienta se encuentra en versiones anteriores.

Primero abrimos el shapefile de municipios y límite del Valle del Cauca en ArcGIS usando el icono resaltado en amarillo: 
Deberemos tener en el espacio de trabajo de ArcGIS algo como esto:
La herramienta de la cual se hará uso es “Clip”, esta se encuentra dentro del “ArcToolbox à Analysis Tools à Extraction à Clip”.
Se desplegara una ventana, en el archivo de entrada va a ir los municipios, en el campo “Clip Features” va el shape del departamento del Valle del Cauca, en el campo “output” va el archivo de salida (es decir, donde queremos el nuevo shape que se creara), algo importante es que ambas capas deben estar bajo el mismo sistema de coordenadas.

El archivo generado debe ser algo similar a lo siguiente:
Otra manera de obtener solamente los municipios para el Valle del Cauca es hacer una selección por atributos al shape de Municipios desde la tabla de atributos (Select by Attributes), como se muestra a continuación:
Luego damos clic derecho sobre la capa en la tabla de contenidos, luego en “Data” y “Export Data”, y guardamos el shapefile en un sitio de interés de nuestro disco duro.
Los archivos usados en el presente tutorial se encuentra disponible en este link.

Uso de la herramienta “Dissolve” en ArcGIS

10 de enero de 2016

Uso de la herramienta “Dissolve” en ArcGIS

El objetivo de este ejercicio es obtener los límites departamentales a partir del shape de municipios de Colombia, este descargado de la página oficial del SIGOT. Este archivo puede ser de utilidad al momento de hacer el mapa de macrolocalización de algún departamento o municipio, en donde se muestre en este mapa, los departamentos y con algún otro color la zona dónde se encuentra el mapa.

Nota: el tutorial presente fue realizado con el software ArcGIS 10.3, de igual manera la herramienta se encuentra en versiones anteriores.

Primero abrimos el shapefile en ArcGIS usando el icono resaltado en amarillo:

Deberemos tener en el espacio de trabajo de ArcGIS algo como esto:

La herramienta de la cual se hará uso es “Dissolve”, esta se encuentra dentro del “ArcToolbox  Data Management Tools  Generalization  Dissolve”.

Se desplegara una ventana, en el archivo de entrada va a ir el municipio, en el campo “output” va el archivo de salida (es decir, donde queremos el nuevo shape que se creara), luego escogemos el campo sobre el cual se ejecutara el comando, para este caso escogemos el nombre del departamento, lo que significa que los polígonos (municipios) que hay dentro de cada departamento desaparecerán. Si quisiéramos solamente el límite de Colombia no escogemos ningún campo.

El archivo generado debe ser algo similar a lo siguiente:

El archivo usado en el presente tutorial se encuentra disponible en este link.

Extracción por mascara en R

Extracción por máscara en R

El objetivo del presente ejercicio es realizar la extracción por mascara (corte) de un grupo de archivos raster a partir de un shapefile, este usado como máscara, mediante un ciclo en R, es un proceso común cuando se tienen, por ejemplo, la precipitación (o alguna otra variable) para los 12 meses del año de todo Colombia y se quiere obtener solamente la precipitación de una unidad administrativa de menor área, para el presente caso es el departamento del Valle del Cauca; evitando hacer el proceso repetitivo, por ejemplo, en ArcGIS usando la herramienta “Extract by Mask”. Se hace uso de los ciclos, básicamente consiste en decirle al sistema que repita en cada una de las capas de un listado el corte a partir de una capa que representa el límite de nuestra área de estudio.
 Fuente: esri
Primero habilitamos las librerías de las cuales haremos uso:
require(raster) #si la librería no la tiene incluida se puede descargar usando install.packages(«raster»)
require(rgdal)
Luego abrimos el shapefile, que representa la máscara, bajo el comando “shapefile”.
mascara = shapefile(«E:/Blogger/Post_7/_data/_mask/valle_cacuca.shp»)
Para poder visualizar ambos archivos hacemos uso del comando “plot”.
plot(mascara)
class(mascara) #permite ver el tipo de archivo que es mascara, para este caso es un shapefile tipo polígono.
Luego hacemos el uso del comando “paste” para indicarle a R que lea todos los archivos que contienen la dirección escrita, esto permite unir la dirección, el 1 a 12 significa cada mes (es como finaliza el archivo) y por último la extensión que es .asc.
precipitacion=paste(«E:/Blogger/Post_7/_data/_prec_col/prec_»,1:12,».asc», sep=»»)
Seguido de ello hacemos uso del comando “lapply” para indicar que todos los archivos son raster.
rasters=lapply(precipitacion, FUN = raster)
Luego realizamos el ciclo, aspectos a tener en cuenta:
·         El for es el comando que se utiliza
·         La “i” es para indicar que cada vez que esta letra cambie, conforme a la secuencia (1:12) será un archivo distinto al cual se le hace el proceso.
·         Lo que está dentro de las “{}” será lo que repetirá una y otra vez hasta finalizar.
·         El comando “crop” se usa para realizar el corte (equivalente al “extract by mask” de ArcGIS), en la primera posición va el dato de entrada, y en la segunda posición va el dato de máscara crop(rasters, mask),
·         El comando “mask” se usa para indicar que la máscara (extensión del archivo) será equivalente al objeto “mascara”.
·         El comando writeRaster es para guardar los archivos en una dirección de nuestro computador, y el comando “names» se utiliza para que guarde el archivo bajo el mismo nombre que el archivo de entrada.
for(i in 1:19){
  corte = crop(rasters[[i]],mascara)
  corte = mask(corte, mascara)
  writeRaster(corte,paste(«E:/Blogger/Post_7/_data/_prec_valle/»,names(rasters[[i]]),».tif»,sep=»»))
}
plot(corte[[1]])



De este link se puede descargar los datos que se hacen uso en este tutorial.
Gracias a @AntonioPantojaC por su colaboración! 

Shape a Raster en R

Convertir un shapefile a raster en R

El objetivo el presente ejercicio es realizar la conversión de un shapefile a archivo raster en R, es un proceso muy común y útil en los SIG, pues permite incorporar un archivo shapefile a un ejercicio de análisis raster, ejemplo algebra de mapas o conteo de área por unidad político-administrativa, entre otros; para el presente caso tenemos el shapefile de departamentos de Colombia y un archivo raster base con resolución espacial aproximada a 1 km2, el archivo resultante tomara la extensión, la alineación y la resolución acorde a este raster base.
Primero habilitamos las librerías de las cuales haremos uso:
require(raster)
require(rgdal)
Luego abrimos el shapefile en R bajo el comando “shapefile”, y el raster base con el comando “raster”, tal como se muestra a continuación.
x = shapefile(«E:/Blogger/Post_6/_data/DepartamentosCOL.shp»)
y = raster(«E:/Blogger/Post_6/_data/ mascara_col.tif»)
Para poder visualizar ambos archivos hacemos uso del comando “plot”.
plot(x)
plot(y)
Luego escogemos un campo de los que tiene el shapefile para hacer sobre este la conversión, para este caso el campo sobre el cual haremos la conversión sera el código del departamento según el código del DANE.
head(x) #con este código podemos observar el encabezado con los primeros seis campos de la tabla de atributos.
x2 <- x[,2] #escogemos la columna Nro. 2, que corresponde al ID del departamento.
Seguido de ello hacemos la conversión bajo el comando “rasterize”:
conversion = rasterize(x2, y, FUN= «first»)
Por último, guardamos este archivo raster en nuestro pc bajo el comando “writeRaster”.

writeRaster(conversion, «E:/Blogger/Post_6/_data/conversion.tif»)
plot(conversion)




De este link se puede descargar el dato que se hace uso en este tutorial.

Convertir una tabla a shape en R

Convertir una tabla a shape en R

El objetivo el presente ejercicio es realizar la conversión de una tabla, que contiene coordenadas dadas en longitud y latitud, a un archivo shapefile en R, es un proceso muy común y útil en los SIG; para el presente caso tenemos las coordenadas de incendios en el Valle del Cauca para el periodo 2000 – 2015, la idea es convertir esta tabla a shapefile y guardar este archivo en el disco duro de nuestro pc.
Primero habilitamos las librerías de las cuales haremos uso:
require(raster)
require(rgdal)
Luego abrimos la tabla en R bajo el comando “read.table”, como se muestra a continuación.
Tabla = read.csv(“E:/Blogger/Post_5/_data/incendios_valle.csv”)
Seguido de ello convertimos la tabla a formato shapefile, teniendo en cuenta que las columnas 1 y 2 corresponden a la longitud y latitud respectivamente:
coordinates(tabla) <- ~LONGITUDE+LATITUDE # se escribe de esta manera longitud y latitud pues así se llama el nombre de estas columnas
Podemos ver el tipo de clase a la que queda convertido el objeto “tabla” bajo el siguiente comando:
Class(tabla) #como podemos ver ahora es un “SpatialPointsDataFrame”
plot(tabla) #miramos que en efecto el archivo es una nube de puntos, que representan los incendios en el Valle del Cauca.
Por último, procedemos a realizar el guardado de este archivo.
writeOGR(tabla, dsn = «E:/Blogger/Post_5/_data», layer= «incendios_valle», driver = «ESRI Shapefile»)

De este link se puede descargar el dato que se hace uso en este tutorial.

Multiplicar un listado de archivos raster y guardarlos mediante un ciclo

Multiplicar un listado de archivos raster y guardarlos mediante un ciclo

El objetivo el presente ejercicio es realizar automáticamente la multiplicación de 10 archivos, que se encuentran en el rango de 0 a 1, por 100 para así pasar a tener la probabilidad pero en términos porcentuales, y luego escribir cada uno de los archivos en una carpeta.
Primero habilitamos las librerías de las cuales haremos uso:
require(raster)
require(rgdal)
Luego, hacemos un listado de los archivos raster (.tif), seguido de aplicar la función raster para que el programa los reconozca como archivos espaciales, proseguido se realiza un stack que es sobreponer todos los raster, posteriormente se multiplica por 100, y luego se desalinean de la unión que se hizo con el stack.
a = list.files(“C:/Users/Fabio Castro/Google Drive/Blog/Post_4″, full.names = T)
b = lapply(a, FUN=raster)
c = stack(b)
d = c*100
e = unstack(d)
names(e[[1]]) #nos permit ever el nombre del archive que se encuentra en la posición 1
Por ultimo realizamos un ciclo para escribir los archivos dentro de una carpeta con su respectivo nombre.
for (i in 1:length(e)){
  writeRaster(e[[i]], paste0(«C:/Users/Fabio Castro/Google Drive/Blog/Post_4/raster_100/»,names(e[[i]]),».tif»))
}

En este link se encuentran disponibles los datos del ejercicio.

Suma de archivos Raster en R

Suma de archivos raster en R

El objetivo de este ejercicio es realizar la suma de 12 archivos raster de manera óptima en R, estos archivos son la precipitación para Colombia en los 12 meses del año, la idea es que el archivo final me represente la precipitación acumulada de este país. 
Hacemos uso de las librerias «raster» y «rgdal»
require(raster)
require(rgdal)
Hacemos un listado de los archivos raster (estos deben de estar sin más archivos en una sola carpeta).
listado = list.files(«E:/Blogger/Post_3/_datos/_prec_mensual/», pattern = «asc», full.names = T) #usamos el pattern para que solo escoga los archivos tif y fullnames para que tome toda la dirección de donde se encuentran los archivos.
Luego le decimos a R que esos archivos son de tipo Raster
datos = lapply(listado, FUN=raster)
Hacemos un stack, es decir poner todos los archivos unidos.
datos_raster_stack = stack(datos)
Ahora si hacemos la suma entre los archivos.
suma_raster = sum(datos_raster_stack)
Y por último, escribimos el archivo resultante donde queramos.

writeRaster(suma_raster, «E:/Blogger/Post_3/_datos/_prec_acum/sum_prec.tif»)

plot(suma_raster)





De este link se pueden descargar los datos del presente ejercicio.