top of page

GIS y R Parte 3: emparejamiento y guardado de objetos espaciales en R

  • Jans
  • 14 ene 2018
  • 3 Min. de lectura

En este conjunto de entradas vamos a cubrir lo básico al momento de leer y manipular archivos del tipo ESRI shapefile en R. R tiene algunas librerías muy útiles para trabajar con datos espaciales. En esta entrada utilizaremos la librería denominada rgdal. La documentación de la librería la puedes encontrar en el siguiente link.


En esta Parte II se mostrará cómo transformar la tabla de atributos de un shapefile en objeto de R para trabajarlo como una base de datos (es decir, sin propiedades geométricas), cómo hacer un emparejamiento y como guardar el shapefile resultante.

 

# creamos un objeto con los atributos del shapefile inicial

> aman.df <- aman@data

> dis.df <- dis@data

# tipo de objeto

> class(dis.df)

[1] "data.frame"

# nombres de las columnas de aman.df

> names(aman.df)

DPA_SECTOR DPA_VALOR DPA_ANIO DPA_ZONA FUENTE Shape_Leng Shape_Le_1

# frecuencia de los valores del campo FUENTE

> table(aman.df$FUENTE)

BASE MAP BING GOOGLE EARTH IEE M_IGM ORTOFOTO SIN AJUSTE

13 140 264 99 418 22689 1117

# histograma del campo Shape_Leng

> hist(aman.df$Shape_Leng)

Como podemos observar, el objeto aman.df puede manipularse como cualquier base de datos en R. Dependiendo del análisis a realizar podemos decidir entre procesar directamente sobre el shapefile cargado (aman o dis), o separar sus atributos y procesarlos separadamente (aman.df y dis.df). La diferencia radica en los atributos geométricos, los cuales se pueden ver afectados si no realizamos nuestro trabajo apropiadamente.

 

Emparejamiento de una base da datos con un objeto espacial

A continuación, realizaremos un emparejamiento entre el shapefile y una base que contiene atributos adicionales de nuestro interés. Esta base, llamada dpa_zdc, contiene la codificación de Zona, Distrito y Circuito, la cual es una división del territorio ecuatoriano con fines de ordenamiento interno y planificación. Para tal fin, ejecutamos:

# leemos el archivo de correspondencia

> dpa_zdc <- read.xlsx("./bases/DPA_ZDC.xlsx",

sheetIndex=1,

as.data.frame=T)

# nombres y primeras filas del objeto dpa_zdc

> head(dpa_zdc)

IDENTIF ZONADC DISTRITO CIRCUITO

1 010150001001 6 01D02 01D02C08

2 010150001002 6 01D02 01D02C08

3 010150001003 6 01D02 01D02C08

4 010150001004 6 01D02 01D02C08

5 010150001005 6 01D02 01D02C08

6 010150001006 6 01D02 01D02C08

#cambiamos los nombres de dpa_zdc a todo minúscula

> colnames(dpa_zdc) <- tolower(colnames(dpa_zdc))

# emparejamiento de la base de datos dpa_zdc con aman.df y dis.df

> aman.df <- merge(aman.df, dpa_zdc,

by.x="DPA_SECTOR",

by.y="identif",

all.x=TRUE)

> dis.df <- merge(dis.df, dpa_zdc,

by.x="DPA_SECDIS",

by.y="identif",

all.x=TRUE)

Con la función merge logramos emparejar los atributos de las dos bases de datos, fijando los siguientes argumentos:

  • primeros dos argumentos: son las bases a emparejar (por ejemplo, aman.df y dpa_zdc).

  • by.x: el identificador único o clave de la primera base a emparejar (base izquierda o base.x).

  • by.y: el identificador único o clave de la segunda base a emparejar (base derecha o base.y).

  • all.x: la base final solamente contendra los casos iniciales correspondientes a la base izquierda o base.x (en nuestro ejemplo son las bases aman.df y dis.df).

# campos de la nueva base aman.df

> names(aman.df)

[1] "DPA_SECTOR" "DPA_VALOR" "DPA_ANIO" "DPA_ZONA" "FUENTE" "Shape_Leng"

[7] "Shape_Le_1" "Shape_Area" "CIUDAD" "zonadc" "distrito" "circuito"

#seleccionamos los campos de interés a emparejar en el shapefile

> aman.df <- aman.df[ ,c("DPA_SECTOR", "zonadc", "distrito", "circuito")]

> dis.df <- dis.df[, c("DPA_SECDIS", "zonadc", "distrito", "circuito")]

# emparejamiento de la base trabajada con los shapefiles

> aman <- merge(aman, aman.df,

by.x="DPA_SECTOR",

by.y="DPA_SECTOR",

all.x=TRUE,

> dis <- merge(dis, dis.df,

by.x="DPA_SECDIS",

by.y="DPA_SECDIS",

all.x=TRUE)

 

Guardar un objeto espacial en formato ESRI Shapefile

Terminado nuestro procesamieto, si queremos guardar nuestro objeto espacial, ejecutamos:


# escritura del nuevo shapefile

> dsn1 <- setwd("ruta_de_salida_de_los_objetos_espaciales/shapes_nuevos")

> writeOGR(aman,

dsn1,

"aman_dpa_zdc",

driver="ESRI Shapefile",

overwrite_layer=TRUE)

> writeOGR(dis,

dsn1,

"dis_dpa_zdc",

driver="ESRI Shapefile",

overwrite_layer=TRUE)

Mendiante la función writeORG definimos:

  • aman o dis: el objeto espacial a guardar

  • dsn1: ruta donde se guardarán los nuevos archivos.

  • aman_dpa_zdc: nombre del shp nuevo.

  • driver: el controlador de salida a utilizar, en otras palabras el formato con el que queremos guardar nuestro objeto espacial.

  • overwrite_layer: si existe un shp con el msimo nombre, sobreescribimos o no?

 

Con esto terminamos nuestra serie de entradas. Espero que hayan sido de su agrado.

Comments


Posts Destacados
Posts Recientes
Búsqueda por Tags
Conéctate
  • Google+ Long Shadow
  • Facebook Long Shadow
  • LinkedIn Long Shadow
  • Twitter Long Shadow

Contáctame 

Telf.: (+593) 9956 - 90532

  • Google+ Long Shadow
  • Facebook Long Shadow
  • LinkedIn Long Shadow
  • Twitter Long Shadow

© 2016 por Javier Núñez. Creado con Wix.com

¡Tus datos se enviaron con éxito!

bottom of page